Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(194)

Side by Side Diff: src/mips64/simulator-mips64.cc

Issue 1576093004: [Interpreter] Add ForInPrepare runtime function which returns a ObjectTriple. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Add MIPS port Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/mips64/macro-assembler-mips64.h ('k') | src/runtime/runtime.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <limits.h> 5 #include <limits.h>
6 #include <stdarg.h> 6 #include <stdarg.h>
7 #include <stdlib.h> 7 #include <stdlib.h>
8 #include <cmath> 8 #include <cmath>
9 9
10 #if V8_TARGET_ARCH_MIPS64 10 #if V8_TARGET_ARCH_MIPS64
11 11
12 #include "src/assembler.h" 12 #include "src/assembler.h"
13 #include "src/base/bits.h" 13 #include "src/base/bits.h"
14 #include "src/codegen.h" 14 #include "src/codegen.h"
15 #include "src/disasm.h" 15 #include "src/disasm.h"
16 #include "src/mips64/constants-mips64.h" 16 #include "src/mips64/constants-mips64.h"
17 #include "src/mips64/simulator-mips64.h" 17 #include "src/mips64/simulator-mips64.h"
18 #include "src/ostreams.h" 18 #include "src/ostreams.h"
19 #include "src/runtime/runtime-utils.h"
19 20
20 // Only build the simulator if not compiling for real MIPS hardware. 21 // Only build the simulator if not compiling for real MIPS hardware.
21 #if defined(USE_SIMULATOR) 22 #if defined(USE_SIMULATOR)
22 23
23 namespace v8 { 24 namespace v8 {
24 namespace internal { 25 namespace internal {
25 26
26 // Utils functions. 27 // Utils functions.
27 bool HaveSameSign(int64_t a, int64_t b) { 28 bool HaveSameSign(int64_t a, int64_t b) {
28 return ((a ^ b) >= 0); 29 return ((a ^ b) >= 0);
(...skipping 1928 matching lines...) Expand 10 before | Expand all | Expand 10 after
1957 } 1958 }
1958 1959
1959 1960
1960 // Calls into the V8 runtime are based on this very simple interface. 1961 // Calls into the V8 runtime are based on this very simple interface.
1961 // Note: To be able to return two values from some calls the code in runtime.cc 1962 // Note: To be able to return two values from some calls the code in runtime.cc
1962 // uses the ObjectPair which is essentially two 32-bit values stuffed into a 1963 // uses the ObjectPair which is essentially two 32-bit values stuffed into a
1963 // 64-bit value. With the code below we assume that all runtime calls return 1964 // 64-bit value. With the code below we assume that all runtime calls return
1964 // 64 bits of result. If they don't, the v1 result register contains a bogus 1965 // 64 bits of result. If they don't, the v1 result register contains a bogus
1965 // value, which is fine because it is caller-saved. 1966 // value, which is fine because it is caller-saved.
1966 1967
1967 struct ObjectPair {
1968 Object* x;
1969 Object* y;
1970 };
1971
1972 typedef ObjectPair (*SimulatorRuntimeCall)(int64_t arg0, 1968 typedef ObjectPair (*SimulatorRuntimeCall)(int64_t arg0,
1973 int64_t arg1, 1969 int64_t arg1,
1974 int64_t arg2, 1970 int64_t arg2,
1975 int64_t arg3, 1971 int64_t arg3,
1976 int64_t arg4, 1972 int64_t arg4,
1977 int64_t arg5); 1973 int64_t arg5);
1978 1974
1975 typedef ObjectTriple (*SimulatorRuntimeTripleCall)(int64_t arg0, int64_t arg1,
1976 int64_t arg2, int64_t arg3,
1977 int64_t arg4);
1979 1978
1980 // These prototypes handle the four types of FP calls. 1979 // These prototypes handle the four types of FP calls.
1981 typedef int64_t (*SimulatorRuntimeCompareCall)(double darg0, double darg1); 1980 typedef int64_t (*SimulatorRuntimeCompareCall)(double darg0, double darg1);
1982 typedef double (*SimulatorRuntimeFPFPCall)(double darg0, double darg1); 1981 typedef double (*SimulatorRuntimeFPFPCall)(double darg0, double darg1);
1983 typedef double (*SimulatorRuntimeFPCall)(double darg0); 1982 typedef double (*SimulatorRuntimeFPCall)(double darg0);
1984 typedef double (*SimulatorRuntimeFPIntCall)(double darg0, int32_t arg0); 1983 typedef double (*SimulatorRuntimeFPIntCall)(double darg0, int32_t arg0);
1985 1984
1986 // This signature supports direct call in to API function native callback 1985 // This signature supports direct call in to API function native callback
1987 // (refer to InvocationCallback in v8.h). 1986 // (refer to InvocationCallback in v8.h).
1988 typedef void (*SimulatorRuntimeDirectApiCall)(int64_t arg0); 1987 typedef void (*SimulatorRuntimeDirectApiCall)(int64_t arg0);
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
2168 target(arg0, arg1); 2167 target(arg0, arg1);
2169 } else if ( 2168 } else if (
2170 redirection->type() == ExternalReference::PROFILING_GETTER_CALL) { 2169 redirection->type() == ExternalReference::PROFILING_GETTER_CALL) {
2171 if (::v8::internal::FLAG_trace_sim) { 2170 if (::v8::internal::FLAG_trace_sim) {
2172 PrintF("Call to host function at %p args %08lx %08lx %08lx\n", 2171 PrintF("Call to host function at %p args %08lx %08lx %08lx\n",
2173 reinterpret_cast<void*>(external), arg0, arg1, arg2); 2172 reinterpret_cast<void*>(external), arg0, arg1, arg2);
2174 } 2173 }
2175 SimulatorRuntimeProfilingGetterCall target = 2174 SimulatorRuntimeProfilingGetterCall target =
2176 reinterpret_cast<SimulatorRuntimeProfilingGetterCall>(external); 2175 reinterpret_cast<SimulatorRuntimeProfilingGetterCall>(external);
2177 target(arg0, arg1, Redirection::ReverseRedirection(arg2)); 2176 target(arg0, arg1, Redirection::ReverseRedirection(arg2));
2177 } else if (redirection->type() == ExternalReference::BUILTIN_CALL_TRIPLE) {
2178 // builtin call returning ObjectTriple.
2179 SimulatorRuntimeTripleCall target =
2180 reinterpret_cast<SimulatorRuntimeTripleCall>(external);
2181 if (::v8::internal::FLAG_trace_sim) {
2182 PrintF(
2183 "Call to host triple returning runtime function %p "
2184 "args %016" PRIx64 ", %016" PRIx64 ", %016" PRIx64 ", %016" PRIx64
2185 ", %016" PRIx64 "\n",
2186 FUNCTION_ADDR(target), arg1, arg2, arg3, arg4, arg5);
2187 }
2188 // arg0 is a hidden argument pointing to the return location, so don't
2189 // pass it to the target function.
2190 ObjectTriple result = target(arg1, arg2, arg3, arg4, arg5);
2191 if (::v8::internal::FLAG_trace_sim) {
2192 PrintF("Returned { %p, %p, %p }\n", result.x, result.y, result.z);
2193 }
2194 // Return is passed back in address pointed to by hidden first argument.
2195 ObjectTriple* sim_result = reinterpret_cast<ObjectTriple*>(arg0);
2196 *sim_result = result;
2197 set_register(v0, arg0);
2178 } else { 2198 } else {
2179 SimulatorRuntimeCall target = 2199 SimulatorRuntimeCall target =
2180 reinterpret_cast<SimulatorRuntimeCall>(external); 2200 reinterpret_cast<SimulatorRuntimeCall>(external);
2181 if (::v8::internal::FLAG_trace_sim) { 2201 if (::v8::internal::FLAG_trace_sim) {
2182 PrintF( 2202 PrintF(
2183 "Call to host function at %p " 2203 "Call to host function at %p "
2184 "args %08lx, %08lx, %08lx, %08lx, %08lx, %08lx\n", 2204 "args %08lx, %08lx, %08lx, %08lx, %08lx, %08lx\n",
2185 FUNCTION_ADDR(target), 2205 FUNCTION_ADDR(target),
2186 arg0, 2206 arg0,
2187 arg1, 2207 arg1,
(...skipping 2681 matching lines...) Expand 10 before | Expand all | Expand 10 after
4869 } 4889 }
4870 4890
4871 4891
4872 #undef UNSUPPORTED 4892 #undef UNSUPPORTED
4873 } // namespace internal 4893 } // namespace internal
4874 } // namespace v8 4894 } // namespace v8
4875 4895
4876 #endif // USE_SIMULATOR 4896 #endif // USE_SIMULATOR
4877 4897
4878 #endif // V8_TARGET_ARCH_MIPS64 4898 #endif // V8_TARGET_ARCH_MIPS64
OLDNEW
« no previous file with comments | « src/mips64/macro-assembler-mips64.h ('k') | src/runtime/runtime.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698