return r_dst;
}
+ case Iop_1Uto64:
case Iop_8Uto16:
case Iop_8Uto64:
case Iop_16Uto64: {
return r_dst;
}
- case Iop_1Uto64:
- vassert(mode64);
- return iselWordExpr_R(env, e->Iex.Unop.arg);
-
case Iop_64HIto32: {
if (env->mode64) {
HReg r_dst = newVRegI(env);
goto irreducible;
HReg r_dst = newVRegI(env);
HReg r_src = iselWordExpr_R(env, e->Iex.Unop.arg);
- addInstr(env, MIPSInstr_Alu(Malu_SUB, r_dst, hregMIPS_GPR0(mode64),
- MIPSRH_Reg(r_src)));
+ if (op_unop == Iop_Left64) {
+ addInstr(env, MIPSInstr_Alu(Malu_DSUB, r_dst, hregMIPS_GPR0(mode64),
+ MIPSRH_Reg(r_src)));
+ } else {
+ addInstr(env, MIPSInstr_Alu(Malu_SUB, r_dst, hregMIPS_GPR0(mode64),
+ MIPSRH_Reg(r_src)));
+ }
addInstr(env, MIPSInstr_Alu(Malu_OR, r_dst, r_dst,
MIPSRH_Reg(r_src)));
return r_dst;
vassert(env->mode64);
tmp1 = iselWordExpr_R(env, e->Iex.Unop.arg);
- addInstr(env, MIPSInstr_Alu(Malu_SUB, tmp2, hregMIPS_GPR0(mode64),
+ addInstr(env, MIPSInstr_Alu(Malu_DSUB, tmp2, hregMIPS_GPR0(mode64),
MIPSRH_Reg(tmp1)));
addInstr(env, MIPSInstr_Alu(Malu_OR, tmp2, tmp2, MIPSRH_Reg(tmp1)));