From 179b3afd94fbaa20585f89e9df0a8659de978524 Mon Sep 17 00:00:00 2001 From: nickc Date: Mon, 24 Apr 2000 18:48:41 +0000 Subject: Fix bug building libgcc: Do not generate small add insn if the source register is eliminable. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33387 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 7 +++++++ gcc/config/fr30/fr30.md | 11 +++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) (limited to 'gcc') diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7dd344a3e95..a8443a85be1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2000-04-24 Nick Clifton + + * 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 * configure.in (ENUM_BITFIELDS_ARE_UNSIGNED): Delete redundant diff --git a/gcc/config/fr30/fr30.md b/gcc/config/fr30/fr30.md index afa2e2f2927..1b8d310d838 100644 --- a/gcc/config/fr30/fr30.md +++ b/gcc/config/fr30/fr30.md @@ -621,7 +621,10 @@ emit_insn (gen_addsi_regs (operands[0], operands[1], operands[2])); else if (GET_CODE (operands[2]) != CONST_INT) 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])); else emit_insn (gen_addsi_big_int (operands[0], operands[1], operands[2])); @@ -637,11 +640,15 @@ "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" [(set (match_operand:SI 0 "register_operand" "=r,r") (plus:SI (match_operand:SI 1 "register_operand" "0,0") (match_operand:SI 2 "add_immediate_operand" "I,J")))] - "" + " (REGNO (operands[1]) != FRAME_POINTER_REGNUM) + && (REGNO (operands[1]) != ARG_POINTER_REGNUM)" "@ addn %2, %0 addn2 %2, %0" -- cgit v1.2.1