diff options
author | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-03-06 16:38:43 +0000 |
---|---|---|
committer | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-03-06 16:38:43 +0000 |
commit | 5fe80ef0b0a1aafd1eb0175c49c338bea5ee4c35 (patch) | |
tree | f70d17a85450e10da77bd234ac14b80b870a2903 /gcc/reg-stack.c | |
parent | e9f301ea2e3aac5ae9b67b512110dc2a6306f4b1 (diff) | |
download | gcc-5fe80ef0b0a1aafd1eb0175c49c338bea5ee4c35.tar.gz |
* reg-stack.c (reg_to_stack): Large models don't allow NAN to be
loaded for constant large models. Non-large 64bit PIC can do.
* i386.h (CASE_VECTOR_MODE): Large PIC cases are 64bit.
* cmodel.h: Add LARGE PIC.
* i386.md (UNSPEC_PLTOFF): New.
(UNSPEC_SET_RIP, UNSPEC_SET_GOT_OFFSET): New; renumber other unspecs as
needed.
(*call_1_rex64): Disable for large models.
(*call_1_rex64_large): New.
(*call_value_1_rex64): Disable for large models.
(*call_value_1_rex64_large): New.
(set_rip_rex4): New.
(set_got_offset_rex64): New.
* predicates.md (constant_call_address_operand): For large model
constant calls are not possible.
* i386-protos.h (construct_plt_address): Declare.
* i386.c (override_options): Accept large models.
(ix86_expand_prologue): Expand large PIC GOT pointer load.
(legitimate_constant_p): Add new UNSPECs.
(legitimate_pic_operand_p): Likewise.
(legitimate_pic_address_disp_p): Disallow local symbols for large PICs.
(legitimize_pic_address): Do easy RIP relative way for TLS only for
non-large model.
(output_pic_addr_const): Add PLTOFF.
(ix86_output_addr_diff_elt): Output 64bit tables when needed.
(ix86_expand_move): Legitimize pic address when in PIC mode.
(construct_plt_address): New function.
(ix86_expand_call): Offload the address to register and use GOT pointer
for large model.
* invoke.texi (mcmodel=large): Update documentation.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@122623 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/reg-stack.c')
-rw-r--r-- | gcc/reg-stack.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/reg-stack.c b/gcc/reg-stack.c index 7a7a0e53cb0..e6802b1e8ef 100644 --- a/gcc/reg-stack.c +++ b/gcc/reg-stack.c @@ -3141,7 +3141,8 @@ reg_to_stack (void) the PIC register hasn't been set up. In that case, fall back on zero, which we can get from `ldz'. */ - if (flag_pic && !TARGET_64BIT) + if ((flag_pic && !TARGET_64BIT) + || ix86_cmodel == CM_LARGE || ix86_cmodel == CM_LARGE_PIC) not_a_num = CONST0_RTX (SFmode); else { |