On Wed, Jul 8, 2026 at 5:46 AM H.J. Lu <[email protected]> wrote: > > Changes in v4: > > 1. Use default_function_abi, instead of ix86_tls_get_addr_abi(), in > ix86_emit_tls_call to get call clobbered registers for GNU TLS calls.
Ok. > > 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 | 17 +- > 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, 1777 insertions(+), 341 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 > -- BR, Hongtao
