summaryrefslogtreecommitdiff
path: root/gcc/reg-stack.c
diff options
context:
space:
mode:
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2007-03-06 16:38:43 +0000
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2007-03-06 16:38:43 +0000
commit5fe80ef0b0a1aafd1eb0175c49c338bea5ee4c35 (patch)
treef70d17a85450e10da77bd234ac14b80b870a2903 /gcc/reg-stack.c
parente9f301ea2e3aac5ae9b67b512110dc2a6306f4b1 (diff)
downloadgcc-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.c3
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
{