Skip to content

Commit

Permalink
Merge r173886 - [CLoop] - Fix CLoop on the 32-bit Big-Endians
Browse files Browse the repository at this point in the history
https://bugs.webkit.org/show_bug.cgi?id=137020

Patch by Tomas Popela <tpopela@redhat.com> on 2014-09-23
Reviewed by Mark Lam.

* llint/LowLevelInterpreter.asm:
* llint/LowLevelInterpreter32_64.asm:
  • Loading branch information
tpopela authored and carlosgcampos committed Mar 7, 2016
1 parent b2cf851 commit 285bf02
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 21 deletions.
10 changes: 10 additions & 0 deletions Source/JavaScriptCore/ChangeLog
@@ -1,3 +1,13 @@
2014-09-23 Tomas Popela <tpopela@redhat.com>

[CLoop] - Fix CLoop on the 32-bit Big-Endians
https://bugs.webkit.org/show_bug.cgi?id=137020

Reviewed by Mark Lam.

* llint/LowLevelInterpreter.asm:
* llint/LowLevelInterpreter32_64.asm:

2015-12-07 Alberto Garcia <berto@igalia.com>

Crashes on PPC64 due to mprotect() on address not aligned to the page size
Expand Down
4 changes: 2 additions & 2 deletions Source/JavaScriptCore/llint/LLIntSlowPaths.cpp
Expand Up @@ -1354,7 +1354,7 @@ LLINT_SLOW_PATH_DECL(slow_path_get_from_scope)
CodeBlock* codeBlock = exec->codeBlock();
ConcurrentJITLocker locker(codeBlock->m_lock);
pc[5].u.structure.set(exec->vm(), codeBlock->ownerExecutable(), scope->structure());
pc[6].u.operand = slot.cachedOffset();
pc[6].u.pointer = reinterpret_cast<void*>(slot.cachedOffset());
}
}

Expand All @@ -1381,7 +1381,7 @@ LLINT_SLOW_PATH_DECL(slow_path_put_to_scope)
if (slot.isCacheable() && slot.base() == scope && scope->structure()->propertyAccessesAreCacheable()) {
ConcurrentJITLocker locker(codeBlock->m_lock);
pc[5].u.structure.set(exec->vm(), codeBlock->ownerExecutable(), scope->structure());
pc[6].u.operand = slot.cachedOffset();
pc[6].u.pointer = reinterpret_cast<void*>(slot.cachedOffset());
}
}

Expand Down
12 changes: 10 additions & 2 deletions Source/JavaScriptCore/llint/LowLevelInterpreter.asm
Expand Up @@ -299,13 +299,21 @@ macro assertNotConstant(index)
end

macro functionForCallCodeBlockGetter(targetRegister)
loadp Callee[cfr], targetRegister
if JSVALUE64
loadp Callee[cfr], targetRegister
else
loadp Callee + PayloadOffset[cfr], targetRegister
end
loadp JSFunction::m_executable[targetRegister], targetRegister
loadp FunctionExecutable::m_codeBlockForCall[targetRegister], targetRegister
end

macro functionForConstructCodeBlockGetter(targetRegister)
loadp Callee[cfr], targetRegister
if JSVALUE64
loadp Callee[cfr], targetRegister
else
loadp Callee + PayloadOffset[cfr], targetRegister
end
loadp JSFunction::m_executable[targetRegister], targetRegister
loadp FunctionExecutable::m_codeBlockForConstruct[targetRegister], targetRegister
end
Expand Down
26 changes: 13 additions & 13 deletions Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm
Expand Up @@ -321,7 +321,7 @@ macro doCallToJavaScript(makeCall, doReturn)

.calleeFramePopped:
loadp Callee[cfr], temp3 # VM.topCallFrame
loadp ScopeChain[cfr], temp4
loadp ScopeChain + PayloadOffset[cfr], temp4
storep temp4, [temp3]

doReturn(extraStackSpace)
Expand Down Expand Up @@ -598,7 +598,7 @@ end


