mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
[JAEGER] Implement masm.loadFunctionPrivate(). r=dvander.
This commit is contained in:
parent
26f3429eb7
commit
e907f4fd5c
@ -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();
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user