]> git.ipfire.org Git - thirdparty/gcc.git/commit
i386: Verify that argument registers are spilled properly
authorH.J. Lu <hjl.tools@gmail.com>
Sun, 9 Mar 2025 14:00:23 +0000 (07:00 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Tue, 11 Mar 2025 12:30:57 +0000 (05:30 -0700)
commit06440e726acfa9c9695a07dc524a832a53057ad6
tree5c888ce929b08f81d883136a8ea1012754ca6568
parent86eb3fb520b2a2026f6816ab51b88180b85d6882
i386: Verify that argument registers are spilled properly

While working on a local x86 patch, which passed the GCC testsuite, I got
a compiler error:

In function ‘paravirt_read_msr’,
    inlined from ‘perf_ibs_handle_irq’ at arch/x86/events/amd/ibs.c:1055:2:
./arch/x86/include/asm/paravirt_types.h:397:17: error: ‘asm’ operand has impossible constraints or there are not enough registers
  397 |                 asm volatile(ALTERNATIVE(PARAVIRT_CALL, ALT_CALL_INSTR, \
      |                 ^~~

when building x86-64 Linux kernel.  RDI, RSI, RDX and RCX registers are
used to pass arguments in 64-bit mode.  EAX, EDX and ECX registers are
used to pass arguments in 32-bit mode.  But there is no coverage in the
GCC testsuite.  Add tests to verify that argument registers are spilled
properly.

PR target/119171
* gcc.target/i386/pr119171-1.c: New test.
* gcc.target/i386/pr119171-2.c: Likewise.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
gcc/testsuite/gcc.target/i386/pr119171-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr119171-2.c [new file with mode: 0644]