LoongArch: Add code generation support for call36 function calls.
When compiling with '-mcmodel=medium', the function call is made through
'pcaddu18i+jirl' if binutils supports call36, otherwise the
native implementation 'pcalau12i+jirl' is used.
gcc/ChangeLog:
* config.in: Regenerate.
* config/loongarch/loongarch-opts.h (HAVE_AS_SUPPORT_CALL36): Define macro.
* config/loongarch/loongarch.cc (loongarch_legitimize_call_address):
If binutils supports call36, the function call is not split over expand.
* config/loongarch/loongarch.md: Add call36 generation code.
* config/loongarch/predicates.md: Likewise.
* configure: Regenerate.
* configure.ac: Check whether binutils supports call36.
gcc/testsuite/ChangeLog:
* gcc.target/loongarch/func-call-medium-5.c: If the assembler supports call36,
the test is abandoned.
* gcc.target/loongarch/func-call-medium-6.c: Likewise.
* gcc.target/loongarch/func-call-medium-7.c: Likewise.
* gcc.target/loongarch/func-call-medium-8.c: Likewise.
* lib/target-supports.exp: Added a function to see if the assembler supports
the call36 relocation.
* gcc.target/loongarch/func-call-medium-call36-1.c: New test.
* gcc.target/loongarch/func-call-medium-call36.c: New test.
Co-authored-by:
Xi Ruoyao <xry111@xry111.site>
Showing
- gcc/config.in 6 additions, 0 deletionsgcc/config.in
- gcc/config/loongarch/loongarch-opts.h 4 additions, 0 deletionsgcc/config/loongarch/loongarch-opts.h
- gcc/config/loongarch/loongarch.cc 8 additions, 4 deletionsgcc/config/loongarch/loongarch.cc
- gcc/config/loongarch/loongarch.md 141 additions, 30 deletionsgcc/config/loongarch/loongarch.md
- gcc/config/loongarch/predicates.md 5 additions, 2 deletionsgcc/config/loongarch/predicates.md
- gcc/configure 32 additions, 0 deletionsgcc/configure
- gcc/configure.ac 6 additions, 0 deletionsgcc/configure.ac
- gcc/testsuite/gcc.target/loongarch/func-call-medium-5.c 1 addition, 0 deletionsgcc/testsuite/gcc.target/loongarch/func-call-medium-5.c
- gcc/testsuite/gcc.target/loongarch/func-call-medium-6.c 1 addition, 0 deletionsgcc/testsuite/gcc.target/loongarch/func-call-medium-6.c
- gcc/testsuite/gcc.target/loongarch/func-call-medium-7.c 1 addition, 0 deletionsgcc/testsuite/gcc.target/loongarch/func-call-medium-7.c
- gcc/testsuite/gcc.target/loongarch/func-call-medium-8.c 1 addition, 0 deletionsgcc/testsuite/gcc.target/loongarch/func-call-medium-8.c
- gcc/testsuite/gcc.target/loongarch/func-call-medium-call36-1.c 21 additions, 0 deletions...estsuite/gcc.target/loongarch/func-call-medium-call36-1.c
- gcc/testsuite/gcc.target/loongarch/func-call-medium-call36.c 32 additions, 0 deletionsgcc/testsuite/gcc.target/loongarch/func-call-medium-call36.c
- gcc/testsuite/lib/target-supports.exp 9 additions, 0 deletionsgcc/testsuite/lib/target-supports.exp
Loading
Please register or sign in to comment