Changeset 222009 in webkit for trunk/Source/JavaScriptCore/jit/AssemblyHelpers.cpp
- Timestamp:
- Sep 13, 2017, 9:21:05 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/jit/AssemblyHelpers.cpp
r221832 r222009 51 51 } 52 52 53 // FIXME: remove this when we fix https://bugs.webkit.org/show_bug.cgi?id=175145.54 53 Vector<BytecodeAndMachineOffset>& AssemblyHelpers::decodedCodeMapFor(CodeBlock* codeBlock) 55 54 { … … 822 821 #endif // ENABLE(WEBASSEMBLY) 823 822 823 void AssemblyHelpers::debugCall(VM& vm, V_DebugOperation_EPP function, void* argument) 824 { 825 size_t scratchSize = sizeof(EncodedJSValue) * (GPRInfo::numberOfRegisters + FPRInfo::numberOfRegisters); 826 ScratchBuffer* scratchBuffer = vm.scratchBufferForSize(scratchSize); 827 EncodedJSValue* buffer = static_cast<EncodedJSValue*>(scratchBuffer->dataBuffer()); 828 829 for (unsigned i = 0; i < GPRInfo::numberOfRegisters; ++i) { 830 #if USE(JSVALUE64) 831 store64(GPRInfo::toRegister(i), buffer + i); 832 #else 833 store32(GPRInfo::toRegister(i), buffer + i); 834 #endif 835 } 836 837 for (unsigned i = 0; i < FPRInfo::numberOfRegisters; ++i) { 838 move(TrustedImmPtr(buffer + GPRInfo::numberOfRegisters + i), GPRInfo::regT0); 839 storeDouble(FPRInfo::toRegister(i), GPRInfo::regT0); 840 } 841 842 // Tell GC mark phase how much of the scratch buffer is active during call. 843 move(TrustedImmPtr(scratchBuffer->addressOfActiveLength()), GPRInfo::regT0); 844 storePtr(TrustedImmPtr(scratchSize), GPRInfo::regT0); 845 846 #if CPU(X86_64) || CPU(ARM) || CPU(ARM64) || CPU(MIPS) 847 move(TrustedImmPtr(buffer), GPRInfo::argumentGPR2); 848 move(TrustedImmPtr(argument), GPRInfo::argumentGPR1); 849 move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0); 850 GPRReg scratch = selectScratchGPR(GPRInfo::argumentGPR0, GPRInfo::argumentGPR1, GPRInfo::argumentGPR2); 851 #elif CPU(X86) 852 poke(GPRInfo::callFrameRegister, 0); 853 poke(TrustedImmPtr(argument), 1); 854 poke(TrustedImmPtr(buffer), 2); 855 GPRReg scratch = GPRInfo::regT0; 856 #else 857 #error "JIT not supported on this platform." 858 #endif 859 move(TrustedImmPtr(reinterpret_cast<void*>(function)), scratch); 860 call(scratch); 861 862 move(TrustedImmPtr(scratchBuffer->addressOfActiveLength()), GPRInfo::regT0); 863 storePtr(TrustedImmPtr(0), GPRInfo::regT0); 864 865 for (unsigned i = 0; i < FPRInfo::numberOfRegisters; ++i) { 866 move(TrustedImmPtr(buffer + GPRInfo::numberOfRegisters + i), GPRInfo::regT0); 867 loadDouble(GPRInfo::regT0, FPRInfo::toRegister(i)); 868 } 869 for (unsigned i = 0; i < GPRInfo::numberOfRegisters; ++i) { 870 #if USE(JSVALUE64) 871 load64(buffer + i, GPRInfo::toRegister(i)); 872 #else 873 load32(buffer + i, GPRInfo::toRegister(i)); 874 #endif 875 } 876 } 877 824 878 void AssemblyHelpers::copyCalleeSavesToVMEntryFrameCalleeSavesBufferImpl(GPRReg calleeSavesBuffer) 825 879 {
Note:
See TracChangeset
for help on using the changeset viewer.