Changeset 225301 in webkit
- Timestamp:
- Nov 29, 2017 4:16:19 PM (6 years ago)
- Location:
- trunk/Source
- Files:
-
- 1 added
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
- Property svn:executable deleted
r225293 r225301 1 2017-11-29 Stanislav Ocovaj <stanislav.ocovaj@rt-rk.com> 2 3 [MIPS][JSC] Implement MacroAssembler::probe support on MIPS 4 https://bugs.webkit.org/show_bug.cgi?id=175447 5 6 Reviewed by Carlos Alberto Lopez Perez. 7 8 This patch allows DFG JIT to be enabled on MIPS platforms. 9 10 * Sources.txt: 11 * assembler/MIPSAssembler.h: 12 (JSC::MIPSAssembler::lastSPRegister): 13 (JSC::MIPSAssembler::numberOfSPRegisters): 14 (JSC::MIPSAssembler::sprName): 15 * assembler/MacroAssemblerMIPS.cpp: Added. 16 (JSC::MacroAssembler::probe): 17 * assembler/ProbeContext.cpp: 18 (JSC::Probe::executeProbe): 19 * assembler/ProbeContext.h: 20 (JSC::Probe::CPUState::pc): 21 * assembler/testmasm.cpp: 22 (JSC::isSpecialGPR): 23 (JSC::testProbePreservesGPRS): 24 (JSC::testProbeModifiesStackPointer): 25 (JSC::testProbeModifiesStackValues): 26 1 27 2017-11-29 Matt Lewis <jlewis3@apple.com> 2 28 -
trunk/Source/JavaScriptCore/Sources.txt
r225293 r225301 48 48 assembler/MacroAssemblerARMv7.cpp 49 49 assembler/MacroAssemblerCodeRef.cpp 50 assembler/MacroAssemblerMIPS.cpp 50 51 assembler/MacroAssemblerPrinter.cpp 51 52 assembler/MacroAssemblerX86Common.cpp -
trunk/Source/JavaScriptCore/assembler/MIPSAssembler.h
r225293 r225301 114 114 fexr = 26, 115 115 fenr = 28, 116 fcsr = 31 116 fcsr = 31, 117 pc 117 118 } SPRegisterID; 118 119 … … 166 167 167 168 static constexpr SPRegisterID firstSPRegister() { return MIPSRegisters::fir; } 168 static constexpr SPRegisterID lastSPRegister() { return MIPSRegisters:: fcsr; }169 static constexpr unsigned numberOfSPRegisters() { return 5; }169 static constexpr SPRegisterID lastSPRegister() { return MIPSRegisters::pc; } 170 static constexpr unsigned numberOfSPRegisters() { return lastSPRegister() - firstSPRegister() + 1; } 170 171 171 172 static constexpr FPRegisterID firstFPRegister() { return MIPSRegisters::f0; } … … 198 199 case MIPSRegisters::fcsr: 199 200 return "fcsr"; 201 case MIPSRegisters::pc: 202 return "pc"; 200 203 default: 201 204 RELEASE_ASSERT_NOT_REACHED(); -
trunk/Source/JavaScriptCore/assembler/ProbeContext.cpp
r225293 r225301 41 41 void* originalLR = cpu.gpr<void*>(ARM64Registers::lr); 42 42 void* originalPC = cpu.pc(); 43 #elif CPU(MIPS) 44 auto& cpu = context.cpu; 45 void* originalRA = cpu.gpr<void*>(MIPSRegisters::ra); 46 void* originalPC = cpu.pc(); 43 47 #endif 44 48 … … 50 54 // The ARM64 probe trampoline does not support changing both lr and pc. 51 55 RELEASE_ASSERT(originalPC == cpu.pc() || originalLR == cpu.gpr<void*>(ARM64Registers::lr)); 56 #elif CPU(MIPS) 57 // The MIPS probe trampoline does not support changing both ra and pc. 58 RELEASE_ASSERT(originalPC == cpu.pc() || originalRA == cpu.gpr<void*>(MIPSRegisters::ra)); 52 59 #endif 53 60 -
trunk/Source/JavaScriptCore/assembler/ProbeContext.h
r225293 r225301 116 116 return *reinterpret_cast<void**>(&gpr(ARMRegisters::pc)); 117 117 #elif CPU(MIPS) 118 RELEASE_ASSERT_NOT_REACHED();118 return *reinterpret_cast<void**>(&spr(MIPSRegisters::pc)); 119 119 #else 120 120 #error "Unsupported CPU" -
trunk/Source/JavaScriptCore/assembler/testmasm.cpp
r225293 r225301 136 136 if (id == ARM64Registers::x18) 137 137 return true; 138 #elif CPU(MIPS) 139 if (id == MIPSRegisters::zero || id == MIPSRegisters::k0 || id == MIPSRegisters::k1) 140 return true; 138 141 #endif 139 142 return false; … … 401 404 } 402 405 for (auto id = CCallHelpers::firstFPRegister(); id <= CCallHelpers::lastFPRegister(); id = nextID(id)) 406 #if CPU(MIPS) 407 if (!(id & 1)) 408 #endif 403 409 CHECK_EQ(cpu.fpr<uint64_t>(id), testWord64(id)); 404 410 }); … … 427 433 } 428 434 for (auto id = CCallHelpers::firstFPRegister(); id <= CCallHelpers::lastFPRegister(); id = nextID(id)) 435 #if CPU(MIPS) 436 if (!(id & 1)) 437 #endif 429 438 CHECK_EQ(cpu.fpr<uint64_t>(id), originalState.fpr<uint64_t>(id)); 430 439 }); … … 442 451 void* originalSP { nullptr }; 443 452 void* modifiedSP { nullptr }; 453 #if !(CPU(MIPS)) 444 454 uintptr_t modifiedFlags { 0 }; 455 #endif 445 456 446 457 #if CPU(X86) || CPU(X86_64) … … 474 485 } 475 486 487 #if !(CPU(MIPS)) 476 488 originalState.spr(flagsSPR) = cpu.spr(flagsSPR); 477 489 modifiedFlags = originalState.spr(flagsSPR) ^ flagsMask; 478 490 cpu.spr(flagsSPR) = modifiedFlags; 491 #endif 479 492 480 493 originalSP = cpu.sp(); … … 497 510 } 498 511 for (auto id = CCallHelpers::firstFPRegister(); id <= CCallHelpers::lastFPRegister(); id = nextID(id)) 512 #if CPU(MIPS) 513 if (!(id & 1)) 514 #endif 499 515 CHECK_EQ(cpu.fpr<uint64_t>(id), testWord64(id)); 516 #if !(CPU(MIPS)) 500 517 CHECK_EQ(cpu.spr(flagsSPR) & flagsMask, modifiedFlags & flagsMask); 518 #endif 501 519 CHECK_EQ(cpu.sp(), modifiedSP); 502 520 }); … … 513 531 for (auto id = CCallHelpers::firstFPRegister(); id <= CCallHelpers::lastFPRegister(); id = nextID(id)) 514 532 cpu.fpr(id) = originalState.fpr(id); 533 #if !(CPU(MIPS)) 515 534 cpu.spr(flagsSPR) = originalState.spr(flagsSPR); 535 #endif 516 536 cpu.sp() = originalSP; 517 537 }); … … 527 547 } 528 548 for (auto id = CCallHelpers::firstFPRegister(); id <= CCallHelpers::lastFPRegister(); id = nextID(id)) 549 #if CPU(MIPS) 550 if (!(id & 1)) 551 #endif 529 552 CHECK_EQ(cpu.fpr<uint64_t>(id), originalState.fpr<uint64_t>(id)); 553 #if !(CPU(MIPS)) 530 554 CHECK_EQ(cpu.spr(flagsSPR) & flagsMask, originalState.spr(flagsSPR) & flagsMask); 555 #endif 531 556 CHECK_EQ(cpu.sp(), originalSP); 532 557 }); … … 641 666 cpu.fpr(id) = bitwise_cast<double>(testWord64(id)); 642 667 } 668 #if !(CPU(MIPS)) 643 669 originalState.spr(flagsSPR) = cpu.spr(flagsSPR); 644 670 modifiedFlags = originalState.spr(flagsSPR) ^ flagsMask; 645 671 cpu.spr(flagsSPR) = modifiedFlags; 672 #endif 646 673 647 674 // Ensure that we'll be writing over the regions of the stack where the Probe::State is. … … 677 704 } 678 705 for (auto id = CCallHelpers::firstFPRegister(); id <= CCallHelpers::lastFPRegister(); id = nextID(id)) 706 #if CPU(MIPS) 707 if (!(id & 1)) 708 #endif 679 709 CHECK_EQ(cpu.fpr<uint64_t>(id), testWord64(id)); 710 #if !(CPU(MIPS)) 680 711 CHECK_EQ(cpu.spr(flagsSPR) & flagsMask, modifiedFlags & flagsMask); 712 #endif 681 713 CHECK_EQ(cpu.sp(), newSP); 682 714 … … 702 734 for (auto id = CCallHelpers::firstFPRegister(); id <= CCallHelpers::lastFPRegister(); id = nextID(id)) 703 735 cpu.fpr(id) = originalState.fpr(id); 736 #if !(CPU(MIPS)) 704 737 cpu.spr(flagsSPR) = originalState.spr(flagsSPR); 738 #endif 705 739 cpu.sp() = originalSP; 706 740 }); -
trunk/Source/WTF/ChangeLog
- Property svn:executable deleted
r225293 r225301 1 2017-11-29 Stanislav Ocovaj <stanislav.ocovaj@rt-rk.com> 2 3 [DFG][MIPS] Enable DFG JIT on MIPS. 4 https://bugs.webkit.org/show_bug.cgi?id=175447 5 6 Reviewed by Carlos Alberto Lopez Perez. 7 8 * wtf/Platform.h: 9 1 10 2017-11-29 Matt Lewis <jlewis3@apple.com> 2 11 -
trunk/Source/WTF/wtf/Platform.h
r225293 r225301 804 804 #define ENABLE_DFG_JIT 1 805 805 #endif 806 /* FIXME: MIPS cannot enable the DFG until it has support for MacroAssembler::probe(). 807 https://bugs.webkit.org/show_bug.cgi?id=175447 808 */ 806 /* Enable the DFG JIT on MIPS. */ 807 #if CPU(MIPS) 808 #define ENABLE_DFG_JIT 1 809 #endif 809 810 #endif 810 811 … … 825 826 #endif 826 827 827 #if CPU(X86) || CPU(X86_64) || CPU(ARM_THUMB2) || CPU(ARM64) || CPU(ARM_TRADITIONAL) 828 #if CPU(X86) || CPU(X86_64) || CPU(ARM_THUMB2) || CPU(ARM64) || CPU(ARM_TRADITIONAL) || CPU(MIPS) 828 829 #define ENABLE_MASM_PROBE 1 829 830 #else
Note: See TracChangeset
for help on using the changeset viewer.