summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp')
-rw-r--r--Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp29
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)