Keep key register pinned longer when accessing elements of hoisted arguments objects, bug 683207. r=dvander

This commit is contained in:
Brian Hackett 2011-08-30 19:23:55 -07:00
Родитель 72c8ab7a3d
Коммит c50122f9ce
1 изменённых файлов: 3 добавлений и 3 удалений

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

@ -1816,9 +1816,6 @@ mjit::Compiler::jsop_getelem_args()
RegisterID dataReg = frame.allocReg(); RegisterID dataReg = frame.allocReg();
RegisterID typeReg = frame.allocReg(); RegisterID typeReg = frame.allocReg();
if (!key.isConstant())
frame.unpinReg(key.reg());
// Guard on nactual. // Guard on nactual.
if (!hoistedLength) { if (!hoistedLength) {
Address nactualAddr(JSFrameReg, StackFrame::offsetOfArgs()); Address nactualAddr(JSFrameReg, StackFrame::offsetOfArgs());
@ -1840,6 +1837,9 @@ mjit::Compiler::jsop_getelem_args()
masm.loadFrameActuals(outerScript->function(), actualsReg); masm.loadFrameActuals(outerScript->function(), actualsReg);
} }
if (!key.isConstant())
frame.unpinReg(key.reg());
if (key.isConstant()) { if (key.isConstant()) {
Address arg(actualsReg, key.index() * sizeof(Value)); Address arg(actualsReg, key.index() * sizeof(Value));
masm.loadValueAsComponents(arg, typeReg, dataReg); masm.loadValueAsComponents(arg, typeReg, dataReg);