case OP_LBU:
case OP_LHU:
case OP_LWR:
+ case OP_META_EXTC:
+ case OP_META_EXTS:
return BIT(op.i.rt);
case OP_JAL:
return BIT(31);
if (OPT_FLAG_MULT_DIV && c.r.imm)
known &= ~BIT(c.r.imm);
break;
+ case OP_SPECIAL_MFLO:
+ case OP_SPECIAL_MFHI:
+ known &= ~BIT(c.r.rd);
+ break;
default:
break;
}
known &= ~BIT(c.r.rd);
}
break;
+ case OP_META_EXTC:
+ if (known & BIT(c.i.rs)) {
+ known |= BIT(c.i.rt);
+ v[c.i.rt] = (s32)(s8)v[c.i.rs];
+ } else {
+ known &= ~BIT(c.i.rt);
+ }
+ break;
+ case OP_META_EXTS:
+ if (known & BIT(c.i.rs)) {
+ known |= BIT(c.i.rt);
+ v[c.i.rt] = (s32)(s16)v[c.i.rs];
+ } else {
+ known &= ~BIT(c.i.rt);
+ }
+ break;
default:
break;
}
else
op->i.op = OP_META_MULTU2;
- op->r.op = ffs32(values[op->r.rt]);
+ op->r.op = ctz32(values[op->r.rt]);
break;
case OP_SPECIAL_OR:
case OP_SPECIAL_ADD:
pr_debug("Flagging opcode %u as direct I/O access\n",
i);
list->flags |= LIGHTREC_IO_MODE(LIGHTREC_IO_DIRECT_HW);
+
+ if (no_mask)
+ list->flags |= LIGHTREC_NO_MASK;
break;
}
fallthrough;