Index: src/objects-inl.h |
diff --git a/src/objects-inl.h b/src/objects-inl.h |
index b1808be3c405f3a475d12fa074f32d28f6b5cf43..3d46e8141c88e334dd5af7517ae7936329bef93d 100644 |
--- a/src/objects-inl.h |
+++ b/src/objects-inl.h |
@@ -170,6 +170,7 @@ bool Object::IsHeapObject() const { |
TYPE_CHECKER(HeapNumber, HEAP_NUMBER_TYPE) |
TYPE_CHECKER(MutableHeapNumber, MUTABLE_HEAP_NUMBER_TYPE) |
+TYPE_CHECKER(Float32x4, FLOAT32X4_TYPE) |
TYPE_CHECKER(Symbol, SYMBOL_TYPE) |
@@ -1321,6 +1322,12 @@ MaybeHandle<Object> JSProxy::SetElementWithHandler(Handle<JSProxy> proxy, |
#define WRITE_INT32_FIELD(p, offset, value) \ |
(*reinterpret_cast<int32_t*>(FIELD_ADDR(p, offset)) = value) |
+#define READ_FLOAT_FIELD(p, offset) \ |
+ (*reinterpret_cast<const float*>(FIELD_ADDR_CONST(p, offset))) |
+ |
+#define WRITE_FLOAT_FIELD(p, offset, value) \ |
+ (*reinterpret_cast<float*>(FIELD_ADDR(p, offset)) = value) |
+ |
#define READ_UINT64_FIELD(p, offset) \ |
(*reinterpret_cast<const uint64_t*>(FIELD_ADDR_CONST(p, offset))) |
@@ -1579,6 +1586,30 @@ int HeapNumber::get_sign() { |
} |
+float Float32x4::get_lane(int lane) const { |
+ DCHECK(lane < 4 && lane >= 0); |
+#if defined(V8_TARGET_LITTLE_ENDIAN) |
+ return READ_FLOAT_FIELD(this, kValueOffset + lane * kFloatSize); |
+#elif defined(V8_TARGET_BIG_ENDIAN) |
+ return READ_FLOAT_FIELD(this, kValueOffset + (3 - lane) * kFloatSize); |
+#else |
+#error Unknown byte ordering |
+#endif |
+} |
+ |
+ |
+void Float32x4::set_lane(int lane, float value) { |
+ DCHECK(lane < 4 && lane >= 0); |
+#if defined(V8_TARGET_LITTLE_ENDIAN) |
+ WRITE_FLOAT_FIELD(this, kValueOffset + lane * kFloatSize, value); |
+#elif defined(V8_TARGET_BIG_ENDIAN) |
+ WRITE_FLOAT_FIELD(this, kValueOffset + (3 - lane) * kFloatSize, value); |
+#else |
+#error Unknown byte ordering |
+#endif |
+} |
+ |
+ |
ACCESSORS(JSObject, properties, FixedArray, kPropertiesOffset) |
@@ -2818,6 +2849,7 @@ AllocationAlignment HeapObject::RequiredAlignment() { |
return kDoubleAligned; |
} |
if (IsHeapNumber()) return kDoubleUnaligned; |
+ if (IsFloat32x4()) return kSimd128Unaligned; |
#endif // V8_HOST_ARCH_32_BIT |
return kWordAligned; |
} |
@@ -3359,6 +3391,7 @@ CAST_ACCESSOR(FixedArray) |
CAST_ACCESSOR(FixedArrayBase) |
CAST_ACCESSOR(FixedDoubleArray) |
CAST_ACCESSOR(FixedTypedArrayBase) |
+CAST_ACCESSOR(Float32x4) |
CAST_ACCESSOR(Foreign) |
CAST_ACCESSOR(GlobalDictionary) |
CAST_ACCESSOR(GlobalObject) |