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
