Index: runtime/vm/deopt_instructions.h |
diff --git a/runtime/vm/deopt_instructions.h b/runtime/vm/deopt_instructions.h |
index 551d04302ba0761eea836b5496bb4b16cb785f36..23a5e970c614a6566aa28d6b6d14f4184447b18d 100644 |
--- a/runtime/vm/deopt_instructions.h |
+++ b/runtime/vm/deopt_instructions.h |
@@ -58,21 +58,29 @@ class DeoptContext { |
intptr_t RegisterValue(Register reg) const { |
ASSERT(cpu_registers_ != NULL); |
+ ASSERT(reg >= 0); |
+ ASSERT(reg < kNumberOfCpuRegisters); |
return cpu_registers_[reg]; |
} |
double FpuRegisterValue(FpuRegister reg) const { |
ASSERT(fpu_registers_ != NULL); |
+ ASSERT(reg >= 0); |
+ ASSERT(reg < kNumberOfFpuRegisters); |
return *reinterpret_cast<double*>(&fpu_registers_[reg]); |
} |
int64_t FpuRegisterValueAsInt64(FpuRegister reg) const { |
ASSERT(fpu_registers_ != NULL); |
+ ASSERT(reg >= 0); |
+ ASSERT(reg < kNumberOfFpuRegisters); |
return *reinterpret_cast<int64_t*>(&fpu_registers_[reg]); |
} |
simd128_value_t FpuRegisterValueAsSimd128(FpuRegister reg) const { |
ASSERT(fpu_registers_ != NULL); |
+ ASSERT(reg >= 0); |
+ ASSERT(reg < kNumberOfFpuRegisters); |
const float* address = reinterpret_cast<float*>(&fpu_registers_[reg]); |
return simd128_value_t().readFrom(address); |
} |
@@ -216,16 +224,18 @@ class DeoptInstr : public ZoneAllocated { |
kConstant, |
kRegister, |
kFpuRegister, |
- kInt64FpuRegister, |
+ kInt64RegisterPair, |
regis
2014/05/22 17:09:40
Why not kRegisterPair?
kInt64RegisterPair sounds l
Cutch
2014/05/23 21:33:54
A kInt64RegisterPair is a mint (64-bit integer) wh
regis
2014/05/23 22:36:59
Do I understand correctly that some of these are f
|
kFloat32x4FpuRegister, |
kFloat64x2FpuRegister, |
kInt32x4FpuRegister, |
kStackSlot, |
kDoubleStackSlot, |
kInt64StackSlot, |
+ kInt64StackSlotPair, |
kFloat32x4StackSlot, |
kFloat64x2StackSlot, |
kInt32x4StackSlot, |
+ kInt64StackSlotRegister, |
regis
2014/05/22 17:09:40
Comments would help here. What is the difference b
Cutch
2014/05/23 21:33:54
See above.
|
kPcMarker, |
kPp, |
kCallerFp, |