* config/i386/i386.opt: New target option -mx87regparm.
authoruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 15 Nov 2006 16:21:58 +0000 (16:21 +0000)
committeruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 15 Nov 2006 16:21:58 +0000 (16:21 +0000)
commite92554cbba705408a4415262204fa9fb55a47a55
tree764fb41a529e8c99e2fdcd06f12aed4fa7003f09
parentc826214a9c0653b3fec5c9728b190061e9a02e18
* config/i386/i386.opt: New target option -mx87regparm.

* config/i386/i386.h (struct ix86_args): Add x87_nregs, x87_regno,
float_in_x87: Add new variables. mmx_words, sse_words: Remove.
(X87_REGPARM_MAX): Define.

* config/i386/i386.c (override_options): Error out for
-mx87regparm but no 80387 support.
(ix86_attribute_table): Add x87regparm.
(ix86_handle_cconv_attribute): Update comments for x87regparm.
(ix86_comp_type_attributes): Check for mismatched x87regparm types.
(ix86_function_x87regparm): New function.
(ix86_function_arg_regno_p): Add X87_REGPARM_MAX 80387 floating
point registers.
(init_cumulative_args): Initialize x87_nregs and float_in_x87
variables.
(function_arg_advance): Process x87_nregs and x87_regno when
floating point argument is to be passed in 80387 register.
(function_arg): Pass XFmode arguments in 80387 registers for local
functions.  Pass SFmode and DFmode arguments to local functions
in 80387 registers when flag_unsafe_math_optimizations is set.

* reg-stack.c (convert_regs_entry): Disable NaN load for
stack registers that are used for argument passing.

* doc/extend.texi: Document x87regparm function attribute.
* doc/invoke.texi: Document -mx87regparm.

testsuite/ChangeLog:

* gcc.target/i386/x87regparm-1.c: New test.
* gcc.target/i386/x87regparm-2.c: New test.
* gcc.target/i386/x87regparm-3.c: New test.
* gcc.target/i386/x87regparm-4.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@118859 138bc75d-0d04-0410-961f-82ee72b054a4
12 files changed:
gcc/ChangeLog
gcc/config/i386/i386.c
gcc/config/i386/i386.h
gcc/config/i386/i386.opt
gcc/doc/extend.texi
gcc/doc/invoke.texi
gcc/reg-stack.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/x87regparm-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/x87regparm-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/x87regparm-3.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/x87regparm-4.c [new file with mode: 0644]