diff options
author | Uros Bizjak <uros@gcc.gnu.org> | 2010-06-11 11:38:59 +0200 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2010-06-11 11:38:59 +0200 |
commit | 3d25c3960ba2eec2cfc8498c73c939619ec0efc9 (patch) | |
tree | 36aa62d4a138ab5c5321dd245cafdb56948e9a4b /gcc/config | |
parent | b66a8c5da87a3dd092752d9edf55d61589149aed (diff) | |
download | gcc-3d25c3960ba2eec2cfc8498c73c939619ec0efc9.zip gcc-3d25c3960ba2eec2cfc8498c73c939619ec0efc9.tar.gz gcc-3d25c3960ba2eec2cfc8498c73c939619ec0efc9.tar.bz2 |
i386.md (pro_epilogue_adjust_stack_1): Assert that operand 0 == operand 1.
* config/i386/i386.md (pro_epilogue_adjust_stack_1) <TYPE_ALU>: Assert
that operand 0 == operand 1. Use x86_maybe_negate_const_int to output
insn mnemonic.
(pro_epilogue_adjust_stack_rex64) <TYPE_ALU>: Ditto.
From-SVN: r160600
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/i386/i386.md | 36 |
1 files changed, 10 insertions, 26 deletions
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index af9c113..37f3f99 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -16539,22 +16539,15 @@ return "mov{l}\t{%1, %0|%0, %1}"; case TYPE_ALU: - if (CONST_INT_P (operands[2]) - && (INTVAL (operands[2]) == 128 - || (INTVAL (operands[2]) < 0 - && INTVAL (operands[2]) != -128))) - { - operands[2] = GEN_INT (-INTVAL (operands[2])); - return "sub{l}\t{%2, %0|%0, %2}"; - } + gcc_assert (rtx_equal_p (operands[0], operands[1])); + if (x86_maybe_negate_const_int (&operands[2], SImode)) + return "sub{l}\t{%2, %0|%0, %2}"; + return "add{l}\t{%2, %0|%0, %2}"; - case TYPE_LEA: + default: operands[2] = SET_SRC (XVECEXP (PATTERN (insn), 0, 0)); return "lea{l}\t{%a2, %0|%0, %a2}"; - - default: - gcc_unreachable (); } } [(set (attr "type") @@ -16589,24 +16582,15 @@ return "mov{q}\t{%1, %0|%0, %1}"; case TYPE_ALU: - if (CONST_INT_P (operands[2]) - /* Avoid overflows. */ - && ((INTVAL (operands[2]) & ((((unsigned int) 1) << 31) - 1))) - && (INTVAL (operands[2]) == 128 - || (INTVAL (operands[2]) < 0 - && INTVAL (operands[2]) != -128))) - { - operands[2] = GEN_INT (-INTVAL (operands[2])); - return "sub{q}\t{%2, %0|%0, %2}"; - } + gcc_assert (rtx_equal_p (operands[0], operands[1])); + if (x86_maybe_negate_const_int (&operands[2], DImode)) + return "sub{q}\t{%2, %0|%0, %2}"; + return "add{q}\t{%2, %0|%0, %2}"; - case TYPE_LEA: + default: operands[2] = SET_SRC (XVECEXP (PATTERN (insn), 0, 0)); return "lea{q}\t{%a2, %0|%0, %a2}"; - - default: - gcc_unreachable (); } } [(set (attr "type") |