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

Reply via email to