| Index: runtime/vm/intermediate_language_arm.cc
|
| ===================================================================
|
| --- runtime/vm/intermediate_language_arm.cc (revision 23860)
|
| +++ runtime/vm/intermediate_language_arm.cc (working copy)
|
| @@ -1026,7 +1026,9 @@
|
| // into the runtime system.
|
| uword entry = reinterpret_cast<uword>(native_c_function());
|
| #if defined(USING_SIMULATOR)
|
| - entry = Simulator::RedirectExternalReference(entry, Simulator::kNativeCall);
|
| + entry = Simulator::RedirectExternalReference(entry,
|
| + Simulator::kNativeCall,
|
| + function().NumParameters());
|
| #endif
|
| __ LoadImmediate(R5, entry);
|
| __ LoadImmediate(R1, NativeArguments::ComputeArgcTag(function()));
|
| @@ -3053,11 +3055,11 @@
|
| const intptr_t kNumTemps = 0;
|
| LocationSummary* result =
|
| new LocationSummary(InputCount(), kNumTemps, LocationSummary::kCall);
|
| - result->set_in(0, Location::FpuRegisterLocation(D1));
|
| + result->set_in(0, Location::FpuRegisterLocation(D0));
|
| if (InputCount() == 2) {
|
| - result->set_in(1, Location::FpuRegisterLocation(D2));
|
| + result->set_in(1, Location::FpuRegisterLocation(D1));
|
| }
|
| - result->set_out(Location::FpuRegisterLocation(D1));
|
| + result->set_out(Location::FpuRegisterLocation(D0));
|
| return result;
|
| }
|
|
|
| @@ -3075,12 +3077,11 @@
|
| __ b(&skip_call);
|
| }
|
| __ Bind(&do_call);
|
| - __ vmovrrd(R0, R1, locs()->in(0).fpu_reg());
|
| - __ vmovrrd(R2, R3, locs()->in(1).fpu_reg());
|
| - // TODO(regis): This leaf runtime call is not yet supported by the simulator.
|
| - // We need a new leaf floating point runtime call kind.
|
| + // We currently use 'hardfp' ('gnueabihf') rather than 'softfp'
|
| + // ('gnueabi') float ABI for leaf runtime calls, i.e. double values
|
| + // are passed and returned in vfp registers rather than in integer
|
| + // register pairs.
|
| __ CallRuntime(TargetFunction());
|
| - __ vmovdrr(locs()->out().fpu_reg(), R0, R1);
|
| __ Bind(&skip_call);
|
| }
|
|
|
|
|