diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/config/m68k/m68k.c | 6 |
2 files changed, 11 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 575773f..7b2a7bf 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2009-05-18 Andreas Schwab <schwab@linux-m68k.org> + + PR target/39531 + * config/m68k/m68k.c (output_andsi3): Mask off sign bit copies + before calling exact_log2. + (output_iorsi3): Likewise. + (output_xorsi3): Likewise. + 2009-05-18 Kaz Kojima <kkojima@gcc.gnu.org> * config/sh/sh.c (expand_cbranchdi4): Use a scratch register diff --git a/gcc/config/m68k/m68k.c b/gcc/config/m68k/m68k.c index de20fdb..ec371e5 100644 --- a/gcc/config/m68k/m68k.c +++ b/gcc/config/m68k/m68k.c @@ -4829,7 +4829,7 @@ output_andsi3 (rtx *operands) return "and%.w %2,%0"; } if (GET_CODE (operands[2]) == CONST_INT - && (logval = exact_log2 (~ INTVAL (operands[2]))) >= 0 + && (logval = exact_log2 (~ INTVAL (operands[2]) & 0xffffffff)) >= 0 && (DATA_REG_P (operands[0]) || offsettable_memref_p (operands[0]))) { @@ -4866,7 +4866,7 @@ output_iorsi3 (rtx *operands) return "or%.w %2,%0"; } if (GET_CODE (operands[2]) == CONST_INT - && (logval = exact_log2 (INTVAL (operands[2]))) >= 0 + && (logval = exact_log2 (INTVAL (operands[2]) & 0xffffffff)) >= 0 && (DATA_REG_P (operands[0]) || offsettable_memref_p (operands[0]))) { @@ -4901,7 +4901,7 @@ output_xorsi3 (rtx *operands) return "eor%.w %2,%0"; } if (GET_CODE (operands[2]) == CONST_INT - && (logval = exact_log2 (INTVAL (operands[2]))) >= 0 + && (logval = exact_log2 (INTVAL (operands[2]) & 0xffffffff)) >= 0 && (DATA_REG_P (operands[0]) || offsettable_memref_p (operands[0]))) { |