Add -mgeneral-regs-only option
commita55668c45867980a07a06690a45edd43b4c82efa
authorhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 20 May 2016 16:06:39 +0000 (20 16:06 +0000)
committerhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 20 May 2016 16:06:39 +0000 (20 16:06 +0000)
tree66d8f41cf7b0bd89915e0be9d9f0bf8baf44ebc9
parent61736a1ba72031d031b87c2c13dc9e5190643ffe
Add -mgeneral-regs-only option

X86 Linux kernel is compiled only with integer instructions.  Currently,

-mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -mno-80387
-mno-fp-ret-in-387  -mskip-rax-setup

is used to compile kernel.  If we add another non-integer feature, it
has to be turned off.  We can add a -mgeneral-regs-only option, similar
to AArch64, to disable all non-integer features so that kernel doesn't
need a long list and the same option will work for future compilers.
It can also be used to compile interrupt handler.

gcc/

PR target/70738
* common/config/i386/i386-common.c
(OPTION_MASK_ISA_GENERAL_REGS_ONLY_UNSET): New.
(ix86_handle_option): Disable MPX, MMX, SSE and x87 instructions
for -mgeneral-regs-only.
* config/i386/i386.c (ix86_option_override_internal): Don't
enable x87 instructions if only the general registers are
allowed.
* config/i386/i386.opt: Add -mgeneral-regs-only.
* doc/invoke.texi: Document -mgeneral-regs-only.

gcc/testsuite/

PR target/70738
* gcc.target/i386/pr70738-1.c: Likewise.
* gcc.target/i386/pr70738-2.c: Likewise.
* gcc.target/i386/pr70738-3.c: Likewise.
* gcc.target/i386/pr70738-4.c: Likewise.
* gcc.target/i386/pr70738-5.c: Likewise.
* gcc.target/i386/pr70738-6.c: Likewise.
* gcc.target/i386/pr70738-7.c: Likewise.
* gcc.target/i386/pr70738-8.c: Likewise.
* gcc.target/i386/pr70738-9.c: Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@236520 138bc75d-0d04-0410-961f-82ee72b054a4
15 files changed:
gcc/ChangeLog
gcc/common/config/i386/i386-common.c
gcc/config/i386/i386.c
gcc/config/i386/i386.opt
gcc/doc/invoke.texi
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr70738-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr70738-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr70738-3.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr70738-4.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr70738-5.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr70738-6.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr70738-7.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr70738-8.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr70738-9.c [new file with mode: 0644]