This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: ppc LE broken. anybody care?
On Sun, Mar 07, 2004 at 07:36:41PM -0500, David Edelsohn wrote:
> >>>>> Aldy Hernandez writes:
>
> Aldy> * config/rs6000/rs6000.md (ashrdi3): Do not call ashrdi3_no_power
> Aldy> for little endian.
> Aldy> ("ashrdi3_no_power"): Disable for little endian.
>
> Please test WORDS_BIG_ENDIAN in the final condition for ashrdi3.
> There is no reason to establish the optab at all for that case, only to
> fail later. This should fail in the CODE_for_nothing tests in expr.c.
>
> Okay with that change.
Thanks.
Committing the patch below.
2004-03-07 Aldy Hernandez <aldyh@redhat.com>
* config/rs6000/rs6000.md (ashrdi3): Do not call ashrdi3_no_power
for little endian.
("ashrdi3_no_power"): Disable for little endian.
(ashrdi3): Same.
Index: config/rs6000/rs6000.md
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/rs6000/rs6000.md,v
retrieving revision 1.297
diff -u -p -r1.297 rs6000.md
--- config/rs6000/rs6000.md 4 Mar 2004 09:26:45 -0000 1.297
+++ config/rs6000/rs6000.md 8 Mar 2004 04:09:09 -0000
@@ -5634,7 +5634,7 @@
[(set (match_operand:DI 0 "gpc_reg_operand" "=&r,&r")
(ashiftrt:DI (match_operand:DI 1 "gpc_reg_operand" "r,r")
(match_operand:SI 2 "const_int_operand" "M,i")))]
- "TARGET_32BIT && !TARGET_POWERPC64 && !TARGET_POWER"
+ "TARGET_32BIT && !TARGET_POWERPC64 && !TARGET_POWER && WORDS_BIG_ENDIAN"
"@
{srai|srawi} %0,%1,31\;{srai|srawi} %L0,%1,%h2
{sri|srwi} %L0,%L1,%h2\;insrwi %L0,%1,%h2,0\;{srai|srawi} %0,%1,%h2"
@@ -6950,7 +6950,7 @@
[(set (match_operand:DI 0 "gpc_reg_operand" "")
(ashiftrt:DI (match_operand:DI 1 "gpc_reg_operand" "")
(match_operand:SI 2 "reg_or_cint_operand" "")))]
- ""
+ "WORDS_BIG_ENDIAN"
"
{
if (TARGET_POWERPC64)
@@ -6960,7 +6960,8 @@
emit_insn (gen_ashrdi3_power (operands[0], operands[1], operands[2]));
DONE;
}
- else if (TARGET_32BIT && GET_CODE (operands[2]) == CONST_INT)
+ else if (TARGET_32BIT && GET_CODE (operands[2]) == CONST_INT
+ && WORDS_BIG_ENDIAN)
{
emit_insn (gen_ashrdi3_no_power (operands[0], operands[1], operands[2]));
DONE;