Changeset 245251 in webkit
- Timestamp:
- May 13, 2019, 2:34:43 PM (7 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 9 edited
-
ChangeLog (modified) (1 diff)
-
assembler/AbstractMacroAssembler.h (modified) (1 diff)
-
assembler/MacroAssemblerARM64E.h (modified) (4 diffs)
-
dfg/DFGOSRExitCompilerCommon.cpp (modified) (2 diffs)
-
ftl/FTLThunks.cpp (modified) (1 diff)
-
jit/CCallHelpers.h (modified) (1 diff)
-
jit/CallFrameShuffler.cpp (modified) (1 diff)
-
jit/ThunkGenerators.cpp (modified) (3 diffs)
-
wasm/js/WebAssemblyFunction.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r245249 r245251 1 2019-05-13 Saam Barati <sbarati@apple.com> 2 3 macro assembler code-pointer tagging has its arguments backwards 4 https://bugs.webkit.org/show_bug.cgi?id=197677 5 6 Reviewed by Michael Saboff. 7 8 We had the destination as the leftmost instead of the rightmost argument, 9 which goes against the convention of how we order arguments in macro assembler 10 methods. 11 12 * assembler/MacroAssemblerARM64E.h: 13 (JSC::MacroAssemblerARM64E::tagReturnAddress): 14 (JSC::MacroAssemblerARM64E::untagReturnAddress): 15 (JSC::MacroAssemblerARM64E::tagPtr): 16 (JSC::MacroAssemblerARM64E::untagPtr): 17 * dfg/DFGOSRExitCompilerCommon.cpp: 18 (JSC::DFG::reifyInlinedCallFrames): 19 * ftl/FTLThunks.cpp: 20 (JSC::FTL::genericGenerationThunkGenerator): 21 * jit/CCallHelpers.h: 22 (JSC::CCallHelpers::prepareForTailCallSlow): 23 * jit/CallFrameShuffler.cpp: 24 (JSC::CallFrameShuffler::prepareForTailCall): 25 * jit/ThunkGenerators.cpp: 26 (JSC::emitPointerValidation): 27 (JSC::arityFixupGenerator): 28 * wasm/js/WebAssemblyFunction.cpp: 29 (JSC::WebAssemblyFunction::jsCallEntrypointSlow): 30 1 31 2019-05-13 Tadeu Zagallo <tzagallo@apple.com> 2 32 -
trunk/Source/JavaScriptCore/assembler/AbstractMacroAssembler.h
r239867 r245251 978 978 ALWAYS_INLINE void untagReturnAddress() { } 979 979 980 ALWAYS_INLINE void tagPtr( RegisterID, PtrTag) { }980 ALWAYS_INLINE void tagPtr(PtrTag, RegisterID) { } 981 981 ALWAYS_INLINE void tagPtr(RegisterID, RegisterID) { } 982 ALWAYS_INLINE void untagPtr( RegisterID, PtrTag) { }982 ALWAYS_INLINE void untagPtr(PtrTag, RegisterID) { } 983 983 ALWAYS_INLINE void untagPtr(RegisterID, RegisterID) { } 984 984 ALWAYS_INLINE void removePtrTag(RegisterID) { } -
trunk/Source/JavaScriptCore/assembler/MacroAssemblerARM64E.h
r245064 r245251 42 42 ALWAYS_INLINE void tagReturnAddress() 43 43 { 44 tagPtr(ARM64Registers:: lr, ARM64Registers::sp);44 tagPtr(ARM64Registers::sp, ARM64Registers::lr); 45 45 } 46 46 47 47 ALWAYS_INLINE void untagReturnAddress() 48 48 { 49 untagPtr(ARM64Registers:: lr, ARM64Registers::sp);50 } 51 52 ALWAYS_INLINE void tagPtr( RegisterID target, PtrTag tag)49 untagPtr(ARM64Registers::sp, ARM64Registers::lr); 50 } 51 52 ALWAYS_INLINE void tagPtr(PtrTag tag, RegisterID target) 53 53 { 54 54 auto tagGPR = getCachedDataTempRegisterIDAndInvalidate(); … … 57 57 } 58 58 59 ALWAYS_INLINE void tagPtr(RegisterID ta rget, RegisterID tag)59 ALWAYS_INLINE void tagPtr(RegisterID tag, RegisterID target) 60 60 { 61 61 if (target == ARM64Registers::lr && tag == ARM64Registers::sp) { … … 66 66 } 67 67 68 ALWAYS_INLINE void untagPtr( RegisterID target, PtrTag tag)68 ALWAYS_INLINE void untagPtr(PtrTag tag, RegisterID target) 69 69 { 70 70 auto tagGPR = getCachedDataTempRegisterIDAndInvalidate(); … … 73 73 } 74 74 75 ALWAYS_INLINE void untagPtr(RegisterID ta rget, RegisterID tag)75 ALWAYS_INLINE void untagPtr(RegisterID tag, RegisterID target) 76 76 { 77 77 m_assembler.autib(target, tag); -
trunk/Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.cpp
r244764 r245251 158 158 #if CPU(ARM64E) 159 159 jit.addPtr(AssemblyHelpers::TrustedImm32(sizeof(CallerFrameAndPC)), GPRInfo::callFrameRegister, GPRInfo::regT2); 160 jit.untagPtr(GPRInfo::regT 3, GPRInfo::regT2);160 jit.untagPtr(GPRInfo::regT2, GPRInfo::regT3); 161 161 jit.addPtr(AssemblyHelpers::TrustedImm32(inlineCallFrame->returnPCOffset() + sizeof(void*)), GPRInfo::callFrameRegister, GPRInfo::regT2); 162 jit.tagPtr(GPRInfo::regT 3, GPRInfo::regT2);162 jit.tagPtr(GPRInfo::regT2, GPRInfo::regT3); 163 163 #endif 164 164 jit.storePtr(GPRInfo::regT3, AssemblyHelpers::addressForByteOffset(inlineCallFrame->returnPCOffset())); … … 210 210 jit.addPtr(AssemblyHelpers::TrustedImm32(inlineCallFrame->returnPCOffset() + sizeof(void*)), GPRInfo::callFrameRegister, GPRInfo::regT2); 211 211 jit.move(AssemblyHelpers::TrustedImmPtr(jumpTarget), GPRInfo::nonArgGPR0); 212 jit.tagPtr(GPRInfo:: nonArgGPR0, GPRInfo::regT2);212 jit.tagPtr(GPRInfo::regT2, GPRInfo::nonArgGPR0); 213 213 jit.storePtr(GPRInfo::nonArgGPR0, AssemblyHelpers::addressForByteOffset(inlineCallFrame->returnPCOffset())); 214 214 #else -
trunk/Source/JavaScriptCore/ftl/FTLThunks.cpp
r244764 r245251 117 117 118 118 #if CPU(ARM64E) 119 jit.untagPtr( AssemblyHelpers::linkRegister, resultTag);119 jit.untagPtr(resultTag, AssemblyHelpers::linkRegister); 120 120 jit.tagReturnAddress(); 121 121 #else -
trunk/Source/JavaScriptCore/jit/CCallHelpers.h
r243254 r245251 808 808 #if CPU(ARM64E) 809 809 addPtr(TrustedImm32(sizeof(CallerFrameAndPC)), MacroAssembler::framePointerRegister, tempGPR); 810 untagPtr( linkRegister, tempGPR);810 untagPtr(tempGPR, linkRegister); 811 811 #endif 812 812 #elif CPU(MIPS) -
trunk/Source/JavaScriptCore/jit/CallFrameShuffler.cpp
r243254 r245251 457 457 #if CPU(ARM64E) 458 458 m_jit.addPtr(MacroAssembler::TrustedImm32(sizeof(CallerFrameAndPC)), MacroAssembler::framePointerRegister); 459 m_jit.untagPtr(MacroAssembler:: linkRegister, MacroAssembler::framePointerRegister);459 m_jit.untagPtr(MacroAssembler::framePointerRegister, MacroAssembler::linkRegister); 460 460 m_jit.subPtr(MacroAssembler::TrustedImm32(sizeof(CallerFrameAndPC)), MacroAssembler::framePointerRegister); 461 461 #endif -
trunk/Source/JavaScriptCore/jit/ThunkGenerators.cpp
r243254 r245251 54 54 isNonZero.link(&jit); 55 55 jit.pushToSave(pointerGPR); 56 jit.untagPtr( pointerGPR, tag);56 jit.untagPtr(tag, pointerGPR); 57 57 jit.load8(pointerGPR, pointerGPR); 58 58 jit.popToRestore(pointerGPR); … … 460 460 jit.loadPtr(JSInterfaceJIT::Address(GPRInfo::callFrameRegister, CallFrame::returnPCOffset()), GPRInfo::regT3); 461 461 jit.addPtr(JSInterfaceJIT::TrustedImm32(sizeof(CallerFrameAndPC)), GPRInfo::callFrameRegister, extraTemp); 462 jit.untagPtr( GPRInfo::regT3, extraTemp);462 jit.untagPtr(extraTemp, GPRInfo::regT3); 463 463 PtrTag tempReturnPCTag = static_cast<PtrTag>(random()); 464 464 jit.move(JSInterfaceJIT::TrustedImmPtr(tempReturnPCTag), extraTemp); 465 jit.tagPtr( GPRInfo::regT3, extraTemp);465 jit.tagPtr(extraTemp, GPRInfo::regT3); 466 466 jit.storePtr(GPRInfo::regT3, JSInterfaceJIT::Address(GPRInfo::callFrameRegister, CallFrame::returnPCOffset())); 467 467 #endif … … 516 516 jit.loadPtr(JSInterfaceJIT::Address(GPRInfo::callFrameRegister, CallFrame::returnPCOffset()), GPRInfo::regT3); 517 517 jit.move(JSInterfaceJIT::TrustedImmPtr(tempReturnPCTag), extraTemp); 518 jit.untagPtr( GPRInfo::regT3, extraTemp);518 jit.untagPtr(extraTemp, GPRInfo::regT3); 519 519 jit.addPtr(JSInterfaceJIT::TrustedImm32(sizeof(CallerFrameAndPC)), GPRInfo::callFrameRegister, extraTemp); 520 jit.tagPtr( GPRInfo::regT3, extraTemp);520 jit.tagPtr(extraTemp, GPRInfo::regT3); 521 521 jit.storePtr(GPRInfo::regT3, JSInterfaceJIT::Address(GPRInfo::callFrameRegister, CallFrame::returnPCOffset())); 522 522 #endif -
trunk/Source/JavaScriptCore/wasm/js/WebAssemblyFunction.cpp
r245064 r245251 481 481 jit.emitFunctionEpilogue(); 482 482 #if CPU(ARM64E) 483 jit.untag Ptr(MacroAssembler::linkRegister, MacroAssembler::stackPointerRegister);483 jit.untagReturnAddress(); 484 484 #endif 485 485 auto jumpToHostCallThunk = jit.jump();
Note:
See TracChangeset
for help on using the changeset viewer.