Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(152)

Side by Side Diff: dart/runtime/lib/simd128.cc

Issue 59073003: Version 0.8.10.4 (Closed) Base URL: http://dart.googlecode.com/svn/trunk/
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « dart/runtime/lib/mirrors_impl.dart ('k') | dart/runtime/lib/string_patch.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/bootstrap_natives.h" 5 #include "vm/bootstrap_natives.h"
6 6
7 #include "vm/exceptions.h" 7 #include "vm/exceptions.h"
8 #include "vm/native_entry.h" 8 #include "vm/native_entry.h"
9 #include "vm/object.h" 9 #include "vm/object.h"
10 #include "vm/symbols.h" 10 #include "vm/symbols.h"
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 } 47 }
48 48
49 49
50 DEFINE_NATIVE_ENTRY(Float32x4_zero, 1) { 50 DEFINE_NATIVE_ENTRY(Float32x4_zero, 1) {
51 ASSERT(AbstractTypeArguments::CheckedHandle( 51 ASSERT(AbstractTypeArguments::CheckedHandle(
52 arguments->NativeArgAt(0)).IsNull()); 52 arguments->NativeArgAt(0)).IsNull());
53 return Float32x4::New(0.0f, 0.0f, 0.0f, 0.0f); 53 return Float32x4::New(0.0f, 0.0f, 0.0f, 0.0f);
54 } 54 }
55 55
56 56
57 DEFINE_NATIVE_ENTRY(Float32x4_fromUint32x4Bits, 2) { 57 DEFINE_NATIVE_ENTRY(Float32x4_fromInt32x4Bits, 2) {
58 GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, v, arguments->NativeArgAt(1)); 58 GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, v, arguments->NativeArgAt(1));
59 return Float32x4::New(v.value()); 59 return Float32x4::New(v.value());
60 } 60 }
61 61
62 62
63 DEFINE_NATIVE_ENTRY(Float32x4_add, 2) { 63 DEFINE_NATIVE_ENTRY(Float32x4_add, 2) {
64 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, self, arguments->NativeArgAt(0)); 64 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, self, arguments->NativeArgAt(0));
65 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, other, arguments->NativeArgAt(1)); 65 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, other, arguments->NativeArgAt(1));
66 float _x = self.x() + other.x(); 66 float _x = self.x() + other.x();
67 float _y = self.y() + other.y(); 67 float _y = self.y() + other.y();
68 float _z = self.z() + other.z(); 68 float _z = self.z() + other.z();
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 } 115 }
116 116
117 117
118 DEFINE_NATIVE_ENTRY(Float32x4_cmplt, 2) { 118 DEFINE_NATIVE_ENTRY(Float32x4_cmplt, 2) {
119 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, a, arguments->NativeArgAt(0)); 119 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, a, arguments->NativeArgAt(0));
120 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, b, arguments->NativeArgAt(1)); 120 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, b, arguments->NativeArgAt(1));
121 uint32_t _x = a.x() < b.x() ? 0xFFFFFFFF : 0x0; 121 uint32_t _x = a.x() < b.x() ? 0xFFFFFFFF : 0x0;
122 uint32_t _y = a.y() < b.y() ? 0xFFFFFFFF : 0x0; 122 uint32_t _y = a.y() < b.y() ? 0xFFFFFFFF : 0x0;
123 uint32_t _z = a.z() < b.z() ? 0xFFFFFFFF : 0x0; 123 uint32_t _z = a.z() < b.z() ? 0xFFFFFFFF : 0x0;
124 uint32_t _w = a.w() < b.w() ? 0xFFFFFFFF : 0x0; 124 uint32_t _w = a.w() < b.w() ? 0xFFFFFFFF : 0x0;
125 return Uint32x4::New(_x, _y, _z, _w); 125 return Int32x4::New(_x, _y, _z, _w);
126 } 126 }
127 127
128 128
129 DEFINE_NATIVE_ENTRY(Float32x4_cmplte, 2) { 129 DEFINE_NATIVE_ENTRY(Float32x4_cmplte, 2) {
130 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, a, arguments->NativeArgAt(0)); 130 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, a, arguments->NativeArgAt(0));
131 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, b, arguments->NativeArgAt(1)); 131 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, b, arguments->NativeArgAt(1));
132 uint32_t _x = a.x() <= b.x() ? 0xFFFFFFFF : 0x0; 132 uint32_t _x = a.x() <= b.x() ? 0xFFFFFFFF : 0x0;
133 uint32_t _y = a.y() <= b.y() ? 0xFFFFFFFF : 0x0; 133 uint32_t _y = a.y() <= b.y() ? 0xFFFFFFFF : 0x0;
134 uint32_t _z = a.z() <= b.z() ? 0xFFFFFFFF : 0x0; 134 uint32_t _z = a.z() <= b.z() ? 0xFFFFFFFF : 0x0;
135 uint32_t _w = a.w() <= b.w() ? 0xFFFFFFFF : 0x0; 135 uint32_t _w = a.w() <= b.w() ? 0xFFFFFFFF : 0x0;
136 return Uint32x4::New(_x, _y, _z, _w); 136 return Int32x4::New(_x, _y, _z, _w);
137 } 137 }
138 138
139 139
140 DEFINE_NATIVE_ENTRY(Float32x4_cmpgt, 2) { 140 DEFINE_NATIVE_ENTRY(Float32x4_cmpgt, 2) {
141 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, a, arguments->NativeArgAt(0)); 141 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, a, arguments->NativeArgAt(0));
142 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, b, arguments->NativeArgAt(1)); 142 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, b, arguments->NativeArgAt(1));
143 uint32_t _x = a.x() > b.x() ? 0xFFFFFFFF : 0x0; 143 uint32_t _x = a.x() > b.x() ? 0xFFFFFFFF : 0x0;
144 uint32_t _y = a.y() > b.y() ? 0xFFFFFFFF : 0x0; 144 uint32_t _y = a.y() > b.y() ? 0xFFFFFFFF : 0x0;
145 uint32_t _z = a.z() > b.z() ? 0xFFFFFFFF : 0x0; 145 uint32_t _z = a.z() > b.z() ? 0xFFFFFFFF : 0x0;
146 uint32_t _w = a.w() > b.w() ? 0xFFFFFFFF : 0x0; 146 uint32_t _w = a.w() > b.w() ? 0xFFFFFFFF : 0x0;
147 return Uint32x4::New(_x, _y, _z, _w); 147 return Int32x4::New(_x, _y, _z, _w);
148 } 148 }
149 149
150 150
151 DEFINE_NATIVE_ENTRY(Float32x4_cmpgte, 2) { 151 DEFINE_NATIVE_ENTRY(Float32x4_cmpgte, 2) {
152 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, a, arguments->NativeArgAt(0)); 152 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, a, arguments->NativeArgAt(0));
153 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, b, arguments->NativeArgAt(1)); 153 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, b, arguments->NativeArgAt(1));
154 uint32_t _x = a.x() >= b.x() ? 0xFFFFFFFF : 0x0; 154 uint32_t _x = a.x() >= b.x() ? 0xFFFFFFFF : 0x0;
155 uint32_t _y = a.y() >= b.y() ? 0xFFFFFFFF : 0x0; 155 uint32_t _y = a.y() >= b.y() ? 0xFFFFFFFF : 0x0;
156 uint32_t _z = a.z() >= b.z() ? 0xFFFFFFFF : 0x0; 156 uint32_t _z = a.z() >= b.z() ? 0xFFFFFFFF : 0x0;
157 uint32_t _w = a.w() >= b.w() ? 0xFFFFFFFF : 0x0; 157 uint32_t _w = a.w() >= b.w() ? 0xFFFFFFFF : 0x0;
158 return Uint32x4::New(_x, _y, _z, _w); 158 return Int32x4::New(_x, _y, _z, _w);
159 } 159 }
160 160
161 161
162 DEFINE_NATIVE_ENTRY(Float32x4_cmpequal, 2) { 162 DEFINE_NATIVE_ENTRY(Float32x4_cmpequal, 2) {
163 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, a, arguments->NativeArgAt(0)); 163 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, a, arguments->NativeArgAt(0));
164 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, b, arguments->NativeArgAt(1)); 164 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, b, arguments->NativeArgAt(1));
165 uint32_t _x = a.x() == b.x() ? 0xFFFFFFFF : 0x0; 165 uint32_t _x = a.x() == b.x() ? 0xFFFFFFFF : 0x0;
166 uint32_t _y = a.y() == b.y() ? 0xFFFFFFFF : 0x0; 166 uint32_t _y = a.y() == b.y() ? 0xFFFFFFFF : 0x0;
167 uint32_t _z = a.z() == b.z() ? 0xFFFFFFFF : 0x0; 167 uint32_t _z = a.z() == b.z() ? 0xFFFFFFFF : 0x0;
168 uint32_t _w = a.w() == b.w() ? 0xFFFFFFFF : 0x0; 168 uint32_t _w = a.w() == b.w() ? 0xFFFFFFFF : 0x0;
169 return Uint32x4::New(_x, _y, _z, _w); 169 return Int32x4::New(_x, _y, _z, _w);
170 } 170 }
171 171
172 172
173 DEFINE_NATIVE_ENTRY(Float32x4_cmpnequal, 2) { 173 DEFINE_NATIVE_ENTRY(Float32x4_cmpnequal, 2) {
174 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, a, arguments->NativeArgAt(0)); 174 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, a, arguments->NativeArgAt(0));
175 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, b, arguments->NativeArgAt(1)); 175 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, b, arguments->NativeArgAt(1));
176 uint32_t _x = a.x() != b.x() ? 0xFFFFFFFF : 0x0; 176 uint32_t _x = a.x() != b.x() ? 0xFFFFFFFF : 0x0;
177 uint32_t _y = a.y() != b.y() ? 0xFFFFFFFF : 0x0; 177 uint32_t _y = a.y() != b.y() ? 0xFFFFFFFF : 0x0;
178 uint32_t _z = a.z() != b.z() ? 0xFFFFFFFF : 0x0; 178 uint32_t _z = a.z() != b.z() ? 0xFFFFFFFF : 0x0;
179 uint32_t _w = a.w() != b.w() ? 0xFFFFFFFF : 0x0; 179 uint32_t _w = a.w() != b.w() ? 0xFFFFFFFF : 0x0;
180 return Uint32x4::New(_x, _y, _z, _w); 180 return Int32x4::New(_x, _y, _z, _w);
181 } 181 }
182 182
183 183
184 DEFINE_NATIVE_ENTRY(Float32x4_scale, 2) { 184 DEFINE_NATIVE_ENTRY(Float32x4_scale, 2) {
185 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, self, arguments->NativeArgAt(0)); 185 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, self, arguments->NativeArgAt(0));
186 GET_NON_NULL_NATIVE_ARGUMENT(Double, scale, arguments->NativeArgAt(1)); 186 GET_NON_NULL_NATIVE_ARGUMENT(Double, scale, arguments->NativeArgAt(1));
187 float _s = static_cast<float>(scale.value()); 187 float _s = static_cast<float>(scale.value());
188 float _x = self.x() * _s; 188 float _x = self.x() * _s;
189 float _y = self.y() * _s; 189 float _y = self.y() * _s;
190 float _z = self.z() * _s; 190 float _z = self.z() * _s;
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, self, arguments->NativeArgAt(0)); 253 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, self, arguments->NativeArgAt(0));
254 uint32_t mx = (bit_cast<uint32_t>(self.x()) & 0x80000000) >> 31; 254 uint32_t mx = (bit_cast<uint32_t>(self.x()) & 0x80000000) >> 31;
255 uint32_t my = (bit_cast<uint32_t>(self.y()) & 0x80000000) >> 31; 255 uint32_t my = (bit_cast<uint32_t>(self.y()) & 0x80000000) >> 31;
256 uint32_t mz = (bit_cast<uint32_t>(self.z()) & 0x80000000) >> 31; 256 uint32_t mz = (bit_cast<uint32_t>(self.z()) & 0x80000000) >> 31;
257 uint32_t mw = (bit_cast<uint32_t>(self.w()) & 0x80000000) >> 31; 257 uint32_t mw = (bit_cast<uint32_t>(self.w()) & 0x80000000) >> 31;
258 uint32_t value = mx | (my << 1) | (mz << 2) | (mw << 3); 258 uint32_t value = mx | (my << 1) | (mz << 2) | (mw << 3);
259 return Integer::New(value); 259 return Integer::New(value);
260 } 260 }
261 261
262 262
263 DEFINE_NATIVE_ENTRY(Uint32x4_getSignMask, 1) { 263 DEFINE_NATIVE_ENTRY(Int32x4_getSignMask, 1) {
264 GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0)); 264 GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
265 uint32_t mx = (self.x() & 0x80000000) >> 31; 265 uint32_t mx = (self.x() & 0x80000000) >> 31;
266 uint32_t my = (self.y() & 0x80000000) >> 31; 266 uint32_t my = (self.y() & 0x80000000) >> 31;
267 uint32_t mz = (self.z() & 0x80000000) >> 31; 267 uint32_t mz = (self.z() & 0x80000000) >> 31;
268 uint32_t mw = (self.w() & 0x80000000) >> 31; 268 uint32_t mw = (self.w() & 0x80000000) >> 31;
269 uint32_t value = mx | (my << 1) | (mz << 2) | (mw << 3); 269 uint32_t value = mx | (my << 1) | (mz << 2) | (mw << 3);
270 return Integer::New(value); 270 return Integer::New(value);
271 } 271 }
272 272
273 273
274 DEFINE_NATIVE_ENTRY(Float32x4_shuffle, 2) { 274 DEFINE_NATIVE_ENTRY(Float32x4_shuffle, 2) {
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
392 DEFINE_NATIVE_ENTRY(Float32x4_reciprocalSqrt, 1) { 392 DEFINE_NATIVE_ENTRY(Float32x4_reciprocalSqrt, 1) {
393 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, self, arguments->NativeArgAt(0)); 393 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, self, arguments->NativeArgAt(0));
394 float _x = sqrtf(1.0f / self.x()); 394 float _x = sqrtf(1.0f / self.x());
395 float _y = sqrtf(1.0f / self.y()); 395 float _y = sqrtf(1.0f / self.y());
396 float _z = sqrtf(1.0f / self.z()); 396 float _z = sqrtf(1.0f / self.z());
397 float _w = sqrtf(1.0f / self.w()); 397 float _w = sqrtf(1.0f / self.w());
398 return Float32x4::New(_x, _y, _z, _w); 398 return Float32x4::New(_x, _y, _z, _w);
399 } 399 }
400 400
401 401
402 DEFINE_NATIVE_ENTRY(Uint32x4_fromInts, 5) { 402 DEFINE_NATIVE_ENTRY(Int32x4_fromInts, 5) {
403 ASSERT(AbstractTypeArguments::CheckedHandle( 403 ASSERT(AbstractTypeArguments::CheckedHandle(
404 arguments->NativeArgAt(0)).IsNull()); 404 arguments->NativeArgAt(0)).IsNull());
405 GET_NON_NULL_NATIVE_ARGUMENT(Integer, x, arguments->NativeArgAt(1)); 405 GET_NON_NULL_NATIVE_ARGUMENT(Integer, x, arguments->NativeArgAt(1));
406 GET_NON_NULL_NATIVE_ARGUMENT(Integer, y, arguments->NativeArgAt(2)); 406 GET_NON_NULL_NATIVE_ARGUMENT(Integer, y, arguments->NativeArgAt(2));
407 GET_NON_NULL_NATIVE_ARGUMENT(Integer, z, arguments->NativeArgAt(3)); 407 GET_NON_NULL_NATIVE_ARGUMENT(Integer, z, arguments->NativeArgAt(3));
408 GET_NON_NULL_NATIVE_ARGUMENT(Integer, w, arguments->NativeArgAt(4)); 408 GET_NON_NULL_NATIVE_ARGUMENT(Integer, w, arguments->NativeArgAt(4));
409 uint32_t _x = static_cast<uint32_t>(x.AsInt64Value() & 0xFFFFFFFF); 409 int32_t _x = static_cast<int32_t>(x.AsInt64Value() & 0xFFFFFFFF);
410 uint32_t _y = static_cast<uint32_t>(y.AsInt64Value() & 0xFFFFFFFF); 410 int32_t _y = static_cast<int32_t>(y.AsInt64Value() & 0xFFFFFFFF);
411 uint32_t _z = static_cast<uint32_t>(z.AsInt64Value() & 0xFFFFFFFF); 411 int32_t _z = static_cast<int32_t>(z.AsInt64Value() & 0xFFFFFFFF);
412 uint32_t _w = static_cast<uint32_t>(w.AsInt64Value() & 0xFFFFFFFF); 412 int32_t _w = static_cast<int32_t>(w.AsInt64Value() & 0xFFFFFFFF);
413 return Uint32x4::New(_x, _y, _z, _w); 413 return Int32x4::New(_x, _y, _z, _w);
414 } 414 }
415 415
416 416
417 DEFINE_NATIVE_ENTRY(Uint32x4_fromBools, 5) { 417 DEFINE_NATIVE_ENTRY(Int32x4_fromBools, 5) {
418 ASSERT(AbstractTypeArguments::CheckedHandle( 418 ASSERT(AbstractTypeArguments::CheckedHandle(
419 arguments->NativeArgAt(0)).IsNull()); 419 arguments->NativeArgAt(0)).IsNull());
420 GET_NON_NULL_NATIVE_ARGUMENT(Bool, x, arguments->NativeArgAt(1)); 420 GET_NON_NULL_NATIVE_ARGUMENT(Bool, x, arguments->NativeArgAt(1));
421 GET_NON_NULL_NATIVE_ARGUMENT(Bool, y, arguments->NativeArgAt(2)); 421 GET_NON_NULL_NATIVE_ARGUMENT(Bool, y, arguments->NativeArgAt(2));
422 GET_NON_NULL_NATIVE_ARGUMENT(Bool, z, arguments->NativeArgAt(3)); 422 GET_NON_NULL_NATIVE_ARGUMENT(Bool, z, arguments->NativeArgAt(3));
423 GET_NON_NULL_NATIVE_ARGUMENT(Bool, w, arguments->NativeArgAt(4)); 423 GET_NON_NULL_NATIVE_ARGUMENT(Bool, w, arguments->NativeArgAt(4));
424 uint32_t _x = x.value() ? 0xFFFFFFFF : 0x0; 424 int32_t _x = x.value() ? 0xFFFFFFFF : 0x0;
425 uint32_t _y = y.value() ? 0xFFFFFFFF : 0x0; 425 int32_t _y = y.value() ? 0xFFFFFFFF : 0x0;
426 uint32_t _z = z.value() ? 0xFFFFFFFF : 0x0; 426 int32_t _z = z.value() ? 0xFFFFFFFF : 0x0;
427 uint32_t _w = w.value() ? 0xFFFFFFFF : 0x0; 427 int32_t _w = w.value() ? 0xFFFFFFFF : 0x0;
428 return Uint32x4::New(_x, _y, _z, _w); 428 return Int32x4::New(_x, _y, _z, _w);
429 } 429 }
430 430
431 431
432 DEFINE_NATIVE_ENTRY(Uint32x4_fromFloat32x4Bits, 2) { 432 DEFINE_NATIVE_ENTRY(Int32x4_fromFloat32x4Bits, 2) {
433 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, v, arguments->NativeArgAt(1)); 433 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, v, arguments->NativeArgAt(1));
434 return Uint32x4::New(v.value()); 434 return Int32x4::New(v.value());
435 } 435 }
436 436
437 437
438 DEFINE_NATIVE_ENTRY(Uint32x4_or, 2) { 438 DEFINE_NATIVE_ENTRY(Int32x4_or, 2) {
439 GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0)); 439 GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
440 GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, other, arguments->NativeArgAt(1)); 440 GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, other, arguments->NativeArgAt(1));
441 uint32_t _x = self.x() | other.x(); 441 int32_t _x = self.x() | other.x();
442 uint32_t _y = self.y() | other.y(); 442 int32_t _y = self.y() | other.y();
443 uint32_t _z = self.z() | other.z(); 443 int32_t _z = self.z() | other.z();
444 uint32_t _w = self.w() | other.w(); 444 int32_t _w = self.w() | other.w();
445 return Uint32x4::New(_x, _y, _z, _w); 445 return Int32x4::New(_x, _y, _z, _w);
446 } 446 }
447 447
448 448
449 DEFINE_NATIVE_ENTRY(Uint32x4_and, 2) { 449 DEFINE_NATIVE_ENTRY(Int32x4_and, 2) {
450 GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0)); 450 GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
451 GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, other, arguments->NativeArgAt(1)); 451 GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, other, arguments->NativeArgAt(1));
452 uint32_t _x = self.x() & other.x(); 452 int32_t _x = self.x() & other.x();
453 uint32_t _y = self.y() & other.y(); 453 int32_t _y = self.y() & other.y();
454 uint32_t _z = self.z() & other.z(); 454 int32_t _z = self.z() & other.z();
455 uint32_t _w = self.w() & other.w(); 455 int32_t _w = self.w() & other.w();
456 return Uint32x4::New(_x, _y, _z, _w); 456 return Int32x4::New(_x, _y, _z, _w);
457 } 457 }
458 458
459 459
460 DEFINE_NATIVE_ENTRY(Uint32x4_xor, 2) { 460 DEFINE_NATIVE_ENTRY(Int32x4_xor, 2) {
461 GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0)); 461 GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
462 GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, other, arguments->NativeArgAt(1)); 462 GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, other, arguments->NativeArgAt(1));
463 uint32_t _x = self.x() ^ other.x(); 463 int32_t _x = self.x() ^ other.x();
464 uint32_t _y = self.y() ^ other.y(); 464 int32_t _y = self.y() ^ other.y();
465 uint32_t _z = self.z() ^ other.z(); 465 int32_t _z = self.z() ^ other.z();
466 uint32_t _w = self.w() ^ other.w(); 466 int32_t _w = self.w() ^ other.w();
467 return Uint32x4::New(_x, _y, _z, _w); 467 return Int32x4::New(_x, _y, _z, _w);
468 } 468 }
469 469
470 470
471 DEFINE_NATIVE_ENTRY(Uint32x4_add, 2) { 471 DEFINE_NATIVE_ENTRY(Int32x4_add, 2) {
472 GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0)); 472 GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
473 GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, other, arguments->NativeArgAt(1)); 473 GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, other, arguments->NativeArgAt(1));
474 uint32_t _x = self.x() + other.x(); 474 int32_t _x = self.x() + other.x();
475 uint32_t _y = self.y() + other.y(); 475 int32_t _y = self.y() + other.y();
476 uint32_t _z = self.z() + other.z(); 476 int32_t _z = self.z() + other.z();
477 uint32_t _w = self.w() + other.w(); 477 int32_t _w = self.w() + other.w();
478 return Uint32x4::New(_x, _y, _z, _w); 478 return Int32x4::New(_x, _y, _z, _w);
479 } 479 }
480 480
481 481
482 DEFINE_NATIVE_ENTRY(Uint32x4_sub, 2) { 482 DEFINE_NATIVE_ENTRY(Int32x4_sub, 2) {
483 GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0)); 483 GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
484 GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, other, arguments->NativeArgAt(1)); 484 GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, other, arguments->NativeArgAt(1));
485 uint32_t _x = self.x() - other.x(); 485 int32_t _x = self.x() - other.x();
486 uint32_t _y = self.y() - other.y(); 486 int32_t _y = self.y() - other.y();
487 uint32_t _z = self.z() - other.z(); 487 int32_t _z = self.z() - other.z();
488 uint32_t _w = self.w() - other.w(); 488 int32_t _w = self.w() - other.w();
489 return Uint32x4::New(_x, _y, _z, _w); 489 return Int32x4::New(_x, _y, _z, _w);
490 } 490 }
491 491
492 492
493 DEFINE_NATIVE_ENTRY(Uint32x4_getX, 1) { 493 DEFINE_NATIVE_ENTRY(Int32x4_getX, 1) {
494 GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0)); 494 GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
495 uint32_t value = self.x(); 495 int32_t value = self.x();
496 return Integer::New(value); 496 return Integer::New(value);
497 } 497 }
498 498
499 499
500 DEFINE_NATIVE_ENTRY(Uint32x4_getY, 1) { 500 DEFINE_NATIVE_ENTRY(Int32x4_getY, 1) {
501 GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0)); 501 GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
502 uint32_t value = self.y(); 502 int32_t value = self.y();
503 return Integer::New(value); 503 return Integer::New(value);
504 } 504 }
505 505
506 506
507 DEFINE_NATIVE_ENTRY(Uint32x4_getZ, 1) { 507 DEFINE_NATIVE_ENTRY(Int32x4_getZ, 1) {
508 GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0)); 508 GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
509 uint32_t value = self.z(); 509 int32_t value = self.z();
510 return Integer::New(value); 510 return Integer::New(value);
511 } 511 }
512 512
513 513
514 DEFINE_NATIVE_ENTRY(Uint32x4_getW, 1) { 514 DEFINE_NATIVE_ENTRY(Int32x4_getW, 1) {
515 GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0)); 515 GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
516 uint32_t value = self.w(); 516 int32_t value = self.w();
517 return Integer::New(value); 517 return Integer::New(value);
518 } 518 }
519 519
520 520
521 DEFINE_NATIVE_ENTRY(Uint32x4_shuffle, 2) { 521 DEFINE_NATIVE_ENTRY(Int32x4_shuffle, 2) {
522 GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0)); 522 GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
523 GET_NON_NULL_NATIVE_ARGUMENT(Integer, mask, arguments->NativeArgAt(1)); 523 GET_NON_NULL_NATIVE_ARGUMENT(Integer, mask, arguments->NativeArgAt(1));
524 int64_t m = mask.AsInt64Value(); 524 int64_t m = mask.AsInt64Value();
525 ThrowMaskRangeException(m); 525 ThrowMaskRangeException(m);
526 uint32_t data[4] = { self.x(), self.y(), self.z(), self.w() }; 526 int32_t data[4] = { self.x(), self.y(), self.z(), self.w() };
527 uint32_t _x = data[m & 0x3]; 527 int32_t _x = data[m & 0x3];
528 uint32_t _y = data[(m >> 2) & 0x3]; 528 int32_t _y = data[(m >> 2) & 0x3];
529 uint32_t _z = data[(m >> 4) & 0x3]; 529 int32_t _z = data[(m >> 4) & 0x3];
530 uint32_t _w = data[(m >> 6) & 0x3]; 530 int32_t _w = data[(m >> 6) & 0x3];
531 return Uint32x4::New(_x, _y, _z, _w); 531 return Int32x4::New(_x, _y, _z, _w);
532 } 532 }
533 533
534 534
535 DEFINE_NATIVE_ENTRY(Uint32x4_shuffleMix, 3) { 535 DEFINE_NATIVE_ENTRY(Int32x4_shuffleMix, 3) {
536 GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0)); 536 GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
537 GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, zw, arguments->NativeArgAt(1)); 537 GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, zw, arguments->NativeArgAt(1));
538 GET_NON_NULL_NATIVE_ARGUMENT(Integer, mask, arguments->NativeArgAt(2)); 538 GET_NON_NULL_NATIVE_ARGUMENT(Integer, mask, arguments->NativeArgAt(2));
539 int64_t m = mask.AsInt64Value(); 539 int64_t m = mask.AsInt64Value();
540 ThrowMaskRangeException(m); 540 ThrowMaskRangeException(m);
541 uint32_t data[4] = { self.x(), self.y(), self.z(), self.w() }; 541 int32_t data[4] = { self.x(), self.y(), self.z(), self.w() };
542 uint32_t zw_data[4] = { zw.x(), zw.y(), zw.z(), zw.w() }; 542 int32_t zw_data[4] = { zw.x(), zw.y(), zw.z(), zw.w() };
543 uint32_t _x = data[m & 0x3]; 543 int32_t _x = data[m & 0x3];
544 uint32_t _y = data[(m >> 2) & 0x3]; 544 int32_t _y = data[(m >> 2) & 0x3];
545 uint32_t _z = zw_data[(m >> 4) & 0x3]; 545 int32_t _z = zw_data[(m >> 4) & 0x3];
546 uint32_t _w = zw_data[(m >> 6) & 0x3]; 546 int32_t _w = zw_data[(m >> 6) & 0x3];
547 return Uint32x4::New(_x, _y, _z, _w); 547 return Int32x4::New(_x, _y, _z, _w);
548 } 548 }
549 549
550 550
551 DEFINE_NATIVE_ENTRY(Uint32x4_setX, 2) { 551 DEFINE_NATIVE_ENTRY(Int32x4_setX, 2) {
552 GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0)); 552 GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
553 GET_NON_NULL_NATIVE_ARGUMENT(Integer, x, arguments->NativeArgAt(1)); 553 GET_NON_NULL_NATIVE_ARGUMENT(Integer, x, arguments->NativeArgAt(1));
554 uint32_t _x = static_cast<uint32_t>(x.AsInt64Value() & 0xFFFFFFFF); 554 int32_t _x = static_cast<int32_t>(x.AsInt64Value() & 0xFFFFFFFF);
555 uint32_t _y = self.y(); 555 int32_t _y = self.y();
556 uint32_t _z = self.z(); 556 int32_t _z = self.z();
557 uint32_t _w = self.w(); 557 int32_t _w = self.w();
558 return Uint32x4::New(_x, _y, _z, _w); 558 return Int32x4::New(_x, _y, _z, _w);
559 } 559 }
560 560
561 561
562 DEFINE_NATIVE_ENTRY(Uint32x4_setY, 2) { 562 DEFINE_NATIVE_ENTRY(Int32x4_setY, 2) {
563 GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0)); 563 GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
564 GET_NON_NULL_NATIVE_ARGUMENT(Integer, y, arguments->NativeArgAt(1)); 564 GET_NON_NULL_NATIVE_ARGUMENT(Integer, y, arguments->NativeArgAt(1));
565 uint32_t _x = self.x(); 565 int32_t _x = self.x();
566 uint32_t _y = static_cast<uint32_t>(y.AsInt64Value() & 0xFFFFFFFF); 566 int32_t _y = static_cast<int32_t>(y.AsInt64Value() & 0xFFFFFFFF);
567 uint32_t _z = self.z(); 567 int32_t _z = self.z();
568 uint32_t _w = self.w(); 568 int32_t _w = self.w();
569 return Uint32x4::New(_x, _y, _z, _w); 569 return Int32x4::New(_x, _y, _z, _w);
570 } 570 }
571 571
572 572
573 DEFINE_NATIVE_ENTRY(Uint32x4_setZ, 2) { 573 DEFINE_NATIVE_ENTRY(Int32x4_setZ, 2) {
574 GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0)); 574 GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
575 GET_NON_NULL_NATIVE_ARGUMENT(Integer, z, arguments->NativeArgAt(1)); 575 GET_NON_NULL_NATIVE_ARGUMENT(Integer, z, arguments->NativeArgAt(1));
576 uint32_t _x = self.x(); 576 int32_t _x = self.x();
577 uint32_t _y = self.y(); 577 int32_t _y = self.y();
578 uint32_t _z = static_cast<uint32_t>(z.AsInt64Value() & 0xFFFFFFFF); 578 int32_t _z = static_cast<int32_t>(z.AsInt64Value() & 0xFFFFFFFF);
579 uint32_t _w = self.w(); 579 int32_t _w = self.w();
580 return Uint32x4::New(_x, _y, _z, _w); 580 return Int32x4::New(_x, _y, _z, _w);
581 } 581 }
582 582
583 583
584 DEFINE_NATIVE_ENTRY(Uint32x4_setW, 2) { 584 DEFINE_NATIVE_ENTRY(Int32x4_setW, 2) {
585 GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0)); 585 GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
586 GET_NON_NULL_NATIVE_ARGUMENT(Integer, w, arguments->NativeArgAt(1)); 586 GET_NON_NULL_NATIVE_ARGUMENT(Integer, w, arguments->NativeArgAt(1));
587 uint32_t _x = self.x(); 587 int32_t _x = self.x();
588 uint32_t _y = self.y(); 588 int32_t _y = self.y();
589 uint32_t _z = self.z(); 589 int32_t _z = self.z();
590 uint32_t _w = static_cast<uint32_t>(w.AsInt64Value() & 0xFFFFFFFF); 590 int32_t _w = static_cast<int32_t>(w.AsInt64Value() & 0xFFFFFFFF);
591 return Uint32x4::New(_x, _y, _z, _w); 591 return Int32x4::New(_x, _y, _z, _w);
592 } 592 }
593 593
594 594
595 DEFINE_NATIVE_ENTRY(Uint32x4_getFlagX, 1) { 595 DEFINE_NATIVE_ENTRY(Int32x4_getFlagX, 1) {
596 GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0)); 596 GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
597 uint32_t value = self.x(); 597 int32_t value = self.x();
598 return Bool::Get(value != 0).raw(); 598 return Bool::Get(value != 0).raw();
599 } 599 }
600 600
601 601
602 DEFINE_NATIVE_ENTRY(Uint32x4_getFlagY, 1) { 602 DEFINE_NATIVE_ENTRY(Int32x4_getFlagY, 1) {
603 GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0)); 603 GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
604 uint32_t value = self.y(); 604 int32_t value = self.y();
605 return Bool::Get(value != 0).raw(); 605 return Bool::Get(value != 0).raw();
606 } 606 }
607 607
608 608
609 DEFINE_NATIVE_ENTRY(Uint32x4_getFlagZ, 1) { 609 DEFINE_NATIVE_ENTRY(Int32x4_getFlagZ, 1) {
610 GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0)); 610 GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
611 uint32_t value = self.z(); 611 int32_t value = self.z();
612 return Bool::Get(value != 0).raw(); 612 return Bool::Get(value != 0).raw();
613 } 613 }
614 614
615 615
616 DEFINE_NATIVE_ENTRY(Uint32x4_getFlagW, 1) { 616 DEFINE_NATIVE_ENTRY(Int32x4_getFlagW, 1) {
617 GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0)); 617 GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
618 uint32_t value = self.w(); 618 int32_t value = self.w();
619 return Bool::Get(value != 0).raw(); 619 return Bool::Get(value != 0).raw();
620 } 620 }
621 621
622 622
623 DEFINE_NATIVE_ENTRY(Uint32x4_setFlagX, 2) { 623 DEFINE_NATIVE_ENTRY(Int32x4_setFlagX, 2) {
624 GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0)); 624 GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
625 GET_NON_NULL_NATIVE_ARGUMENT(Bool, flagX, arguments->NativeArgAt(1)); 625 GET_NON_NULL_NATIVE_ARGUMENT(Bool, flagX, arguments->NativeArgAt(1));
626 uint32_t _x = self.x(); 626 int32_t _x = self.x();
627 uint32_t _y = self.y(); 627 int32_t _y = self.y();
628 uint32_t _z = self.z(); 628 int32_t _z = self.z();
629 uint32_t _w = self.w(); 629 int32_t _w = self.w();
630 _x = flagX.raw() == Bool::True().raw() ? 0xFFFFFFFF : 0x0; 630 _x = flagX.raw() == Bool::True().raw() ? 0xFFFFFFFF : 0x0;
631 return Uint32x4::New(_x, _y, _z, _w); 631 return Int32x4::New(_x, _y, _z, _w);
632 } 632 }
633 633
634 634
635 DEFINE_NATIVE_ENTRY(Uint32x4_setFlagY, 2) { 635 DEFINE_NATIVE_ENTRY(Int32x4_setFlagY, 2) {
636 GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0)); 636 GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
637 GET_NON_NULL_NATIVE_ARGUMENT(Bool, flagY, arguments->NativeArgAt(1)); 637 GET_NON_NULL_NATIVE_ARGUMENT(Bool, flagY, arguments->NativeArgAt(1));
638 uint32_t _x = self.x(); 638 int32_t _x = self.x();
639 uint32_t _y = self.y(); 639 int32_t _y = self.y();
640 uint32_t _z = self.z(); 640 int32_t _z = self.z();
641 uint32_t _w = self.w(); 641 int32_t _w = self.w();
642 _y = flagY.raw() == Bool::True().raw() ? 0xFFFFFFFF : 0x0; 642 _y = flagY.raw() == Bool::True().raw() ? 0xFFFFFFFF : 0x0;
643 return Uint32x4::New(_x, _y, _z, _w); 643 return Int32x4::New(_x, _y, _z, _w);
644 } 644 }
645 645
646 646
647 DEFINE_NATIVE_ENTRY(Uint32x4_setFlagZ, 2) { 647 DEFINE_NATIVE_ENTRY(Int32x4_setFlagZ, 2) {
648 GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0)); 648 GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
649 GET_NON_NULL_NATIVE_ARGUMENT(Bool, flagZ, arguments->NativeArgAt(1)); 649 GET_NON_NULL_NATIVE_ARGUMENT(Bool, flagZ, arguments->NativeArgAt(1));
650 uint32_t _x = self.x(); 650 int32_t _x = self.x();
651 uint32_t _y = self.y(); 651 int32_t _y = self.y();
652 uint32_t _z = self.z(); 652 int32_t _z = self.z();
653 uint32_t _w = self.w(); 653 int32_t _w = self.w();
654 _z = flagZ.raw() == Bool::True().raw() ? 0xFFFFFFFF : 0x0; 654 _z = flagZ.raw() == Bool::True().raw() ? 0xFFFFFFFF : 0x0;
655 return Uint32x4::New(_x, _y, _z, _w); 655 return Int32x4::New(_x, _y, _z, _w);
656 } 656 }
657 657
658 658
659 DEFINE_NATIVE_ENTRY(Uint32x4_setFlagW, 2) { 659 DEFINE_NATIVE_ENTRY(Int32x4_setFlagW, 2) {
660 GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0)); 660 GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
661 GET_NON_NULL_NATIVE_ARGUMENT(Bool, flagW, arguments->NativeArgAt(1)); 661 GET_NON_NULL_NATIVE_ARGUMENT(Bool, flagW, arguments->NativeArgAt(1));
662 uint32_t _x = self.x(); 662 int32_t _x = self.x();
663 uint32_t _y = self.y(); 663 int32_t _y = self.y();
664 uint32_t _z = self.z(); 664 int32_t _z = self.z();
665 uint32_t _w = self.w(); 665 int32_t _w = self.w();
666 _w = flagW.raw() == Bool::True().raw() ? 0xFFFFFFFF : 0x0; 666 _w = flagW.raw() == Bool::True().raw() ? 0xFFFFFFFF : 0x0;
667 return Uint32x4::New(_x, _y, _z, _w); 667 return Int32x4::New(_x, _y, _z, _w);
668 } 668 }
669 669
670 670
671 // Used to convert between uint32_t and float32 without breaking strict 671 // Used to convert between int32_t and float32 without breaking strict
672 // aliasing rules. 672 // aliasing rules.
673 union float32_uint32 { 673 union float32_int32 {
674 float f; 674 float f;
675 uint32_t u; 675 int32_t u;
676 float32_uint32(float v) { 676 float32_int32(float v) {
677 f = v; 677 f = v;
678 } 678 }
679 float32_uint32(uint32_t v) { 679 float32_int32(int32_t v) {
680 u = v; 680 u = v;
681 } 681 }
682 }; 682 };
683 683
684 684
685 DEFINE_NATIVE_ENTRY(Uint32x4_select, 3) { 685 DEFINE_NATIVE_ENTRY(Int32x4_select, 3) {
686 GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0)); 686 GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
687 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, tv, arguments->NativeArgAt(1)); 687 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, tv, arguments->NativeArgAt(1));
688 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, fv, arguments->NativeArgAt(2)); 688 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, fv, arguments->NativeArgAt(2));
689 uint32_t _maskX = self.x(); 689 int32_t _maskX = self.x();
690 uint32_t _maskY = self.y(); 690 int32_t _maskY = self.y();
691 uint32_t _maskZ = self.z(); 691 int32_t _maskZ = self.z();
692 uint32_t _maskW = self.w(); 692 int32_t _maskW = self.w();
693 // Extract floats and interpret them as masks. 693 // Extract floats and interpret them as masks.
694 float32_uint32 tvx(tv.x()); 694 float32_int32 tvx(tv.x());
695 float32_uint32 tvy(tv.y()); 695 float32_int32 tvy(tv.y());
696 float32_uint32 tvz(tv.z()); 696 float32_int32 tvz(tv.z());
697 float32_uint32 tvw(tv.w()); 697 float32_int32 tvw(tv.w());
698 float32_uint32 fvx(fv.x()); 698 float32_int32 fvx(fv.x());
699 float32_uint32 fvy(fv.y()); 699 float32_int32 fvy(fv.y());
700 float32_uint32 fvz(fv.z()); 700 float32_int32 fvz(fv.z());
701 float32_uint32 fvw(fv.w()); 701 float32_int32 fvw(fv.w());
702 // Perform select. 702 // Perform select.
703 float32_uint32 tempX((_maskX & tvx.u) | (~_maskX & fvx.u)); 703 float32_int32 tempX((_maskX & tvx.u) | (~_maskX & fvx.u));
704 float32_uint32 tempY((_maskY & tvy.u) | (~_maskY & fvy.u)); 704 float32_int32 tempY((_maskY & tvy.u) | (~_maskY & fvy.u));
705 float32_uint32 tempZ((_maskZ & tvz.u) | (~_maskZ & fvz.u)); 705 float32_int32 tempZ((_maskZ & tvz.u) | (~_maskZ & fvz.u));
706 float32_uint32 tempW((_maskW & tvw.u) | (~_maskW & fvw.u)); 706 float32_int32 tempW((_maskW & tvw.u) | (~_maskW & fvw.u));
707 return Float32x4::New(tempX.f, tempY.f, tempZ.f, tempW.f); 707 return Float32x4::New(tempX.f, tempY.f, tempZ.f, tempW.f);
708 } 708 }
709 709
710 710
711 } // namespace dart 711 } // namespace dart
OLDNEW
« no previous file with comments | « dart/runtime/lib/mirrors_impl.dart ('k') | dart/runtime/lib/string_patch.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698