mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
[JAEGER] Clean up jsop_neg(). (575192, r=dvander)
This commit is contained in:
parent
c196c4cb42
commit
f6ffd74069
@ -410,7 +410,6 @@ class FrameState
|
|||||||
*/
|
*/
|
||||||
void forgetEverything();
|
void forgetEverything();
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Throw away the entire frame state, without syncing anything.
|
* Throw away the entire frame state, without syncing anything.
|
||||||
*/
|
*/
|
||||||
@ -527,10 +526,9 @@ class FrameState
|
|||||||
|
|
||||||
inline void addEscaping(uint32 local);
|
inline void addEscaping(uint32 local);
|
||||||
|
|
||||||
/* FIXME: Should be private: hack during FrameState redesign. */
|
|
||||||
inline void forgetReg(RegisterID reg);
|
|
||||||
private:
|
private:
|
||||||
inline RegisterID allocReg(FrameEntry *fe, RematInfo::RematType type, bool weak);
|
inline RegisterID allocReg(FrameEntry *fe, RematInfo::RematType type, bool weak);
|
||||||
|
inline void forgetReg(RegisterID reg);
|
||||||
RegisterID evictSomeReg(uint32 mask);
|
RegisterID evictSomeReg(uint32 mask);
|
||||||
void evictReg(RegisterID reg);
|
void evictReg(RegisterID reg);
|
||||||
inline FrameEntry *rawPush();
|
inline FrameEntry *rawPush();
|
||||||
|
@ -555,6 +555,7 @@ mjit::Compiler::jsop_binary(JSOp op, VoidStub stub)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const uint64 DoubleNegMask = 0x8000000000000000LLU;
|
static const uint64 DoubleNegMask = 0x8000000000000000LLU;
|
||||||
|
|
||||||
void
|
void
|
||||||
mjit::Compiler::jsop_neg()
|
mjit::Compiler::jsop_neg()
|
||||||
{
|
{
|
||||||
@ -570,12 +571,15 @@ mjit::Compiler::jsop_neg()
|
|||||||
|
|
||||||
JS_ASSERT(!fe->isConstant());
|
JS_ASSERT(!fe->isConstant());
|
||||||
|
|
||||||
/* Load type information into register. */
|
/*
|
||||||
|
* Load type information into register.
|
||||||
|
* TODO: Optimize code emission if types are known.
|
||||||
|
*/
|
||||||
MaybeRegisterID feTypeReg;
|
MaybeRegisterID feTypeReg;
|
||||||
//TODO: Optimize code emission if types are known.
|
|
||||||
if (!frame.shouldAvoidTypeRemat(fe)) {
|
if (!frame.shouldAvoidTypeRemat(fe)) {
|
||||||
/* Safe because only one type is loaded. */
|
/* Safe because only one type is loaded. */
|
||||||
feTypeReg.setReg(frame.tempRegForType(fe));
|
feTypeReg.setReg(frame.tempRegForType(fe));
|
||||||
|
|
||||||
/* Don't get clobbered by copyDataIntoReg(). */
|
/* Don't get clobbered by copyDataIntoReg(). */
|
||||||
frame.pinReg(feTypeReg.getReg());
|
frame.pinReg(feTypeReg.getReg());
|
||||||
}
|
}
|
||||||
@ -625,35 +629,9 @@ mjit::Compiler::jsop_neg()
|
|||||||
jmpIntRejoin.setJump(stubcc.masm.jump());
|
jmpIntRejoin.setJump(stubcc.masm.jump());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
frame.freeReg(reg);
|
||||||
if (feTypeReg.isSet())
|
if (feTypeReg.isSet())
|
||||||
frame.unpinReg(feTypeReg.getReg());
|
frame.unpinReg(feTypeReg.getReg());
|
||||||
|
|
||||||
/*
|
|
||||||
* :FIXME:
|
|
||||||
* copyDataIntoReg() acquires a register, but does not mark
|
|
||||||
* regstate[reg].fe, since the register does not reflect
|
|
||||||
* the state of the FrameEntry. But the freeRegs variable
|
|
||||||
* is updated to reflect that the register is allocated.
|
|
||||||
*
|
|
||||||
* assertValidRegisterState() walks over each FrameEntry in
|
|
||||||
* the tracker and collects the registers that are bound
|
|
||||||
* to a FrameEntry. Since the register acquired by
|
|
||||||
* copyDataIntoReg() is not bound to a FrameEntry, it is
|
|
||||||
* not counted in checkedFreeRegs.
|
|
||||||
*
|
|
||||||
* assertValidRegisterState() then asserts that
|
|
||||||
* checkedFreeRegs == freeRegs and fails. In summary,
|
|
||||||
* copyDataIntoReg() is only useful to mean "get a return type",
|
|
||||||
* which only works if pushUntypedPayload() is used on
|
|
||||||
* the inline path, which is not the case here.
|
|
||||||
*
|
|
||||||
* forgetReg() is thus exported for use here as a quick hack.
|
|
||||||
*
|
|
||||||
* Since this function is being integrated to serve as
|
|
||||||
* example code during FrameState redesign, this comment is left
|
|
||||||
* to point out more path merging issues.
|
|
||||||
*/
|
|
||||||
frame.forgetReg(reg);
|
|
||||||
|
|
||||||
stubcc.leave();
|
stubcc.leave();
|
||||||
stubcc.call(stubs::Neg);
|
stubcc.call(stubs::Neg);
|
||||||
|
Loading…
Reference in New Issue
Block a user