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:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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" \
Note: See TracChangeset for help on using the changeset viewer.