Changeset 48525 in webkit for trunk/JavaScriptCore/jit


Ignore:
Timestamp:
Sep 18, 2009, 1:18:27 PM (16 years ago)
Author:
[email protected]
Message:

2009-09-18 Gabor Loki <[email protected]>

Reviewed by Gavin Barraclough.

Defines two pseudo-platforms for ARM and Thumb-2 instruction set.
https://bugs.webkit.org/show_bug.cgi?id=29122

Introduces WTF_PLATFORM_ARM_TRADITIONAL and WTF_PLATFORM_ARM_THUMB2
macros on ARM platforms. The PLATFORM(ARM_THUMB2) should be used
when Thumb-2 instruction set is the required target. The
PLATFORM(ARM_TRADITIONAL) is for generic ARM instruction set. In
case where the code is common the PLATFORM(ARM) have to be used.

  • assembler/ARMAssembler.cpp:
  • assembler/ARMAssembler.h:
  • assembler/ARMv7Assembler.h:
  • assembler/MacroAssembler.h:
  • assembler/MacroAssemblerARM.cpp:
  • assembler/MacroAssemblerARM.h:
  • assembler/MacroAssemblerCodeRef.h: (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr):
  • jit/ExecutableAllocator.h:
  • jit/JIT.h:
  • jit/JITInlineMethods.h: (JSC::JIT::beginUninterruptedSequence): (JSC::JIT::preserveReturnAddressAfterCall): (JSC::JIT::restoreReturnAddressBeforeReturn): (JSC::JIT::restoreArgumentReference): (JSC::JIT::restoreArgumentReferenceForTrampoline):
  • jit/JITOpcodes.cpp:
  • jit/JITStubs.cpp: (JSC::JITThunks::JITThunks):
  • jit/JITStubs.h:
  • wtf/Platform.h:
  • yarr/RegexJIT.cpp: (JSC::Yarr::RegexGenerator::generateEnter):
