diff options
Diffstat (limited to 'Source/JavaScriptCore/dfg/DFGCCallHelpers.h')
-rw-r--r-- | Source/JavaScriptCore/dfg/DFGCCallHelpers.h | 42 |
1 files changed, 40 insertions, 2 deletions
diff --git a/Source/JavaScriptCore/dfg/DFGCCallHelpers.h b/Source/JavaScriptCore/dfg/DFGCCallHelpers.h index 3d99f6feb..ab33677ba 100644 --- a/Source/JavaScriptCore/dfg/DFGCCallHelpers.h +++ b/Source/JavaScriptCore/dfg/DFGCCallHelpers.h @@ -37,8 +37,8 @@ namespace JSC { namespace DFG { class CCallHelpers : public AssemblyHelpers { public: - CCallHelpers(JSGlobalData* globalData, CodeBlock* codeBlock = 0) - : AssemblyHelpers(globalData, codeBlock) + CCallHelpers(VM* vm, CodeBlock* codeBlock = 0) + : AssemblyHelpers(vm, codeBlock) { } @@ -609,6 +609,37 @@ public: move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0); poke(arg3, 4); } +#elif CPU(SH4) + ALWAYS_INLINE void setupArguments(FPRReg arg1) + { + moveDouble(arg1, FPRInfo::argumentFPR0); + } + + ALWAYS_INLINE void setupArguments(FPRReg arg1, FPRReg arg2) + { + if (arg2 != FPRInfo::argumentFPR0) { + moveDouble(arg1, FPRInfo::argumentFPR0); + moveDouble(arg2, FPRInfo::argumentFPR1); + } else if (arg1 != FPRInfo::argumentFPR1) { + moveDouble(arg2, FPRInfo::argumentFPR1); + moveDouble(arg1, FPRInfo::argumentFPR0); + } else + swapDouble(FPRInfo::argumentFPR0, FPRInfo::argumentFPR1); + } + + ALWAYS_INLINE void setupArgumentsWithExecState(FPRReg arg1, GPRReg arg2) + { + moveDouble(arg1, FPRInfo::argumentFPR0); + move(arg2, GPRInfo::argumentGPR1); + move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0); + } + + ALWAYS_INLINE void setupArgumentsWithExecState(GPRReg arg1, GPRReg arg2, FPRReg arg3) + { + moveDouble(arg3, FPRInfo::argumentFPR0); + setupStubArguments(arg1, arg2); + move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0); + } #else #error "DFG JIT not supported on this platform." #endif @@ -874,6 +905,13 @@ public: setupArgumentsWithExecState(arg1, arg2, arg3); } + ALWAYS_INLINE void setupArgumentsWithExecState(GPRReg arg1, GPRReg arg2, TrustedImm32 arg3, TrustedImm32 arg4, TrustedImm32 arg5) + { + poke(arg5, POKE_ARGUMENT_OFFSET + 1); + poke(arg4, POKE_ARGUMENT_OFFSET); + setupArgumentsWithExecState(arg1, arg2, arg3); + } + ALWAYS_INLINE void setupArgumentsWithExecState(TrustedImm32 arg1, TrustedImm32 arg2, GPRReg arg3, GPRReg arg4) { poke(arg4, POKE_ARGUMENT_OFFSET); |