aboutsummaryrefslogtreecommitdiff
path: root/libcpp/lex.c
diff options
context:
space:
mode:
authorDaniel Santos <daniel.santos@pobox.com>2017-11-04 22:38:43 +0000
committerDaniel Santos <dansan@gcc.gnu.org>2017-11-04 22:38:43 +0000
commit173399a0b4910ce027194cf4cc21d2a8856180d7 (patch)
treeac9418676fb68121eb91bd4fa134bd733c3f3c80 /libcpp/lex.c
parent59fcf6c3ec651d043266c4b898390656bd97e4c0 (diff)
downloadgcc-173399a0b4910ce027194cf4cc21d2a8856180d7.zip
gcc-173399a0b4910ce027194cf4cc21d2a8856180d7.tar.gz
gcc-173399a0b4910ce027194cf4cc21d2a8856180d7.tar.bz2
PR target/82002 Part 2: Correct non-immediate offset/invalid INSN
When we are realigning the stack pointer, making an ms_abi to sysv_abi call and allocating 2GiB or more on the stack we end up with an invalid INSN due to a non-immediate offset. This occurs both with and without -mcall-ms2sysv-xlogues. Additionally, the stack allocation with -mcall-ms2sysv-xlogues is ignoring (silently disabling) stack checking, stack clash checking and probing. This patch fixes these problems by: 1. No longer allocate stack space in ix86_emit_outlined_ms2sysv_save. 2. Rearrange where we emit SSE saves or stub call: a. Before frame allocation when offset from frame to save area is >= 2GiB. b. After frame allocation when frame is < 2GiB. (Stack allocations prior to the stub call can't be combined with those afterwards, so this is better when possible.) 3. Modify choose_baseaddr to take an optional scratch_regno argument and never return rtx that cannot be used as an immediate. gcc: config/i386/i386.c (choose_basereg): Use optional scratch register and add assertion. (x86_emit_outlined_ms2sysv_save): Use scratch register when needed, and don't allocate stack. (ix86_expand_prologue): Rearrange where SSE saves/stub call is emitted, correct wrong allocation with -mcall-ms2sysv-xlogues. (ix86_emit_outlined_ms2sysv_restore): Fix non-immediate offsets. gcc/testsuite: gcc.target/i386/pr82002-2a.c: Change from xfail to fail. gcc.target/i386/pr82002-2b.c: Likewise. From-SVN: r254412
Diffstat (limited to 'libcpp/lex.c')
0 files changed, 0 insertions, 0 deletions