| Index: src/arm/simulator-arm.cc
|
| diff --git a/src/arm/simulator-arm.cc b/src/arm/simulator-arm.cc
|
| index 801b63f44e7608b9f092bd14d4acc715a215deda..56fc9fa547c57c11e3363a9e9269029253e72991 100644
|
| --- a/src/arm/simulator-arm.cc
|
| +++ b/src/arm/simulator-arm.cc
|
| @@ -1770,9 +1770,9 @@ void Simulator::SoftwareInterrupt(Instruction* instr) {
|
| intptr_t external =
|
| reinterpret_cast<intptr_t>(redirection->external_function());
|
| if (fp_call) {
|
| - SimulatorRuntimeFPCall target =
|
| - reinterpret_cast<SimulatorRuntimeFPCall>(external);
|
| if (::v8::internal::FLAG_trace_sim || !stack_aligned) {
|
| + SimulatorRuntimeFPCall target =
|
| + reinterpret_cast<SimulatorRuntimeFPCall>(external);
|
| double dval0, dval1;
|
| int32_t ival;
|
| switch (redirection->type()) {
|
| @@ -1802,9 +1802,22 @@ void Simulator::SoftwareInterrupt(Instruction* instr) {
|
| PrintF("\n");
|
| }
|
| CHECK(stack_aligned);
|
| - double result = target(arg0, arg1, arg2, arg3);
|
| if (redirection->type() != ExternalReference::BUILTIN_COMPARE_CALL) {
|
| + SimulatorRuntimeFPCall target =
|
| + reinterpret_cast<SimulatorRuntimeFPCall>(external);
|
| + double result = target(arg0, arg1, arg2, arg3);
|
| SetFpResult(result);
|
| + } else {
|
| + SimulatorRuntimeCall target =
|
| + reinterpret_cast<SimulatorRuntimeCall>(external);
|
| + int64_t result = target(arg0, arg1, arg2, arg3, arg4, arg5);
|
| + int32_t lo_res = static_cast<int32_t>(result);
|
| + int32_t hi_res = static_cast<int32_t>(result >> 32);
|
| + if (::v8::internal::FLAG_trace_sim) {
|
| + PrintF("Returned %08x\n", lo_res);
|
| + }
|
| + set_register(r0, lo_res);
|
| + set_register(r1, hi_res);
|
| }
|
| } else if (redirection->type() == ExternalReference::DIRECT_API_CALL) {
|
| SimulatorRuntimeDirectApiCall target =
|
|
|