Line
Link Here
|
0 |
-- a/Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm |
0 |
++ b/Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm |
Lines 1579-1591
llintOpWithMetadata(op_put_by_id, OpPutById, macro (size, get, dispatch, metadat
Link Here
|
1579 |
loadp StructureChain::m_vector[t3], t3 |
1579 |
loadp StructureChain::m_vector[t3], t3 |
1580 |
assert(macro (ok) btpnz t3, ok end) |
1580 |
assert(macro (ok) btpnz t3, ok end) |
1581 |
|
1581 |
|
1582 |
loadp Structure::m_prototype[t2], t2 |
1582 |
loadp Structure::m_prototype + PayloadOffset[t2], t2 |
1583 |
btpz t2, .opPutByIdTransitionChainDone |
1583 |
btpz t2, .opPutByIdTransitionChainDone |
1584 |
.opPutByIdTransitionChainLoop: |
1584 |
.opPutByIdTransitionChainLoop: |
1585 |
loadp [t3], t1 |
1585 |
loadp [t3], t1 |
1586 |
bineq t1, JSCell::m_structureID[t2], .opPutByIdSlow |
1586 |
bineq t1, JSCell::m_structureID[t2], .opPutByIdSlow |
1587 |
addp 4, t3 |
1587 |
addp 4, t3 |
1588 |
loadp Structure::m_prototype[t1], t2 |
1588 |
loadp Structure::m_prototype + PayloadOffset[t1], t2 |
1589 |
btpnz t2, .opPutByIdTransitionChainLoop |
1589 |
btpnz t2, .opPutByIdTransitionChainLoop |
1590 |
|
1590 |
|
1591 |
.opPutByIdTransitionChainDone: |
1591 |
.opPutByIdTransitionChainDone: |
Lines 2251-2257
end)
Link Here
|
2251 |
|
2251 |
|
2252 |
|
2252 |
|
2253 |
op(llint_throw_from_slow_path_trampoline, macro() |
2253 |
op(llint_throw_from_slow_path_trampoline, macro() |
2254 |
loadp Callee[cfr], t1 |
2254 |
loadp Callee + PayloadOffset[cfr], t1 |
2255 |
convertCalleeToVM(t1) |
2255 |
convertCalleeToVM(t1) |
2256 |
copyCalleeSavesToVMEntryFrameCalleeSavesBuffer(t1, t2) |
2256 |
copyCalleeSavesToVMEntryFrameCalleeSavesBuffer(t1, t2) |
2257 |
|
2257 |
|
Lines 2260-2266
op(llint_throw_from_slow_path_trampoline, macro()
Link Here
|
2260 |
# When throwing from the interpreter (i.e. throwing from LLIntSlowPaths), so |
2260 |
# When throwing from the interpreter (i.e. throwing from LLIntSlowPaths), so |
2261 |
# the throw target is not necessarily interpreted code, we come to here. |
2261 |
# the throw target is not necessarily interpreted code, we come to here. |
2262 |
# This essentially emulates the JIT's throwing protocol. |
2262 |
# This essentially emulates the JIT's throwing protocol. |
2263 |
loadp Callee[cfr], t1 |
2263 |
loadp Callee + PayloadOffset[cfr], t1 |
2264 |
convertCalleeToVM(t1) |
2264 |
convertCalleeToVM(t1) |
2265 |
jmp VM::targetMachinePCForThrow[t1] |
2265 |
jmp VM::targetMachinePCForThrow[t1] |
2266 |
end) |
2266 |
end) |