Changeset 66846 in webkit for trunk/JavaScriptCore/jit


Ignore:
Timestamp:
Sep 6, 2010, 1:29:01 PM (15 years ago)
Author:
[email protected]
Message:

2010-09-06 Chao-ying Fu <[email protected]>

Reviewed by Oliver Hunt.

Support JSVALUE32_64 on MIPS
https://bugs.webkit.org/show_bug.cgi?id=43999

Add missing functions to support JSVALUE32_64 on MIPS.
Remove JSVALUE32 as the default for MIPS.

  • assembler/MIPSAssembler.h: (JSC::MIPSAssembler::divd): (JSC::MIPSAssembler::mthc1): (JSC::MIPSAssembler::cvtwd):
  • assembler/MacroAssemblerMIPS.h: (JSC::MacroAssemblerMIPS::neg32): (JSC::MacroAssemblerMIPS::branchOr32): (JSC::MacroAssemblerMIPS::set8): (JSC::MacroAssemblerMIPS::loadDouble): (JSC::MacroAssemblerMIPS::divDouble): (JSC::MacroAssemblerMIPS::convertInt32ToDouble): (JSC::MacroAssemblerMIPS::branchDouble): (JSC::MacroAssemblerMIPS::branchConvertDoubleToInt32): (JSC::MacroAssemblerMIPS::zeroDouble):
  • jit/JIT.h:
  • jit/JITOpcodes32_64.cpp: (JSC::JIT::privateCompileCTINativeCall):
  • jit/JITPropertyAccess32_64.cpp: (JSC::JIT::privateCompilePutByIdTransition):
  • jit/JITStubs.cpp: (JSC::JITThunks::JITThunks):
  • jit/JITStubs.h:
  • wtf/Platform.h:
Location:
trunk/JavaScriptCore/jit
Files:
5 edited

