静态方法:数据类型转换

SIMD 提供以下方法,用来将一种数据类型转为另一种数据类型。

  • SIMD.%type%.fromFloat32x4()
  • SIMD.%type%.fromFloat32x4Bits()
  • SIMD.%type%.fromFloat64x2Bits()
  • SIMD.%type%.fromInt32x4()
  • SIMD.%type%.fromInt32x4Bits()
  • SIMD.%type%.fromInt16x8Bits()
  • SIMD.%type%.fromInt8x16Bits()
  • SIMD.%type%.fromUint32x4()
  • SIMD.%type%.fromUint32x4Bits()
  • SIMD.%type%.fromUint16x8Bits()
  • SIMD.%type%.fromUint8x16Bits()

带有Bits后缀的方法,会原封不动地将二进制位拷贝到新的数据类型;不带后缀的方法,则会进行数据类型转换。

  1. var t = SIMD.Float32x4(1.0, 2.0, 3.0, 4.0);
  2. SIMD.Int32x4.fromFloat32x4(t);
  3. // Int32x4[1, 2, 3, 4]
  4. SIMD.Int32x4.fromFloat32x4Bits(t);
  5. // Int32x4[1065353216, 1073741824, 1077936128, 1082130432]

上面代码中,fromFloat32x4是将浮点数转为整数,然后存入新的数据类型;fromFloat32x4Bits则是将二进制位原封不动地拷贝进入新的数据类型,然后进行解读。

Bits后缀的方法,还可以用于通道数目不对等的拷贝。

  1. var t = SIMD.Float32x4(1.0, 2.0, 3.0, 4.0);
  2. SIMD.Int16x8.fromFloat32x4Bits(t);
  3. // Int16x8[0, 16256, 0, 16384, 0, 16448, 0, 16512]

上面代码中,原始 SIMD 值t是 4 通道的,而目标值是 8 通道的。

如果数据转换时,原通道的数据大小,超过了目标通道的最大宽度,就会报错。