void LIRGeneratorPPC::lowerUMod(MMod *mod) { MDefinition *lhs = mod->getOperand(0); MDefinition *rhs = mod->getOperand(1); LUMod *lir = new(alloc()) LUMod; lir->setOperand(0, useRegister(lhs)); lir->setOperand(1, useRegister(rhs)); if (mod->fallible()) assignSnapshot(lir, Bailout_DoubleOutput); define(lir, mod); }
bool LIRGeneratorARM::lowerUMod(MInstruction *mod) { MDefinition *lhs = mod->getOperand(0); MDefinition *rhs = mod->getOperand(1); if (hasIDIV()) { LUMod *lir = new LUMod; lir->setOperand(0, useRegister(lhs)); lir->setOperand(1, useRegister(rhs)); return define(lir, mod); } else { LSoftUDivOrMod *lir = new LSoftUDivOrMod(useFixed(lhs, r0), useFixed(rhs, r1), tempFixed(r2), tempFixed(r3)); return defineFixed(lir, mod, LAllocation(AnyRegister(r1))); } }
void LIRGeneratorARM::lowerUMod(MMod* mod) { MDefinition* lhs = mod->getOperand(0); MDefinition* rhs = mod->getOperand(1); if (HasIDIV()) { LUMod* lir = new(alloc()) LUMod; lir->setOperand(0, useRegister(lhs)); lir->setOperand(1, useRegister(rhs)); if (mod->fallible()) assignSnapshot(lir, Bailout_DoubleOutput); define(lir, mod); } else { LSoftUDivOrMod* lir = new(alloc()) LSoftUDivOrMod(useFixedAtStart(lhs, r0), useFixedAtStart(rhs, r1), tempFixed(r0), tempFixed(r2), tempFixed(r3)); if (mod->fallible()) assignSnapshot(lir, Bailout_DoubleOutput); defineFixed(lir, mod, LAllocation(AnyRegister(r1))); } }