Commit aaceac0b by Nick Clifton Committed by Nick Clifton

Fix bug building libgcc:

Do not generate small add insn if the source register is eliminable.

From-SVN: r33387
parent ac09f482
2000-04-24 Nick Clifton <nickc@cygnus.com>
* config/fr30/fr30.md (addsi3): Do not use small add instruction if
the source register is the frame pointer or arg pointer.
(addsi3_small_int): Disallow if source register is the frame
pointer or arg pointer.
2000-04-24 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> 2000-04-24 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* configure.in (ENUM_BITFIELDS_ARE_UNSIGNED): Delete redundant * configure.in (ENUM_BITFIELDS_ARE_UNSIGNED): Delete redundant
......
...@@ -621,7 +621,10 @@ ...@@ -621,7 +621,10 @@
emit_insn (gen_addsi_regs (operands[0], operands[1], operands[2])); emit_insn (gen_addsi_regs (operands[0], operands[1], operands[2]));
else if (GET_CODE (operands[2]) != CONST_INT) else if (GET_CODE (operands[2]) != CONST_INT)
emit_insn (gen_addsi_big_int (operands[0], operands[1], operands[2])); emit_insn (gen_addsi_big_int (operands[0], operands[1], operands[2]));
else if ((INTVAL (operands[2]) >= -16) && (INTVAL (operands[2]) <= 15)) else if ( (REGNO (operands[1]) != FRAME_POINTER_REGNUM)
&& (REGNO (operands[1]) != ARG_POINTER_REGNUM)
&& (INTVAL (operands[2]) >= -16)
&& (INTVAL (operands[2]) <= 15))
emit_insn (gen_addsi_small_int (operands[0], operands[1], operands[2])); emit_insn (gen_addsi_small_int (operands[0], operands[1], operands[2]));
else else
emit_insn (gen_addsi_big_int (operands[0], operands[1], operands[2])); emit_insn (gen_addsi_big_int (operands[0], operands[1], operands[2]));
...@@ -637,11 +640,15 @@ ...@@ -637,11 +640,15 @@
"addn %2, %0" "addn %2, %0"
) )
;; Do not allow an eliminable register in the source register. It
;; might be eliminated in favour of the stack pointer, probably
;; increasing the offset, and so rendering the instruction illegal.
(define_insn "addsi_small_int" (define_insn "addsi_small_int"
[(set (match_operand:SI 0 "register_operand" "=r,r") [(set (match_operand:SI 0 "register_operand" "=r,r")
(plus:SI (match_operand:SI 1 "register_operand" "0,0") (plus:SI (match_operand:SI 1 "register_operand" "0,0")
(match_operand:SI 2 "add_immediate_operand" "I,J")))] (match_operand:SI 2 "add_immediate_operand" "I,J")))]
"" " (REGNO (operands[1]) != FRAME_POINTER_REGNUM)
&& (REGNO (operands[1]) != ARG_POINTER_REGNUM)"
"@ "@
addn %2, %0 addn %2, %0
addn2 %2, %0" addn2 %2, %0"
......
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