diff options
Diffstat (limited to 'Source/JavaScriptCore/llint/LowLevelInterpreter.asm')
-rw-r--r-- | Source/JavaScriptCore/llint/LowLevelInterpreter.asm | 82 |
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: |