On 2013-04-01 07:55, Aurelien Jarno wrote:
>+static void tcg_out_andi32(TCGContext *s, TCGReg dst, TCGReg src, uint32_t c)
>+{
>+ int mb, me;
>+
>+ if ((c & 0xffff) == c) {
>+ tcg_out32(s, ANDI | SAI(src, dst, c));
>+ return;
>+ } else if ((c & 0xffff0000) == c) {
>+ tcg_out32(s, ANDIS | SAI(src, dst, c >> 16));
>+ return;
>+ } else if (mask_operand(c, &mb, &me)) {
>+ tcg_out_rlw(s, RLWINM, dst, src, 0, mb, me);
>+ } else {
>+ tcg_out_movi(s, TCG_TYPE_I32, 0, c);
>+ tcg_out32(s, AND | SAB(src, dst, 0));
Give it's a 32-bit constant, wouldn't it be better to use ANDI +
ANDIS here?
x & 0xffff0000 & 0x0000ffff == 0.
Unlike IOR and XOR...
r~