On 07/15/2010 09:57 AM, Uros Bizjak wrote:
Hello!
I was playing a bit with TARGET_SHIFT_TRUNCATION_MASK on x86 in the
hope that redundant masking would get eliminated from:
int test (int a, int c)
{
return a<< (c& 0x1f);
}
The macro was defined as:
+/* Implement TARGET_SHIFT_TRUNCATION_MASK. */
+static unsigned HOST_WIDE_INT
+ix86_shift_truncation_mask (enum machine_mode mode)
+{
+ switch (mode)
+ {
+ case QImode:
+ case HImode:
+ case SImode:
+ return 31;
+
+ case DImode:
+ if (TARGET_64BIT)
+ return 63;
+
+ default:
+ return 0;
+ }
+}
However, I was not able to get rid of the masking "and".
FWIW, the reason the hook is not implemented on x86 is that some
variants of bsf/bsr (I think with memory source) do not honor the
truncation.
Paolo