Bug 1350552: Set performCall for soft calls on ARM; r=luke

MozReview-Commit-ID: BCO2rxdyE9V

--HG--
extra : rebase_source : 7001f8b615d8f4491b41fe2e4869b8e599ba1535
This commit is contained in:
Benjamin Bouvier 2017-03-27 19:35:07 +02:00
Родитель d9d55e7e93
Коммит 3aa4029c3a
1 изменённых файлов: 22 добавлений и 12 удалений

Просмотреть файл

@ -351,6 +351,8 @@ LIRGeneratorARM::lowerDivI(MDiv* div)
return;
}
gen->setPerformsCall();
LSoftDivI* lir = new(alloc()) LSoftDivI(useFixedAtStart(div->lhs(), r0), useFixedAtStart(div->rhs(), r1),
tempFixed(r1), tempFixed(r2), tempFixed(r3));
if (div->fallible())
@ -403,6 +405,8 @@ LIRGeneratorARM::lowerModI(MMod* mod)
return;
}
gen->setPerformsCall();
LSoftModI* lir = new(alloc()) LSoftModI(useFixedAtStart(mod->lhs(), r0), useFixedAtStart(mod->rhs(), r1),
tempFixed(r0), tempFixed(r2), tempFixed(r3),
temp(LDefinition::GENERAL));
@ -558,13 +562,16 @@ LIRGeneratorARM::lowerUDiv(MDiv* div)
if (div->fallible())
assignSnapshot(lir, Bailout_DoubleOutput);
define(lir, div);
} else {
LSoftUDivOrMod* lir = new(alloc()) LSoftUDivOrMod(useFixedAtStart(lhs, r0), useFixedAtStart(rhs, r1),
tempFixed(r1), tempFixed(r2), tempFixed(r3));
if (div->fallible())
assignSnapshot(lir, Bailout_DoubleOutput);
defineFixed(lir, div, LAllocation(AnyRegister(r0)));
return;
}
gen->setPerformsCall();
LSoftUDivOrMod* lir = new(alloc()) LSoftUDivOrMod(useFixedAtStart(lhs, r0), useFixedAtStart(rhs, r1),
tempFixed(r1), tempFixed(r2), tempFixed(r3));
if (div->fallible())
assignSnapshot(lir, Bailout_DoubleOutput);
defineFixed(lir, div, LAllocation(AnyRegister(r0)));
}
void
@ -580,13 +587,16 @@ LIRGeneratorARM::lowerUMod(MMod* mod)
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)));
return;
}
gen->setPerformsCall();
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)));
}
void