Index: runtime/vm/deopt_instructions.h |
diff --git a/runtime/vm/deopt_instructions.h b/runtime/vm/deopt_instructions.h |
index c938d8217022942866b713ed7552f5d6d92f3348..7967aa940a4313183ddd9099c6b9870dda8b8b04 100644 |
--- a/runtime/vm/deopt_instructions.h |
+++ b/runtime/vm/deopt_instructions.h |
@@ -53,11 +53,16 @@ class DeoptimizationContext : public ValueObject { |
} |
double FpuRegisterValue(FpuRegister reg) const { |
- return fpu_registers_copy_[reg]; |
+ return *reinterpret_cast<double*>(&fpu_registers_copy_[reg]); |
} |
int64_t FpuRegisterValueAsInt64(FpuRegister reg) const { |
- return (reinterpret_cast<int64_t*>(fpu_registers_copy_))[reg]; |
+ return *reinterpret_cast<int64_t*>(&fpu_registers_copy_[reg]); |
+ } |
+ |
+ simd128_value_t FpuRegisterValueAsSimd128(FpuRegister reg) const { |
+ const float* address = reinterpret_cast<float*>(&fpu_registers_copy_[reg]); |
+ return simd128_value_t().readFrom(address); |
} |
Isolate* isolate() const { return isolate_; } |
@@ -73,7 +78,7 @@ class DeoptimizationContext : public ValueObject { |
intptr_t* from_frame_; |
intptr_t from_frame_size_; |
intptr_t* registers_copy_; |
- double* fpu_registers_copy_; |
+ fpu_register_t* fpu_registers_copy_; |
const intptr_t num_args_; |
const DeoptReasonId deopt_reason_; |
intptr_t caller_fp_; |
@@ -96,9 +101,13 @@ class DeoptInstr : public ZoneAllocated { |
kRegister, |
kFpuRegister, |
kInt64FpuRegister, |
+ kFloat32x4FpuRegister, |
+ kUint32x4FpuRegister, |
kStackSlot, |
kDoubleStackSlot, |
kInt64StackSlot, |
+ kFloat32x4StackSlot, |
+ kUint32x4StackSlot, |
kPcMarker, |
kCallerFp, |
kCallerPc, |