if (sub >= -1) {
temp = (tempB << (64 - len)) | (tempA >> len);
- temp = temp & ((0x01 << (size + 1)) - 1);
+ temp = temp & ((1ULL << (size + 1)) - 1);
set_DSPControl_efi(0, env);
} else {
set_DSPControl_efi(1, env);
if (sub >= -1) {
temp = (tempB << (64 - len)) | (tempA >> len);
- temp = temp & ((0x01 << (size + 1)) - 1);
+ temp = temp & ((1ULL << (size + 1)) - 1);
set_DSPControl_pos(sub, env);
set_DSPControl_efi(0, env);
} else {
break;
}
+ check_cp1_enabled(ctx);
gen_load_fpr64(ctx, t0, rs);
gen_load_fpr64(ctx, t1, rt);
LMI_DIRECT(XOR_CP2, xor, xor);
LMI_DIRECT(NOR_CP2, nor, nor);
LMI_DIRECT(AND_CP2, and, and);
- LMI_DIRECT(PANDN, pandn, andc);
- LMI_DIRECT(OR, or, or);
+ LMI_DIRECT(OR_CP2, or, or);
+
+ case OPC_PANDN:
+ tcg_gen_andc_i64(t0, t1, t0);
+ break;
case OPC_PINSRH_0:
tcg_gen_deposit_i64(t0, t0, t1, 0, 16);