summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/dfg/DFGCCallHelpers.h
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@digia.com>2014-09-19 17:54:27 +0200
committerFrederik Gladhorn <frederik.gladhorn@digia.com>2014-09-19 17:54:27 +0200
commitf952f4a4ce4464beda012e1fe0cd4da9f91a23a8 (patch)
treeb613af97e2052e1db1689a0b004bacd9621800c1 /Source/JavaScriptCore/dfg/DFGCCallHelpers.h
parent84bef97f5004ccc60dbba0faa4f4b8d40838ee23 (diff)
parent55f814fc556631b390f0c5764bb4ee3ceeea1d45 (diff)
downloadqtwebkit-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.h55
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);