From: Jan Hubicka Date: Thu, 15 Apr 1999 01:38:29 +0000 (+0200) Subject: i386.md (QImode add pattern): Support lea instruction. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=7c802a406f2c6871310dd5590ba99c2583d7c12a;p=gcc.git i386.md (QImode add pattern): Support lea instruction. * i386.md (QImode add pattern): Support lea instruction. (HImode add pattern): Likewise. Co-Authored-By: Jeffrey A Law From-SVN: r26468 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 30d9a68c276..b69eeda0156 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,6 +1,9 @@ Thu Apr 15 01:03:21 1999 Jan Hubicka Jeff Law + * i386.md (QImode add pattern): Support lea instruction. + (HImode add pattern): Likewise. + * i386.md (ashlsi patterns): Call output_ashl instead of output_ashlsi3. (ashlqi): Use expander, separate LEA and SAL / ADD patterns; call output_ashl. diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 39a06f2b233..28e35e44179 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -3421,12 +3421,30 @@ "IX86_EXPAND_BINARY_OPERATOR (PLUS, HImode, operands);") (define_insn "" - [(set (match_operand:HI 0 "nonimmediate_operand" "=rm,r") - (plus:HI (match_operand:HI 1 "nonimmediate_operand" "%0,0") - (match_operand:HI 2 "general_operand" "ri,rm")))] + [(set (match_operand:HI 0 "nonimmediate_operand" "=rm,r,?r") + (plus:HI (match_operand:HI 1 "nonimmediate_operand" "%0,0,r") + (match_operand:HI 2 "general_operand" "ri,rm,ri")))] "ix86_binary_operator_ok (PLUS, HImode, operands)" "* { + if (REG_P (operands[0]) && REG_P (operands[1]) + && (REG_P (operands[2]) || CONSTANT_P (operands[2])) + && REGNO (operands[0]) != REGNO (operands[1])) + { + if (operands[2] == stack_pointer_rtx) + abort (); + + CC_STATUS_INIT; + operands[1] + = gen_rtx_PLUS (SImode, + gen_rtx_REG (SImode, REGNO (operands[1])), + (! REG_P (operands[2]) + ? operands[2] + : gen_rtx_REG (SImode, REGNO (operands[2])))); + operands[0] = gen_rtx_REG (SImode, REGNO (operands[0])); + return AS2 (lea%L0,%a1,%0); + } + /* ??? what about offsettable memory references? */ if (!TARGET_PENTIUMPRO /* partial stalls are just too painful to risk. */ && QI_REG_P (operands[0]) @@ -3488,12 +3506,31 @@ "IX86_EXPAND_BINARY_OPERATOR (PLUS, QImode, operands);") (define_insn "" - [(set (match_operand:QI 0 "nonimmediate_operand" "=qm,q") - (plus:QI (match_operand:QI 1 "nonimmediate_operand" "%0,0") - (match_operand:QI 2 "general_operand" "qn,qmn")))] + [(set (match_operand:QI 0 "nonimmediate_operand" "=qm,q,?q") + (plus:QI (match_operand:QI 1 "nonimmediate_operand" "%0,0,q") + (match_operand:QI 2 "general_operand" "qn,qmn,qn")))] "ix86_binary_operator_ok (PLUS, QImode, operands)" "* { + if (REG_P (operands[0]) && REG_P (operands[1]) + && (REG_P (operands[2]) || CONSTANT_P (operands[2])) + && (REGNO (operands[0]) != REGNO (operands[1]) + || NON_QI_REG_P (operands[1]) + || (REG_P (operands[2]) && NON_QI_REG_P (operands[2])))) + { + if (operands[2] == stack_pointer_rtx) + abort (); + + CC_STATUS_INIT; + operands[1] + = gen_rtx_PLUS (SImode, + gen_rtx_REG (SImode, REGNO (operands[1])), + (! REG_P (operands[2]) + ? operands[2] + : gen_rtx_REG (SImode, REGNO (operands[2])))); + operands[0] = gen_rtx_REG (SImode, REGNO (operands[0])); + return AS2 (lea%L0,%a1,%0); + } if (operands[2] == const1_rtx) return AS1 (inc%B0,%0);