Commit c4406f74 by Andreas Schwab Committed by Andreas Schwab

re PR target/39531 (m68k gcc does not convert andil to bclr when compiled on a 64bit host)

PR target/39531
* config/m68k/m68k.c (output_andsi3): Mask off sign bit copies
before calling exact_log2.
(output_iorsi3): Likewise.
(output_xorsi3): Likewise.

From-SVN: r147664
parent e35bbb23
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> 2009-05-18 Kaz Kojima <kkojima@gcc.gnu.org>
* config/sh/sh.c (expand_cbranchdi4): Use a scratch register * config/sh/sh.c (expand_cbranchdi4): Use a scratch register
......
...@@ -4829,7 +4829,7 @@ output_andsi3 (rtx *operands) ...@@ -4829,7 +4829,7 @@ output_andsi3 (rtx *operands)
return "and%.w %2,%0"; return "and%.w %2,%0";
} }
if (GET_CODE (operands[2]) == CONST_INT 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]) && (DATA_REG_P (operands[0])
|| offsettable_memref_p (operands[0]))) || offsettable_memref_p (operands[0])))
{ {
...@@ -4866,7 +4866,7 @@ output_iorsi3 (rtx *operands) ...@@ -4866,7 +4866,7 @@ output_iorsi3 (rtx *operands)
return "or%.w %2,%0"; return "or%.w %2,%0";
} }
if (GET_CODE (operands[2]) == CONST_INT 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]) && (DATA_REG_P (operands[0])
|| offsettable_memref_p (operands[0]))) || offsettable_memref_p (operands[0])))
{ {
...@@ -4901,7 +4901,7 @@ output_xorsi3 (rtx *operands) ...@@ -4901,7 +4901,7 @@ output_xorsi3 (rtx *operands)
return "eor%.w %2,%0"; return "eor%.w %2,%0";
} }
if (GET_CODE (operands[2]) == CONST_INT 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]) && (DATA_REG_P (operands[0])
|| offsettable_memref_p (operands[0]))) || offsettable_memref_p (operands[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