Location:
trunk/JavaScriptCore/jit
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/jit/ExecutableAllocator.h

    r48217 r48525  
    181181    {
    182182    }
    183 #elif PLATFORM_ARM_ARCH(7) && PLATFORM(IPHONE)
     183#elif PLATFORM(ARM_THUMB2) && PLATFORM(IPHONE)
    184184    static void cacheFlush(void* code, size_t size)
    185185    {
     
    192192        User::IMB_Range(code, static_cast<char*>(code) + size);
    193193    }
    194 #elif PLATFORM(ARM)
     194#elif PLATFORM(ARM_TRADITIONAL)
    195195    static void cacheFlush(void* code, size_t size)
    196196    {
  • trunk/JavaScriptCore/jit/JIT.h

    r47614 r48525  
    227227        static const FPRegisterID fpRegT1 = X86Registers::xmm1;
    228228        static const FPRegisterID fpRegT2 = X86Registers::xmm2;
    229 #elif PLATFORM_ARM_ARCH(7)
     229#elif PLATFORM(ARM_THUMB2)
    230230        static const RegisterID returnValueRegister = ARMRegisters::r0;
    231231        static const RegisterID cachedResultRegister = ARMRegisters::r0;
     
    243243        static const FPRegisterID fpRegT1 = ARMRegisters::d1;
    244244        static const FPRegisterID fpRegT2 = ARMRegisters::d2;
    245 #elif PLATFORM(ARM)
     245#elif PLATFORM(ARM_TRADITIONAL)
    246246        static const RegisterID returnValueRegister = ARMRegisters::r0;
    247247        static const RegisterID cachedResultRegister = ARMRegisters::r0;
     
    572572        static const int patchOffsetMethodCheckProtoStruct = 18;
    573573        static const int patchOffsetMethodCheckPutFunction = 29;
    574 #elif PLATFORM_ARM_ARCH(7)
     574#elif PLATFORM(ARM_THUMB2)
    575575        // These architecture specific value are used to enable patching - see comment on op_put_by_id.
    576576        static const int patchOffsetPutByIdStructure = 10;
     
    595595        static const int patchOffsetMethodCheckProtoStruct = 28;
    596596        static const int patchOffsetMethodCheckPutFunction = 46;
    597 #elif PLATFORM(ARM)
     597#elif PLATFORM(ARM_TRADITIONAL)
    598598        // These architecture specific value are used to enable patching - see comment on op_put_by_id.
    599599        static const int patchOffsetPutByIdStructure = 4;
     
    621621#endif // USE(JSVALUE32_64)
    622622
    623 #if PLATFORM(ARM) && !PLATFORM_ARM_ARCH(7)
     623#if PLATFORM(ARM_TRADITIONAL)
    624624        // sequenceOpCall
    625625        static const int sequenceOpCallInstructionSpace = 12;
  • trunk/JavaScriptCore/jit/JITInlineMethods.h

    r47614 r48525  
    111111ALWAYS_INLINE void JIT::beginUninterruptedSequence(int insnSpace, int constSpace)
    112112{
    113 #if PLATFORM(ARM) && !PLATFORM_ARM_ARCH(7)
     113#if PLATFORM(ARM_TRADITIONAL)
    114114#ifndef NDEBUG
    115115    // Ensure the label after the sequence can also fit
     
    140140#endif
    141141
    142 #if PLATFORM(X86) || PLATFORM(X86_64) || (PLATFORM(ARM) && !PLATFORM_ARM_ARCH(7))
     142#if PLATFORM(ARM_THUMB2)
    143143
    144144ALWAYS_INLINE void JIT::preserveReturnAddressAfterCall(RegisterID reg)
    145145{
     146    move(linkRegister, reg);
     147}
     148
     149ALWAYS_INLINE void JIT::restoreReturnAddressBeforeReturn(RegisterID reg)
     150{
     151    move(reg, linkRegister);
     152}
     153
     154ALWAYS_INLINE void JIT::restoreReturnAddressBeforeReturn(Address address)
     155{
     156    loadPtr(address, linkRegister);
     157}
     158
     159#else // PLATFORM(X86) || PLATFORM(X86_64) || PLATFORM(ARM_TRADITIONAL)
     160
     161ALWAYS_INLINE void JIT::preserveReturnAddressAfterCall(RegisterID reg)
     162{
    146163    pop(reg);
    147164}
     
    155172{
    156173    push(address);
    157 }
    158 
    159 #elif PLATFORM_ARM_ARCH(7)
    160 
    161 ALWAYS_INLINE void JIT::preserveReturnAddressAfterCall(RegisterID reg)
    162 {
    163     move(linkRegister, reg);
    164 }
    165 
    166 ALWAYS_INLINE void JIT::restoreReturnAddressBeforeReturn(RegisterID reg)
    167 {
    168     move(reg, linkRegister);
    169 }
    170 
    171 ALWAYS_INLINE void JIT::restoreReturnAddressBeforeReturn(Address address)
    172 {
    173     loadPtr(address, linkRegister);
    174174}
    175175
     
    187187    move(stackPointerRegister, firstArgumentRegister);
    188188    poke(callFrameRegister, OBJECT_OFFSETOF(struct JITStackFrame, callFrame) / sizeof (void*));
    189 #if PLATFORM(ARM) && !PLATFORM_ARM_ARCH(7)
     189#if PLATFORM(ARM_TRADITIONAL)
    190190    move(ctiReturnRegister, ARMRegisters::lr);
    191191#endif
     
    196196    // Within a trampoline the return address will be on the stack at this point.
    197197    addPtr(Imm32(sizeof(void*)), stackPointerRegister, firstArgumentRegister);
    198 #elif PLATFORM_ARM_ARCH(7)
     198#elif PLATFORM(ARM_THUMB2)
    199199    move(stackPointerRegister, firstArgumentRegister);
    200200#endif
  • trunk/JavaScriptCore/jit/JITOpcodes.cpp

    r47614 r48525  
    16821682    addPtr(Imm32(NativeCallFrameSize - sizeof(NativeFunctionCalleeSignature)), stackPointerRegister);
    16831683
    1684 #elif PLATFORM(ARM) && !PLATFORM_ARM_ARCH(7)
     1684#elif PLATFORM(ARM_TRADITIONAL)
    16851685    emitGetFromCallFrameHeader32(RegisterFile::ArgumentCount, regT0);
    16861686
  • trunk/JavaScriptCore/jit/JITStubs.cpp

    r48067 r48525  
    194194);
    195195
    196 #elif COMPILER(GCC) && PLATFORM_ARM_ARCH(7)
     196#elif COMPILER(GCC) && PLATFORM(ARM_THUMB2)
    197197
    198198#if USE(JIT_STUB_ARGUMENT_VA_LIST)
     
    453453);
    454454
    455 #elif COMPILER(GCC) && PLATFORM_ARM_ARCH(7)
     455#elif COMPILER(GCC) && PLATFORM(ARM_THUMB2)
    456456
    457457#if USE(JIT_STUB_ARGUMENT_VA_LIST)
     
    517517);
    518518
    519 #elif COMPILER(GCC) && PLATFORM(ARM)
     519#elif COMPILER(GCC) && PLATFORM(ARM_TRADITIONAL)
    520520
    521521asm volatile (
     
    637637    JIT::compileCTIMachineTrampolines(globalData, &m_executablePool, &m_ctiStringLengthTrampoline, &m_ctiVirtualCallLink, &m_ctiVirtualCall, &m_ctiNativeCallThunk);
    638638
    639 #if PLATFORM_ARM_ARCH(7)
     639#if PLATFORM(ARM_THUMB2)
    640640    // Unfortunate the arm compiler does not like the use of offsetof on JITStackFrame (since it contains non POD types),
    641641    // and the OBJECT_OFFSETOF macro does not appear constantish enough for it to be happy with its use in COMPILE_ASSERT
     
    877877    } while (0)
    878878
    879 #if PLATFORM_ARM_ARCH(7)
     879#if PLATFORM(ARM_THUMB2)
    880880
    881881#define DEFINE_STUB_FUNCTION(rtype, op) \
  • trunk/JavaScriptCore/jit/JITStubs.h

    r47412 r48525  
    130130#pragma pack(pop)
    131131#endif // COMPILER(MSVC)
    132 #elif PLATFORM_ARM_ARCH(7)
     132#elif PLATFORM(ARM_THUMB2)
    133133    struct JITStackFrame {
    134134        void* reserved; // Unused
     
    156156        ReturnAddressPtr* returnAddressSlot() { return &thunkReturnAddress; }
    157157    };
    158 #elif PLATFORM(ARM)
     158#elif PLATFORM(ARM_TRADITIONAL)
    159159    struct JITStackFrame {
    160160        JITStubArg padding; // Unused
Note: See TracChangeset for help on using the changeset viewer.