Changeset 138970 in webkit
- Timestamp:
- Jan 7, 2013 11:40:10 AM (11 years ago)
- Location:
- trunk/Source
- Files:
-
- 1 added
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r138957 r138970 1 2013-01-07 Balazs Kilvady <kilvadyb@homejinni.com> 2 3 MIPS LLInt implementation. 4 https://bugs.webkit.org/show_bug.cgi?id=99706 5 6 Reviewed by Filip Pizlo. 7 8 LLInt implementation for MIPS. 9 10 * assembler/MacroAssemblerMIPS.h: 11 (JSC::MacroAssemblerMIPS::jump): 12 * dfg/DFGOperations.cpp: 13 (JSC): 14 * jit/JITStubs.cpp: 15 (JSC): 16 * jit/JITStubs.h: 17 (JITStackFrame): 18 * llint/LLIntOfflineAsmConfig.h: 19 * llint/LowLevelInterpreter.asm: 20 * llint/LowLevelInterpreter32_64.asm: 21 * offlineasm/backends.rb: 22 * offlineasm/instructions.rb: 23 * offlineasm/mips.rb: Added. 24 1 25 2013-01-07 Mark Hahnenberg <mhahnenberg@apple.com> 2 26 -
trunk/Source/JavaScriptCore/assembler/MacroAssemblerMIPS.h
r137919 r138970 1323 1323 void jump(RegisterID target) 1324 1324 { 1325 m_assembler.jr(target); 1325 move(target, MIPSRegisters::t9); 1326 m_assembler.jr(MIPSRegisters::t9); 1326 1327 m_assembler.nop(); 1327 1328 } -
trunk/Source/JavaScriptCore/dfg/DFGOperations.cpp
r138201 r138970 48 48 #if ENABLE(JIT) 49 49 50 #if CPU(MIPS) 51 #if WTF_MIPS_PIC 52 #define LOAD_FUNCTION_TO_T9(function) \ 53 ".set noreorder" "\n" \ 54 ".cpload $25" "\n" \ 55 ".set reorder" "\n" \ 56 "la $t9, " LOCAL_REFERENCE(function) "\n" 57 #else 58 #define LOAD_FUNCTION_TO_T9(function) "" "\n" 59 #endif 60 #endif 61 50 62 #if ENABLE(DFG_JIT) 51 63 … … 199 211 SYMBOL_STRING(function) ":" "\n" \ 200 212 INSTRUCTION_STORE_RETURN_ADDRESS_EJCI "\n" \ 213 "b " LOCAL_REFERENCE(function) "WithReturnAddress" "\n" \ 214 ); 215 216 #elif COMPILER(GCC) && CPU(MIPS) 217 218 #define FUNCTION_WRAPPER_WITH_RETURN_ADDRESS_E(function) \ 219 asm( \ 220 ".text" "\n" \ 221 ".globl " SYMBOL_STRING(function) "\n" \ 222 HIDE_SYMBOL(function) "\n" \ 223 SYMBOL_STRING(function) ":" "\n" \ 224 LOAD_FUNCTION_TO_T9(function##WithReturnAddress) \ 225 "move $a1, $ra" "\n" \ 226 "b " LOCAL_REFERENCE(function) "WithReturnAddress" "\n" \ 227 ); 228 229 #define FUNCTION_WRAPPER_WITH_RETURN_ADDRESS_ECI(function) \ 230 asm( \ 231 ".text" "\n" \ 232 ".globl " SYMBOL_STRING(function) "\n" \ 233 HIDE_SYMBOL(function) "\n" \ 234 SYMBOL_STRING(function) ":" "\n" \ 235 LOAD_FUNCTION_TO_T9(function##WithReturnAddress) \ 236 "move $a3, $ra" "\n" \ 237 "b " LOCAL_REFERENCE(function) "WithReturnAddress" "\n" \ 238 ); 239 240 #define FUNCTION_WRAPPER_WITH_RETURN_ADDRESS_EJI(function) \ 241 asm( \ 242 ".text" "\n" \ 243 ".globl " SYMBOL_STRING(function) "\n" \ 244 HIDE_SYMBOL(function) "\n" \ 245 SYMBOL_STRING(function) ":" "\n" \ 246 LOAD_FUNCTION_TO_T9(function##WithReturnAddress) \ 247 "sw $ra, 20($sp)" "\n" \ 248 "b " LOCAL_REFERENCE(function) "WithReturnAddress" "\n" \ 249 ); 250 251 #define FUNCTION_WRAPPER_WITH_RETURN_ADDRESS_EJCI(function) \ 252 asm( \ 253 ".text" "\n" \ 254 ".globl " SYMBOL_STRING(function) "\n" \ 255 HIDE_SYMBOL(function) "\n" \ 256 SYMBOL_STRING(function) ":" "\n" \ 257 LOAD_FUNCTION_TO_T9(function##WithReturnAddress) \ 258 "sw $ra, 24($sp)" "\n" \ 201 259 "b " LOCAL_REFERENCE(function) "WithReturnAddress" "\n" \ 202 260 ); … … 1639 1697 "b " LOCAL_REFERENCE(getHostCallReturnValueWithExecState) "\n" 1640 1698 ); 1699 #elif COMPILER(GCC) && CPU(MIPS) 1700 asm( 1701 ".text" "\n" 1702 ".globl " SYMBOL_STRING(getHostCallReturnValue) "\n" 1703 HIDE_SYMBOL(getHostCallReturnValue) "\n" 1704 SYMBOL_STRING(getHostCallReturnValue) ":" "\n" 1705 LOAD_FUNCTION_TO_T9(getHostCallReturnValueWithExecState) 1706 "lw $s0, -40($s0)" "\n" 1707 "move $a0, $s0" "\n" 1708 "b " LOCAL_REFERENCE(getHostCallReturnValueWithExecState) "\n" 1709 ); 1641 1710 #endif 1642 1711 -
trunk/Source/JavaScriptCore/jit/JITStubs.cpp
r138609 r138970 281 281 #define PRESERVED_S1_OFFSET 68 282 282 #define PRESERVED_S2_OFFSET 72 283 #define PRESERVED_RETURN_ADDRESS_OFFSET 76 284 #define THUNK_RETURN_ADDRESS_OFFSET 80 285 #define REGISTER_FILE_OFFSET 84 286 #define GLOBAL_DATA_OFFSET 100 287 #define STACK_LENGTH 104 283 #define PRESERVED_S3_OFFSET 76 284 #define PRESERVED_S4_OFFSET 80 285 #define PRESERVED_RETURN_ADDRESS_OFFSET 84 286 #define THUNK_RETURN_ADDRESS_OFFSET 88 287 #define REGISTER_FILE_OFFSET 92 288 #define GLOBAL_DATA_OFFSET 108 289 #define STACK_LENGTH 112 288 290 #elif CPU(SH4) 289 291 #define SYMBOL_STRING(name) #name … … 452 454 "addiu $29,$29,-" STRINGIZE_VALUE_OF(STACK_LENGTH) "\n" 453 455 "sw $31," STRINGIZE_VALUE_OF(PRESERVED_RETURN_ADDRESS_OFFSET) "($29)" "\n" 456 "sw $20," STRINGIZE_VALUE_OF(PRESERVED_S4_OFFSET) "($29)" "\n" 457 "sw $19," STRINGIZE_VALUE_OF(PRESERVED_S3_OFFSET) "($29)" "\n" 454 458 "sw $18," STRINGIZE_VALUE_OF(PRESERVED_S2_OFFSET) "($29)" "\n" 455 459 "sw $17," STRINGIZE_VALUE_OF(PRESERVED_S1_OFFSET) "($29)" "\n" … … 468 472 "lw $17," STRINGIZE_VALUE_OF(PRESERVED_S1_OFFSET) "($29)" "\n" 469 473 "lw $18," STRINGIZE_VALUE_OF(PRESERVED_S2_OFFSET) "($29)" "\n" 474 "lw $19," STRINGIZE_VALUE_OF(PRESERVED_S3_OFFSET) "($29)" "\n" 475 "lw $20," STRINGIZE_VALUE_OF(PRESERVED_S4_OFFSET) "($29)" "\n" 470 476 "lw $31," STRINGIZE_VALUE_OF(PRESERVED_RETURN_ADDRESS_OFFSET) "($29)" "\n" 471 477 "jr $31" "\n" … … 474 480 ".set macro" "\n" 475 481 ".end " SYMBOL_STRING(ctiTrampoline) "\n" 482 ".globl " SYMBOL_STRING(ctiTrampolineEnd) "\n" 483 HIDE_SYMBOL(ctiTrampolineEnd) "\n" 484 SYMBOL_STRING(ctiTrampolineEnd) ":" "\n" 476 485 ); 477 486 … … 486 495 SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n" 487 496 #if WTF_MIPS_PIC 488 "lw $28," STRINGIZE_VALUE_OF(PRESERVED_GP_OFFSET) "($29)" "\n"489 497 ".set macro" "\n" 498 ".cpload $31" "\n" 490 499 "la $25," SYMBOL_STRING(cti_vm_throw) "\n" 491 500 ".set nomacro" "\n" … … 499 508 "lw $17," STRINGIZE_VALUE_OF(PRESERVED_S1_OFFSET) "($29)" "\n" 500 509 "lw $18," STRINGIZE_VALUE_OF(PRESERVED_S2_OFFSET) "($29)" "\n" 510 "lw $19," STRINGIZE_VALUE_OF(PRESERVED_S3_OFFSET) "($29)" "\n" 511 "lw $20," STRINGIZE_VALUE_OF(PRESERVED_S4_OFFSET) "($29)" "\n" 501 512 "lw $31," STRINGIZE_VALUE_OF(PRESERVED_RETURN_ADDRESS_OFFSET) "($29)" "\n" 502 513 "jr $31" "\n" … … 519 530 "lw $17," STRINGIZE_VALUE_OF(PRESERVED_S1_OFFSET) "($29)" "\n" 520 531 "lw $18," STRINGIZE_VALUE_OF(PRESERVED_S2_OFFSET) "($29)" "\n" 532 "lw $19," STRINGIZE_VALUE_OF(PRESERVED_S3_OFFSET) "($29)" "\n" 533 "lw $20," STRINGIZE_VALUE_OF(PRESERVED_S4_OFFSET) "($29)" "\n" 521 534 "lw $31," STRINGIZE_VALUE_OF(PRESERVED_RETURN_ADDRESS_OFFSET) "($29)" "\n" 522 535 "jr $31" "\n" … … 1068 1081 ".ent " SYMBOL_STRING(cti_##op) "\n" \ 1069 1082 SYMBOL_STRING(cti_##op) ":" "\n" \ 1070 "lw $28," STRINGIZE_VALUE_OF(PRESERVED_GP_OFFSET) "($29)" "\n" \ 1083 ".set macro" "\n" \ 1084 ".cpload $25" "\n" \ 1071 1085 "sw $31," STRINGIZE_VALUE_OF(THUNK_RETURN_ADDRESS_OFFSET) "($29)" "\n" \ 1072 ".set macro" "\n" \1073 1086 "la $25," SYMBOL_STRING(JITStubThunked_##op) "\n" \ 1074 1087 ".set nomacro" "\n" \ -
trunk/Source/JavaScriptCore/jit/JITStubs.h
r138609 r138970 219 219 void* preservedS1; 220 220 void* preservedS2; 221 void* preservedS3; 222 void* preservedS4; 221 223 void* preservedReturnAddress; 222 224 -
trunk/Source/JavaScriptCore/llint/LLIntOfflineAsmConfig.h
r131269 r138970 39 39 #define OFFLINE_ASM_X86_64 0 40 40 #define OFFLINE_ASM_ARMv7s 0 41 #define OFFLINE_ASM_MIPS 0 41 42 42 43 #else // !ENABLE(LLINT_C_LOOP) … … 66 67 #else 67 68 #define OFFLINE_ASM_X86_64 0 69 #endif 70 71 #if CPU(MIPS) 72 #define OFFLINE_ASM_MIPS 1 73 #else 74 #define OFFLINE_ASM_MIPS 0 68 75 #endif 69 76 … … 112 119 #endif 113 120 121 #if CPU(MIPS) 122 #ifdef WTF_MIPS_PIC 123 #define S(x) #x 124 #define SX(x) S(x) 125 #define OFFLINE_ASM_CPLOAD(reg) \ 126 ".set noreorder\n" \ 127 ".cpload " SX(reg) "\n" \ 128 ".set reorder\n" 129 #else 130 #define OFFLINE_ASM_CPLOAD(reg) 131 #endif 132 #endif 133 114 134 #endif // LLIntOfflineAsmConfig_h -
trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.asm
r133953 r138970 183 183 184 184 macro preserveReturnAddressAfterCall(destinationRegister) 185 if C_LOOP 186 # In our case, we're only preserving the bytecode vPC. 187 move lr, destinationRegister 188 elsif ARMv7 185 if C_LOOP or ARMv7 or MIPS 186 # In C_LOOP case, we're only preserving the bytecode vPC. 189 187 move lr, destinationRegister 190 188 elsif X86 or X86_64 … … 196 194 197 195 macro restoreReturnAddressBeforeReturn(sourceRegister) 198 if C_LOOP 199 # In our case, we're only restoring the bytecode vPC. 200 move sourceRegister, lr 201 elsif ARMv7 196 if C_LOOP or ARMv7 or MIPS 197 # In C_LOOP case, we're only restoring the bytecode vPC. 202 198 move sourceRegister, lr 203 199 elsif X86 or X86_64 -
trunk/Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm
r137937 r138970 114 114 poke arg2, 1 115 115 call function 116 elsif MIPS 117 move arg1, a0 118 move arg2, a1 119 call function 116 120 elsif C_LOOP 117 121 cloopCallSlowPath function, arg1, arg2 … … 134 138 poke arg3, 2 135 139 poke arg4, 3 140 call function 141 elsif MIPS 142 move arg1, a0 143 move arg2, a1 144 move arg3, a2 145 move arg4, a3 136 146 call function 137 147 elsif C_LOOP … … 1829 1839 restoreReturnAddressBeforeReturn(t3) 1830 1840 loadp JITStackFrame::globalData[sp], t3 1841 elsif MIPS 1842 loadp JITStackFrame::globalData[sp], t3 1843 storep cfr, JSGlobalData::topCallFrame[t3] 1844 move t0, t2 1845 preserveReturnAddressAfterCall(t3) 1846 storep t3, ReturnPC[cfr] 1847 move cfr, t0 1848 loadi Callee + PayloadOffset[cfr], t1 1849 loadp JSFunction::m_executable[t1], t1 1850 move t2, cfr 1851 move t0, a0 1852 call executableOffsetToFunction[t1] 1853 restoreReturnAddressBeforeReturn(t3) 1854 loadp JITStackFrame::globalData[sp], t3 1831 1855 elsif C_LOOP 1832 1856 loadp JITStackFrame::globalData[sp], t3 -
trunk/Source/JavaScriptCore/offlineasm/backends.rb
r128815 r138970 26 26 require "ast" 27 27 require "x86" 28 require "mips" 28 29 require "cloop" 29 30 … … 33 34 "X86_64", 34 35 "ARMv7", 36 "MIPS", 35 37 "C_LOOP" 36 38 ] … … 46 48 "X86_64", 47 49 "ARMv7", 50 "MIPS", 48 51 "C_LOOP" 49 52 ] -
trunk/Source/JavaScriptCore/offlineasm/instructions.rb
r133551 r138970 266 266 ] 267 267 268 MIPS_INSTRUCTIONS = 269 [ 270 "movz", 271 "movn", 272 "slt", 273 "sltu", 274 "pichdr", 275 "pichdrra" 276 ] 277 268 278 CXX_INSTRUCTIONS = 269 279 [ … … 282 292 ] 283 293 284 INSTRUCTIONS = MACRO_INSTRUCTIONS + X86_INSTRUCTIONS + ARMv7_INSTRUCTIONS + CXX_INSTRUCTIONS294 INSTRUCTIONS = MACRO_INSTRUCTIONS + X86_INSTRUCTIONS + ARMv7_INSTRUCTIONS + MIPS_INSTRUCTIONS + CXX_INSTRUCTIONS 285 295 286 296 INSTRUCTION_PATTERN = Regexp.new('\\A((' + INSTRUCTIONS.join(')|(') + '))\\Z') -
trunk/Source/WTF/ChangeLog
r138903 r138970 1 2013-01-07 Balazs Kilvady <kilvadyb@homejinni.com> 2 3 MIPS LLInt implementation. 4 https://bugs.webkit.org/show_bug.cgi?id=99706 5 6 Reviewed by Filip Pizlo. 7 8 LLInt implementation for MIPS. 9 10 * wtf/Platform.h: 11 1 12 2013-01-05 Jonathan Liu <net147@gmail.com> 2 13 -
trunk/Source/WTF/wtf/Platform.h
r137449 r138970 928 928 && (OS(DARWIN) || OS(LINUX)) \ 929 929 && (PLATFORM(MAC) || PLATFORM(IOS) || PLATFORM(GTK) || PLATFORM(QT)) \ 930 && (CPU(X86) || CPU(X86_64) || CPU(ARM_THUMB2) )930 && (CPU(X86) || CPU(X86_64) || CPU(ARM_THUMB2) || CPU(MIPS)) 931 931 #define ENABLE_LLINT 1 932 932 #endif
Note: See TracChangeset
for help on using the changeset viewer.