[JSC] Put .throwStackOverflow code after the fast path in LLInt doVMEntry
[WebKit-https.git] / Source / JavaScriptCore / llint / LowLevelInterpreter32_64.asm
index 0bcb05411156d6439c765190787d3ed49bef1611..daaa8a402964918574032d6ee93cba2a27a78a3e 100644 (file)
@@ -157,11 +157,6 @@ macro doVMEntry(makeCall)
     # before we start copying the args from the protoCallFrame below.
     if C_LOOP
         bpaeq t3, VM::m_cloopStackLimit[vm], .stackHeightOK
     # 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
         move entry, t4
         move vm, t5
         cloopCallSlowPath _llint_stack_check_at_vm_entry, vm, t3
@@ -173,38 +168,11 @@ macro doVMEntry(makeCall)
 .stackCheckFailed:
         move t4, entry
         move t5, vm
 .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
-    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
+        jmp .throwStackOverflow
     else
     else
-        subp cfr, CalleeRegisterSaveSize, sp
+        bpb t3, VM::m_softStackLimit[vm], .throwStackOverflow
     end
 
     end
 
-    popCalleeSaves()
-    functionEpilogue()
-    ret
-
 .stackHeightOK:
     move t3, sp
     move 4, t3
 .stackHeightOK:
     move t3, sp
     move 4, t3
@@ -267,6 +235,36 @@ macro doVMEntry(makeCall)
         subp cfr, CalleeRegisterSaveSize, sp
     end
 
         subp cfr, CalleeRegisterSaveSize, sp
     end
 
+    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
     popCalleeSaves()
     functionEpilogue()
     ret