Commit 4bec9f7d by Nick Clifton Committed by Nick Clifton

Fix pic_l;oad_addr to work in Thumb mode.

From-SVN: r37838
parent abfadcb1
2000-11-28 Nick Clifton <nickc@redhat.com>
* config/arm/arm.md (pic_load_addr): Split into
pic_load_addr_arm and pic_load_addr_thumb.
* config/arm/arm.c (legitimize_pic_address): Generate either
ARM or Thumb versions of pic_load_addr.
(arm_finalize_pic): Generate either ARM or Thumb versions of
pic_load_addr.
2000-11-28 Richard Henderson <rth@redhat.com> 2000-11-28 Richard Henderson <rth@redhat.com>
* calls.c (expand_call): Defer const/pure NO_DEFER_POP until * calls.c (expand_call): Defer const/pure NO_DEFER_POP until
......
...@@ -1920,7 +1920,10 @@ legitimize_pic_address (orig, mode, reg) ...@@ -1920,7 +1920,10 @@ legitimize_pic_address (orig, mode, reg)
else else
address = reg; address = reg;
emit_insn (gen_pic_load_addr (address, orig)); if (TARGET_ARM)
emit_insn (gen_pic_load_addr_arm (address, orig));
else
emit_insn (gen_pic_load_addr_thumb (address, orig));
pic_ref = gen_rtx_MEM (Pmode, pic_ref = gen_rtx_MEM (Pmode,
gen_rtx_PLUS (Pmode, pic_offset_table_rtx, gen_rtx_PLUS (Pmode, pic_offset_table_rtx,
...@@ -1993,8 +1996,12 @@ legitimize_pic_address (orig, mode, reg) ...@@ -1993,8 +1996,12 @@ legitimize_pic_address (orig, mode, reg)
if (NEED_GOT_RELOC) if (NEED_GOT_RELOC)
{ {
rtx pic_ref, address = gen_reg_rtx (Pmode); rtx pic_ref, address = gen_reg_rtx (Pmode);
if (TARGET_ARM)
emit_insn (gen_pic_load_addr_arm (address, orig));
else
emit_insn (gen_pic_load_addr_thumb (address, orig));
emit_insn (gen_pic_load_addr (address, orig));
pic_ref = gen_rtx_PLUS (Pmode, pic_offset_table_rtx, address); pic_ref = gen_rtx_PLUS (Pmode, pic_offset_table_rtx, address);
emit_move_insn (address, pic_ref); emit_move_insn (address, pic_ref);
...@@ -2044,11 +2051,16 @@ arm_finalize_pic () ...@@ -2044,11 +2051,16 @@ arm_finalize_pic ()
pic_rtx = gen_rtx_CONST (Pmode, gen_rtx_MINUS (Pmode, pic_tmp2, pic_tmp)); pic_rtx = gen_rtx_CONST (Pmode, gen_rtx_MINUS (Pmode, pic_tmp2, pic_tmp));
emit_insn (gen_pic_load_addr (pic_offset_table_rtx, pic_rtx));
if (TARGET_ARM) if (TARGET_ARM)
emit_insn (gen_pic_add_dot_plus_eight (pic_offset_table_rtx, l1)); {
emit_insn (gen_pic_load_addr_arm (pic_offset_table_rtx, pic_rtx));
emit_insn (gen_pic_add_dot_plus_eight (pic_offset_table_rtx, l1));
}
else else
emit_insn (gen_pic_add_dot_plus_four (pic_offset_table_rtx, l1)); {
emit_insn (gen_pic_load_addr_thumb (pic_offset_table_rtx, pic_rtx));
emit_insn (gen_pic_add_dot_plus_four (pic_offset_table_rtx, l1));
}
seq = gen_sequence (); seq = gen_sequence ();
end_sequence (); end_sequence ();
......
...@@ -4055,20 +4055,23 @@ ...@@ -4055,20 +4055,23 @@
;; the insn alone, and to force the minipool generation pass to then move ;; the insn alone, and to force the minipool generation pass to then move
;; the GOT symbol to memory. ;; the GOT symbol to memory.
(define_insn "pic_load_addr" (define_insn "pic_load_addr_arm"
[(set (match_operand:SI 0 "s_register_operand" "=r") [(set (match_operand:SI 0 "s_register_operand" "=r")
(unspec:SI [(match_operand:SI 1 "" "mX")] 3))] (unspec:SI [(match_operand:SI 1 "" "mX")] 3))]
"TARGET_EITHER && flag_pic" "TARGET_ARM && flag_pic"
"ldr%?\\t%0, %1" "ldr%?\\t%0, %1"
[(set_attr "type" "load") [(set_attr "type" "load")
(set (attr "pool_range") (set (attr "pool_range") (const_int 4096))
(if_then_else (eq_attr "is_thumb" "yes") (set (attr "neg_pool_range") (const_int 4084))]
(const_int 1024) )
(const_int 4096)))
(set (attr "neg_pool_range") (define_insn "pic_load_addr_thumb"
(if_then_else (eq_attr "is_thumb" "yes") [(set (match_operand:SI 0 "s_register_operand" "=l")
(const_int 0) (unspec:SI [(match_operand:SI 1 "" "mX")] 3))]
(const_int 4084)))] "TARGET_THUMB && flag_pic"
"ldr\\t%0, %1"
[(set_attr "type" "load")
(set (attr "pool_range") (const_int 1024))]
) )
;; This variant is used for AOF assembly, since it needs to mention the ;; This variant is used for AOF assembly, since it needs to mention the
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment