Line 362... |
Line 362... |
[(set (match_operand:SI 0 "register_operand" "=r")
|
[(set (match_operand:SI 0 "register_operand" "=r")
|
(match_operand:SI 1 "immediate_operand" "i"))]
|
(match_operand:SI 1 "immediate_operand" "i"))]
|
"GET_CODE (operands[1]) != CONST_INT"
|
"GET_CODE (operands[1]) != CONST_INT"
|
"l.movhi \t%0,hi(%1)\;l.ori \t%0,%0,lo(%1)"
|
"l.movhi \t%0,hi(%1)\;l.ori \t%0,%0,lo(%1)"
|
;; the switch of or32 bfd to Rela allows us to schedule insns separately.
|
;; the switch of or32 bfd to Rela allows us to schedule insns separately.
|
"&& reload_completed
|
"(GET_CODE (operands[1]) != CONST_INT
|
|
|| ! (CONST_OK_FOR_CONSTRAINT_P (INTVAL (operands[1]),'I', \"I\")
|
|
|| CONST_OK_FOR_CONSTRAINT_P (INTVAL (operands[1]),'K', \"K\")
|
|
|| CONST_OK_FOR_CONSTRAINT_P (INTVAL (operands[1]), 'M', \"M\")))
|
|
&& reload_completed
|
&& GET_CODE (operands[1]) != HIGH && GET_CODE (operands[1]) != LO_SUM"
|
&& GET_CODE (operands[1]) != HIGH && GET_CODE (operands[1]) != LO_SUM"
|
[(pc)]
|
[(pc)]
|
{
|
{
|
emit_insn (gen_movsi_high (operands[0], operands[1]));
|
emit_insn (gen_movsi_high (operands[0], operands[1]));
|
emit_insn (gen_movsi_lo_sum (operands[0], operands[0], operands[1]));
|
emit_insn (gen_movsi_lo_sum (operands[0], operands[0], operands[1]));
|
Line 705... |
Line 709... |
;;
|
;;
|
;;
|
;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;
|
;;
|
;;
|
;;
|
(define_insn "movdi"
|
(define_insn_and_split "movdi"
|
[(set (match_operand:DI 0 "nonimmediate_operand" "=r, r, m, r")
|
[(set (match_operand:DI 0 "nonimmediate_operand" "=r, r, m, r")
|
(match_operand:DI 1 "general_operand" " r, m, r, i"))]
|
(match_operand:DI 1 "general_operand" " r, m, r, n"))]
|
""
|
""
|
"*
|
"*
|
return or32_output_move_double (operands);
|
return or32_output_move_double (operands);
|
"
|
"
|
|
"&& reload_completed && CONSTANT_P (operands[1])"
|
|
[(set (match_dup 2) (match_dup 3)) (set (match_dup 4) (match_dup 5))]
|
|
"operands[2] = operand_subword (operands[0], 0, 0, DImode);
|
|
operands[3] = operand_subword (operands[1], 0, 0, DImode);
|
|
operands[4] = operand_subword (operands[0], 1, 0, DImode);
|
|
operands[5] = operand_subword (operands[1], 1, 0, DImode);"
|
[(set_attr "length" "2,2,2,3")])
|
[(set_attr "length" "2,2,2,3")])
|
|
|
;; Moving double and single precision floating point values
|
;; Moving double and single precision floating point values
|
|
|
(define_insn "movdf"
|
(define_insn "movdf"
|