[JAEGER] Implement masm.loadFunctionPrivate(). r=dvander.

This commit is contained in:
Sean Stangl 2010-07-23 00:07:35 -07:00
parent 26f3429eb7
commit e907f4fd5c
3 changed files with 12 additions and 14 deletions

View File

@ -1609,9 +1609,7 @@ mjit::Compiler::inlineCallHelper(uint32 argc, bool callingNew)
stubcc.call(callingNew ? stubs::SlowNew : stubs::SlowCall);
/* Get function private pointer. */
Address funPrivate(data, offsetof(JSObject, fslots) +
JSSLOT_PRIVATE * sizeof(Value));
masm.loadPayload(funPrivate, data);
masm.loadFunctionPrivate(data, data);
frame.takeReg(data);
RegisterID t0 = frame.allocReg();
@ -2131,8 +2129,7 @@ mjit::Compiler::jsop_callprop_str(JSAtom *atom)
Jump notFun1 = frame.testObject(Assembler::NotEqual, funFe);
Jump notFun2 = masm.testFunction(Assembler::NotEqual, funReg);
Address fslot(funReg, offsetof(JSObject, fslots) + JSSLOT_PRIVATE * sizeof(Value));
masm.loadPayload(fslot, temp);
masm.loadFunctionPrivate(funReg, temp);
masm.load16(Address(temp, offsetof(JSFunction, flags)), temp);
masm.and32(Imm32(JSFUN_THISP_STRING), temp);
Jump noPrim = masm.branchTest32(Assembler::Zero, temp, temp);
@ -2696,8 +2693,7 @@ mjit::Compiler::iterNext()
stubcc.linkExit(notFast, Uses(1));
/* Get private from iter obj. :FIXME: X64 */
Address privSlot(reg, offsetof(JSObject, fslots) + sizeof(Value) * JSSLOT_PRIVATE);
masm.loadPayload(privSlot, T1);
masm.loadFunctionPrivate(reg, T1);
RegisterID T3 = frame.allocReg();
RegisterID T4 = frame.allocReg();
@ -2753,8 +2749,7 @@ mjit::Compiler::iterMore()
stubcc.linkExit(notFast, Uses(1));
/* Get private from iter obj. :FIXME: X64 */
Address privSlot(reg, offsetof(JSObject, fslots) + sizeof(Value) * JSSLOT_PRIVATE);
masm.loadPayload(privSlot, T1);
masm.loadFunctionPrivate(reg, T1);
/* Get props_cursor, test */
RegisterID T2 = frame.allocReg();

View File

@ -345,9 +345,7 @@ class SetPropCompiler : public PICStubCompiler
uint16 slot = uint16(sprop->shortid);
/* Guard that the call object has a frame. */
Address privSlot(pic.objReg, offsetof(JSObject, fslots) +
JSSLOT_PRIVATE * sizeof(Value));
masm.load32(privSlot, pic.shapeReg);
masm.loadFunctionPrivate(pic.objReg, pic.shapeReg);
Jump escapedFrame = masm.branchTestPtr(Assembler::Zero, pic.shapeReg, pic.shapeReg);
{
@ -1303,8 +1301,7 @@ class ScopeNameCompiler : public PICStubCompiler
Jump finalShape = masm.branch32(Assembler::NotEqual, pic.shapeReg, Imm32(holder->shape()));
/* Get callobj's stack frame. */
Address privSlot(pic.objReg, offsetof(JSObject, fslots) + sizeof(Value) * JSSLOT_PRIVATE);
masm.load32(privSlot, pic.shapeReg);
masm.loadFunctionPrivate(pic.objReg, pic.shapeReg);
uint16 slot = uint16(sprop->shortid);

View File

@ -176,6 +176,12 @@ class Assembler : public BaseAssembler
store32(Imm32(jv.s.payload.u32), payloadOf(address));
}
void loadFunctionPrivate(RegisterID base, RegisterID to) {
Address privSlot(base, offsetof(JSObject, fslots) +
JSSLOT_PRIVATE * sizeof(Value));
loadPtr(privSlot, to);
}
Jump testNull(Assembler::Condition cond, RegisterID reg) {
return branch32(cond, reg, ImmTag(JSVAL_TAG_NULL));
}