Index: runtime/vm/object.cc |
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc |
index 728e2ffe6446a8833d056194b9aef8d727408440..8ae4f6575bc2f4f2f7c5a2fd1cf26e7946c8674d 100644 |
--- a/runtime/vm/object.cc |
+++ b/runtime/vm/object.cc |
@@ -22352,12 +22352,22 @@ RawFloat32x4* Float32x4::New(simd128_value_t value, Heap::Space space) { |
simd128_value_t Float32x4::value() const { |
+#if defined(HOST_ARCH_ARM) |
zra
2017/06/20 17:44:34
I think you should be able to use bit_cast here. A
|
+ simd128_value_t temp; |
+ memmove(&temp, &raw_ptr()->value_[0], sizeof(temp)); |
+ return temp; |
+#else |
return simd128_value_t().readFrom(&raw_ptr()->value_[0]); |
+#endif |
} |
void Float32x4::set_value(simd128_value_t value) const { |
+#if defined(HOST_ARCH_ARM) |
+ memmove(const_cast<float*>(&raw_ptr()->value_[0]), &value, sizeof(value)); |
+#else |
StoreSimd128(&raw_ptr()->value_[0], value); |
+#endif |
} |
@@ -22487,12 +22497,22 @@ int32_t Int32x4::w() const { |
simd128_value_t Int32x4::value() const { |
+#if defined(HOST_ARCH_ARM) |
+ simd128_value_t temp; |
+ memmove(&temp, &raw_ptr()->value_[0], sizeof(temp)); |
+ return temp; |
+#else |
return simd128_value_t().readFrom(&raw_ptr()->value_[0]); |
+#endif |
} |
void Int32x4::set_value(simd128_value_t value) const { |
+#if defined(HOST_ARCH_ARM) |
+ memmove(const_cast<int32_t*>(&raw_ptr()->value_[0]), &value, sizeof(value)); |
+#else |
StoreSimd128(&raw_ptr()->value_[0], value); |
+#endif |
} |