Ignore:
Timestamp:
Mar 29, 2010, 7:59:20 PM (15 years ago)
Author:
[email protected]
Message:

2010-03-29 Chao-ying Fu <[email protected]>

Reviewed by Oliver Hunt.

MIPS JIT Supports
https://bugs.webkit.org/show_bug.cgi?id=30144

The following changes enable MIPS JIT.

  • assembler/MIPSAssembler.h: (JSC::MIPSAssembler::lbu): (JSC::MIPSAssembler::linkWithOffset):
  • assembler/MacroAssemblerMIPS.h: (JSC::MacroAssemblerMIPS::load8): (JSC::MacroAssemblerMIPS::branch8): (JSC::MacroAssemblerMIPS::branchTest8): (JSC::MacroAssemblerMIPS::setTest8): (JSC::MacroAssemblerMIPS::setTest32):
  • jit/JIT.h:
  • jit/JITInlineMethods.h: (JSC::JIT::preserveReturnAddressAfterCall): (JSC::JIT::restoreReturnAddressBeforeReturn):
  • jit/JITOpcodes.cpp:
  • jit/JITStubs.cpp: (JSC::JITThunks::JITThunks):
  • jit/JITStubs.h: (JSC::JITStackFrame::returnAddressSlot):
  • wtf/Platform.h:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/jit/JITStubs.cpp

    r56000 r56759  
    481481#define PRESERVEDR4_OFFSET          36
    482482
     483#elif CPU(MIPS)
     484
     485#if USE(JIT_STUB_ARGUMENT_VA_LIST)
     486#error "JIT_STUB_ARGUMENT_VA_LIST not supported on MIPS."
     487#endif
     488
     489asm volatile(
     490".text" "\n"
     491".align 2" "\n"
     492".set noreorder" "\n"
     493".set nomacro" "\n"
     494".set nomips16" "\n"
     495".globl " SYMBOL_STRING(ctiTrampoline) "\n"
     496".ent " SYMBOL_STRING(ctiTrampoline) "\n"
     497SYMBOL_STRING(ctiTrampoline) ":" "\n"
     498    "addiu $29,$29,-72" "\n"
     499    "sw    $31,44($29)" "\n"
     500    "sw    $18,40($29)" "\n"
     501    "sw    $17,36($29)" "\n"
     502    "sw    $16,32($29)" "\n"
     503#if WTF_MIPS_PIC
     504    "sw    $28,28($29)" "\n"
     505#endif
     506    "move  $16,$6       # set callFrameRegister" "\n"
     507    "li    $17,512      # set timeoutCheckRegister" "\n"
     508    "move  $25,$4       # move executableAddress to t9" "\n"
     509    "sw    $5,52($29)   # store registerFile to current stack" "\n"
     510    "sw    $6,56($29)   # store callFrame to curent stack" "\n"
     511    "sw    $7,60($29)   # store exception to current stack" "\n"
     512    "lw    $8,88($29)   # load enableProfilerReference from previous stack" "\n"
     513    "lw    $9,92($29)   # load globalData from previous stack" "\n"
     514    "sw    $8,64($29)   # store enableProfilerReference to current stack" "\n"
     515    "jalr  $25" "\n"
     516    "sw    $9,68($29)   # store globalData to current stack" "\n"
     517    "lw    $16,32($29)" "\n"
     518    "lw    $17,36($29)" "\n"
     519    "lw    $18,40($29)" "\n"
     520    "lw    $31,44($29)" "\n"
     521    "jr    $31" "\n"
     522    "addiu $29,$29,72" "\n"
     523".set reorder" "\n"
     524".set macro" "\n"
     525".end " SYMBOL_STRING(ctiTrampoline) "\n"
     526);
     527
     528asm volatile(
     529".text" "\n"
     530".align 2" "\n"
     531".set noreorder" "\n"
     532".set nomacro" "\n"
     533".set nomips16" "\n"
     534".globl " SYMBOL_STRING(ctiVMThrowTrampoline) "\n"
     535".ent " SYMBOL_STRING(ctiVMThrowTrampoline) "\n"
     536SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n"
     537#if WTF_MIPS_PIC
     538    "lw    $28,28($29)" "\n"
     539".set macro" "\n"
     540    "la    $25," SYMBOL_STRING(cti_vm_throw) "\n"
     541".set nomacro" "\n"
     542    "bal " SYMBOL_STRING(cti_vm_throw) "\n"
     543    "move  $4,$29" "\n"
     544#else
     545    "jal " SYMBOL_STRING(cti_vm_throw) "\n"
     546    "move  $4,$29" "\n"
     547#endif
     548    "lw    $16,32($29)" "\n"
     549    "lw    $17,36($29)" "\n"
     550    "lw    $18,40($29)" "\n"
     551    "lw    $31,44($29)" "\n"
     552    "jr    $31" "\n"
     553    "addiu $29,$29,72" "\n"
     554".set reorder" "\n"
     555".set macro" "\n"
     556".end " SYMBOL_STRING(ctiVMThrowTrampoline) "\n"
     557);
     558
     559asm volatile(
     560".text" "\n"
     561".align 2" "\n"
     562".set noreorder" "\n"
     563".set nomacro" "\n"
     564".set nomips16" "\n"
     565".globl " SYMBOL_STRING(ctiOpThrowNotCaught) "\n"
     566".ent " SYMBOL_STRING(ctiOpThrowNotCaught) "\n"
     567SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n"
     568    "lw    $16,32($29)" "\n"
     569    "lw    $17,36($29)" "\n"
     570    "lw    $18,40($29)" "\n"
     571    "lw    $31,44($29)" "\n"
     572    "jr    $31" "\n"
     573    "addiu $29,$29,72" "\n"
     574".set reorder" "\n"
     575".set macro" "\n"
     576".end " SYMBOL_STRING(ctiOpThrowNotCaught) "\n"
     577);
     578
    483579#elif COMPILER(RVCT) && CPU(ARM_TRADITIONAL)
    484580
     
    723819    ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, preservedR4) == PRESERVEDR4_OFFSET);
    724820
     821
     822#elif CPU(MIPS)
     823    ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, preservedGP) == 28);
     824    ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, preservedS0) == 32);
     825    ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, preservedS1) == 36);
     826    ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, preservedS2) == 40);
     827    ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, preservedReturnAddress) == 44);
     828    ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, thunkReturnAddress) == 48);
     829    ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, registerFile) == 52);
     830    ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, callFrame) == 56);
     831    ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, exception) == 60);
     832    ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, enabledProfilerReference) == 64);
     833    ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, globalData) == 68);
     834
    725835#endif
    726836}
     
    9801090        ); \
    9811091    rtype JITStubThunked_##op(STUB_ARGS_DECLARATION) \
     1092
     1093#elif CPU(MIPS)
     1094#if WTF_MIPS_PIC
     1095#define DEFINE_STUB_FUNCTION(rtype, op) \
     1096    extern "C" { \
     1097        rtype JITStubThunked_##op(STUB_ARGS_DECLARATION); \
     1098    }; \
     1099    asm volatile( \
     1100        ".text" "\n" \
     1101        ".align 2" "\n" \
     1102        ".set noreorder" "\n" \
     1103        ".set nomacro" "\n" \
     1104        ".set nomips16" "\n" \
     1105        ".globl " SYMBOL_STRING(cti_##op) "\n" \
     1106        ".ent " SYMBOL_STRING(cti_##op) "\n" \
     1107        SYMBOL_STRING(cti_##op) ":" "\n" \
     1108        "lw    $28,28($29)" "\n" \
     1109        "sw    $31,48($29)" "\n" \
     1110        ".set macro" "\n" \
     1111        "la    $25," SYMBOL_STRING(JITStubThunked_##op) "\n" \
     1112        ".set nomacro" "\n" \
     1113        "bal " SYMBOL_STRING(JITStubThunked_##op) "\n" \
     1114        "nop" "\n" \
     1115        "lw    $31,48($29)" "\n" \
     1116        "jr    $31" "\n" \
     1117        "nop" "\n" \
     1118        ".set reorder" "\n" \
     1119        ".set macro" "\n" \
     1120        ".end " SYMBOL_STRING(cti_##op) "\n" \
     1121        ); \
     1122    rtype JITStubThunked_##op(STUB_ARGS_DECLARATION)
     1123
     1124#else // WTF_MIPS_PIC
     1125#define DEFINE_STUB_FUNCTION(rtype, op) \
     1126    extern "C" { \
     1127        rtype JITStubThunked_##op(STUB_ARGS_DECLARATION); \
     1128    }; \
     1129    asm volatile( \
     1130        ".text" "\n" \
     1131        ".align 2" "\n" \
     1132        ".set noreorder" "\n" \
     1133        ".set nomacro" "\n" \
     1134        ".set nomips16" "\n" \
     1135        ".globl " SYMBOL_STRING(cti_##op) "\n" \
     1136        ".ent " SYMBOL_STRING(cti_##op) "\n" \
     1137        SYMBOL_STRING(cti_##op) ":" "\n" \
     1138        "sw    $31,48($29)" "\n" \
     1139        "jal " SYMBOL_STRING(JITStubThunked_##op) "\n" \
     1140        "nop" "\n" \
     1141        "lw    $31,48($29)" "\n" \
     1142        "jr    $31" "\n" \
     1143        "nop" "\n" \
     1144        ".set reorder" "\n" \
     1145        ".set macro" "\n" \
     1146        ".end " SYMBOL_STRING(cti_##op) "\n" \
     1147        ); \
     1148    rtype JITStubThunked_##op(STUB_ARGS_DECLARATION)
     1149
     1150#endif
    9821151
    9831152#elif CPU(ARM_TRADITIONAL) && COMPILER(GCC)
Note: See TracChangeset for help on using the changeset viewer.