2008-12-11 Gavin Barraclough <barraclough@apple.com>
authorbarraclough@apple.com <barraclough@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 12 Dec 2008 04:20:17 +0000 (04:20 +0000)
committerbarraclough@apple.com <barraclough@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 12 Dec 2008 04:20:17 +0000 (04:20 +0000)
        Reviewed by Oliver Hunt.

        Remove CTI_ARGUMENTS mode, use va_start implementation on Windows,
        unifying JIT callback (cti_*) argument access on OS X & Windows

        No performance impact.

        * interpreter/Interpreter.h:
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JIT.h:
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitCTICall):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::privateCompilePutByIdTransition):
        * wtf/Platform.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@39226 268f45cc-cd09-0410-ab3c-d52691b4dbfc

JavaScriptCore/ChangeLog
JavaScriptCore/interpreter/Interpreter.h
JavaScriptCore/jit/JIT.cpp
JavaScriptCore/jit/JIT.h
JavaScriptCore/jit/JITInlineMethods.h
JavaScriptCore/jit/JITPropertyAccess.cpp
JavaScriptCore/wtf/Platform.h

index 755da29..2a06483 100644 (file)
@@ -1,3 +1,22 @@
+2008-12-11  Gavin Barraclough  <barraclough@apple.com>
+
+        Reviewed by Oliver Hunt.
+
+        Remove CTI_ARGUMENTS mode, use va_start implementation on Windows,
+        unifying JIT callback (cti_*) argument access on OS X & Windows
+
+        No performance impact.
+
+        * interpreter/Interpreter.h:
+        * jit/JIT.cpp:
+        (JSC::JIT::privateCompileCTIMachineTrampolines):
+        * jit/JIT.h:
+        * jit/JITInlineMethods.h:
+        (JSC::JIT::emitCTICall):
+        * jit/JITPropertyAccess.cpp:
+        (JSC::JIT::privateCompilePutByIdTransition):
+        * wtf/Platform.h:
+
 2008-12-11  Holger Freyther  <zecke@selfish.org>
 
         Reviewed by Simon Hausmann.
index c8c9612..0fc15ce 100644 (file)
@@ -54,33 +54,9 @@ namespace JSC {
 
 #if ENABLE(JIT)
 
-#if USE(CTI_ARGUMENT)
-#define CTI_ARGS void** args
-#define ARGS (args)
-#else
 #define CTI_ARGS void* args, ...
 #define ARGS (reinterpret_cast<void**>(vl_args) - 1)
-#endif
-
-#if USE(FAST_CALL_CTI_ARGUMENT)
-
-#if COMPILER(MSVC)
-#define SFX_CALL __fastcall
-#elif COMPILER(GCC)
-#define SFX_CALL  __attribute__ ((fastcall))
-#else
-#error Need to support fastcall calling convention in this compiler
-#endif
-
-#else
-
-#if COMPILER(MSVC)
-#define SFX_CALL __cdecl
-#else
 #define SFX_CALL
-#endif
-
-#endif
 
     typedef uint64_t VoidPtrPair;
 
index 1ed8444..2f71925 100644 (file)
@@ -75,16 +75,7 @@ SYMBOL_STRING(ctiTrampoline) ":" "\n"
 asm(
 ".globl " SYMBOL_STRING(ctiVMThrowTrampoline) "\n"
 SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n"
-#if USE(CTI_ARGUMENT)
-#if USE(FAST_CALL_CTI_ARGUMENT)
-    "movl %esp, %ecx" "\n"
-#else
-    "movl %esp, 0(%esp)" "\n"
-#endif
-    "call " SYMBOL_STRING(_ZN3JSC11Interpreter12cti_vm_throwEPPv) "\n"
-#else
     "call " SYMBOL_STRING(_ZN3JSC11Interpreter12cti_vm_throwEPvz) "\n"
-#endif
     "addl $0x20, %esp" "\n"
     "popl %ebx" "\n"
     "popl %edi" "\n"
@@ -2041,7 +2032,6 @@ void JIT::privateCompileCTIMachineTrampolines()
     __ testl_rr(X86::eax, X86::eax);
     JmpSrc hasCodeBlock1 = __ jne();
     __ popl_r(X86::ebx);
-    restoreArgumentReference();
     emitPutCTIParam(X86::edi, CTI_ARGS_callFrame);
     JmpSrc callJSFunction1 = __ call();
     emitGetCTIArg(0, X86::ecx);
@@ -2055,7 +2045,6 @@ void JIT::privateCompileCTIMachineTrampolines()
     __ popl_r(X86::ebx);
     emitPutCTIArg(X86::ebx, 4);
     emitPutCTIArg(X86::eax, 12);
-    restoreArgumentReference();
     emitPutCTIParam(X86::edi, CTI_ARGS_callFrame);
     JmpSrc callArityCheck1 = __ call();
     __ movl_rr(X86::edx, X86::edi);
@@ -2068,7 +2057,6 @@ void JIT::privateCompileCTIMachineTrampolines()
 
     __ popl_r(X86::ebx);
     emitPutCTIArg(X86::ebx, 4);
-    restoreArgumentReference();
     emitPutCTIParam(X86::edi, CTI_ARGS_callFrame);
     JmpSrc callDontLazyLinkCall = __ call();
     __ pushl_r(X86::ebx);
@@ -2083,7 +2071,6 @@ void JIT::privateCompileCTIMachineTrampolines()
     __ testl_rr(X86::eax, X86::eax);
     JmpSrc hasCodeBlock2 = __ jne();
     __ popl_r(X86::ebx);
-    restoreArgumentReference();
     emitPutCTIParam(X86::edi, CTI_ARGS_callFrame);
     JmpSrc callJSFunction2 = __ call();
     emitGetCTIArg(0, X86::ecx);
@@ -2097,7 +2084,6 @@ void JIT::privateCompileCTIMachineTrampolines()
     __ popl_r(X86::ebx);
     emitPutCTIArg(X86::ebx, 4);
     emitPutCTIArg(X86::eax, 12);
-    restoreArgumentReference();
     emitPutCTIParam(X86::edi, CTI_ARGS_callFrame);
     JmpSrc callArityCheck2 = __ call();
     __ movl_rr(X86::edx, X86::edi);
@@ -2110,7 +2096,6 @@ void JIT::privateCompileCTIMachineTrampolines()
 
     __ popl_r(X86::ebx);
     emitPutCTIArg(X86::ebx, 4);
-    restoreArgumentReference();
     emitPutCTIParam(X86::edi, CTI_ARGS_callFrame);
     JmpSrc callLazyLinkCall = __ call();
     __ pushl_r(X86::ebx);
@@ -2125,7 +2110,6 @@ void JIT::privateCompileCTIMachineTrampolines()
     __ testl_rr(X86::eax, X86::eax);
     JmpSrc hasCodeBlock3 = __ jne();
     __ popl_r(X86::ebx);
-    restoreArgumentReference();
     emitPutCTIParam(X86::edi, CTI_ARGS_callFrame);
     JmpSrc callJSFunction3 = __ call();
     emitGetCTIArg(0, X86::ecx);
@@ -2139,7 +2123,6 @@ void JIT::privateCompileCTIMachineTrampolines()
     __ popl_r(X86::ebx);
     emitPutCTIArg(X86::ebx, 4);
     emitPutCTIArg(X86::eax, 12);
-    restoreArgumentReference();
     emitPutCTIParam(X86::edi, CTI_ARGS_callFrame);
     JmpSrc callArityCheck3 = __ call();
     __ movl_rr(X86::edx, X86::edi);
index a7d1aac..1c8dce8 100644 (file)
@@ -276,13 +276,6 @@ namespace JSC {
         // will compress the displacement, and we may not be able to fit a repatched offset.
         static const int repatchGetByIdDefaultOffset = 256;
 
-#if USE(FAST_CALL_CTI_ARGUMENT)
-        static const int ctiArgumentInitSize = 2;
-#elif USE(CTI_ARGUMENT)
-        static const int ctiArgumentInitSize = 4;
-#else
-        static const int ctiArgumentInitSize = 0;
-#endif
         // These architecture specific value are used to enable repatching - see comment on op_put_by_id.
         static const int repatchOffsetPutByIdStructure = 7;
         static const int repatchOffsetPutByIdPropertyMapOffset = 22;
@@ -291,9 +284,9 @@ namespace JSC {
         static const int repatchOffsetGetByIdBranchToSlowCase = 13;
         static const int repatchOffsetGetByIdPropertyMapOffset = 22;
 #if ENABLE(OPCODE_SAMPLING)
-        static const int repatchOffsetGetByIdSlowCaseCall = 27 + 4 + ctiArgumentInitSize;
+        static const int repatchOffsetGetByIdSlowCaseCall = 27 + 4;
 #else
-        static const int repatchOffsetGetByIdSlowCaseCall = 17 + 4 + ctiArgumentInitSize;
+        static const int repatchOffsetGetByIdSlowCaseCall = 17 + 4;
 #endif
         static const int repatchOffsetOpCallCall = 6;
 
@@ -457,9 +450,6 @@ namespace JSC {
 
         void emitTagAsBoolImmediate(RegisterID reg);
 
-        void restoreArgumentReference();
-        void restoreArgumentReferenceForTrampoline();
-
         JmpSrc emitNakedCall(unsigned bytecodeIndex, RegisterID);
         JmpSrc emitNakedCall(unsigned bytecodeIndex, void* function);
         JmpSrc emitCTICall(unsigned bytecodeIndex, CTIHelper_j);
index 757190a..3def888 100644 (file)
@@ -201,32 +201,11 @@ ALWAYS_INLINE JmpSrc JIT::emitNakedCall(unsigned bytecodeIndex, void* function)
     return nakedCall;
 }
 
-ALWAYS_INLINE void JIT::restoreArgumentReference()
-{
-#if USE(CTI_ARGUMENT)
-#if USE(FAST_CALL_CTI_ARGUMENT)
-    __ movl_rr(X86::esp, X86::ecx);
-#else
-    __ movl_rm(X86::esp, 0, X86::esp);
-#endif
-#endif
-}
-
-ALWAYS_INLINE void JIT::restoreArgumentReferenceForTrampoline()
-{
-#if USE(CTI_ARGUMENT) && USE(FAST_CALL_CTI_ARGUMENT)
-    __ movl_rr(X86::esp, X86::ecx);
-    __ addl_i32r(4, X86::ecx);
-#endif
-}
-
-
 ALWAYS_INLINE JmpSrc JIT::emitCTICall(unsigned bytecodeIndex, CTIHelper_j helper)
 {
 #if ENABLE(OPCODE_SAMPLING)
     store32(Imm32(m_interpreter->sampler()->encodeSample(m_codeBlock->instructions().begin() + bytecodeIndex, true)), m_interpreter->sampler()->sampleSlot());
 #endif
-    restoreArgumentReference();
     emitPutCTIParam(callFrameRegister, CTI_ARGS_callFrame);
     JmpSrc ctiCall = call();
     m_calls.append(CallRecord(ctiCall, helper, bytecodeIndex));
@@ -243,7 +222,6 @@ ALWAYS_INLINE JmpSrc JIT::emitCTICall(unsigned bytecodeIndex, CTIHelper_o helper
 #if ENABLE(OPCODE_SAMPLING)
     store32(Imm32(m_interpreter->sampler()->encodeSample(m_codeBlock->instructions().begin() + bytecodeIndex, true)), m_interpreter->sampler()->sampleSlot());
 #endif
-    restoreArgumentReference();
     emitPutCTIParam(callFrameRegister, CTI_ARGS_callFrame);
     JmpSrc ctiCall = call();
     m_calls.append(CallRecord(ctiCall, helper, bytecodeIndex));
@@ -260,7 +238,6 @@ ALWAYS_INLINE JmpSrc JIT::emitCTICall(unsigned bytecodeIndex, CTIHelper_p helper
 #if ENABLE(OPCODE_SAMPLING)
     store32(Imm32(m_interpreter->sampler()->encodeSample(m_codeBlock->instructions().begin() + bytecodeIndex, true)), m_interpreter->sampler()->sampleSlot());
 #endif
-    restoreArgumentReference();
     emitPutCTIParam(callFrameRegister, CTI_ARGS_callFrame);
     JmpSrc ctiCall = call();
     m_calls.append(CallRecord(ctiCall, helper, bytecodeIndex));
@@ -277,7 +254,6 @@ ALWAYS_INLINE JmpSrc JIT::emitCTICall(unsigned bytecodeIndex, CTIHelper_b helper
 #if ENABLE(OPCODE_SAMPLING)
     store32(Imm32(m_interpreter->sampler()->encodeSample(m_codeBlock->instructions().begin() + bytecodeIndex, true)), m_interpreter->sampler()->sampleSlot());
 #endif
-    restoreArgumentReference();
     emitPutCTIParam(callFrameRegister, CTI_ARGS_callFrame);
     JmpSrc ctiCall = call();
     m_calls.append(CallRecord(ctiCall, helper, bytecodeIndex));
@@ -294,7 +270,6 @@ ALWAYS_INLINE JmpSrc JIT::emitCTICall(unsigned bytecodeIndex, CTIHelper_v helper
 #if ENABLE(OPCODE_SAMPLING)
     store32(Imm32(m_interpreter->sampler()->encodeSample(m_codeBlock->instructions().begin() + bytecodeIndex, true)), m_interpreter->sampler()->sampleSlot());
 #endif
-    restoreArgumentReference();
     emitPutCTIParam(callFrameRegister, CTI_ARGS_callFrame);
     JmpSrc ctiCall = call();
     m_calls.append(CallRecord(ctiCall, helper, bytecodeIndex));
@@ -311,7 +286,6 @@ ALWAYS_INLINE JmpSrc JIT::emitCTICall(unsigned bytecodeIndex, CTIHelper_s helper
 #if ENABLE(OPCODE_SAMPLING)
     store32(Imm32(m_interpreter->sampler()->encodeSample(m_codeBlock->instructions().begin() + bytecodeIndex, true)), m_interpreter->sampler()->sampleSlot());
 #endif
-    restoreArgumentReference();
     emitPutCTIParam(callFrameRegister, CTI_ARGS_callFrame);
     JmpSrc ctiCall = call();
     m_calls.append(CallRecord(ctiCall, helper, bytecodeIndex));
@@ -328,7 +302,6 @@ ALWAYS_INLINE JmpSrc JIT::emitCTICall(unsigned bytecodeIndex, CTIHelper_2 helper
 #if ENABLE(OPCODE_SAMPLING)
     store32(Imm32(m_interpreter->sampler()->encodeSample(m_codeBlock->instructions().begin() + bytecodeIndex, true)), m_interpreter->sampler()->sampleSlot());
 #endif
-    restoreArgumentReference();
     emitPutCTIParam(callFrameRegister, CTI_ARGS_callFrame);
     JmpSrc ctiCall = call();
     m_calls.append(CallRecord(ctiCall, helper, bytecodeIndex));
index 574214b..50487d1 100644 (file)
@@ -281,7 +281,6 @@ void JIT::privateCompilePutByIdTransition(StructureStubInfo* stubInfo, Structure
     if (failureCases.size()) {
         for (unsigned i = 0; i < failureCases.size(); ++i)
             __ link(failureCases[i], __ label());
-        restoreArgumentReferenceForTrampoline();
         failureJump = __ jmp();
     }
 
index 0ab2c59..de861dc 100644 (file)
 #endif
 #endif
 
-/* Use "fastcall" calling convention on MSVC */
-#if COMPILER(MSVC)
-#define WTF_USE_FAST_CALL_CTI_ARGUMENT 1
-#define WTF_USE_CTI_ARGUMENT 1
-#endif
-
 #if !PLATFORM(QT)
 #define WTF_USE_FONT_FAST_PATH 1
 #endif