Title: [159995] trunk/Source/_javascript_Core
Revision
159995
Author
[email protected]
Date
2013-12-03 02:28:21 -0800 (Tue, 03 Dec 2013)

Log Message

Merge mips and arm/sh4 paths in nativeForGenerator and privateCompileCTINativeCall functions.
https://bugs.webkit.org/show_bug.cgi?id=125067

Patch by Julien Brianceau <[email protected]> on 2013-12-03
Reviewed by Michael Saboff.

* jit/JITOpcodes32_64.cpp:
(JSC::JIT::privateCompileCTINativeCall):
* jit/ThunkGenerators.cpp:
(JSC::nativeForGenerator):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (159994 => 159995)


--- trunk/Source/_javascript_Core/ChangeLog	2013-12-03 08:01:17 UTC (rev 159994)
+++ trunk/Source/_javascript_Core/ChangeLog	2013-12-03 10:28:21 UTC (rev 159995)
@@ -1,3 +1,15 @@
+2013-12-03  Julien Brianceau  <[email protected]>
+
+        Merge mips and arm/sh4 paths in nativeForGenerator and privateCompileCTINativeCall functions.
+        https://bugs.webkit.org/show_bug.cgi?id=125067
+
+        Reviewed by Michael Saboff.
+
+        * jit/JITOpcodes32_64.cpp:
+        (JSC::JIT::privateCompileCTINativeCall):
+        * jit/ThunkGenerators.cpp:
+        (JSC::nativeForGenerator):
+
 2013-12-02  Mark Lam  <[email protected]>
 
         Build failure when disabling JIT, YARR_JIT, and ASSEMBLER.

Modified: trunk/Source/_javascript_Core/jit/JITOpcodes32_64.cpp (159994 => 159995)


--- trunk/Source/_javascript_Core/jit/JITOpcodes32_64.cpp	2013-12-03 08:01:17 UTC (rev 159994)
+++ trunk/Source/_javascript_Core/jit/JITOpcodes32_64.cpp	2013-12-03 10:28:21 UTC (rev 159995)
@@ -74,7 +74,7 @@
 
     addPtr(TrustedImm32(16 - sizeof(void*)), stackPointerRegister);
 
-#elif CPU(ARM) || CPU(SH4)
+#elif CPU(ARM) || CPU(SH4) || CPU(MIPS)
     // Load caller frame's scope chain into this callframe so that whatever we call can get to its global data.
     emitGetCallerFrameFromCallFrameHeaderPtr(regT2);
     emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, regT1, regT2);
@@ -83,6 +83,11 @@
     preserveReturnAddressAfterCall(regT3); // Callee preserved
     emitPutReturnPCToCallFrameHeader(regT3);
 
+#if CPU(MIPS)
+    // Allocate stack space for (unused) 16 bytes (8-byte aligned) for 4 arguments.
+    subPtr(TrustedImm32(16), stackPointerRegister);
+#endif
+
     // Calling convention is f(argumentGPR0, argumentGPR1, ...).
     // Host function signature is f(ExecState*).
     move(callFrameRegister, argumentGPR0);
@@ -94,37 +99,10 @@
     // call the function
     nativeCall = call();
 
-    restoreReturnAddressBeforeReturn(regT3);
-#elif CPU(MIPS)
-    // Load caller frame's scope chain into this callframe so that whatever we call can
-    // get to its global data.
-    emitGetCallerFrameFromCallFrameHeaderPtr(regT0);
-    emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, regT1, regT0);
-    emitPutCellToCallFrameHeader(regT1, JSStack::ScopeChain);
-
-    preserveReturnAddressAfterCall(regT3); // Callee preserved
-    emitPutReturnPCToCallFrameHeader(regT3);
-
-    // Calling convention:      f(a0, a1, a2, a3);
-    // Host function signature: f(ExecState*);
-
-    // Allocate stack space for 16 bytes (8-byte aligned)
-    // 16 bytes (unused) for 4 arguments
-    subPtr(TrustedImm32(16), stackPointerRegister);
-
-    // Setup arg0
-    move(callFrameRegister, MIPSRegisters::a0);
-
-    // Call
-    emitGetFromCallFrameHeaderPtr(JSStack::Callee, MIPSRegisters::a2);
-    loadPtr(Address(MIPSRegisters::a2, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2);
-    move(regT0, callFrameRegister); // Eagerly restore caller frame register to avoid loading from stack.
-    
-    // call the function
-    nativeCall = call();
-
+#if CPU(MIPS)
     // Restore stack space
     addPtr(TrustedImm32(16), stackPointerRegister);
+#endif
 
     restoreReturnAddressBeforeReturn(regT3);
 #else

Modified: trunk/Source/_javascript_Core/jit/ThunkGenerators.cpp (159994 => 159995)


--- trunk/Source/_javascript_Core/jit/ThunkGenerators.cpp	2013-12-03 08:01:17 UTC (rev 159994)
+++ trunk/Source/_javascript_Core/jit/ThunkGenerators.cpp	2013-12-03 10:28:21 UTC (rev 159995)
@@ -343,7 +343,7 @@
 
     jit.restoreReturnAddressBeforeReturn(JSInterfaceJIT::regT3);
 
-#elif CPU(ARM) || CPU(SH4)
+#elif CPU(ARM) || CPU(SH4) || CPU(MIPS)
     // Load caller frame's scope chain into this callframe so that whatever we call can get to its global data.
     jit.emitGetCallerFrameFromCallFrameHeaderPtr(JSInterfaceJIT::regT2);
     jit.emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, JSInterfaceJIT::regT1, JSInterfaceJIT::regT2);
