Changeset 159995 in webkit


Ignore:
Timestamp:
Dec 3, 2013 2:28:21 AM (10 years ago)
Author:
commit-queue@webkit.org
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 <jbriance@cisco.com> on 2013-12-03
Reviewed by Michael Saboff.

  • jit/JITOpcodes32_64.cpp:

(JSC::JIT::privateCompileCTINativeCall):

  • jit/ThunkGenerators.cpp:

(JSC::nativeForGenerator):

Location:
trunk/Source/JavaScriptCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r159987 r159995  
     12013-12-03  Julien Brianceau  <jbriance@cisco.com>
     2
     3        Merge mips and arm/sh4 paths in nativeForGenerator and privateCompileCTINativeCall functions.
     4        https://bugs.webkit.org/show_bug.cgi?id=125067
     5
     6        Reviewed by Michael Saboff.
     7
     8        * jit/JITOpcodes32_64.cpp:
     9        (JSC::JIT::privateCompileCTINativeCall):
     10        * jit/ThunkGenerators.cpp:
     11        (JSC::nativeForGenerator):
     12
    1132013-12-02  Mark Lam  <mark.lam@apple.com>
    214
  • trunk/Source/JavaScriptCore/jit/JITOpcodes32_64.cpp

    r159973 r159995  
    7575    addPtr(TrustedImm32(16 - sizeof(void*)), stackPointerRegister);
    7676
    77 #elif CPU(ARM) || CPU(SH4)
     77#elif CPU(ARM) || CPU(SH4) || CPU(MIPS)
    7878    // Load caller frame's scope chain into this callframe so that whatever we call can get to its global data.
    7979    emitGetCallerFrameFromCallFrameHeaderPtr(regT2);
     
    8484    emitPutReturnPCToCallFrameHeader(regT3);
    8585
     86#if CPU(MIPS)
     87    // Allocate stack space for (unused) 16 bytes (8-byte aligned) for 4 arguments.
     88    subPtr(TrustedImm32(16), stackPointerRegister);
     89#endif
     90
    8691    // Calling convention is f(argumentGPR0, argumentGPR1, ...).
    8792    // Host function signature is f(ExecState*).
     
    95100    nativeCall = call();
    96101
    97     restoreReturnAddressBeforeReturn(regT3);
    98 #elif CPU(MIPS)
    99     // Load caller frame's scope chain into this callframe so that whatever we call can
    100     // get to its global data.
    101     emitGetCallerFrameFromCallFrameHeaderPtr(regT0);
    102     emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, regT1, regT0);
    103     emitPutCellToCallFrameHeader(regT1, JSStack::ScopeChain);
    104 
    105     preserveReturnAddressAfterCall(regT3); // Callee preserved
    106     emitPutReturnPCToCallFrameHeader(regT3);
    107 
    108     // Calling convention:      f(a0, a1, a2, a3);
    109     // Host function signature: f(ExecState*);
    110 
    111     // Allocate stack space for 16 bytes (8-byte aligned)
    112     // 16 bytes (unused) for 4 arguments
    113     subPtr(TrustedImm32(16), stackPointerRegister);
    114 
    115     // Setup arg0
    116     move(callFrameRegister, MIPSRegisters::a0);
    117 
    118     // Call
    119     emitGetFromCallFrameHeaderPtr(JSStack::Callee, MIPSRegisters::a2);
    120     loadPtr(Address(MIPSRegisters::a2, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2);
    121     move(regT0, callFrameRegister); // Eagerly restore caller frame register to avoid loading from stack.
    122    
    123     // call the function
    124     nativeCall = call();
    125 
     102#if CPU(MIPS)
    126103    // Restore stack space
    127104    addPtr(TrustedImm32(16), stackPointerRegister);
     105#endif
    128106
    129107    restoreReturnAddressBeforeReturn(regT3);
  • trunk/Source/JavaScriptCore/jit/ThunkGenerators.cpp

    r159871 r159995  
    344344    jit.restoreReturnAddressBeforeReturn(JSInterfaceJIT::regT3);
    345345
    346 #elif CPU(ARM) || CPU(SH4)
     346#elif CPU(ARM) || CPU(SH4) || CPU(MIPS)
    347347    // Load caller frame's scope chain into this callframe so that whatever we call can get to its global data.
    348348    jit.emitGetCallerFrameFromCallFrameHeaderPtr(JSInterfaceJIT::regT2);
     
    353353    jit.emitPutReturnPCToCallFrameHeader(JSInterfaceJIT::regT3);
    354354
     355#if CPU(MIPS)
     356    // Allocate stack space for (unused) 16 bytes (8-byte aligned) for 4 arguments.
     357    jit.subPtr(JSInterfaceJIT::TrustedImm32(16), JSInterfaceJIT::stackPointerRegister);
     358#endif
     359
    355360    // Calling convention is f(argumentGPR0, argumentGPR1, ...).
    356361    // Host function signature is f(ExecState*).
     
    362367    jit.call(JSInterfaceJIT::Address(JSInterfaceJIT::regT2, executableOffsetToFunction));
    363368
    364     jit.restoreReturnAddressBeforeReturn(JSInterfaceJIT::regT3);
    365 #elif CPU(MIPS)
    366     // Load caller frame's scope chain into this callframe so that whatever we call can
    367     // get to its global data.
    368     jit.emitGetCallerFrameFromCallFrameHeaderPtr(JSInterfaceJIT::regT0);
    369     jit.emitGetFromCallFrameHeaderPtr(JSStack::ScopeChain, JSInterfaceJIT::regT1, JSInterfaceJIT::regT0);
    370     jit.emitPutCellToCallFrameHeader(JSInterfaceJIT::regT1, JSStack::ScopeChain);
    371 
    372     jit.preserveReturnAddressAfterCall(JSInterfaceJIT::regT3); // Callee preserved
    373     jit.emitPutReturnPCToCallFrameHeader(JSInterfaceJIT::regT3);
    374 
    375     // Calling convention:      f(a0, a1, a2, a3);
    376     // Host function signature: f(ExecState*);
    377 
    378     // Allocate stack space for 16 bytes (8-byte aligned)
    379     // 16 bytes (unused) for 4 arguments
    380     jit.subPtr(JSInterfaceJIT::TrustedImm32(16), JSInterfaceJIT::stackPointerRegister);
    381 
    382     // Setup arg0
    383     jit.move(JSInterfaceJIT::callFrameRegister, MIPSRegisters::a0);
    384 
    385     // Call
    386     jit.emitGetFromCallFrameHeaderPtr(JSStack::Callee, MIPSRegisters::a2);
    387     jit.loadPtr(JSInterfaceJIT::Address(MIPSRegisters::a2, JSFunction::offsetOfExecutable()), JSInterfaceJIT::regT2);
    388     jit.move(JSInterfaceJIT::regT0, JSInterfaceJIT::callFrameRegister); // Eagerly restore caller frame register to avoid loading from stack.
    389     jit.call(JSInterfaceJIT::Address(JSInterfaceJIT::regT2, executableOffsetToFunction));
    390 
     369#if CPU(MIPS)
    391370    // Restore stack space
    392371    jit.addPtr(JSInterfaceJIT::TrustedImm32(16), JSInterfaceJIT::stackPointerRegister);
     372#endif
    393373
    394374    jit.restoreReturnAddressBeforeReturn(JSInterfaceJIT::regT3);
Note: See TracChangeset for help on using the changeset viewer.