return r_ccIR;
}
- if (e->Iex.Binop.op == Iop_DivModU64to32 ||
- e->Iex.Binop.op == Iop_DivModS64to32) {
- HReg tLo = newVRegI(env);
- HReg tHi = newVRegI(env);
- HReg mask = newVRegI(env);
- HReg tLo_1 = newVRegI(env);
- HReg tHi_1 = newVRegI(env);
- HReg r_dst = newVRegI(env);
- Bool syned = toBool(e->Iex.Binop.op == Iop_DivModS64to32);
-
- HReg r_srcR = iselWordExpr_R(env, e->Iex.Binop.arg2);
- HReg r_srcL = iselWordExpr_R(env, e->Iex.Binop.arg1);
-
- addInstr(env, MIPSInstr_Div(syned, True, r_srcL, r_srcR));
- addInstr(env, MIPSInstr_Mfhi(tHi));
- addInstr(env, MIPSInstr_Mflo(tLo));
-
- addInstr(env, MIPSInstr_Shft(Mshft_SLL, False, tHi_1, tHi,
- MIPSRH_Imm(False, 32)));
-
- addInstr(env, MIPSInstr_LI(mask, 0xffffffff));
- addInstr(env, MIPSInstr_Alu(Malu_AND, tLo_1, tLo,
- MIPSRH_Reg(mask)));
-
- addInstr(env, MIPSInstr_Alu(Malu_OR, r_dst, tHi_1,
- MIPSRH_Reg(tLo_1)));
-
- return r_dst;
- }
-
if (e->Iex.Binop.op == Iop_DivModU32to32 ||
e->Iex.Binop.op == Iop_DivModS32to32) {
HReg tLo = newVRegI(env);
return;
}
- case Iop_DivModU128to64:
- case Iop_DivModS128to64: {
- vassert(mode64);
- HReg rHi1, rLo1;
- iselInt128Expr(&rHi1, &rLo1, env, e->Iex.Binop.arg1);
-
- HReg r_srcR = iselWordExpr_R(env, e->Iex.Binop.arg2);
- HReg tLo = newVRegI(env);
- HReg tHi = newVRegI(env);
- Bool syned = toBool(e->Iex.Binop.op == Iop_DivModS128to64);
-
- addInstr(env, MIPSInstr_Div(syned, False, rLo1, r_srcR));
- addInstr(env, MIPSInstr_Mfhi(tHi));
- addInstr(env, MIPSInstr_Mflo(tLo));
- *rHi = tHi;
- *rLo = tLo;
- return;
- }
-
default:
break;
}
return;
}
- case Iop_DivModS64to32:
- case Iop_DivModU64to32: {
- HReg r_sHi, r_sLo;
- HReg tLo = newVRegI(env);
- HReg tHi = newVRegI(env);
- Bool syned = toBool(op_binop == Iop_DivModS64to32);
- HReg r_srcR = iselWordExpr_R(env, e->Iex.Binop.arg2);
-
- iselInt64Expr(&r_sHi, &r_sLo, env, e->Iex.Binop.arg1);
- addInstr(env, MIPSInstr_Div(syned, True, r_sLo, r_srcR));
- addInstr(env, MIPSInstr_Mfhi(tHi));
- addInstr(env, MIPSInstr_Mflo(tLo));
- *rHi = tHi;
- *rLo = tLo;
-
- return;
- }
case Iop_DivModU32to32:
case Iop_DivModS32to32: {
{ DEFOP(Iop_DivS32E, UNDEF_ALL), .s390x = 0, .amd64 = 0, .x86 = 0, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 0 },
// On s390 the DivMod operations always appear in a certain context
// So they cannot be tested in isolation on that platform.
- { DEFOP(Iop_DivModU64to32, UNDEF_ALL), .s390x = 0, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 1, .mips64 = 1 },
- { DEFOP(Iop_DivModS64to32, UNDEF_ALL), .s390x = 0, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 1, .mips64 = 1 },
+ { DEFOP(Iop_DivModU64to32, UNDEF_ALL), .s390x = 0, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 0 },
+ { DEFOP(Iop_DivModS64to32, UNDEF_ALL), .s390x = 0, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 0 },
{ DEFOP(Iop_DivModU32to32, UNDEF_ALL), .s390x = 0, .amd64 = 0, .x86 = 0, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 1, .mips64 = 1 },
{ DEFOP(Iop_DivModS32to32, UNDEF_ALL), .s390x = 0, .amd64 = 0, .x86 = 0, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 1, .mips64 = 1 },
- { DEFOP(Iop_DivModU128to64, UNDEF_ALL), .s390x = 0, .amd64 = 1, .x86 = 0, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 1 }, // mips asserts
- { DEFOP(Iop_DivModS128to64, UNDEF_ALL), .s390x = 0, .amd64 = 1, .x86 = 0, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 1 }, // mips asserts
+ { DEFOP(Iop_DivModU128to64, UNDEF_ALL), .s390x = 0, .amd64 = 1, .x86 = 0, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 0 }, // mips asserts
+ { DEFOP(Iop_DivModS128to64, UNDEF_ALL), .s390x = 0, .amd64 = 1, .x86 = 0, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 0 }, // mips asserts
{ DEFOP(Iop_DivModS64to64, UNDEF_ALL), .s390x = 0, .amd64 = 0, .x86 = 0, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 1 }, // mips asserts
{ DEFOP(Iop_DivModU64to64, UNDEF_ALL), .s390x = 0, .amd64 = 0, .x86 = 0, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 1 }, // mips asserts
{ DEFOP(Iop_8Uto16, UNDEF_ZEXT), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },