Index: sdk/lib/typed_data/dart2js/typed_data_dart2js.dart |
diff --git a/sdk/lib/typed_data/dart2js/typed_data_dart2js.dart b/sdk/lib/typed_data/dart2js/typed_data_dart2js.dart |
index 57c371eb2b65ced49116310fbdab714d688f5293..e354001aa049c6496bc3c15ac9aeb78d182b8c7b 100644 |
--- a/sdk/lib/typed_data/dart2js/typed_data_dart2js.dart |
+++ b/sdk/lib/typed_data/dart2js/typed_data_dart2js.dart |
@@ -1097,7 +1097,7 @@ class Float32x4 { |
return mx | my << 1 | mz << 2 | mw << 3; |
} |
- /// Mask passed to [shuffle]. |
+ /// Mask passed to [shuffle] and [shuffleMix]. |
static const int XXXX = 0x0; |
static const int XXXY = 0x40; |
static const int XXXZ = 0x80; |
@@ -1357,7 +1357,7 @@ class Float32x4 { |
/// Shuffle the lane values. [mask] must be one of the 256 shuffle constants. |
Float32x4 shuffle(int m) { |
- if (m < 0 || m > 255) { |
+ if ((m < 0) || (m > 255)) { |
throw new RangeError('mask $m must be in the range [0..256)'); |
} |
double _x = _storage[m & 0x3]; |
@@ -1367,53 +1367,17 @@ class Float32x4 { |
return new Float32x4(_x, _y, _z, _w); |
} |
- /// Returns a new [Float32x4] with values in the X and Y lanes |
- /// replaced with the values in the Z and W lanes of [other]. |
- Float32x4 withZWInXY(Float32x4 other) { |
- double _x = other._storage[2]; |
- double _y = other._storage[3]; |
- double _z = _storage[2]; |
- double _w = _storage[3]; |
- return new Float32x4(_x, _y, _z, _w); |
- } |
- |
- /// Returns a new [Float32x4] with the X and Y lane values |
- /// from [this] and [other] interleaved. |
- Float32x4 interleaveXY(Float32x4 other) { |
- double _x = _storage[0]; |
- double _y = other._storage[0]; |
- double _z = _storage[1]; |
- double _w = other._storage[1]; |
- return new Float32x4(_x, _y, _z, _w); |
- } |
- |
- /// Returns a new [Float32x4] with the Z and W lane values |
- /// from [this] and [other] interleaved. |
- Float32x4 interleaveZW(Float32x4 other) { |
- double _x = _storage[2]; |
- double _y = other._storage[2]; |
- double _z = _storage[3]; |
- double _w = other._storage[3]; |
- return new Float32x4(_x, _y, _z, _w); |
- } |
- |
- /// Returns a new [Float32x4] with the X and Y lane value pairs |
- /// from [this] and [other] interleaved. |
- Float32x4 interleaveXYPairs(Float32x4 other) { |
- double _x = _storage[0]; |
- double _y = _storage[1]; |
- double _z = other._storage[0]; |
- double _w = other._storage[1]; |
- return new Float32x4(_x, _y, _z, _w); |
- } |
- |
- /// Returns a new [Float32x4] with the Z and W lane value pairs |
- /// from [this] and [other] interleaved. |
- Float32x4 interleaveZWPairs(Float32x4 other) { |
- double _x = _storage[2]; |
- double _y = _storage[3]; |
- double _z = other._storage[2]; |
- double _w = other._storage[3]; |
+ /// Shuffle the lane values in [this] and [other]. The returned |
+ /// Float32x4 will have XY lanes from [this] and ZW lanes from [other]. |
+ /// Uses the same [mask] as [shuffle]. |
+ Float32x4 shuffleMix(Float32x4 other, int m) { |
+ if ((m < 0) || (m > 255)) { |
+ throw new RangeError('mask $m must be in the range [0..256)'); |
+ } |
+ double _x = _storage[m & 0x3]; |
+ double _y = _storage[(m >> 2) & 0x3]; |
+ double _z = other._storage[(m >> 4) & 0x3]; |
+ double _w = other._storage[(m >> 6) & 0x3]; |
return new Float32x4(_x, _y, _z, _w); |
} |
@@ -1597,6 +1561,290 @@ class Uint32x4 { |
return mx | my << 1 | mz << 2 | mw << 3; |
} |
+ /// Mask passed to [shuffle] and [shuffleMix]. |
+ static const int XXXX = 0x0; |
+ static const int XXXY = 0x40; |
+ static const int XXXZ = 0x80; |
+ static const int XXXW = 0xC0; |
+ static const int XXYX = 0x10; |
+ static const int XXYY = 0x50; |
+ static const int XXYZ = 0x90; |
+ static const int XXYW = 0xD0; |
+ static const int XXZX = 0x20; |
+ static const int XXZY = 0x60; |
+ static const int XXZZ = 0xA0; |
+ static const int XXZW = 0xE0; |
+ static const int XXWX = 0x30; |
+ static const int XXWY = 0x70; |
+ static const int XXWZ = 0xB0; |
+ static const int XXWW = 0xF0; |
+ static const int XYXX = 0x4; |
+ static const int XYXY = 0x44; |
+ static const int XYXZ = 0x84; |
+ static const int XYXW = 0xC4; |
+ static const int XYYX = 0x14; |
+ static const int XYYY = 0x54; |
+ static const int XYYZ = 0x94; |
+ static const int XYYW = 0xD4; |
+ static const int XYZX = 0x24; |
+ static const int XYZY = 0x64; |
+ static const int XYZZ = 0xA4; |
+ static const int XYZW = 0xE4; |
+ static const int XYWX = 0x34; |
+ static const int XYWY = 0x74; |
+ static const int XYWZ = 0xB4; |
+ static const int XYWW = 0xF4; |
+ static const int XZXX = 0x8; |
+ static const int XZXY = 0x48; |
+ static const int XZXZ = 0x88; |
+ static const int XZXW = 0xC8; |
+ static const int XZYX = 0x18; |
+ static const int XZYY = 0x58; |
+ static const int XZYZ = 0x98; |
+ static const int XZYW = 0xD8; |
+ static const int XZZX = 0x28; |
+ static const int XZZY = 0x68; |
+ static const int XZZZ = 0xA8; |
+ static const int XZZW = 0xE8; |
+ static const int XZWX = 0x38; |
+ static const int XZWY = 0x78; |
+ static const int XZWZ = 0xB8; |
+ static const int XZWW = 0xF8; |
+ static const int XWXX = 0xC; |
+ static const int XWXY = 0x4C; |
+ static const int XWXZ = 0x8C; |
+ static const int XWXW = 0xCC; |
+ static const int XWYX = 0x1C; |
+ static const int XWYY = 0x5C; |
+ static const int XWYZ = 0x9C; |
+ static const int XWYW = 0xDC; |
+ static const int XWZX = 0x2C; |
+ static const int XWZY = 0x6C; |
+ static const int XWZZ = 0xAC; |
+ static const int XWZW = 0xEC; |
+ static const int XWWX = 0x3C; |
+ static const int XWWY = 0x7C; |
+ static const int XWWZ = 0xBC; |
+ static const int XWWW = 0xFC; |
+ static const int YXXX = 0x1; |
+ static const int YXXY = 0x41; |
+ static const int YXXZ = 0x81; |
+ static const int YXXW = 0xC1; |
+ static const int YXYX = 0x11; |
+ static const int YXYY = 0x51; |
+ static const int YXYZ = 0x91; |
+ static const int YXYW = 0xD1; |
+ static const int YXZX = 0x21; |
+ static const int YXZY = 0x61; |
+ static const int YXZZ = 0xA1; |
+ static const int YXZW = 0xE1; |
+ static const int YXWX = 0x31; |
+ static const int YXWY = 0x71; |
+ static const int YXWZ = 0xB1; |
+ static const int YXWW = 0xF1; |
+ static const int YYXX = 0x5; |
+ static const int YYXY = 0x45; |
+ static const int YYXZ = 0x85; |
+ static const int YYXW = 0xC5; |
+ static const int YYYX = 0x15; |
+ static const int YYYY = 0x55; |
+ static const int YYYZ = 0x95; |
+ static const int YYYW = 0xD5; |
+ static const int YYZX = 0x25; |
+ static const int YYZY = 0x65; |
+ static const int YYZZ = 0xA5; |
+ static const int YYZW = 0xE5; |
+ static const int YYWX = 0x35; |
+ static const int YYWY = 0x75; |
+ static const int YYWZ = 0xB5; |
+ static const int YYWW = 0xF5; |
+ static const int YZXX = 0x9; |
+ static const int YZXY = 0x49; |
+ static const int YZXZ = 0x89; |
+ static const int YZXW = 0xC9; |
+ static const int YZYX = 0x19; |
+ static const int YZYY = 0x59; |
+ static const int YZYZ = 0x99; |
+ static const int YZYW = 0xD9; |
+ static const int YZZX = 0x29; |
+ static const int YZZY = 0x69; |
+ static const int YZZZ = 0xA9; |
+ static const int YZZW = 0xE9; |
+ static const int YZWX = 0x39; |
+ static const int YZWY = 0x79; |
+ static const int YZWZ = 0xB9; |
+ static const int YZWW = 0xF9; |
+ static const int YWXX = 0xD; |
+ static const int YWXY = 0x4D; |
+ static const int YWXZ = 0x8D; |
+ static const int YWXW = 0xCD; |
+ static const int YWYX = 0x1D; |
+ static const int YWYY = 0x5D; |
+ static const int YWYZ = 0x9D; |
+ static const int YWYW = 0xDD; |
+ static const int YWZX = 0x2D; |
+ static const int YWZY = 0x6D; |
+ static const int YWZZ = 0xAD; |
+ static const int YWZW = 0xED; |
+ static const int YWWX = 0x3D; |
+ static const int YWWY = 0x7D; |
+ static const int YWWZ = 0xBD; |
+ static const int YWWW = 0xFD; |
+ static const int ZXXX = 0x2; |
+ static const int ZXXY = 0x42; |
+ static const int ZXXZ = 0x82; |
+ static const int ZXXW = 0xC2; |
+ static const int ZXYX = 0x12; |
+ static const int ZXYY = 0x52; |
+ static const int ZXYZ = 0x92; |
+ static const int ZXYW = 0xD2; |
+ static const int ZXZX = 0x22; |
+ static const int ZXZY = 0x62; |
+ static const int ZXZZ = 0xA2; |
+ static const int ZXZW = 0xE2; |
+ static const int ZXWX = 0x32; |
+ static const int ZXWY = 0x72; |
+ static const int ZXWZ = 0xB2; |
+ static const int ZXWW = 0xF2; |
+ static const int ZYXX = 0x6; |
+ static const int ZYXY = 0x46; |
+ static const int ZYXZ = 0x86; |
+ static const int ZYXW = 0xC6; |
+ static const int ZYYX = 0x16; |
+ static const int ZYYY = 0x56; |
+ static const int ZYYZ = 0x96; |
+ static const int ZYYW = 0xD6; |
+ static const int ZYZX = 0x26; |
+ static const int ZYZY = 0x66; |
+ static const int ZYZZ = 0xA6; |
+ static const int ZYZW = 0xE6; |
+ static const int ZYWX = 0x36; |
+ static const int ZYWY = 0x76; |
+ static const int ZYWZ = 0xB6; |
+ static const int ZYWW = 0xF6; |
+ static const int ZZXX = 0xA; |
+ static const int ZZXY = 0x4A; |
+ static const int ZZXZ = 0x8A; |
+ static const int ZZXW = 0xCA; |
+ static const int ZZYX = 0x1A; |
+ static const int ZZYY = 0x5A; |
+ static const int ZZYZ = 0x9A; |
+ static const int ZZYW = 0xDA; |
+ static const int ZZZX = 0x2A; |
+ static const int ZZZY = 0x6A; |
+ static const int ZZZZ = 0xAA; |
+ static const int ZZZW = 0xEA; |
+ static const int ZZWX = 0x3A; |
+ static const int ZZWY = 0x7A; |
+ static const int ZZWZ = 0xBA; |
+ static const int ZZWW = 0xFA; |
+ static const int ZWXX = 0xE; |
+ static const int ZWXY = 0x4E; |
+ static const int ZWXZ = 0x8E; |
+ static const int ZWXW = 0xCE; |
+ static const int ZWYX = 0x1E; |
+ static const int ZWYY = 0x5E; |
+ static const int ZWYZ = 0x9E; |
+ static const int ZWYW = 0xDE; |
+ static const int ZWZX = 0x2E; |
+ static const int ZWZY = 0x6E; |
+ static const int ZWZZ = 0xAE; |
+ static const int ZWZW = 0xEE; |
+ static const int ZWWX = 0x3E; |
+ static const int ZWWY = 0x7E; |
+ static const int ZWWZ = 0xBE; |
+ static const int ZWWW = 0xFE; |
+ static const int WXXX = 0x3; |
+ static const int WXXY = 0x43; |
+ static const int WXXZ = 0x83; |
+ static const int WXXW = 0xC3; |
+ static const int WXYX = 0x13; |
+ static const int WXYY = 0x53; |
+ static const int WXYZ = 0x93; |
+ static const int WXYW = 0xD3; |
+ static const int WXZX = 0x23; |
+ static const int WXZY = 0x63; |
+ static const int WXZZ = 0xA3; |
+ static const int WXZW = 0xE3; |
+ static const int WXWX = 0x33; |
+ static const int WXWY = 0x73; |
+ static const int WXWZ = 0xB3; |
+ static const int WXWW = 0xF3; |
+ static const int WYXX = 0x7; |
+ static const int WYXY = 0x47; |
+ static const int WYXZ = 0x87; |
+ static const int WYXW = 0xC7; |
+ static const int WYYX = 0x17; |
+ static const int WYYY = 0x57; |
+ static const int WYYZ = 0x97; |
+ static const int WYYW = 0xD7; |
+ static const int WYZX = 0x27; |
+ static const int WYZY = 0x67; |
+ static const int WYZZ = 0xA7; |
+ static const int WYZW = 0xE7; |
+ static const int WYWX = 0x37; |
+ static const int WYWY = 0x77; |
+ static const int WYWZ = 0xB7; |
+ static const int WYWW = 0xF7; |
+ static const int WZXX = 0xB; |
+ static const int WZXY = 0x4B; |
+ static const int WZXZ = 0x8B; |
+ static const int WZXW = 0xCB; |
+ static const int WZYX = 0x1B; |
+ static const int WZYY = 0x5B; |
+ static const int WZYZ = 0x9B; |
+ static const int WZYW = 0xDB; |
+ static const int WZZX = 0x2B; |
+ static const int WZZY = 0x6B; |
+ static const int WZZZ = 0xAB; |
+ static const int WZZW = 0xEB; |
+ static const int WZWX = 0x3B; |
+ static const int WZWY = 0x7B; |
+ static const int WZWZ = 0xBB; |
+ static const int WZWW = 0xFB; |
+ static const int WWXX = 0xF; |
+ static const int WWXY = 0x4F; |
+ static const int WWXZ = 0x8F; |
+ static const int WWXW = 0xCF; |
+ static const int WWYX = 0x1F; |
+ static const int WWYY = 0x5F; |
+ static const int WWYZ = 0x9F; |
+ static const int WWYW = 0xDF; |
+ static const int WWZX = 0x2F; |
+ static const int WWZY = 0x6F; |
+ static const int WWZZ = 0xAF; |
+ static const int WWZW = 0xEF; |
+ static const int WWWX = 0x3F; |
+ static const int WWWY = 0x7F; |
+ static const int WWWZ = 0xBF; |
+ static const int WWWW = 0xFF; |
+ |
+ /// Shuffle the lane values. [mask] must be one of the 256 shuffle constants. |
+ Uint32x4 shuffle(int mask) { |
+ if ((mask < 0) || (mask > 255)) { |
+ throw new RangeError('mask $mask must be in the range [0..256)'); |
+ } |
+ int _x = _storage[mask & 0x3]; |
+ int _y = _storage[(mask >> 2) & 0x3]; |
+ int _z = _storage[(mask >> 4) & 0x3]; |
+ int _w = _storage[(mask >> 6) & 0x3]; |
+ return new Uint32x4(_x, _y, _z, _w); |
+ } |
+ |
+ /// Shuffle the lane values in [this] and [other]. The returned |
+ /// Uint32x4 will have XY lanes from [this] and ZW lanes from [other]. |
+ /// Uses the same [mask] as [shuffle]. |
+ Uint32x4 shuffleMix(Uint32x4 other, int mask) { |
+ if ((mask < 0) || (mask > 255)) { |
+ throw new RangeError('mask $mask must be in the range [0..256)'); |
+ } |
+ int _x = _storage[mask & 0x3]; |
+ int _y = _storage[(mask >> 2) & 0x3]; |
+ int _z = other._storage[(mask >> 4) & 0x3]; |
+ int _w = other._storage[(mask >> 6) & 0x3]; |
+ return new Uint32x4(_x, _y, _z, _w); |
+ } |
+ |
/// Returns a new [Uint32x4] copied from [this] with a new x value. |
Uint32x4 withX(int x) { |
int _x = x; |