Legend:

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

    r66150 r66846  
    449449        static const int sequencePutByIdInstructionSpace = 36;
    450450        static const int sequencePutByIdConstantSpace = 4;
     451#elif CPU(MIPS)
     452#if WTF_MIPS_ISA(1)
     453        static const int patchOffsetPutByIdStructure = 16;
     454        static const int patchOffsetPutByIdExternalLoad = 48;
     455        static const int patchLengthPutByIdExternalLoad = 20;
     456        static const int patchOffsetPutByIdPropertyMapOffset1 = 68;
     457        static const int patchOffsetPutByIdPropertyMapOffset2 = 84;
     458        static const int patchOffsetGetByIdStructure = 16;
     459        static const int patchOffsetGetByIdBranchToSlowCase = 48;
     460        static const int patchOffsetGetByIdExternalLoad = 48;
     461        static const int patchLengthGetByIdExternalLoad = 20;
     462        static const int patchOffsetGetByIdPropertyMapOffset1 = 68;
     463        static const int patchOffsetGetByIdPropertyMapOffset2 = 88;
     464        static const int patchOffsetGetByIdPutResult = 108;
     465#if ENABLE(OPCODE_SAMPLING)
     466        #error "OPCODE_SAMPLING is not yet supported"
     467#else
     468        static const int patchOffsetGetByIdSlowCaseCall = 44;
     469#endif
     470        static const int patchOffsetOpCallCompareToJump = 32;
     471        static const int patchOffsetMethodCheckProtoObj = 32;
     472        static const int patchOffsetMethodCheckProtoStruct = 56;
     473        static const int patchOffsetMethodCheckPutFunction = 88;
     474#else // WTF_MIPS_ISA(1)
     475        static const int patchOffsetPutByIdStructure = 12;
     476        static const int patchOffsetPutByIdExternalLoad = 44;
     477        static const int patchLengthPutByIdExternalLoad = 16;
     478        static const int patchOffsetPutByIdPropertyMapOffset1 = 60;
     479        static const int patchOffsetPutByIdPropertyMapOffset2 = 76;
     480        static const int patchOffsetGetByIdStructure = 12;
     481        static const int patchOffsetGetByIdBranchToSlowCase = 44;
     482        static const int patchOffsetGetByIdExternalLoad = 44;
     483        static const int patchLengthGetByIdExternalLoad = 16;
     484        static const int patchOffsetGetByIdPropertyMapOffset1 = 60;
     485        static const int patchOffsetGetByIdPropertyMapOffset2 = 76;
     486        static const int patchOffsetGetByIdPutResult = 92;
     487#if ENABLE(OPCODE_SAMPLING)
     488        #error "OPCODE_SAMPLING is not yet supported"
     489#else
     490        static const int patchOffsetGetByIdSlowCaseCall = 44;
     491#endif
     492        static const int patchOffsetOpCallCompareToJump = 32;
     493        static const int patchOffsetMethodCheckProtoObj = 32;
     494        static const int patchOffsetMethodCheckProtoStruct = 52;
     495        static const int patchOffsetMethodCheckPutFunction = 84;
     496#endif
    451497#else
    452498#error "JSVALUE32_64 not supported on this platform."
  • trunk/JavaScriptCore/jit/JITOpcodes32_64.cpp

    r66150 r66846  
    245245    restoreReturnAddressBeforeReturn(regT3);
    246246
     247#elif CPU(MIPS)
     248    // Load caller frame's scope chain into this callframe so that whatever we call can
     249    // get to its global data.
     250    emitGetFromCallFrameHeaderPtr(RegisterFile::CallerFrame, regT0);
     251    emitGetFromCallFrameHeaderPtr(RegisterFile::ScopeChain, regT1, regT0);
     252    emitPutToCallFrameHeader(regT1, RegisterFile::ScopeChain);
     253
     254    preserveReturnAddressAfterCall(regT3); // Callee preserved
     255    emitPutToCallFrameHeader(regT3, RegisterFile::ReturnPC);
     256
     257    // Calling convention:      f(a0, a1, a2, a3);
     258    // Host function signature: f(ExecState*);
     259
     260    // Allocate stack space for 16 bytes (8-byte aligned)
     261    // 16 bytes (unused) for 4 arguments
     262    subPtr(Imm32(16), stackPointerRegister);
     263
     264    // Setup arg0
     265    move(callFrameRegister, MIPSRegisters::a0);
     266
     267    // Call
     268    emitGetFromCallFrameHeaderPtr(RegisterFile::Callee, MIPSRegisters::a2);
     269    loadPtr(Address(MIPSRegisters::a2, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2);
     270    move(regT0, callFrameRegister); // Eagerly restore caller frame register to avoid loading from stack.
     271    call(Address(regT2, executableOffsetToFunction));
     272
     273    // Restore stack space
     274    addPtr(Imm32(16), stackPointerRegister);
     275
     276    restoreReturnAddressBeforeReturn(regT3);
     277
    247278#elif ENABLE(JIT_OPTIMIZE_NATIVE_CALL)
    248279#error "JIT_OPTIMIZE_NATIVE_CALL not yet supported on this platform."
     
    325356    // call the function
    326357    nativeCall = call();
     358
     359    restoreReturnAddressBeforeReturn(regT3);
     360
     361#elif CPU(MIPS)
     362    // Load caller frame's scope chain into this callframe so that whatever we call can
     363    // get to its global data.
     364    emitGetFromCallFrameHeaderPtr(RegisterFile::CallerFrame, regT0);
     365    emitGetFromCallFrameHeaderPtr(RegisterFile::ScopeChain, regT1, regT0);
     366    emitPutToCallFrameHeader(regT1, RegisterFile::ScopeChain);
     367
     368    preserveReturnAddressAfterCall(regT3); // Callee preserved
     369    emitPutToCallFrameHeader(regT3, RegisterFile::ReturnPC);
     370
     371    // Calling convention:      f(a0, a1, a2, a3);
     372    // Host function signature: f(ExecState*);
     373
     374    // Allocate stack space for 16 bytes (8-byte aligned)
     375    // 16 bytes (unused) for 4 arguments
     376    subPtr(Imm32(16), stackPointerRegister);
     377
     378    // Setup arg0
     379    move(callFrameRegister, MIPSRegisters::a0);
     380
     381    // Call
     382    emitGetFromCallFrameHeaderPtr(RegisterFile::Callee, MIPSRegisters::a2);
     383    loadPtr(Address(MIPSRegisters::a2, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2);
     384    move(regT0, callFrameRegister); // Eagerly restore caller frame register to avoid loading from stack.
     385   
     386    // call the function
     387    nativeCall = call();
     388
     389    // Restore stack space
     390    addPtr(Imm32(16), stackPointerRegister);
    327391
    328392    restoreReturnAddressBeforeReturn(regT3);
  • trunk/JavaScriptCore/jit/JITPropertyAccess32_64.cpp

    r66150 r66846  
    641641    storePtr(ImmPtr(newStructure), Address(regT0, OBJECT_OFFSETOF(JSCell, m_structure)));
    642642   
     643#if CPU(MIPS)
     644    // For MIPS, we don't add sizeof(void*) to the stack offset.
     645    load32(Address(stackPointerRegister, OBJECT_OFFSETOF(JITStackFrame, args[2]) + OBJECT_OFFSETOF(JSValue, u.asBits.payload)), regT3);
     646    load32(Address(stackPointerRegister, OBJECT_OFFSETOF(JITStackFrame, args[2]) + OBJECT_OFFSETOF(JSValue, u.asBits.tag)), regT2);
     647#else
    643648    load32(Address(stackPointerRegister, OBJECT_OFFSETOF(JITStackFrame, args[2]) + sizeof(void*) + OBJECT_OFFSETOF(JSValue, u.asBits.payload)), regT3);
    644649    load32(Address(stackPointerRegister, OBJECT_OFFSETOF(JITStackFrame, args[2]) + sizeof(void*) + OBJECT_OFFSETOF(JSValue, u.asBits.tag)), regT2);
     650#endif
    645651   
    646652    // Write the value
  • trunk/JavaScriptCore/jit/JITStubs.cpp

    r66150 r66846  
    311311#define PRESERVEDR4_OFFSET          68
    312312// See DEFINE_STUB_FUNCTION for more information.
     313
     314#elif CPU(MIPS)
     315
     316#define PRESERVED_GP_OFFSET         60
     317#define PRESERVED_S0_OFFSET         64
     318#define PRESERVED_S1_OFFSET         68
     319#define PRESERVED_S2_OFFSET         72
     320#define PRESERVED_RETURN_ADDRESS_OFFSET 76
     321#define THUNK_RETURN_ADDRESS_OFFSET 80
     322#define REGISTER_FILE_OFFSET        84
     323#define CALLFRAME_OFFSET            88
     324#define EXCEPTION_OFFSET            92
     325#define ENABLE_PROFILER_REFERENCE_OFFSET 96
     326#define GLOBAL_DATA_OFFSET         100
     327#define STACK_LENGTH               104
    313328
    314329#else
     
    466481#elif CPU(MIPS)
    467482
    468 asm volatile(
    469 ".text" "\n"
    470 ".align 2" "\n"
    471 ".set noreorder" "\n"
    472 ".set nomacro" "\n"
    473 ".set nomips16" "\n"
    474 ".globl " SYMBOL_STRING(ctiTrampoline) "\n"
    475 ".ent " SYMBOL_STRING(ctiTrampoline) "\n"
    476 SYMBOL_STRING(ctiTrampoline) ":" "\n"
    477     "addiu $29,$29,-72" "\n"
    478     "sw    $31,44($29)" "\n"
    479     "sw    $18,40($29)" "\n"
    480     "sw    $17,36($29)" "\n"
    481     "sw    $16,32($29)" "\n"
    482 #if WTF_MIPS_PIC
    483     "sw    $28,28($29)" "\n"
    484 #endif
    485     "move  $16,$6       # set callFrameRegister" "\n"
    486     "li    $17,512      # set timeoutCheckRegister" "\n"
    487     "move  $25,$4       # move executableAddress to t9" "\n"
    488     "sw    $5,52($29)   # store registerFile to current stack" "\n"
    489     "sw    $6,56($29)   # store callFrame to curent stack" "\n"
    490     "sw    $7,60($29)   # store exception to current stack" "\n"
    491     "lw    $8,88($29)   # load enableProfilerReference from previous stack" "\n"
    492     "lw    $9,92($29)   # load globalData from previous stack" "\n"
    493     "sw    $8,64($29)   # store enableProfilerReference to current stack" "\n"
    494     "jalr  $25" "\n"
    495     "sw    $9,68($29)   # store globalData to current stack" "\n"
    496     "lw    $16,32($29)" "\n"
    497     "lw    $17,36($29)" "\n"
    498     "lw    $18,40($29)" "\n"
    499     "lw    $31,44($29)" "\n"
    500     "jr    $31" "\n"
    501     "addiu $29,$29,72" "\n"
    502 ".set reorder" "\n"
    503 ".set macro" "\n"
    504 ".end " SYMBOL_STRING(ctiTrampoline) "\n"
    505 );
    506 
    507 asm volatile(
    508 ".text" "\n"
    509 ".align 2" "\n"
    510 ".set noreorder" "\n"
    511 ".set nomacro" "\n"
    512 ".set nomips16" "\n"
    513 ".globl " SYMBOL_STRING(ctiVMThrowTrampoline) "\n"
    514 ".ent " SYMBOL_STRING(ctiVMThrowTrampoline) "\n"
    515 SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n"
    516 #if WTF_MIPS_PIC
    517     "lw    $28,28($29)" "\n"
    518 ".set macro" "\n"
    519     "la    $25," SYMBOL_STRING(cti_vm_throw) "\n"
    520 ".set nomacro" "\n"
    521     "bal " SYMBOL_STRING(cti_vm_throw) "\n"
    522     "move  $4,$29" "\n"
    523 #else
    524     "jal " SYMBOL_STRING(cti_vm_throw) "\n"
    525     "move  $4,$29" "\n"
    526 #endif
    527     "lw    $16,32($29)" "\n"
    528     "lw    $17,36($29)" "\n"
    529     "lw    $18,40($29)" "\n"
    530     "lw    $31,44($29)" "\n"
    531     "jr    $31" "\n"
    532     "addiu $29,$29,72" "\n"
    533 ".set reorder" "\n"
    534 ".set macro" "\n"
    535 ".end " SYMBOL_STRING(ctiVMThrowTrampoline) "\n"
    536 );
    537 
    538 asm volatile(
    539 ".text" "\n"
    540 ".align 2" "\n"
    541 ".set noreorder" "\n"
    542 ".set nomacro" "\n"
    543 ".set nomips16" "\n"
    544 ".globl " SYMBOL_STRING(ctiOpThrowNotCaught) "\n"
    545 ".ent " SYMBOL_STRING(ctiOpThrowNotCaught) "\n"
    546 SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n"
    547     "lw    $16,32($29)" "\n"
    548     "lw    $17,36($29)" "\n"
    549     "lw    $18,40($29)" "\n"
    550     "lw    $31,44($29)" "\n"
    551     "jr    $31" "\n"
    552     "addiu $29,$29,72" "\n"
    553 ".set reorder" "\n"
    554 ".set macro" "\n"
    555 ".end " SYMBOL_STRING(ctiOpThrowNotCaught) "\n"
    556 );
     483#define PRESERVED_GP_OFFSET         28
     484#define PRESERVED_S0_OFFSET         32
     485#define PRESERVED_S1_OFFSET         36
     486#define PRESERVED_S2_OFFSET         40
     487#define PRESERVED_RETURN_ADDRESS_OFFSET 44
     488#define THUNK_RETURN_ADDRESS_OFFSET 48
     489#define REGISTER_FILE_OFFSET        52
     490#define CALLFRAME_OFFSET            56
     491#define EXCEPTION_OFFSET            60
     492#define ENABLE_PROFILER_REFERENCE_OFFSET 64
     493#define GLOBAL_DATA_OFFSET          68
     494#define STACK_LENGTH                72
    557495
    558496#elif COMPILER(MSVC) && CPU(X86)
     
    626564
    627565#endif // USE(JSVALUE32_64)
     566
     567#if CPU(MIPS)
     568asm volatile(
     569".text" "\n"
     570".align 2" "\n"
     571".set noreorder" "\n"
     572".set nomacro" "\n"
     573".set nomips16" "\n"
     574".globl " SYMBOL_STRING(ctiTrampoline) "\n"
     575".ent " SYMBOL_STRING(ctiTrampoline) "\n"
     576SYMBOL_STRING(ctiTrampoline) ":" "\n"
     577    "addiu $29,$29,-" STRINGIZE_VALUE_OF(STACK_LENGTH) "\n"
     578    "sw    $31," STRINGIZE_VALUE_OF(PRESERVED_RETURN_ADDRESS_OFFSET) "($29)" "\n"
     579    "sw    $18," STRINGIZE_VALUE_OF(PRESERVED_S2_OFFSET) "($29)" "\n"
     580    "sw    $17," STRINGIZE_VALUE_OF(PRESERVED_S1_OFFSET) "($29)" "\n"
     581    "sw    $16," STRINGIZE_VALUE_OF(PRESERVED_S0_OFFSET) "($29)" "\n"
     582#if WTF_MIPS_PIC
     583    "sw    $28," STRINGIZE_VALUE_OF(PRESERVED_GP_OFFSET) "($29)" "\n"
     584#endif
     585    "move  $16,$6       # set callFrameRegister" "\n"
     586    "li    $17,512      # set timeoutCheckRegister" "\n"
     587    "move  $25,$4       # move executableAddress to t9" "\n"
     588    "sw    $5," STRINGIZE_VALUE_OF(REGISTER_FILE_OFFSET) "($29) # store registerFile to current stack" "\n"
     589    "sw    $6," STRINGIZE_VALUE_OF(CALLFRAME_OFFSET) "($29)     # store callFrame to curent stack" "\n"
     590    "sw    $7," STRINGIZE_VALUE_OF(EXCEPTION_OFFSET) "($29)     # store exception to current stack" "\n"
     591    "lw    $8," STRINGIZE_VALUE_OF(STACK_LENGTH + 16) "($29)    # load enableProfilerReference from previous stack" "\n"
     592    "lw    $9," STRINGIZE_VALUE_OF(STACK_LENGTH + 20) "($29)    # load globalData from previous stack" "\n"
     593    "sw    $8," STRINGIZE_VALUE_OF(ENABLE_PROFILER_REFERENCE_OFFSET) "($29)   # store enableProfilerReference to current stack" "\n"
     594    "jalr  $25" "\n"
     595    "sw    $9," STRINGIZE_VALUE_OF(GLOBAL_DATA_OFFSET) "($29)   # store globalData to current stack" "\n"
     596    "lw    $16," STRINGIZE_VALUE_OF(PRESERVED_S0_OFFSET) "($29)" "\n"
     597    "lw    $17," STRINGIZE_VALUE_OF(PRESERVED_S1_OFFSET) "($29)" "\n"
     598    "lw    $18," STRINGIZE_VALUE_OF(PRESERVED_S2_OFFSET) "($29)" "\n"
     599    "lw    $31," STRINGIZE_VALUE_OF(PRESERVED_RETURN_ADDRESS_OFFSET) "($29)" "\n"
     600    "jr    $31" "\n"
     601    "addiu $29,$29," STRINGIZE_VALUE_OF(STACK_LENGTH) "\n"
     602".set reorder" "\n"
     603".set macro" "\n"
     604".end " SYMBOL_STRING(ctiTrampoline) "\n"
     605);
     606
     607asm volatile(
     608".text" "\n"
     609".align 2" "\n"
     610".set noreorder" "\n"
     611".set nomacro" "\n"
     612".set nomips16" "\n"
     613".globl " SYMBOL_STRING(ctiVMThrowTrampoline) "\n"
     614".ent " SYMBOL_STRING(ctiVMThrowTrampoline) "\n"
     615SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n"
     616#if WTF_MIPS_PIC
     617    "lw    $28," STRINGIZE_VALUE_OF(PRESERVED_GP_OFFSET) "($29)" "\n"
     618".set macro" "\n"
     619    "la    $25," SYMBOL_STRING(cti_vm_throw) "\n"
     620".set nomacro" "\n"
     621    "bal " SYMBOL_STRING(cti_vm_throw) "\n"
     622    "move  $4,$29" "\n"
     623#else
     624    "jal " SYMBOL_STRING(cti_vm_throw) "\n"
     625    "move  $4,$29" "\n"
     626#endif
     627    "lw    $16," STRINGIZE_VALUE_OF(PRESERVED_S0_OFFSET) "($29)" "\n"
     628    "lw    $17," STRINGIZE_VALUE_OF(PRESERVED_S1_OFFSET) "($29)" "\n"
     629    "lw    $18," STRINGIZE_VALUE_OF(PRESERVED_S2_OFFSET) "($29)" "\n"
     630    "lw    $31," STRINGIZE_VALUE_OF(PRESERVED_RETURN_ADDRESS_OFFSET) "($29)" "\n"
     631    "jr    $31" "\n"
     632    "addiu $29,$29," STRINGIZE_VALUE_OF(STACK_LENGTH) "\n"
     633".set reorder" "\n"
     634".set macro" "\n"
     635".end " SYMBOL_STRING(ctiVMThrowTrampoline) "\n"
     636);
     637
     638asm volatile(
     639".text" "\n"
     640".align 2" "\n"
     641".set noreorder" "\n"
     642".set nomacro" "\n"
     643".set nomips16" "\n"
     644".globl " SYMBOL_STRING(ctiOpThrowNotCaught) "\n"
     645".ent " SYMBOL_STRING(ctiOpThrowNotCaught) "\n"
     646SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n"
     647    "lw    $16," STRINGIZE_VALUE_OF(PRESERVED_S0_OFFSET) "($29)" "\n"
     648    "lw    $17," STRINGIZE_VALUE_OF(PRESERVED_S1_OFFSET) "($29)" "\n"
     649    "lw    $18," STRINGIZE_VALUE_OF(PRESERVED_S2_OFFSET) "($29)" "\n"
     650    "lw    $31," STRINGIZE_VALUE_OF(PRESERVED_RETURN_ADDRESS_OFFSET) "($29)" "\n"
     651    "jr    $31" "\n"
     652    "addiu $29,$29," STRINGIZE_VALUE_OF(STACK_LENGTH) "\n"
     653".set reorder" "\n"
     654".set macro" "\n"
     655".end " SYMBOL_STRING(ctiOpThrowNotCaught) "\n"
     656);
     657#endif
    628658
    629659#if COMPILER(GCC) && CPU(ARM_THUMB2)
     
    804834
    805835#elif CPU(MIPS)
    806     ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, preservedGP) == 28);
    807     ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, preservedS0) == 32);
    808     ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, preservedS1) == 36);
    809     ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, preservedS2) == 40);
    810     ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, preservedReturnAddress) == 44);
    811     ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, thunkReturnAddress) == 48);
    812     ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, registerFile) == 52);
    813     ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, callFrame) == 56);
    814     ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, exception) == 60);
    815     ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, enabledProfilerReference) == 64);
    816     ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, globalData) == 68);
     836    ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, preservedGP) == PRESERVED_GP_OFFSET);
     837    ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, preservedS0) == PRESERVED_S0_OFFSET);
     838    ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, preservedS1) == PRESERVED_S1_OFFSET);
     839    ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, preservedS2) == PRESERVED_S2_OFFSET);
     840    ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, preservedReturnAddress) == PRESERVED_RETURN_ADDRESS_OFFSET);
     841    ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, thunkReturnAddress) == THUNK_RETURN_ADDRESS_OFFSET);
     842    ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, registerFile) == REGISTER_FILE_OFFSET);
     843    ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, callFrame) == CALLFRAME_OFFSET);
     844    ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, exception) == EXCEPTION_OFFSET);
     845    ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, enabledProfilerReference) == ENABLE_PROFILER_REFERENCE_OFFSET);
     846    ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, globalData) == GLOBAL_DATA_OFFSET);
    817847
    818848#endif
     
    10871117        ".ent " SYMBOL_STRING(cti_##op) "\n" \
    10881118        SYMBOL_STRING(cti_##op) ":" "\n" \
    1089         "lw    $28,28($29)" "\n" \
    1090         "sw    $31,48($29)" "\n" \
     1119        "lw    $28," STRINGIZE_VALUE_OF(PRESERVED_GP_OFFSET) "($29)" "\n" \
     1120        "sw    $31," STRINGIZE_VALUE_OF(THUNK_RETURN_ADDRESS_OFFSET) "($29)" "\n" \
    10911121        ".set macro" "\n" \
    10921122        "la    $25," SYMBOL_STRING(JITStubThunked_##op) "\n" \
     
    10941124        "bal " SYMBOL_STRING(JITStubThunked_##op) "\n" \
    10951125        "nop" "\n" \
    1096         "lw    $31,48($29)" "\n" \
     1126        "lw    $31," STRINGIZE_VALUE_OF(THUNK_RETURN_ADDRESS_OFFSET) "($29)" "\n" \
    10971127        "jr    $31" "\n" \
    10981128        "nop" "\n" \
     
    11171147        ".ent " SYMBOL_STRING(cti_##op) "\n" \
    11181148        SYMBOL_STRING(cti_##op) ":" "\n" \
    1119         "sw    $31,48($29)" "\n" \
     1149        "sw    $31," STRINGIZE_VALUE_OF(THUNK_RETURN_ADDRESS_OFFSET) "($29)" "\n" \
    11201150        "jal " SYMBOL_STRING(JITStubThunked_##op) "\n" \
    11211151        "nop" "\n" \
    1122         "lw    $31,48($29)" "\n" \
     1152        "lw    $31," STRINGIZE_VALUE_OF(THUNK_RETURN_ADDRESS_OFFSET) "($29)" "\n" \
    11231153        "jr    $31" "\n" \
    11241154        "nop" "\n" \
  • trunk/JavaScriptCore/jit/JITStubs.h

    r66150 r66846  
    205205#elif CPU(MIPS)
    206206    struct JITStackFrame {
    207         void* reserved; // Unused
     207        JITStubArg reserved; // Unused
    208208        JITStubArg args[6];
     209
     210#if USE(JSVALUE32_64)
     211        void* padding; // Make the overall stack length 8-byte aligned.
     212#endif
    209213
    210214        void* preservedGP; // store GP when using PIC code
Note: See TracChangeset for help on using the changeset viewer.