Index: runtime/vm/intermediate_language_arm.cc |
=================================================================== |
--- runtime/vm/intermediate_language_arm.cc (revision 23505) |
+++ runtime/vm/intermediate_language_arm.cc (working copy) |
@@ -491,7 +491,7 @@ |
case HI: return LS; |
case CS: return CC; |
default: |
- UNIMPLEMENTED(); |
+ UNREACHABLE(); |
return EQ; |
} |
} |
@@ -683,7 +683,7 @@ |
case HI: return CC; |
case CS: return LS; |
default: |
- UNIMPLEMENTED(); |
+ UNREACHABLE(); |
return EQ; |
} |
} |
@@ -1122,7 +1122,7 @@ |
: CompileType::Int(); |
default: |
- UNIMPLEMENTED(); |
+ UNREACHABLE(); |
return CompileType::Dynamic(); |
} |
} |
@@ -1153,7 +1153,7 @@ |
case kTypedDataFloat32x4ArrayCid: |
return kUnboxedFloat32x4; |
default: |
- UNIMPLEMENTED(); |
+ UNREACHABLE(); |
return kTagged; |
} |
} |
@@ -1236,8 +1236,8 @@ |
// vldrs does not support indexed addressing. |
__ add(index.reg(), index.reg(), ShifterOperand(array)); |
element_address = Address(index.reg(), 0); |
- __ vldrs(S0, element_address); |
- __ vcvtds(result, S0); |
+ __ vldrs(STMP, element_address); |
+ __ vcvtds(result, STMP); |
break; |
case kTypedDataFloat64ArrayCid: |
// vldrd does not support indexed addressing. |
@@ -1329,7 +1329,7 @@ |
case kTypedDataFloat32x4ArrayCid: |
return kUnboxedFloat32x4; |
default: |
- UNIMPLEMENTED(); |
+ UNREACHABLE(); |
return kTagged; |
} |
} |
@@ -2575,8 +2575,8 @@ |
__ LoadDFromOffset(result, value, Double::value_offset() - kHeapObjectTag); |
} else if (value_cid == kSmiCid) { |
__ SmiUntag(value); // Untag input before conversion. |
- __ vmovsr(S0, value); |
- __ vcvtdi(result, S0); |
+ __ vmovsr(STMP, value); |
+ __ vcvtdi(result, STMP); |
} else { |
Label* deopt = compiler->AddDeoptStub(deopt_id_, kDeoptBinaryDoubleOp); |
Register temp = locs()->temp(0).reg(); |
@@ -2590,8 +2590,8 @@ |
__ Bind(&is_smi); |
// TODO(regis): Why do we preserve value here but not above? |
__ mov(IP, ShifterOperand(value, ASR, 1)); // Copy and untag. |
- __ vmovsr(S0, IP); |
- __ vcvtdi(result, S0); |
+ __ vmovsr(STMP, IP); |
+ __ vcvtdi(result, STMP); |
__ Bind(&done); |
} |
} |
@@ -2941,8 +2941,8 @@ |
Register value = locs()->in(0).reg(); |
FpuRegister result = locs()->out().fpu_reg(); |
__ SmiUntag(value); |
- __ vmovsr(S0, value); |
- __ vcvtdi(result, S0); |
+ __ vmovsr(STMP, value); |
+ __ vcvtdi(result, STMP); |
} |
@@ -2962,9 +2962,9 @@ |
Register value_obj = locs()->in(0).reg(); |
ASSERT(result == R0); |
ASSERT(result != value_obj); |
- __ LoadDFromOffset(D0, value_obj, Double::value_offset() - kHeapObjectTag); |
- __ vcvtid(S0, D0); |
- __ vmovrs(result, S0); |
+ __ LoadDFromOffset(DTMP, value_obj, Double::value_offset() - kHeapObjectTag); |
+ __ vcvtid(STMP, DTMP); |
+ __ vmovrs(result, STMP); |
// Overflow is signaled with minint. |
Label do_call, done; |
// Check for overflow and that it fits into Smi. |
@@ -3005,8 +3005,8 @@ |
Label* deopt = compiler->AddDeoptStub(deopt_id(), kDeoptDoubleToSmi); |
Register result = locs()->out().reg(); |
DRegister value = locs()->in(0).fpu_reg(); |
- __ vcvtid(S0, value); |
- __ vmovrs(result, S0); |
+ __ vcvtid(STMP, value); |
+ __ vmovrs(result, STMP); |
// Check for overflow and that it fits into Smi. |
__ CompareImmediate(result, 0xC0000000); |
__ b(deopt, MI); |
@@ -3074,14 +3074,12 @@ |
__ b(&skip_call); |
} |
__ Bind(&do_call); |
- // TODO(regis): Using D0 as the reserved scratch value is not a good idea. |
- __ vmovd(D0, locs()->in(0).fpu_reg()); |
- if (InputCount() == 2) { |
- __ vmovd(D1, locs()->in(1).fpu_reg()); |
- } |
- UNIMPLEMENTED(); // TODO(regis): We need to support double type leaf calls. |
+ __ 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. |
__ CallRuntime(TargetFunction()); |
- __ vmovd(locs()->out().fpu_reg(), D0); |
+ __ vmovdrr(locs()->out().fpu_reg(), R0, R1); |
__ Bind(&skip_call); |
} |