Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (115140 => 115141)
--- trunk/Source/_javascript_Core/ChangeLog 2012-04-24 23:59:14 UTC (rev 115140)
+++ trunk/Source/_javascript_Core/ChangeLog 2012-04-25 00:06:04 UTC (rev 115141)
@@ -1,3 +1,70 @@
+2012-04-24 Gavin Barraclough <[email protected]>
+
+ Add explicit patchableBranchPtrWithPatch/patchableJump methods
+ https://bugs.webkit.org/show_bug.cgi?id=84498
+
+ Reviewed by Filip Pizlo.
+
+ Don't rely on inUninterruptedSequence to distinguish which jumps we need to be able to repatch.
+
+ * assembler/AbstractMacroAssembler.h:
+ (JSC::AbstractMacroAssembler::PatchableJump::PatchableJump):
+ (PatchableJump):
+ (JSC::AbstractMacroAssembler::PatchableJump::operator Jump&):
+ (AbstractMacroAssembler):
+ (JSC::AbstractMacroAssembler::AbstractMacroAssembler):
+ - Added PatchableJump type, removed inUninterruptedSequence.
+ * assembler/LinkBuffer.h:
+ (LinkBuffer):
+ (JSC::LinkBuffer::locationOf):
+ - Only allow the location to be taken of patchable branches
+ * assembler/MacroAssembler.h:
+ (MacroAssembler):
+ (JSC::MacroAssembler::patchableBranchPtrWithPatch):
+ (JSC::MacroAssembler::patchableJump):
+ (JSC::MacroAssembler::shouldBlind):
+ - Added default implementation of patchableBranchPtrWithPatch, patchableJump.
+ * assembler/MacroAssemblerARMv7.h:
+ (JSC::MacroAssemblerARMv7::MacroAssemblerARMv7):
+ (MacroAssemblerARMv7):
+ (JSC::MacroAssemblerARMv7::patchableBranchPtrWithPatch):
+ (JSC::MacroAssemblerARMv7::patchableJump):
+ (JSC::MacroAssemblerARMv7::jump):
+ (JSC::MacroAssemblerARMv7::makeBranch):
+ - Added ARMv7 implementation of patchableBranchPtrWithPatch, patchableJump.
+ * dfg/DFGCorrectableJumpPoint.h:
+ (DFG):
+ (JSC::DFG::CorrectableJumpPoint::switchToLateJump):
+ - Late jumps are PatchableJumps.
+ * dfg/DFGJITCompiler.cpp:
+ (JSC::DFG::JITCompiler::linkOSRExits):
+ - replace use of inUninterruptedSequence
+ * dfg/DFGJITCompiler.h:
+ (JSC::DFG::PropertyAccessRecord::PropertyAccessRecord):
+ (PropertyAccessRecord):
+ - replace use of inUninterruptedSequence
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::cachedGetById):
+ (JSC::DFG::SpeculativeJIT::cachedPutById):
+ - replace use of inUninterruptedSequence
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::cachedGetById):
+ (JSC::DFG::SpeculativeJIT::cachedPutById):
+ - replace use of inUninterruptedSequence
+ * jit/JIT.h:
+ (PropertyStubCompilationInfo):
+ - replace use of inUninterruptedSequence
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::beginUninterruptedSequence):
+ (JSC::JIT::endUninterruptedSequence):
+ - replace use of inUninterruptedSequence
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::compileGetByIdHotPath):
+ - replace use of inUninterruptedSequence
+ * jit/JITPropertyAccess32_64.cpp:
+ (JSC::JIT::compileGetByIdHotPath):
+ - replace use of inUninterruptedSequence
+
2012-04-24 Benjamin Poulain <[email protected]>
Generalize the single character optimization of r114072
Modified: trunk/Source/_javascript_Core/assembler/AbstractMacroAssembler.h (115140 => 115141)
--- trunk/Source/_javascript_Core/assembler/AbstractMacroAssembler.h 2012-04-24 23:59:14 UTC (rev 115140)
+++ trunk/Source/_javascript_Core/assembler/AbstractMacroAssembler.h 2012-04-25 00:06:04 UTC (rev 115141)
@@ -497,6 +497,21 @@
#endif
};
+ struct PatchableJump {
+ PatchableJump()
+ {
+ }
+
+ explicit PatchableJump(Jump jump)
+ : m_jump(jump)
+ {
+ }
+
+ operator Jump&() { return m_jump; }
+
+ Jump m_jump;
+ };
+
// JumpList:
//
// A JumpList is a set of Jump objects.
@@ -573,28 +588,16 @@
return reinterpret_cast<ptrdiff_t>(b.executableAddress()) - reinterpret_cast<ptrdiff_t>(a.executableAddress());
}
- void beginUninterruptedSequence() { m_inUninterruptedSequence = true; }
- void endUninterruptedSequence() { m_inUninterruptedSequence = false; }
-
unsigned debugOffset() { return m_assembler.debugOffset(); }
protected:
AbstractMacroAssembler()
- : m_inUninterruptedSequence(false)
- , m_randomSource(cryptographicallyRandomNumber())
+ : m_randomSource(cryptographicallyRandomNumber())
{
}
AssemblerType m_assembler;
-
- bool inUninterruptedSequence()
- {
- return m_inUninterruptedSequence;
- }
-
- bool m_inUninterruptedSequence;
-
uint32_t random()
{
return m_randomSource.getUint32();
Modified: trunk/Source/_javascript_Core/assembler/LinkBuffer.h (115140 => 115141)
--- trunk/Source/_javascript_Core/assembler/LinkBuffer.h 2012-04-24 23:59:14 UTC (rev 115140)
+++ trunk/Source/_javascript_Core/assembler/LinkBuffer.h 2012-04-25 00:06:04 UTC (rev 115141)
@@ -63,6 +63,7 @@
typedef MacroAssemblerCodePtr CodePtr;
typedef MacroAssembler::Label Label;
typedef MacroAssembler::Jump Jump;
+ typedef MacroAssembler::PatchableJump PatchableJump;
typedef MacroAssembler::JumpList JumpList;
typedef MacroAssembler::Call Call;
typedef MacroAssembler::DataLabelCompact DataLabelCompact;
@@ -154,9 +155,9 @@
return CodeLocationNearCall(MacroAssembler::getLinkerAddress(code(), applyOffset(call.m_label)));
}
- CodeLocationLabel locationOf(Jump jump)
+ CodeLocationLabel locationOf(PatchableJump jump)
{
- return CodeLocationLabel(MacroAssembler::getLinkerAddress(code(), applyOffset(jump.m_label)));
+ return CodeLocationLabel(MacroAssembler::getLinkerAddress(code(), applyOffset(jump.m_jump.m_label)));
}
CodeLocationLabel locationOf(Label label)
Modified: trunk/Source/_javascript_Core/assembler/MacroAssembler.h (115140 => 115141)
--- trunk/Source/_javascript_Core/assembler/MacroAssembler.h 2012-04-24 23:59:14 UTC (rev 115140)
+++ trunk/Source/_javascript_Core/assembler/MacroAssembler.h 2012-04-25 00:06:04 UTC (rev 115141)
@@ -229,6 +229,18 @@
branchTestPtr(cond, reg).linkTo(target, this);
}
+#if !CPU(ARM_THUMB2)
+ PatchableJump patchableBranchPtrWithPatch(RelationalCondition cond, Address left, DataLabelPtr& dataLabel, TrustedImmPtr initialRightValue = TrustedImmPtr(0))
+ {
+ return PatchableJump(branchPtrWithPatch(cond, left, dataLabel, initialRightValue));
+ }
+
+ PatchableJump patchableJump()
+ {
+ return PatchableJump(jump());
+ }
+#endif
+
void jump(Label target)
{
jump().linkTo(target, this);
@@ -529,7 +541,6 @@
bool shouldBlind(ImmPtr imm)
{
- ASSERT(!inUninterruptedSequence());
#if !defined(NDEBUG)
UNUSED_PARAM(imm);
// Debug always blind all constants, if only so we know
@@ -636,7 +647,6 @@
#if ENABLE(JIT_CONSTANT_BLINDING)
bool shouldBlind(Imm32 imm)
{
- ASSERT(!inUninterruptedSequence());
#if !defined(NDEBUG)
UNUSED_PARAM(imm);
// Debug always blind all constants, if only so we know
Modified: trunk/Source/_javascript_Core/assembler/MacroAssemblerARMv7.h (115140 => 115141)
--- trunk/Source/_javascript_Core/assembler/MacroAssemblerARMv7.h 2012-04-24 23:59:14 UTC (rev 115140)
+++ trunk/Source/_javascript_Core/assembler/MacroAssemblerARMv7.h 2012-04-25 00:06:04 UTC (rev 115141)
@@ -45,6 +45,11 @@
inline ARMRegisters::FPSingleRegisterID fpTempRegisterAsSingle() { return ARMRegisters::asSingle(fpTempRegister); }
public:
+ MacroAssemblerARMv7()
+ : m_makeJumpPatchable(false)
+ {
+ }
+
typedef ARMv7Assembler::LinkRecord LinkRecord;
typedef ARMv7Assembler::JumpType JumpType;
typedef ARMv7Assembler::JumpLinkType JumpLinkType;
@@ -1599,6 +1604,22 @@
return branch32(cond, addressTempRegister, dataTempRegister);
}
+ PatchableJump patchableBranchPtrWithPatch(RelationalCondition cond, Address left, DataLabelPtr& dataLabel, TrustedImmPtr initialRightValue = TrustedImmPtr(0))
+ {
+ m_makeJumpPatchable = true;
+ Jump result = branchPtrWithPatch(cond, left, dataLabel, initialRightValue);
+ m_makeJumpPatchable = false;
+ return PatchableJump(result);
+ }
+
+ PatchableJump patchableJump()
+ {
+ m_makeJumpPatchable = true;
+ Jump result = jump();
+ m_makeJumpPatchable = false;
+ return PatchableJump(result);
+ }
+
ALWAYS_INLINE DataLabelPtr storePtrWithPatch(TrustedImmPtr initialValue, ImplicitAddress address)
{
DataLabelPtr label = moveWithPatch(initialValue, dataTempRegister);
@@ -1633,18 +1654,17 @@
}
protected:
-
ALWAYS_INLINE Jump jump()
{
moveFixedWidthEncoding(TrustedImm32(0), dataTempRegister);
- return Jump(m_assembler.bx(dataTempRegister), inUninterruptedSequence() ? ARMv7Assembler::JumpNoConditionFixedSize : ARMv7Assembler::JumpNoCondition);
+ return Jump(m_assembler.bx(dataTempRegister), m_makeJumpPatchable ? ARMv7Assembler::JumpNoConditionFixedSize : ARMv7Assembler::JumpNoCondition);
}
ALWAYS_INLINE Jump makeBranch(ARMv7Assembler::Condition cond)
{
m_assembler.it(cond, true, true);
moveFixedWidthEncoding(TrustedImm32(0), dataTempRegister);
- return Jump(m_assembler.bx(dataTempRegister), inUninterruptedSequence() ? ARMv7Assembler::JumpConditionFixedSize : ARMv7Assembler::JumpCondition, cond);
+ return Jump(m_assembler.bx(dataTempRegister), m_makeJumpPatchable ? ARMv7Assembler::JumpConditionFixedSize : ARMv7Assembler::JumpCondition, cond);
}
ALWAYS_INLINE Jump makeBranch(RelationalCondition cond) { return makeBranch(armV7Condition(cond)); }
ALWAYS_INLINE Jump makeBranch(ResultCondition cond) { return makeBranch(armV7Condition(cond)); }
@@ -1741,6 +1761,7 @@
ARMv7Assembler::relinkCall(call.dataLocation(), destination.executableAddress());
}
+ bool m_makeJumpPatchable;
};
} // namespace JSC
Modified: trunk/Source/_javascript_Core/dfg/DFGCorrectableJumpPoint.h (115140 => 115141)
--- trunk/Source/_javascript_Core/dfg/DFGCorrectableJumpPoint.h 2012-04-24 23:59:14 UTC (rev 115140)
+++ trunk/Source/_javascript_Core/dfg/DFGCorrectableJumpPoint.h 2012-04-25 00:06:04 UTC (rev 115141)
@@ -39,7 +39,7 @@
// Thus it goes through three states:
//
// 1) Label of unpatchable branch or jump (i.e. MacroAssembler::Jump).
-// 2) Label of patchable jump (i.e. MacroAssembler::Jump).
+// 2) Label of patchable jump (i.e. MacroAssembler::PatchableJump).
// 3) Corrected post-linking label of patchable jump (i.e. CodeLocationJump).
//
// The setting of state (1) corresponds to planting the in-line unpatchable
@@ -66,7 +66,7 @@
#endif
}
- void switchToLateJump(MacroAssembler::Jump check)
+ void switchToLateJump(MacroAssembler::PatchableJump check)
{
#ifndef NDEBUG
ASSERT(m_mode == InitialJump);
@@ -74,12 +74,12 @@
#endif
// Late jumps should only ever be real jumps.
#if CPU(ARM_THUMB2)
- ASSERT(check.m_type == ARMv7Assembler::JumpNoConditionFixedSize);
- ASSERT(check.m_condition == ARMv7Assembler::ConditionInvalid);
+ ASSERT(check.m_jump.m_type == ARMv7Assembler::JumpNoConditionFixedSize);
+ ASSERT(check.m_jump.m_condition == ARMv7Assembler::ConditionInvalid);
m_type = ARMv7Assembler::JumpNoConditionFixedSize;
m_condition = ARMv7Assembler::ConditionInvalid;
#endif
- m_codeOffset = check.m_label.m_offset;
+ m_codeOffset = check.m_jump.m_label.m_offset;
}
void correctInitialJump(LinkBuffer& linkBuffer)
Modified: trunk/Source/_javascript_Core/dfg/DFGJITCompiler.cpp (115140 => 115141)
--- trunk/Source/_javascript_Core/dfg/DFGJITCompiler.cpp 2012-04-24 23:59:14 UTC (rev 115140)
+++ trunk/Source/_javascript_Core/dfg/DFGJITCompiler.cpp 2012-04-25 00:06:04 UTC (rev 115141)
@@ -46,9 +46,7 @@
exit.m_check.initialJump().link(this);
jitAssertHasValidCallFrame();
store32(TrustedImm32(i), &globalData()->osrExitIndex);
- beginUninterruptedSequence();
- exit.m_check.switchToLateJump(jump());
- endUninterruptedSequence();
+ exit.m_check.switchToLateJump(patchableJump());
}
}
Modified: trunk/Source/_javascript_Core/dfg/DFGJITCompiler.h (115140 => 115141)
--- trunk/Source/_javascript_Core/dfg/DFGJITCompiler.h 2012-04-24 23:59:14 UTC (rev 115140)
+++ trunk/Source/_javascript_Core/dfg/DFGJITCompiler.h 2012-04-25 00:06:04 UTC (rev 115141)
@@ -130,9 +130,9 @@
enum RegisterMode { RegistersFlushed, RegistersInUse };
#if USE(JSVALUE64)
- PropertyAccessRecord(CodeOrigin codeOrigin, MacroAssembler::DataLabelPtr deltaCheckImmToCall, MacroAssembler::Call functionCall, MacroAssembler::Jump deltaCallToStructCheck, MacroAssembler::DataLabelCompact deltaCallToLoadOrStore, MacroAssembler::Label deltaCallToSlowCase, MacroAssembler::Label deltaCallToDone, int8_t baseGPR, int8_t valueGPR, int8_t scratchGPR, RegisterMode registerMode = RegistersInUse)
+ PropertyAccessRecord(CodeOrigin codeOrigin, MacroAssembler::DataLabelPtr deltaCheckImmToCall, MacroAssembler::Call functionCall, MacroAssembler::PatchableJump deltaCallToStructCheck, MacroAssembler::DataLabelCompact deltaCallToLoadOrStore, MacroAssembler::Label deltaCallToSlowCase, MacroAssembler::Label deltaCallToDone, int8_t baseGPR, int8_t valueGPR, int8_t scratchGPR, RegisterMode registerMode = RegistersInUse)
#elif USE(JSVALUE32_64)
- PropertyAccessRecord(CodeOrigin codeOrigin, MacroAssembler::DataLabelPtr deltaCheckImmToCall, MacroAssembler::Call functionCall, MacroAssembler::Jump deltaCallToStructCheck, MacroAssembler::DataLabelCompact deltaCallToTagLoadOrStore, MacroAssembler::DataLabelCompact deltaCallToPayloadLoadOrStore, MacroAssembler::Label deltaCallToSlowCase, MacroAssembler::Label deltaCallToDone, int8_t baseGPR, int8_t valueTagGPR, int8_t valueGPR, int8_t scratchGPR, RegisterMode registerMode = RegistersInUse)
+ PropertyAccessRecord(CodeOrigin codeOrigin, MacroAssembler::DataLabelPtr deltaCheckImmToCall, MacroAssembler::Call functionCall, MacroAssembler::PatchableJump deltaCallToStructCheck, MacroAssembler::DataLabelCompact deltaCallToTagLoadOrStore, MacroAssembler::DataLabelCompact deltaCallToPayloadLoadOrStore, MacroAssembler::Label deltaCallToSlowCase, MacroAssembler::Label deltaCallToDone, int8_t baseGPR, int8_t valueTagGPR, int8_t valueGPR, int8_t scratchGPR, RegisterMode registerMode = RegistersInUse)
#endif
: m_codeOrigin(codeOrigin)
, m_deltaCheckImmToCall(deltaCheckImmToCall)
@@ -159,7 +159,7 @@
CodeOrigin m_codeOrigin;
MacroAssembler::DataLabelPtr m_deltaCheckImmToCall;
MacroAssembler::Call m_functionCall;
- MacroAssembler::Jump m_deltaCallToStructCheck;
+ MacroAssembler::PatchableJump m_deltaCallToStructCheck;
#if USE(JSVALUE64)
MacroAssembler::DataLabelCompact m_deltaCallToLoadOrStore;
#elif USE(JSVALUE32_64)
Modified: trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT32_64.cpp (115140 => 115141)
--- trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT32_64.cpp 2012-04-24 23:59:14 UTC (rev 115140)
+++ trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT32_64.cpp 2012-04-25 00:06:04 UTC (rev 115141)
@@ -495,10 +495,8 @@
JITCompiler::Call SpeculativeJIT::cachedGetById(CodeOrigin codeOrigin, GPRReg baseTagGPROrNone, GPRReg basePayloadGPR, GPRReg resultTagGPR, GPRReg resultPayloadGPR, GPRReg scratchGPR, unsigned identifierNumber, JITCompiler::Jump slowPathTarget, SpillRegistersMode spillMode)
{
- m_jit.beginUninterruptedSequence();
JITCompiler::DataLabelPtr structureToCompare;
- JITCompiler::Jump structureCheck = m_jit.branchPtrWithPatch(JITCompiler::NotEqual, JITCompiler::Address(basePayloadGPR, JSCell::structureOffset()), structureToCompare, JITCompiler::TrustedImmPtr(reinterpret_cast<void*>(-1)));
- m_jit.endUninterruptedSequence();
+ JITCompiler::PatchableJump structureCheck = m_jit.patchableBranchPtrWithPatch(JITCompiler::NotEqual, JITCompiler::Address(basePayloadGPR, JSCell::structureOffset()), structureToCompare, JITCompiler::TrustedImmPtr(reinterpret_cast<void*>(-1)));
m_jit.loadPtr(JITCompiler::Address(basePayloadGPR, JSObject::offsetOfPropertyStorage()), resultPayloadGPR);
JITCompiler::DataLabelCompact tagLoadWithPatch = m_jit.load32WithCompactAddressOffsetPatch(JITCompiler::Address(resultPayloadGPR, OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.tag)), resultTagGPR);
@@ -506,7 +504,7 @@
JITCompiler::Jump done = m_jit.jump();
- structureCheck.link(&m_jit);
+ structureCheck.m_jump.link(&m_jit);
if (slowPathTarget.isSet())
slowPathTarget.link(&m_jit);
@@ -534,10 +532,8 @@
void SpeculativeJIT::cachedPutById(CodeOrigin codeOrigin, GPRReg basePayloadGPR, GPRReg valueTagGPR, GPRReg valuePayloadGPR, Edge valueUse, GPRReg scratchGPR, unsigned identifierNumber, PutKind putKind, JITCompiler::Jump slowPathTarget)
{
- m_jit.beginUninterruptedSequence();
JITCompiler::DataLabelPtr structureToCompare;
- JITCompiler::Jump structureCheck = m_jit.branchPtrWithPatch(JITCompiler::NotEqual, JITCompiler::Address(basePayloadGPR, JSCell::structureOffset()), structureToCompare, JITCompiler::TrustedImmPtr(reinterpret_cast<void*>(-1)));
- m_jit.endUninterruptedSequence();
+ JITCompiler::PatchableJump structureCheck = m_jit.patchableBranchPtrWithPatch(JITCompiler::NotEqual, JITCompiler::Address(basePayloadGPR, JSCell::structureOffset()), structureToCompare, JITCompiler::TrustedImmPtr(reinterpret_cast<void*>(-1)));
writeBarrier(basePayloadGPR, valueTagGPR, valueUse, WriteBarrierForPropertyAccess, scratchGPR);
@@ -547,7 +543,7 @@
JITCompiler::Jump done = m_jit.jump();
- structureCheck.link(&m_jit);
+ structureCheck.m_jump.link(&m_jit);
if (slowPathTarget.isSet())
slowPathTarget.link(&m_jit);
Modified: trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT64.cpp (115140 => 115141)
--- trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT64.cpp 2012-04-24 23:59:14 UTC (rev 115140)
+++ trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT64.cpp 2012-04-25 00:06:04 UTC (rev 115141)
@@ -480,14 +480,14 @@
JITCompiler::Call SpeculativeJIT::cachedGetById(CodeOrigin codeOrigin, GPRReg baseGPR, GPRReg resultGPR, GPRReg scratchGPR, unsigned identifierNumber, JITCompiler::Jump slowPathTarget, SpillRegistersMode spillMode)
{
JITCompiler::DataLabelPtr structureToCompare;
- JITCompiler::Jump structureCheck = m_jit.branchPtrWithPatch(JITCompiler::NotEqual, JITCompiler::Address(baseGPR, JSCell::structureOffset()), structureToCompare, JITCompiler::TrustedImmPtr(reinterpret_cast<void*>(-1)));
+ JITCompiler::PatchableJump structureCheck = m_jit.patchableBranchPtrWithPatch(JITCompiler::NotEqual, JITCompiler::Address(baseGPR, JSCell::structureOffset()), structureToCompare, JITCompiler::TrustedImmPtr(reinterpret_cast<void*>(-1)));
m_jit.loadPtr(JITCompiler::Address(baseGPR, JSObject::offsetOfPropertyStorage()), resultGPR);
JITCompiler::DataLabelCompact loadWithPatch = m_jit.loadPtrWithCompactAddressOffsetPatch(JITCompiler::Address(resultGPR, 0), resultGPR);
JITCompiler::Jump done = m_jit.jump();
- structureCheck.link(&m_jit);
+ structureCheck.m_jump.link(&m_jit);
if (slowPathTarget.isSet())
slowPathTarget.link(&m_jit);
@@ -516,7 +516,7 @@
{
JITCompiler::DataLabelPtr structureToCompare;
- JITCompiler::Jump structureCheck = m_jit.branchPtrWithPatch(JITCompiler::NotEqual, JITCompiler::Address(baseGPR, JSCell::structureOffset()), structureToCompare, JITCompiler::TrustedImmPtr(reinterpret_cast<void*>(-1)));
+ JITCompiler::PatchableJump structureCheck = m_jit.patchableBranchPtrWithPatch(JITCompiler::NotEqual, JITCompiler::Address(baseGPR, JSCell::structureOffset()), structureToCompare, JITCompiler::TrustedImmPtr(reinterpret_cast<void*>(-1)));
writeBarrier(baseGPR, valueGPR, valueUse, WriteBarrierForPropertyAccess, scratchGPR);
@@ -525,7 +525,7 @@
JITCompiler::Jump done = m_jit.jump();
- structureCheck.link(&m_jit);
+ structureCheck.m_jump.link(&m_jit);
if (slowPathTarget.isSet())
slowPathTarget.link(&m_jit);
Modified: trunk/Source/_javascript_Core/jit/JIT.h (115140 => 115141)
--- trunk/Source/_javascript_Core/jit/JIT.h 2012-04-24 23:59:14 UTC (rev 115140)
+++ trunk/Source/_javascript_Core/jit/JIT.h 2012-04-25 00:06:04 UTC (rev 115141)
@@ -156,7 +156,7 @@
MacroAssembler::Call callReturnLocation;
MacroAssembler::Label hotPathBegin;
MacroAssembler::DataLabelPtr getStructureToCompare;
- MacroAssembler::Jump getStructureCheck;
+ MacroAssembler::PatchableJump getStructureCheck;
#if USE(JSVALUE64)
MacroAssembler::DataLabelCompact getDisplacementLabel;
#else
@@ -187,9 +187,9 @@
PropertyStubCompilationInfo(PropertyStubGetById_T, unsigned bytecodeIndex, MacroAssembler::Label hotPathBegin,
#if USE(JSVALUE64)
- MacroAssembler::DataLabelPtr structureToCompare, MacroAssembler::Jump structureCheck, MacroAssembler::DataLabelCompact displacementLabel, MacroAssembler::Label putResult)
+ MacroAssembler::DataLabelPtr structureToCompare, MacroAssembler::PatchableJump structureCheck, MacroAssembler::DataLabelCompact displacementLabel, MacroAssembler::Label putResult)
#else
- MacroAssembler::DataLabelPtr structureToCompare, MacroAssembler::Jump structureCheck, MacroAssembler::DataLabelCompact displacementLabel1, MacroAssembler::DataLabelCompact displacementLabel2, MacroAssembler::Label putResult)
+ MacroAssembler::DataLabelPtr structureToCompare, MacroAssembler::PatchableJump structureCheck, MacroAssembler::DataLabelCompact displacementLabel1, MacroAssembler::DataLabelCompact displacementLabel2, MacroAssembler::Label putResult)
#endif
: m_type(GetById)
, bytecodeIndex(bytecodeIndex)
@@ -564,9 +564,9 @@
void endUninterruptedSequence(int, int, int);
#else
-#define BEGIN_UNINTERRUPTED_SEQUENCE(name) do { beginUninterruptedSequence(); } while (false)
-#define END_UNINTERRUPTED_SEQUENCE(name) do { endUninterruptedSequence(); } while (false)
-#define END_UNINTERRUPTED_SEQUENCE_FOR_PUT(name, dst) do { endUninterruptedSequence(); } while (false)
+#define BEGIN_UNINTERRUPTED_SEQUENCE(name)
+#define END_UNINTERRUPTED_SEQUENCE(name)
+#define END_UNINTERRUPTED_SEQUENCE_FOR_PUT(name, dst)
#endif
void emit_compareAndJump(OpcodeID, unsigned op1, unsigned op2, unsigned target, RelationalCondition);
Modified: trunk/Source/_javascript_Core/jit/JITInlineMethods.h (115140 => 115141)
--- trunk/Source/_javascript_Core/jit/JITInlineMethods.h 2012-04-24 23:59:14 UTC (rev 115140)
+++ trunk/Source/_javascript_Core/jit/JITInlineMethods.h 2012-04-25 00:06:04 UTC (rev 115141)
@@ -132,7 +132,6 @@
ALWAYS_INLINE void JIT::beginUninterruptedSequence(int insnSpace, int constSpace)
{
- JSInterfaceJIT::beginUninterruptedSequence();
#if CPU(ARM_TRADITIONAL)
#ifndef NDEBUG
// Ensure the label after the sequence can also fit
@@ -182,7 +181,6 @@
ASSERT(differenceBetween(m_uninterruptedInstructionSequenceBegin, label()) <= insnSpace);
ASSERT(sizeOfConstantPool() - m_uninterruptedConstantSequenceBegin <= constSpace);
#endif
- JSInterfaceJIT::endUninterruptedSequence();
}
#endif
Modified: trunk/Source/_javascript_Core/jit/JITPropertyAccess.cpp (115140 => 115141)
--- trunk/Source/_javascript_Core/jit/JITPropertyAccess.cpp 2012-04-24 23:59:14 UTC (rev 115140)
+++ trunk/Source/_javascript_Core/jit/JITPropertyAccess.cpp 2012-04-25 00:06:04 UTC (rev 115141)
@@ -369,7 +369,7 @@
Label hotPathBegin(this);
DataLabelPtr structureToCompare;
- Jump structureCheck = branchPtrWithPatch(NotEqual, Address(regT0, JSCell::structureOffset()), structureToCompare, TrustedImmPtr(reinterpret_cast<void*>(patchGetByIdDefaultStructure)));
+ PatchableJump structureCheck = patchableBranchPtrWithPatch(NotEqual, Address(regT0, JSCell::structureOffset()), structureToCompare, TrustedImmPtr(reinterpret_cast<void*>(patchGetByIdDefaultStructure)));
addSlowCase(structureCheck);
loadPtr(Address(regT0, JSObject::offsetOfPropertyStorage()), regT0);
Modified: trunk/Source/_javascript_Core/jit/JITPropertyAccess32_64.cpp (115140 => 115141)
--- trunk/Source/_javascript_Core/jit/JITPropertyAccess32_64.cpp 2012-04-24 23:59:14 UTC (rev 115140)
+++ trunk/Source/_javascript_Core/jit/JITPropertyAccess32_64.cpp 2012-04-25 00:06:04 UTC (rev 115141)
@@ -329,7 +329,7 @@
Label hotPathBegin(this);
DataLabelPtr structureToCompare;
- Jump structureCheck = branchPtrWithPatch(NotEqual, Address(regT0, JSCell::structureOffset()), structureToCompare, TrustedImmPtr(reinterpret_cast<void*>(patchGetByIdDefaultStructure)));
+ PatchableJump structureCheck = patchableBranchPtrWithPatch(NotEqual, Address(regT0, JSCell::structureOffset()), structureToCompare, TrustedImmPtr(reinterpret_cast<void*>(patchGetByIdDefaultStructure)));
addSlowCase(structureCheck);
loadPtr(Address(regT0, JSObject::offsetOfPropertyStorage()), regT2);