Commit cf92d7df by Michael Hayes Committed by Michael Hayes

Clobber DP reg in case address needs to be loaded out of memory.

	* config/c4x/c4x.md (load_immed_address):  Add DP reg clobber.

From-SVN: r32717
parent 25a1fcb4
2000-03-24 Michael Hayes <m.hayes@elec.canterbury.ac.nz>
* config/c4x/c4x.md (load_immed_address): Add DP reg clobber.
Thu Mar 23 17:10:48 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> Thu Mar 23 17:10:48 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* calls.c (expand_call): If TARGET is passed by reference and * calls.c (expand_call): If TARGET is passed by reference and
......
...@@ -1245,13 +1245,35 @@ ...@@ -1245,13 +1245,35 @@
operands[5] = c4x_operand_subword (operands[1], 1, 1, HImode); operands[5] = c4x_operand_subword (operands[1], 1, 1, HImode);
}") }")
; We need to clobber the DP reg to be safe in case we
; need to load this address from memory
(define_insn "load_immed_address"
[(set (match_operand:QI 0 "reg_operand" "=a?x?c*r")
(match_operand:QI 1 "symbolic_address_operand" ""))
(clobber (reg:QI 16))]
"TARGET_LOAD_ADDRESS"
"#"
[(set_attr "type" "multi")])
(define_split
[(set (match_operand:QI 0 "std_reg_operand" "")
(match_operand:QI 1 "symbolic_address_operand" ""))
(clobber (reg:QI 16))]
"! TARGET_C3X && ! TARGET_TI"
[(set (match_dup 0) (high:QI (match_dup 1)))
(set (match_dup 0) (lo_sum:QI (match_dup 0) (match_dup 1)))]
"")
; CC has been selected to load a symbolic address. We force the address ; CC has been selected to load a symbolic address. We force the address
; into memory and then generate LDP and LDIU insns. ; into memory and then generate LDP and LDIU insns.
; This is also required for the C30 if we pretend that we can ; This is also required for the C30 if we pretend that we can
; easily load symbolic addresses into a register. ; easily load symbolic addresses into a register.
(define_split (define_split
[(set (match_operand:QI 0 "reg_operand" "") [(set (match_operand:QI 0 "reg_operand" "")
(match_operand:QI 1 "symbolic_address_operand" ""))] (match_operand:QI 1 "symbolic_address_operand" ""))
(clobber (reg:QI 16))]
"! TARGET_SMALL "! TARGET_SMALL
&& (TARGET_C3X || TARGET_TI && (TARGET_C3X || TARGET_TI
|| (reload_completed || (reload_completed
...@@ -1274,7 +1296,8 @@ ...@@ -1274,7 +1296,8 @@
; for the small memory model. ; for the small memory model.
(define_split (define_split
[(set (match_operand:QI 0 "reg_operand" "") [(set (match_operand:QI 0 "reg_operand" "")
(match_operand:QI 1 "symbolic_address_operand" ""))] (match_operand:QI 1 "symbolic_address_operand" ""))
(clobber (reg:QI 16))]
"TARGET_SMALL "TARGET_SMALL
&& (TARGET_C3X || TARGET_TI && (TARGET_C3X || TARGET_TI
|| (reload_completed || (reload_completed
...@@ -1290,13 +1313,6 @@ ...@@ -1290,13 +1313,6 @@
XEXP (operands[2], 0))); XEXP (operands[2], 0)));
}") }")
(define_insn "load_immed_address"
[(set (match_operand:QI 0 "reg_operand" "=a?x?c*r")
(match_operand:QI 1 "symbolic_address_operand" ""))]
"TARGET_LOAD_ADDRESS"
"#"
[(set_attr "type" "multi")])
(define_insn "loadhi_big_constant" (define_insn "loadhi_big_constant"
[(set (match_operand:HI 0 "reg_operand" "=c*d") [(set (match_operand:HI 0 "reg_operand" "=c*d")
(match_operand:HI 1 "const_int_operand" ""))] (match_operand:HI 1 "const_int_operand" ""))]
......
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