diff options
author | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2014-09-19 17:54:27 +0200 |
---|---|---|
committer | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2014-09-19 17:54:27 +0200 |
commit | f952f4a4ce4464beda012e1fe0cd4da9f91a23a8 (patch) | |
tree | b613af97e2052e1db1689a0b004bacd9621800c1 /Source/JavaScriptCore/dfg/DFGCCallHelpers.h | |
parent | 84bef97f5004ccc60dbba0faa4f4b8d40838ee23 (diff) | |
parent | 55f814fc556631b390f0c5764bb4ee3ceeea1d45 (diff) | |
download | qtwebkit-f952f4a4ce4464beda012e1fe0cd4da9f91a23a8.tar.gz |
Merge remote-tracking branch 'origin/5.4' into dev
Change-Id: I98b8afb91dff72023dabf58f0b570cada8804cf2
Diffstat (limited to 'Source/JavaScriptCore/dfg/DFGCCallHelpers.h')
-rw-r--r-- | Source/JavaScriptCore/dfg/DFGCCallHelpers.h | 55 |
1 files changed, 49 insertions, 6 deletions
diff --git a/Source/JavaScriptCore/dfg/DFGCCallHelpers.h b/Source/JavaScriptCore/dfg/DFGCCallHelpers.h index ab33677ba..ebf0bfd89 100644 --- a/Source/JavaScriptCore/dfg/DFGCCallHelpers.h +++ b/Source/JavaScriptCore/dfg/DFGCCallHelpers.h @@ -489,6 +489,12 @@ public: swap(GPRInfo::argumentGPR2, GPRInfo::argumentGPR3); } +#if CPU(MIPS) +#define POKE_ARGUMENT_OFFSET 4 +#else +#define POKE_ARGUMENT_OFFSET 0 +#endif + #if CPU(X86_64) ALWAYS_INLINE void setupArguments(FPRReg arg1) { @@ -549,6 +555,21 @@ public: setupStubArguments(arg1, arg2); move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0); } + + ALWAYS_INLINE void setupArgumentsWithExecState(TrustedImm32, FPRReg arg2, GPRReg arg3) + { + moveDouble(arg2, FPRInfo::argumentFPR0); + move(arg3, GPRInfo::argumentGPR1); + move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0); + } + + ALWAYS_INLINE void setupArgumentsWithExecState(GPRReg arg1, GPRReg arg2, TrustedImm32, FPRReg arg4) + { + moveDouble(arg4, FPRInfo::argumentFPR0); + setupStubArguments(arg1, arg2); + move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0); + } + #else ALWAYS_INLINE void setupArguments(FPRReg arg1) { @@ -575,6 +596,24 @@ public: assembler().vmov(GPRInfo::argumentGPR3, GPRInfo::nonArgGPR0, arg3); poke(GPRInfo::nonArgGPR0); } + + ALWAYS_INLINE void setupArgumentsWithExecState(TrustedImm32 arg1, FPRReg arg2, GPRReg arg3) + { + poke(arg3, POKE_ARGUMENT_OFFSET); + move(arg1, GPRInfo::argumentGPR1); + assembler().vmov(GPRInfo::argumentGPR2, GPRInfo::argumentGPR3, arg2); + move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0); + } + + ALWAYS_INLINE void setupArgumentsWithExecState(GPRReg arg1, GPRReg arg2, TrustedImm32 arg3, FPRReg arg4) + { + setupStubArguments(arg1, arg2); + move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0); + move(arg3, GPRInfo::argumentGPR3); + assembler().vmov(GPRInfo::nonArgGPR0, GPRInfo::nonArgGPR1, arg4); + poke(GPRInfo::nonArgGPR0, POKE_ARGUMENT_OFFSET); + poke(GPRInfo::nonArgGPR1, POKE_ARGUMENT_OFFSET + 1); + } #endif // CPU(ARM_HARDFP) #elif CPU(MIPS) ALWAYS_INLINE void setupArguments(FPRReg arg1) @@ -609,6 +648,16 @@ public: move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0); poke(arg3, 4); } + + ALWAYS_INLINE void setupArgumentsWithExecState(TrustedImm32 arg1, FPRReg arg2, GPRReg arg3) + { + setupArgumentsWithExecState(arg2, arg3); + } + + ALWAYS_INLINE void setupArgumentsWithExecState(GPRReg arg1, GPRReg arg2, TrustedImm32 arg3, FPRReg arg4) + { + setupArgumentsWithExecState(arg1, arg2, arg4); + } #elif CPU(SH4) ALWAYS_INLINE void setupArguments(FPRReg arg1) { @@ -868,12 +917,6 @@ public: // exactly 4 argument registers, e.g. ARMv7. #if NUMBER_OF_ARGUMENT_REGISTERS == 4 -#if CPU(MIPS) -#define POKE_ARGUMENT_OFFSET 4 -#else -#define POKE_ARGUMENT_OFFSET 0 -#endif - ALWAYS_INLINE void setupArgumentsWithExecState(GPRReg arg1, GPRReg arg2, GPRReg arg3, GPRReg arg4) { poke(arg4, POKE_ARGUMENT_OFFSET); |