Diff
Modified: releases/WebKitGTK/webkit-2.22/Source/_javascript_Core/ChangeLog (236175 => 236176)
--- releases/WebKitGTK/webkit-2.22/Source/_javascript_Core/ChangeLog 2018-09-19 12:33:56 UTC (rev 236175)
+++ releases/WebKitGTK/webkit-2.22/Source/_javascript_Core/ChangeLog 2018-09-19 12:34:00 UTC (rev 236176)
@@ -1,3 +1,20 @@
+2018-09-07 Yusuke Suzuki <[email protected]>
+
+ [JSC] Put .throwStackOverflow code after the fast path in LLInt doVMEntry
+ https://bugs.webkit.org/show_bug.cgi?id=189410
+
+ Reviewed by Mark Lam.
+
+ Put .throwStackOverflow code after the fast path in LLInt doVMEntry to
+ make doVMEntry code tight.
+
+ * llint/LLIntThunks.cpp:
+ (JSC::vmEntryToWasm): Deleted.
+ * llint/LLIntThunks.h:
+ (JSC::vmEntryToWasm):
+ * llint/LowLevelInterpreter32_64.asm:
+ * llint/LowLevelInterpreter64.asm:
+
2018-09-06 Yusuke Suzuki <[email protected]>
[WebAssembly] Optimize JS to Wasm call by removing Vector allocation
Modified: releases/WebKitGTK/webkit-2.22/Source/_javascript_Core/llint/LLIntThunks.cpp (236175 => 236176)
--- releases/WebKitGTK/webkit-2.22/Source/_javascript_Core/llint/LLIntThunks.cpp 2018-09-19 12:33:56 UTC (rev 236175)
+++ releases/WebKitGTK/webkit-2.22/Source/_javascript_Core/llint/LLIntThunks.cpp 2018-09-19 12:34:00 UTC (rev 236176)
@@ -42,12 +42,6 @@
namespace JSC {
-EncodedJSValue JS_EXPORT_PRIVATE vmEntryToWasm(void* code, VM* vm, ProtoCallFrame* frame)
-{
- code = retagCodePtr<WasmEntryPtrTag, JSEntryPtrTag>(code);
- return vmEntryToJavaScript(code, vm, frame);
-}
-
#if ENABLE(JIT)
namespace LLInt {
Modified: releases/WebKitGTK/webkit-2.22/Source/_javascript_Core/llint/LLIntThunks.h (236175 => 236176)
--- releases/WebKitGTK/webkit-2.22/Source/_javascript_Core/llint/LLIntThunks.h 2018-09-19 12:33:56 UTC (rev 236175)
+++ releases/WebKitGTK/webkit-2.22/Source/_javascript_Core/llint/LLIntThunks.h 2018-09-19 12:34:00 UTC (rev 236176)
@@ -38,7 +38,11 @@
EncodedJSValue vmEntryToNative(void*, VM*, ProtoCallFrame*);
}
-EncodedJSValue JS_EXPORT_PRIVATE vmEntryToWasm(void*, VM*, ProtoCallFrame*);
+inline EncodedJSValue vmEntryToWasm(void* code, VM* vm, ProtoCallFrame* frame)
+{
+ code = retagCodePtr<WasmEntryPtrTag, JSEntryPtrTag>(code);
+ return vmEntryToJavaScript(code, vm, frame);
+}
namespace LLInt {
Modified: releases/WebKitGTK/webkit-2.22/Source/_javascript_Core/llint/LowLevelInterpreter32_64.asm (236175 => 236176)
--- releases/WebKitGTK/webkit-2.22/Source/_javascript_Core/llint/LowLevelInterpreter32_64.asm 2018-09-19 12:33:56 UTC (rev 236175)
+++ releases/WebKitGTK/webkit-2.22/Source/_javascript_Core/llint/LowLevelInterpreter32_64.asm 2018-09-19 12:34:00 UTC (rev 236176)
@@ -155,11 +155,6 @@
# before we start copying the args from the protoCallFrame below.
if C_LOOP
bpaeq t3, VM::m_cloopStackLimit[vm], .stackHeightOK
- else
- bpaeq t3, VM::m_softStackLimit[vm], .stackHeightOK
- end
-
- if C_LOOP
move entry, t4
move vm, t5
cloopCallSlowPath _llint_stack_check_at_vm_entry, vm, t3
@@ -171,38 +166,11 @@
.stackCheckFailed:
move t4, entry
move t5, vm
- end
-
-.throwStackOverflow:
- subp 8, sp # Align stack for cCall2() to make a call.
- move vm, a0
- move protoCallFrame, a1
- cCall2(_llint_throw_stack_overflow_error)
-
- if ARMv7
- vmEntryRecord(cfr, t3)
- move t3, sp
+ jmp .throwStackOverflow
else
- vmEntryRecord(cfr, sp)
+ bpb t3, VM::m_softStackLimit[vm], .throwStackOverflow
end
- loadp VMEntryRecord::m_vm[sp], t5
- loadp VMEntryRecord::m_prevTopCallFrame[sp], t4
- storep t4, VM::topCallFrame[t5]
- loadp VMEntryRecord::m_prevTopEntryFrame[sp], t4
- storep t4, VM::topEntryFrame[t5]
-
- if ARMv7
- subp cfr, CalleeRegisterSaveSize, t5
- move t5, sp
- else
- subp cfr, CalleeRegisterSaveSize, sp
- end
-
- popCalleeSaves()
- functionEpilogue()
- ret
-
.stackHeightOK:
move t3, sp
move 4, t3
@@ -268,6 +236,36 @@
popCalleeSaves()
functionEpilogue()
ret
+
+.throwStackOverflow:
+ subp 8, sp # Align stack for cCall2() to make a call.
+ move vm, a0
+ move protoCallFrame, a1
+ cCall2(_llint_throw_stack_overflow_error)
+
+ if ARMv7
+ vmEntryRecord(cfr, t3)
+ move t3, sp
+ else
+ vmEntryRecord(cfr, sp)
+ end
+
+ loadp VMEntryRecord::m_vm[sp], t5
+ loadp VMEntryRecord::m_prevTopCallFrame[sp], t4
+ storep t4, VM::topCallFrame[t5]
+ loadp VMEntryRecord::m_prevTopEntryFrame[sp], t4
+ storep t4, VM::topEntryFrame[t5]
+
+ if ARMv7
+ subp cfr, CalleeRegisterSaveSize, t5
+ move t5, sp
+ else
+ subp cfr, CalleeRegisterSaveSize, sp
+ end
+
+ popCalleeSaves()
+ functionEpilogue()
+ ret
end
macro makeJavaScriptCall(entry, temp, unused)
Modified: releases/WebKitGTK/webkit-2.22/Source/_javascript_Core/llint/LowLevelInterpreter64.asm (236175 => 236176)
--- releases/WebKitGTK/webkit-2.22/Source/_javascript_Core/llint/LowLevelInterpreter64.asm 2018-09-19 12:33:56 UTC (rev 236175)
+++ releases/WebKitGTK/webkit-2.22/Source/_javascript_Core/llint/LowLevelInterpreter64.asm 2018-09-19 12:34:00 UTC (rev 236176)
@@ -144,11 +144,6 @@
# before we start copying the args from the protoCallFrame below.
if C_LOOP
bpaeq t3, VM::m_cloopStackLimit[vm], .stackHeightOK
- else
- bpaeq t3, VM::m_softStackLimit[vm], .stackHeightOK
- end
-
- if C_LOOP
move entry, t4
move vm, t5
cloopCallSlowPath _llint_stack_check_at_vm_entry, vm, t3
@@ -160,27 +155,11 @@
.stackCheckFailed:
move t4, entry
move t5, vm
+ jmp .throwStackOverflow
+ else
+ bpb t3, VM::m_softStackLimit[vm], .throwStackOverflow
end
-.throwStackOverflow:
- move vm, a0
- move protoCallFrame, a1
- cCall2(_llint_throw_stack_overflow_error)
-
- vmEntryRecord(cfr, t4)
-
- loadp VMEntryRecord::m_vm[t4], vm
- loadp VMEntryRecord::m_prevTopCallFrame[t4], extraTempReg
- storep extraTempReg, VM::topCallFrame[vm]
- loadp VMEntryRecord::m_prevTopEntryFrame[t4], extraTempReg
- storep extraTempReg, VM::topEntryFrame[vm]
-
- subp cfr, CalleeRegisterSaveSize, sp
-
- popCalleeSaves()
- functionEpilogue()
- ret
-
.stackHeightOK:
move t3, sp
move 4, t3
@@ -246,6 +225,25 @@
functionEpilogue()
ret
+
+.throwStackOverflow:
+ move vm, a0
+ move protoCallFrame, a1
+ cCall2(_llint_throw_stack_overflow_error)
+
+ vmEntryRecord(cfr, t4)
+
+ loadp VMEntryRecord::m_vm[t4], vm
+ loadp VMEntryRecord::m_prevTopCallFrame[t4], extraTempReg
+ storep extraTempReg, VM::topCallFrame[vm]
+ loadp VMEntryRecord::m_prevTopEntryFrame[t4], extraTempReg
+ storep extraTempReg, VM::topEntryFrame[vm]
+
+ subp cfr, CalleeRegisterSaveSize, sp
+
+ popCalleeSaves()
+ functionEpilogue()
+ ret
end