summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/llint/LowLevelInterpreter.asm
diff options
context:
space:
mode:
Diffstat (limited to 'Source/JavaScriptCore/llint/LowLevelInterpreter.asm')
-rw-r--r--Source/JavaScriptCore/llint/LowLevelInterpreter.asm82
1 files changed, 39 insertions, 43 deletions
diff --git a/Source/JavaScriptCore/llint/LowLevelInterpreter.asm b/Source/JavaScriptCore/llint/LowLevelInterpreter.asm
index 409ec4158..ba5b67df4 100644
--- a/Source/JavaScriptCore/llint/LowLevelInterpreter.asm
+++ b/Source/JavaScriptCore/llint/LowLevelInterpreter.asm
@@ -96,7 +96,7 @@ const SlowPutArrayStorageShape = 30
# Type constants.
const StringType = 5
-const ObjectType = 13
+const ObjectType = 17
# Type flags constants.
const MasqueradesAsUndefined = 1
@@ -151,11 +151,10 @@ else
end
# This must match wtf/Vector.h
+const VectorSizeOffset = 0
if JSVALUE64
- const VectorSizeOffset = 0
const VectorBufferOffset = 8
else
- const VectorSizeOffset = 0
const VectorBufferOffset = 4
end
@@ -344,9 +343,9 @@ macro functionInitialization(profileArgSkip)
addp t2, t3
.argumentProfileLoop:
if JSVALUE64
- loadp ThisArgumentOffset + 8 - profileArgSkip * 8[cfr, t0], t2
+ loadq ThisArgumentOffset + 8 - profileArgSkip * 8[cfr, t0], t2
subp sizeof ValueProfile, t3
- storep t2, profileArgSkip * sizeof ValueProfile + ValueProfile::m_buckets[t3]
+ storeq t2, profileArgSkip * sizeof ValueProfile + ValueProfile::m_buckets[t3]
else
loadi ThisArgumentOffset + TagOffset + 8 - profileArgSkip * 8[cfr, t0], t2
subp sizeof ValueProfile, t3
@@ -546,13 +545,13 @@ macro getPutToBaseOperationField(scratch, scratch1, fieldOffset, fieldGetter)
end
macro moveJSValueFromRegisterWithoutProfiling(value, destBuffer, destOffsetReg)
- storep value, [destBuffer, destOffsetReg, 8]
+ storeq value, [destBuffer, destOffsetReg, 8]
end
macro moveJSValueFromRegistersWithoutProfiling(tag, payload, destBuffer, destOffsetReg)
- storep tag, TagOffset[destBuffer, destOffsetReg, 8]
- storep payload, PayloadOffset[destBuffer, destOffsetReg, 8]
+ storei tag, TagOffset[destBuffer, destOffsetReg, 8]
+ storei payload, PayloadOffset[destBuffer, destOffsetReg, 8]
end
macro putToBaseVariableBody(variableOffset, scratch1, scratch2, scratch3)
@@ -613,15 +612,15 @@ end
macro moveJSValue(sourceBuffer, sourceOffsetReg, destBuffer, destOffsetReg, profileOffset, scratchRegister)
if JSVALUE64
- loadp [sourceBuffer, sourceOffsetReg, 8], scratchRegister
- storep scratchRegister, [destBuffer, destOffsetReg, 8]
+ loadq [sourceBuffer, sourceOffsetReg, 8], scratchRegister
+ storeq scratchRegister, [destBuffer, destOffsetReg, 8]
loadpFromInstruction(profileOffset, destOffsetReg)
valueProfile(scratchRegister, destOffsetReg)
else
- loadp PayloadOffset[sourceBuffer, sourceOffsetReg, 8], scratchRegister
- storep scratchRegister, PayloadOffset[destBuffer, destOffsetReg, 8]
- loadp TagOffset[sourceBuffer, sourceOffsetReg, 8], sourceOffsetReg
- storep sourceOffsetReg, TagOffset[destBuffer, destOffsetReg, 8]
+ loadi PayloadOffset[sourceBuffer, sourceOffsetReg, 8], scratchRegister
+ storei scratchRegister, PayloadOffset[destBuffer, destOffsetReg, 8]
+ loadi TagOffset[sourceBuffer, sourceOffsetReg, 8], sourceOffsetReg
+ storei sourceOffsetReg, TagOffset[destBuffer, destOffsetReg, 8]
loadpFromInstruction(profileOffset, destOffsetReg)
valueProfile(sourceOffsetReg, scratchRegister, destOffsetReg)
end
@@ -629,29 +628,29 @@ end
macro moveJSValueFromSlot(slot, destBuffer, destOffsetReg, profileOffset, scratchRegister)
if JSVALUE64
- loadp [slot], scratchRegister
- storep scratchRegister, [destBuffer, destOffsetReg, 8]
+ loadq [slot], scratchRegister
+ storeq scratchRegister, [destBuffer, destOffsetReg, 8]
loadpFromInstruction(profileOffset, destOffsetReg)
valueProfile(scratchRegister, destOffsetReg)
else
- loadp PayloadOffset[slot], scratchRegister
- storep scratchRegister, PayloadOffset[destBuffer, destOffsetReg, 8]
- loadp TagOffset[slot], slot
- storep slot, TagOffset[destBuffer, destOffsetReg, 8]
+ loadi PayloadOffset[slot], scratchRegister
+ storei scratchRegister, PayloadOffset[destBuffer, destOffsetReg, 8]
+ loadi TagOffset[slot], slot
+ storei slot, TagOffset[destBuffer, destOffsetReg, 8]
loadpFromInstruction(profileOffset, destOffsetReg)
valueProfile(slot, scratchRegister, destOffsetReg)
end
end
macro moveJSValueFromRegister(value, destBuffer, destOffsetReg, profileOffset)
- storep value, [destBuffer, destOffsetReg, 8]
+ storeq value, [destBuffer, destOffsetReg, 8]
loadpFromInstruction(profileOffset, destOffsetReg)
valueProfile(value, destOffsetReg)
end
macro moveJSValueFromRegisters(tag, payload, destBuffer, destOffsetReg, profileOffset)
- storep tag, TagOffset[destBuffer, destOffsetReg, 8]
- storep payload, PayloadOffset[destBuffer, destOffsetReg, 8]
+ storei tag, TagOffset[destBuffer, destOffsetReg, 8]
+ storei payload, PayloadOffset[destBuffer, destOffsetReg, 8]
loadpFromInstruction(profileOffset, destOffsetReg)
valueProfile(tag, payload, destOffsetReg)
end
@@ -662,7 +661,7 @@ _llint_op_resolve_global_property:
loadp CodeBlock[cfr], t1
loadp CodeBlock::m_globalObject[t1], t1
loadp ResolveOperation::m_structure[t0], t2
- bpneq JSCell::m_structure[t1], t2, ._llint_op_resolve
+ bpneq JSCell::m_structure[t1], t2, .llint_op_resolve_local
loadis ResolveOperation::m_offset[t0], t0
if JSVALUE64
loadPropertyAtVariableOffsetKnownNotInline(t0, t1, t2)
@@ -746,8 +745,8 @@ _llint_op_resolve_scoped_var_with_top_scope_check:
moveJSValue(t1, t2, cfr, t3, 4, t0)
dispatch(5)
-._llint_op_resolve:
_llint_op_resolve:
+.llint_op_resolve_local:
traceExecution()
getResolveOperation(3, t0, t1)
btpz t0, .noInstructions
@@ -781,7 +780,7 @@ _llint_op_resolve_base_to_global:
dispatch(7)
_llint_op_resolve_base_to_global_dynamic:
- jmp ._llint_resolve_base
+ jmp _llint_op_resolve_base
_llint_op_resolve_base_to_scope:
traceExecution()
@@ -828,7 +827,6 @@ _llint_op_resolve_base_to_scope_with_top_scope_check:
end
dispatch(7)
-._llint_resolve_base:
_llint_op_resolve_base:
traceExecution()
callSlowPath(_llint_slow_path_resolve_base)
@@ -888,10 +886,11 @@ macro interpretResolveWithBase(opcodeLength, slowPath)
# t1 now contains the index for the base register
bineq t2, ResolveOperationSetBaseToScope, .notSetBaseToScope
- storep t3, PayloadOffset[cfr, t1, 8]
if JSVALUE64
+ storeq t3, [cfr, t1, 8]
else
- storep CellTag, TagOffset[cfr, t1, 8]
+ storei t3, PayloadOffset[cfr, t1, 8]
+ storei CellTag, TagOffset[cfr, t1, 8]
end
jmp .haveSetBase
@@ -899,10 +898,10 @@ macro interpretResolveWithBase(opcodeLength, slowPath)
bineq t2, ResolveOperationSetBaseToUndefined, .notSetBaseToUndefined
if JSVALUE64
- storep ValueUndefined, PayloadOffset[cfr, t1, 8]
+ storeq ValueUndefined, [cfr, t1, 8]
else
- storep 0, PayloadOffset[cfr, t1, 8]
- storep UndefinedTag, TagOffset[cfr, t1, 8]
+ storei 0, PayloadOffset[cfr, t1, 8]
+ storei UndefinedTag, TagOffset[cfr, t1, 8]
end
jmp .haveSetBase
@@ -910,10 +909,11 @@ macro interpretResolveWithBase(opcodeLength, slowPath)
bineq t2, ResolveOperationSetBaseToGlobal, .slowPath
loadp JSCell::m_structure[t3], t2
loadp Structure::m_globalObject[t2], t2
- storep t2, PayloadOffset[cfr, t1, 8]
if JSVALUE64
+ storeq t2, [cfr, t1, 8]
else
- storep CellTag, TagOffset[cfr, t1, 8]
+ storei t2, PayloadOffset[cfr, t1, 8]
+ storei CellTag, TagOffset[cfr, t1, 8]
end
.haveSetBase:
@@ -1204,12 +1204,6 @@ _llint_op_strcat:
dispatch(4)
-_llint_op_method_check:
- traceExecution()
- # We ignore method checks and use normal get_by_id optimizations.
- dispatch(1)
-
-
_llint_op_get_pnames:
traceExecution()
callSlowPath(_llint_slow_path_get_pnames)
@@ -1240,10 +1234,10 @@ _llint_op_throw:
dispatch(2)
-_llint_op_throw_reference_error:
+_llint_op_throw_static_error:
traceExecution()
- callSlowPath(_llint_slow_path_throw_reference_error)
- dispatch(2)
+ callSlowPath(_llint_slow_path_throw_static_error)
+ dispatch(3)
_llint_op_profile_will_call:
@@ -1332,6 +1326,8 @@ _llint_op_put_by_id_replace:
_llint_op_put_by_id_transition:
notSupported()
+_llint_op_init_global_const_nop:
+ dispatch(5)
# Indicate the end of LLInt.
_llint_end: