@@ -145,7 +145,7 @@ class BaseSerializer : public StackResource {
145145  void  WriteWordWith32BitWrites (uword value) {
146146    stream_.WriteWordWith32BitWrites (value);
147147  }
148-   void  WriteBytes (const  uint8_t * addr, intptr_t  len) {
148+   void  WriteBytes (const  void * addr, intptr_t  len) {
149149    stream_.WriteBytes (addr, len);
150150  }
151151  void  WriteAscii (const  String& str) {
@@ -344,7 +344,7 @@ class BaseDeserializer : public ValueObject {
344344  }
345345  intptr_t  ReadUnsigned () { return  stream_.ReadUnsigned (); }
346346  uword ReadWordWith32BitReads () { return  stream_.ReadWordWith32BitReads (); }
347-   void  ReadBytes (uint8_t * addr, intptr_t  len) { stream_.ReadBytes (addr, len); }
347+   void  ReadBytes (void * addr, intptr_t  len) { stream_.ReadBytes (addr, len); }
348348  const  char * ReadAscii () {
349349    intptr_t  len = ReadUnsigned ();
350350    const  char * result = reinterpret_cast <const  char *>(CurrentBufferAddress ());
@@ -1572,8 +1572,7 @@ class TypedDataMessageDeserializationCluster
15721572      d->AssignRef (data.ptr ());
15731573      const  intptr_t  length_in_bytes = length * element_size;
15741574      NoSafepointScope no_safepoint;
1575-       uint8_t * cdata = reinterpret_cast <uint8_t *>(data.untag ()->data ());
1576-       d->ReadBytes (cdata, length_in_bytes);
1575+       d->ReadBytes (data.untag ()->data (), length_in_bytes);
15771576    }
15781577  }
15791578
@@ -2066,6 +2065,60 @@ class TransferableTypedDataMessageDeserializationCluster
20662065  }
20672066};
20682067
2068+ class  Simd128MessageSerializationCluster  : public  MessageSerializationCluster  {
2069+  public: 
2070+   explicit  Simd128MessageSerializationCluster (intptr_t  cid)
2071+       : MessageSerializationCluster(" Simd128" 
2072+                                     MessagePhase::kBeforeTypes ,
2073+                                     cid) {}
2074+   ~Simd128MessageSerializationCluster () {}
2075+ 
2076+   void  Trace (MessageSerializer* s, Object* object) { objects_.Add (object); }
2077+ 
2078+   void  WriteNodes (MessageSerializer* s) {
2079+     intptr_t  count = objects_.length ();
2080+     s->WriteUnsigned (count);
2081+     for  (intptr_t  i = 0 ; i < count; i++) {
2082+       Object* vector = objects_[i];
2083+       s->AssignRef (vector);
2084+       ASSERT_EQUAL (Int32x4::value_offset (), Float32x4::value_offset ());
2085+       ASSERT_EQUAL (Int32x4::value_offset (), Float64x2::value_offset ());
2086+       s->WriteBytes (&(static_cast <Int32x4Ptr>(vector->ptr ())->untag ()->value_ ),
2087+                     sizeof (simd128_value_t ));
2088+     }
2089+   }
2090+ 
2091+  private: 
2092+   GrowableArray<Object*> objects_;
2093+ };
2094+ 
2095+ class  Simd128MessageDeserializationCluster 
2096+     : public MessageDeserializationCluster {
2097+  public: 
2098+   explicit  Simd128MessageDeserializationCluster (intptr_t  cid)
2099+       : MessageDeserializationCluster(" Simd128" 
2100+   ~Simd128MessageDeserializationCluster () {}
2101+ 
2102+   void  ReadNodes (MessageDeserializer* d) {
2103+     intptr_t  count = d->ReadUnsigned ();
2104+     for  (intptr_t  i = 0 ; i < count; i++) {
2105+       ASSERT_EQUAL (Int32x4::InstanceSize (), Float32x4::InstanceSize ());
2106+       ASSERT_EQUAL (Int32x4::InstanceSize (), Float64x2::InstanceSize ());
2107+       ObjectPtr vector =
2108+           Object::Allocate (cid_, Int32x4::InstanceSize (), Heap::kNew ,
2109+                            Int32x4::ContainsCompressedPointers ());
2110+       d->AssignRef (vector);
2111+       ASSERT_EQUAL (Int32x4::value_offset (), Float32x4::value_offset ());
2112+       ASSERT_EQUAL (Int32x4::value_offset (), Float64x2::value_offset ());
2113+       d->ReadBytes (&(static_cast <Int32x4Ptr>(vector)->untag ()->value_ ),
2114+                    sizeof (simd128_value_t ));
2115+     }
2116+   }
2117+ 
2118+  private: 
2119+   const  intptr_t  cid_;
2120+ };
2121+ 
20692122class  RegExpMessageSerializationCluster  : public  MessageSerializationCluster  {
20702123 public: 
20712124  RegExpMessageSerializationCluster ()
@@ -3233,6 +3286,10 @@ MessageSerializationCluster* BaseSerializer::NewClusterForClass(
32333286      return  new  (Z) OneByteStringMessageSerializationCluster (Z, is_canonical);
32343287    case  kTwoByteStringCid :
32353288      return  new  (Z) TwoByteStringMessageSerializationCluster (Z, is_canonical);
3289+     case  kInt32x4Cid :
3290+     case  kFloat32x4Cid :
3291+     case  kFloat64x2Cid :
3292+       return  new  (Z) Simd128MessageSerializationCluster (cid);
32363293    default :
32373294      break ;
32383295  }
@@ -3321,6 +3378,11 @@ MessageDeserializationCluster* BaseDeserializer::ReadCluster() {
33213378      return  new  (Z) OneByteStringMessageDeserializationCluster (is_canonical);
33223379    case  kTwoByteStringCid :
33233380      return  new  (Z) TwoByteStringMessageDeserializationCluster (is_canonical);
3381+     case  kInt32x4Cid :
3382+     case  kFloat32x4Cid :
3383+     case  kFloat64x2Cid :
3384+       ASSERT (!is_canonical);
3385+       return  new  (Z) Simd128MessageDeserializationCluster (cid);
33243386    default :
33253387      break ;
33263388  }
0 commit comments