Changes in v3: 1. Don't preserve MMX nor X87 registers. 2. Handle return struct pair with int64 and double in AX and XMM0 registers.
Changes in v2: 1. Add ix86_tls_get_addr_abi and use it to set CALL_INSN_ABI_ID. --- This patch set implements TARGET_FNTYPE_ABI for x86 to avoid unnecessary spills when calling no_caller_saved_registers functions: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=124798 and spill callee-saved registers when calling __tls_get_addr from a ms_abi function: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125436 The first 3 patches update the x86 backend for TARGET_FNTYPE_ABI and the last one implements TARGET_FNTYPE_ABI. H.J. Lu (1): x86: Implement TARGET_FNTYPE_ABI Richard Sandiford (3): i386: Split out call_saved_registers_type detection i386: Avoid reading call_used_regs i386: Avoid always-true condition gcc/config/i386/i386-expand.cc | 113 +---- gcc/config/i386/i386-features.cc | 5 +- gcc/config/i386/i386-options.cc | 152 ++++--- gcc/config/i386/i386-protos.h | 5 +- gcc/config/i386/i386.cc | 386 ++++++++++++++---- gcc/config/i386/i386.md | 32 +- gcc/testsuite/gcc.target/i386/abi-mix-1.c | 21 + gcc/testsuite/gcc.target/i386/abi-mix-2.c | 7 + .../gcc.target/i386/no-callee-saved-18.c | 2 - .../gcc.target/i386/no-callee-saved-19b.c | 32 +- .../gcc.target/i386/no-callee-saved-19d.c | 6 +- .../gcc.target/i386/no-callee-saved-19e.c | 33 +- .../gcc.target/i386/no-callee-saved-2.c | 10 +- .../gcc.target/i386/no-callee-saved-20.c | 92 +++++ .../gcc.target/i386/no-callee-saved-8.c | 8 +- .../gcc.target/i386/no-callee-saved-9.c | 10 +- .../gcc.target/i386/no-caller-saved-1-ms.c | 50 +++ .../gcc.target/i386/no-caller-saved-1-sysv.c | 46 +++ .../gcc.target/i386/no-caller-saved-1.c | 50 +++ .../gcc.target/i386/no-caller-saved-10.c | 17 + .../gcc.target/i386/no-caller-saved-11.c | 19 + .../gcc.target/i386/no-caller-saved-2.c | 49 +++ .../gcc.target/i386/no-caller-saved-3.c | 49 +++ .../gcc.target/i386/no-caller-saved-4.c | 44 ++ .../gcc.target/i386/no-caller-saved-5.c | 34 ++ .../gcc.target/i386/no-caller-saved-6.c | 34 ++ .../gcc.target/i386/no-caller-saved-7.c | 49 +++ .../gcc.target/i386/no-caller-saved-8.c | 51 +++ .../gcc.target/i386/no-caller-saved-9.c | 51 +++ gcc/testsuite/gcc.target/i386/pr119784b.c | 33 +- gcc/testsuite/gcc.target/i386/pr125436-1a.c | 130 ++++++ gcc/testsuite/gcc.target/i386/pr125436-1b.c | 81 ++++ gcc/testsuite/gcc.target/i386/pr125436-2a.c | 132 ++++++ gcc/testsuite/gcc.target/i386/pr125436-2b.c | 83 ++++ gcc/testsuite/gcc.target/i386/pr125436-3.c | 88 ++++ gcc/testsuite/gcc.target/i386/pr125436-4.c | 88 ++++ .../gcc.target/i386/preserve-none-14.c | 2 - .../gcc.target/i386/preserve-none-23.c | 2 - .../gcc.target/i386/preserve-none-7.c | 10 +- 39 files changed, 1769 insertions(+), 337 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/abi-mix-1.c create mode 100644 gcc/testsuite/gcc.target/i386/abi-mix-2.c create mode 100644 gcc/testsuite/gcc.target/i386/no-callee-saved-20.c create mode 100644 gcc/testsuite/gcc.target/i386/no-caller-saved-1-ms.c create mode 100644 gcc/testsuite/gcc.target/i386/no-caller-saved-1-sysv.c create mode 100644 gcc/testsuite/gcc.target/i386/no-caller-saved-1.c create mode 100644 gcc/testsuite/gcc.target/i386/no-caller-saved-10.c create mode 100644 gcc/testsuite/gcc.target/i386/no-caller-saved-11.c create mode 100644 gcc/testsuite/gcc.target/i386/no-caller-saved-2.c create mode 100644 gcc/testsuite/gcc.target/i386/no-caller-saved-3.c create mode 100644 gcc/testsuite/gcc.target/i386/no-caller-saved-4.c create mode 100644 gcc/testsuite/gcc.target/i386/no-caller-saved-5.c create mode 100644 gcc/testsuite/gcc.target/i386/no-caller-saved-6.c create mode 100644 gcc/testsuite/gcc.target/i386/no-caller-saved-7.c create mode 100644 gcc/testsuite/gcc.target/i386/no-caller-saved-8.c create mode 100644 gcc/testsuite/gcc.target/i386/no-caller-saved-9.c create mode 100644 gcc/testsuite/gcc.target/i386/pr125436-1a.c create mode 100644 gcc/testsuite/gcc.target/i386/pr125436-1b.c create mode 100644 gcc/testsuite/gcc.target/i386/pr125436-2a.c create mode 100644 gcc/testsuite/gcc.target/i386/pr125436-2b.c create mode 100644 gcc/testsuite/gcc.target/i386/pr125436-3.c create mode 100644 gcc/testsuite/gcc.target/i386/pr125436-4.c -- 2.55.0