macro branchIfException(label)
loadp ScopeChain[cfr], t3
loadp ScopeChain + PayloadOffset[cfr], t3
andp MarkedBlockMask, t3
loadp MarkedBlock::m_weakSet + WeakSet::m_vm[t3], t3
bieq VM::m_exception + TagOffset[t3], EmptyValueTag, .noException
Expand Down Expand Up @@ -2002,7 +2002,7 @@ _llint_op_next_pname:
loadi 20[PC], t2
loadi PayloadOffset[cfr, t2, 8], t2
loadp JSPropertyNameIterator::m_jsStrings[t2], t3
loadi [t3, t0, 8], t3
loadi PayloadOffset[t3, t0, 8], t3
addi 1, t0
storei t0, PayloadOffset[cfr, t1, 8]
loadi 4[PC], t1
Expand Down Expand Up @@ -2039,7 +2039,7 @@ _llint_op_catch:
# the interpreter's throw trampoline (see _llint_throw_trampoline).
# The throwing code must have known that we were throwing to the interpreter,
# and have set VM::targetInterpreterPCForThrow.
loadp ScopeChain[cfr], t3
loadp ScopeChain + PayloadOffset[cfr], t3
andp MarkedBlockMask, t3
loadp MarkedBlock::m_weakSet + WeakSet::m_vm[t3], t3
loadp VM::callFrameForThrow[t3], cfr
Expand Down Expand Up @@ -2135,7 +2135,7 @@ macro nativeCallTrampoline(executableOffsetToFunction)
move t0, cfr
call executableOffsetToFunction[t1]
addp 16 - 4, sp
loadp ScopeChain[cfr], t3
loadp ScopeChain + PayloadOffset[cfr], t3
andp MarkedBlockMask, t3
loadp MarkedBlock::m_weakSet + WeakSet::m_vm[t3], t3
elsif ARM or ARMv7 or ARMv7_TRADITIONAL or MIPS or SH4
Expand All @@ -2159,7 +2159,7 @@ macro nativeCallTrampoline(executableOffsetToFunction)
andp MarkedBlockMask, t3
loadp MarkedBlock::m_weakSet + WeakSet::m_vm[t3], t3
elsif C_LOOP
loadp ScopeChain[cfr], t3
loadp ScopeChain + PayloadOffset[cfr], t3
andp MarkedBlockMask, t3
loadp MarkedBlock::m_weakSet + WeakSet::m_vm[t3], t3
storep cfr, VM::topCallFrame[t3]
Expand All @@ -2172,7 +2172,7 @@ macro nativeCallTrampoline(executableOffsetToFunction)
move t2, cfr
cloopCallNative executableOffsetToFunction[t1]
restoreReturnAddressBeforeReturn(t3)
loadp ScopeChain[cfr], t3
loadp ScopeChain + PayloadOffset[cfr], t3
andp MarkedBlockMask, t3
loadp MarkedBlock::m_weakSet + WeakSet::m_vm[t3], t3
else
Expand Down Expand Up @@ -2212,7 +2212,7 @@ macro resolveScope()
addi 1, t2

.resolveScopeAfterActivationCheck:
loadp ScopeChain[cfr], t0
loadp ScopeChain + PayloadOffset[cfr], t0
btiz t2, .resolveScopeLoopEnd

.resolveScopeLoop:
Expand Down Expand Up @@ -2271,13 +2271,13 @@ _llint_op_resolve_scope:

macro loadWithStructureCheck(operand, slowPath)
loadisFromInstruction(operand, t0)
loadp [cfr, t0, 8], t0
loadp PayloadOffset[cfr, t0, 8], t0
loadpFromInstruction(5, t1)
bpneq JSCell::m_structure[t0], t1, slowPath
end

macro getProperty()
loadisFromInstruction(6, t3)
loadpFromInstruction(6, t3)
loadPropertyAtVariableOffset(t3, t0, t1, t2)
valueProfile(t1, t2, 28, t0)
loadisFromInstruction(1, t0)
Expand All @@ -2297,7 +2297,7 @@ end

macro getClosureVar()
loadp JSVariableObject::m_registers[t0], t0
loadisFromInstruction(6, t3)
loadpFromInstruction(6, t3)
loadp TagOffset[t0, t3, 8], t1
loadp PayloadOffset[t0, t3, 8], t2
valueProfile(t1, t2, 28, t0)
Expand Down Expand Up @@ -2356,7 +2356,7 @@ _llint_op_get_from_scope:
macro putProperty()
loadisFromInstruction(3, t1)
loadConstantOrVariable(t1, t2, t3)
loadisFromInstruction(6, t1)
loadpFromInstruction(6, t1)
storePropertyAtVariableOffset(t1, t0, t2, t3)
end

Expand All @@ -2374,7 +2374,7 @@ macro putClosureVar()
loadisFromInstruction(3, t1)
loadConstantOrVariable(t1, t2, t3)
loadp JSVariableObject::m_registers[t0], t0
loadisFromInstruction(6, t1)
loadpFromInstruction(6, t1)
storei t2, TagOffset[t0, t1, 8]
storei t3, PayloadOffset[t0, t1, 8]
end
Expand Down
8 changes: 4 additions & 4 deletions Source/JavaScriptCore/llint/LowLevelInterpreter64.asm
Expand Up @@ -2047,7 +2047,7 @@ macro loadWithStructureCheck(operand, slowPath)
end

macro getProperty()
loadisFromInstruction(6, t1)
loadpFromInstruction(6, t1)
loadPropertyAtVariableOffset(t1, t0, t2)
valueProfile(t2, 7, t0)
loadisFromInstruction(1, t0)
Expand All @@ -2064,7 +2064,7 @@ end

macro getClosureVar()
loadp JSVariableObject::m_registers[t0], t0
loadisFromInstruction(6, t1)
loadpFromInstruction(6, t1)
loadq [t0, t1, 8], t0
valueProfile(t0, 7, t1)
loadisFromInstruction(1, t1)
Expand Down Expand Up @@ -2121,7 +2121,7 @@ _llint_op_get_from_scope:
macro putProperty()
loadisFromInstruction(3, t1)
loadConstantOrVariable(t1, t2)
loadisFromInstruction(6, t1)
loadpFromInstruction(6, t1)
storePropertyAtVariableOffset(t1, t0, t2)
end

Expand All @@ -2138,7 +2138,7 @@ macro putClosureVar()
loadisFromInstruction(3, t1)
loadConstantOrVariable(t1, t2)
loadp JSVariableObject::m_registers[t0], t0
loadisFromInstruction(6, t1)
loadpFromInstruction(6, t1)
storeq t2, [t0, t1, 8]
end

Expand Down

0 comments on commit 285bf02

Please sign in to comment.