------- Comment #8 from amodra at bigpond dot net dot au 2006-06-27 01:41 ------- I think insvdi_rshift_rlwimi_p is totally broken. It should look something like the following to match the capabilities of rlwimi according to my reading of the powerpc architecture specification.
/* Return 1 if operands will generate valid arguments to the rlwimi instruction for insert with right shift in 64-bit mode. */ int insvdi_rshift_rlwimi_p (rtx sizeop, rtx startop, rtx shiftop) { /* The field that we insert into must start in the low word. */ if (INTVAL (startop) < 32 || INTVAL (startop) >= 64) return 0; /* And it must end there too. */ if (INTVAL (sizeop) < 0 || INTVAL (sizeop) + INTVAL (startop) >= 64) return 0; /* The value we are inserting must also come from the low word. Since the sign bit isn't in the low word, we don't need to worry about ashiftrt vs. lshiftrt. */ if (INTVAL (shiftop) + INTVAL (sizeop) >= 32) return 0; return 1; } -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28170