| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include <math.h> // for isnan. | 5 #include <math.h> // for isnan. |
| 6 #include <setjmp.h> | 6 #include <setjmp.h> |
| 7 #include <stdlib.h> | 7 #include <stdlib.h> |
| 8 | 8 |
| 9 #include "vm/globals.h" | 9 #include "vm/globals.h" |
| 10 #if defined(TARGET_ARCH_MIPS) | 10 #if defined(TARGET_ARCH_MIPS) |
| (...skipping 1004 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1015 if (redirection->call_kind() == kRuntimeCall) { | 1015 if (redirection->call_kind() == kRuntimeCall) { |
| 1016 NativeArguments arguments; | 1016 NativeArguments arguments; |
| 1017 ASSERT(sizeof(NativeArguments) == 4*kWordSize); | 1017 ASSERT(sizeof(NativeArguments) == 4*kWordSize); |
| 1018 arguments.isolate_ = reinterpret_cast<Isolate*>(get_register(A0)); | 1018 arguments.isolate_ = reinterpret_cast<Isolate*>(get_register(A0)); |
| 1019 arguments.argc_tag_ = get_register(A1); | 1019 arguments.argc_tag_ = get_register(A1); |
| 1020 arguments.argv_ = reinterpret_cast<RawObject*(*)[]>(get_register(A2)); | 1020 arguments.argv_ = reinterpret_cast<RawObject*(*)[]>(get_register(A2)); |
| 1021 arguments.retval_ = reinterpret_cast<RawObject**>(get_register(A3)); | 1021 arguments.retval_ = reinterpret_cast<RawObject**>(get_register(A3)); |
| 1022 SimulatorRuntimeCall target = | 1022 SimulatorRuntimeCall target = |
| 1023 reinterpret_cast<SimulatorRuntimeCall>(external); | 1023 reinterpret_cast<SimulatorRuntimeCall>(external); |
| 1024 target(arguments); | 1024 target(arguments); |
| 1025 set_register(V0, icount_); // Zap result register from void function. | 1025 set_register(V0, icount_); // Zap result registers from void function. |
| 1026 set_register(V1, icount_); |
| 1026 } else if (redirection->call_kind() == kLeafRuntimeCall) { | 1027 } else if (redirection->call_kind() == kLeafRuntimeCall) { |
| 1027 int32_t a0 = get_register(A0); | 1028 int32_t a0 = get_register(A0); |
| 1028 int32_t a1 = get_register(A1); | 1029 int32_t a1 = get_register(A1); |
| 1029 int32_t a2 = get_register(A2); | 1030 int32_t a2 = get_register(A2); |
| 1030 int32_t a3 = get_register(A3); | 1031 int32_t a3 = get_register(A3); |
| 1031 SimulatorLeafRuntimeCall target = | 1032 SimulatorLeafRuntimeCall target = |
| 1032 reinterpret_cast<SimulatorLeafRuntimeCall>(external); | 1033 reinterpret_cast<SimulatorLeafRuntimeCall>(external); |
| 1033 a0 = target(a0, a1, a2, a3); | 1034 a0 = target(a0, a1, a2, a3); |
| 1034 set_register(V0, a0); // Set returned result from function. | 1035 set_register(V0, a0); // Set returned result from function. |
| 1036 set_register(V1, icount_); // Zap second result register. |
| 1035 } else if (redirection->call_kind() == kLeafFloatRuntimeCall) { | 1037 } else if (redirection->call_kind() == kLeafFloatRuntimeCall) { |
| 1036 ASSERT((0 <= redirection->argument_count()) && | 1038 ASSERT((0 <= redirection->argument_count()) && |
| 1037 (redirection->argument_count() <= 2)); | 1039 (redirection->argument_count() <= 2)); |
| 1038 // double values are passed and returned in floating point registers. | 1040 // double values are passed and returned in floating point registers. |
| 1039 SimulatorLeafFloatRuntimeCall target = | 1041 SimulatorLeafFloatRuntimeCall target = |
| 1040 reinterpret_cast<SimulatorLeafFloatRuntimeCall>(external); | 1042 reinterpret_cast<SimulatorLeafFloatRuntimeCall>(external); |
| 1041 double d0 = 0.0; | 1043 double d0 = 0.0; |
| 1042 double d6 = get_fregister_double(F12); | 1044 double d6 = get_fregister_double(F12); |
| 1043 double d7 = get_fregister_double(F14); | 1045 double d7 = get_fregister_double(F14); |
| 1044 d0 = target(d6, d7); | 1046 d0 = target(d6, d7); |
| 1045 set_fregister_double(F0, d0); | 1047 set_fregister_double(F0, d0); |
| 1046 } else { | 1048 } else { |
| 1047 ASSERT(redirection->call_kind() == kNativeCall); | 1049 ASSERT(redirection->call_kind() == kNativeCall); |
| 1048 NativeArguments* arguments; | 1050 NativeArguments* arguments; |
| 1049 arguments = reinterpret_cast<NativeArguments*>(get_register(A0)); | 1051 arguments = reinterpret_cast<NativeArguments*>(get_register(A0)); |
| 1050 SimulatorNativeCall target = | 1052 SimulatorNativeCall target = |
| 1051 reinterpret_cast<SimulatorNativeCall>(external); | 1053 reinterpret_cast<SimulatorNativeCall>(external); |
| 1052 target(arguments); | 1054 target(arguments); |
| 1053 set_register(V0, icount_); // Zap result register from void function. | 1055 set_register(V0, icount_); // Zap result register from void function. |
| 1056 set_register(V1, icount_); |
| 1054 } | 1057 } |
| 1055 set_top_exit_frame_info(0); | 1058 set_top_exit_frame_info(0); |
| 1056 | 1059 |
| 1057 // Zap caller-saved registers, since the actual runtime call could have | 1060 // Zap caller-saved registers, since the actual runtime call could have |
| 1058 // used them. | 1061 // used them. |
| 1059 set_register(T0, icount_); | 1062 set_register(T0, icount_); |
| 1060 set_register(T1, icount_); | 1063 set_register(T1, icount_); |
| 1061 set_register(T2, icount_); | 1064 set_register(T2, icount_); |
| 1062 set_register(T3, icount_); | 1065 set_register(T3, icount_); |
| 1063 set_register(T4, icount_); | 1066 set_register(T4, icount_); |
| (...skipping 1167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2231 set_register(kExceptionObjectReg, bit_cast<int32_t>(raw_exception)); | 2234 set_register(kExceptionObjectReg, bit_cast<int32_t>(raw_exception)); |
| 2232 set_register(kStackTraceObjectReg, bit_cast<int32_t>(raw_stacktrace)); | 2235 set_register(kStackTraceObjectReg, bit_cast<int32_t>(raw_stacktrace)); |
| 2233 buf->Longjmp(); | 2236 buf->Longjmp(); |
| 2234 } | 2237 } |
| 2235 | 2238 |
| 2236 } // namespace dart | 2239 } // namespace dart |
| 2237 | 2240 |
| 2238 #endif // !defined(HOST_ARCH_MIPS) | 2241 #endif // !defined(HOST_ARCH_MIPS) |
| 2239 | 2242 |
| 2240 #endif // defined TARGET_ARCH_MIPS | 2243 #endif // defined TARGET_ARCH_MIPS |
| OLD | NEW |