| 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)
|
|
|