diff options
Diffstat (limited to 'deps/v8/test/cctest/compiler/call-tester.h')
-rw-r--r-- | deps/v8/test/cctest/compiler/call-tester.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/deps/v8/test/cctest/compiler/call-tester.h b/deps/v8/test/cctest/compiler/call-tester.h index ffafaf0803..30bbe1e8aa 100644 --- a/deps/v8/test/cctest/compiler/call-tester.h +++ b/deps/v8/test/cctest/compiler/call-tester.h @@ -128,6 +128,20 @@ struct ParameterTraits<T*> { static uintptr_t Cast(void* r) { return reinterpret_cast<uintptr_t>(r); } }; +// Additional template specialization required for mips64 to sign-extend +// parameters defined by calling convention. +template <> +struct ParameterTraits<int32_t> { + static int64_t Cast(int32_t r) { return static_cast<int64_t>(r); } +}; + +template <> +struct ParameterTraits<uint32_t> { + static int64_t Cast(uint32_t r) { + return static_cast<int64_t>(static_cast<int32_t>(r)); + } +}; + class CallHelper { public: explicit CallHelper(Isolate* isolate, MachineSignature* machine_sig) @@ -214,6 +228,7 @@ class CallHelper { return static_cast<uintptr_t>(simulator->Call(f, 4, p1, p2, p3, p4)); } + template <typename R, typename F> R DoCall(F* f) { return ReturnValueTraits<R>::Cast(CallSimulator(FUNCTION_ADDR(f))); |