diff options
Diffstat (limited to 'Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp')
-rw-r--r-- | Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp | 29 |
1 files changed, 12 insertions, 17 deletions
diff --git a/Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp b/Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp index b5c68086d..74b086a7c 100644 --- a/Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp +++ b/Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp @@ -30,7 +30,7 @@ #include "CodeBlock.h" #include "LinkBuffer.h" -#include "JSCInlines.h" +#include "Operations.h" namespace JSC { @@ -49,12 +49,12 @@ JITInlineCacheGenerator::JITInlineCacheGenerator(CodeBlock* codeBlock, CodeOrigi JITByIdGenerator::JITByIdGenerator( CodeBlock* codeBlock, CodeOrigin codeOrigin, const RegisterSet& usedRegisters, - JSValueRegs base, JSValueRegs value, SpillRegistersMode spillMode) + GPRReg callFrameRegister, JSValueRegs base, JSValueRegs value, bool registersFlushed) : JITInlineCacheGenerator(codeBlock, codeOrigin) , m_base(base) , m_value(value) { - m_stubInfo->patch.spillMode = spillMode; + m_stubInfo->patch.registersFlushed = registersFlushed; m_stubInfo->patch.usedRegisters = usedRegisters; // This is a convenience - in cases where the only registers you're using are base/value, @@ -62,6 +62,7 @@ JITByIdGenerator::JITByIdGenerator( m_stubInfo->patch.usedRegisters.set(base); m_stubInfo->patch.usedRegisters.set(value); + m_stubInfo->patch.callFrameRegister = static_cast<int8_t>(callFrameRegister); m_stubInfo->patch.baseGPR = static_cast<int8_t>(base.payloadGPR()); m_stubInfo->patch.valueGPR = static_cast<int8_t>(value.payloadGPR()); #if USE(JSVALUE32_64) @@ -101,23 +102,15 @@ void JITByIdGenerator::finalize(LinkBuffer& linkBuffer) void JITByIdGenerator::generateFastPathChecks(MacroAssembler& jit, GPRReg butterfly) { - m_structureCheck = jit.patchableBranch32WithPatch( + m_structureCheck = jit.patchableBranchPtrWithPatch( MacroAssembler::NotEqual, - MacroAssembler::Address(m_base.payloadGPR(), JSCell::structureIDOffset()), - m_structureImm, MacroAssembler::TrustedImm32(0)); + MacroAssembler::Address(m_base.payloadGPR(), JSCell::structureOffset()), + m_structureImm, MacroAssembler::TrustedImmPtr(reinterpret_cast<void*>(unusedPointer))); m_propertyStorageLoad = jit.convertibleLoadPtr( MacroAssembler::Address(m_base.payloadGPR(), JSObject::butterflyOffset()), butterfly); } -JITGetByIdGenerator::JITGetByIdGenerator( - CodeBlock* codeBlock, CodeOrigin codeOrigin, const RegisterSet& usedRegisters, - JSValueRegs base, JSValueRegs value, SpillRegistersMode spillMode) - : JITByIdGenerator(codeBlock, codeOrigin, usedRegisters, base, value, spillMode) -{ - RELEASE_ASSERT(base.payloadGPR() != value.tagGPR()); -} - void JITGetByIdGenerator::generateFastPath(MacroAssembler& jit) { generateFastPathChecks(jit, m_value.payloadGPR()); @@ -137,9 +130,11 @@ void JITGetByIdGenerator::generateFastPath(MacroAssembler& jit) JITPutByIdGenerator::JITPutByIdGenerator( CodeBlock* codeBlock, CodeOrigin codeOrigin, const RegisterSet& usedRegisters, - JSValueRegs base, JSValueRegs value, GPRReg scratch, SpillRegistersMode spillMode, - ECMAMode ecmaMode, PutKind putKind) - : JITByIdGenerator(codeBlock, codeOrigin, usedRegisters, base, value, spillMode) + GPRReg callFrameRegister, JSValueRegs base, JSValueRegs value, GPRReg scratch, + bool registersFlushed, ECMAMode ecmaMode, PutKind putKind) + : JITByIdGenerator( + codeBlock, codeOrigin, usedRegisters, callFrameRegister, base, value, + registersFlushed) , m_scratch(scratch) , m_ecmaMode(ecmaMode) , m_putKind(putKind) |