From c4406f742979f1007a2514c02f1e8af1001b0676 Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Mon, 18 May 2009 15:36:18 +0000 Subject: 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 --- gcc/ChangeLog | 8 ++++++++ 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 + + 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 * 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]))) { -- cgit v1.1