@@ -352,6 +352,11 @@
     jit.preserveReturnAddressAfterCall(JSInterfaceJIT::regT3); // Callee preserved
     jit.emitPutReturnPCToCallFrameHeader(JSInterfaceJIT::regT3);
 
+#if CPU(MIPS)
+    // Allocate stack space for (unused) 16 bytes (8-byte aligned) for 4 arguments.
+    jit.subPtr(JSInterfaceJIT::TrustedImm32(16), JSInterfaceJIT::stackPointerRegister);
+#endif
+
     // Calling convention is f(argumentGPR0, argumentGPR1, ...).
     // Host function signature is f(ExecState*).
     jit.move(JSInterfaceJIT::callFrameRegister, JSInterfaceJIT::argumentGPR0);
@@ -361,35 +366,10 @@
     jit.loadPtr(JSInterfaceJIT::Address(JSInterfaceJIT::argumentGPR1, JSFunction::offsetOfExecutable()), JSInterfaceJIT::regT2);
     jit.call(JSInterfaceJIT::Address(JSInterfaceJIT::regT2, executableOffsetToFunction));
 
-    jit.restoreReturnAddressBeforeReturn(JSInterfaceJIT::regT3);
-#elif CPU(MIPS)
-    // Load caller frame's scope chain into this callframe so that whatever we call can
-    // get to its global data.
-    jit.emitGetCallerFrameFromCallFrameHeaderPtr(JSInterfaceJIT::regT0);
-    jit.emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, JSInterfaceJIT::regT1, JSInterfaceJIT::regT0);
-    jit.emitPutCellToCallFrameHeader(JSInterfaceJIT::regT1, JSStack::ScopeChain);
-
-    jit.preserveReturnAddressAfterCall(JSInterfaceJIT::regT3); // Callee preserved
-    jit.emitPutReturnPCToCallFrameHeader(JSInterfaceJIT::regT3);
-
-    // Calling convention:      f(a0, a1, a2, a3);
-    // Host function signature: f(ExecState*);
-
-    // Allocate stack space for 16 bytes (8-byte aligned)
-    // 16 bytes (unused) for 4 arguments
-    jit.subPtr(JSInterfaceJIT::TrustedImm32(16), JSInterfaceJIT::stackPointerRegister);
-
-    // Setup arg0
-    jit.move(JSInterfaceJIT::callFrameRegister, MIPSRegisters::a0);
-
-    // Call
-    jit.emitGetFromCallFrameHeaderPtr(JSStack::Callee, MIPSRegisters::a2);
-    jit.loadPtr(JSInterfaceJIT::Address(MIPSRegisters::a2, JSFunction::offsetOfExecutable()), JSInterfaceJIT::regT2);
-    jit.move(JSInterfaceJIT::regT0, JSInterfaceJIT::callFrameRegister); // Eagerly restore caller frame register to avoid loading from stack.
-    jit.call(JSInterfaceJIT::Address(JSInterfaceJIT::regT2, executableOffsetToFunction));
-
+#if CPU(MIPS)
     // Restore stack space
     jit.addPtr(JSInterfaceJIT::TrustedImm32(16), JSInterfaceJIT::stackPointerRegister);
+#endif
 
     jit.restoreReturnAddressBeforeReturn(JSInterfaceJIT::regT3);
 #else
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to