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

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

Issue 154393003: Implement eager instantiation and canonicalization of type arguments at run (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 10 months 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
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"
11 11
12 namespace dart { 12 namespace dart {
13 13
14 static void ThrowMaskRangeException(int64_t m) { 14 static void ThrowMaskRangeException(int64_t m) {
15 if ((m < 0) || (m > 255)) { 15 if ((m < 0) || (m > 255)) {
16 const String& error = String::Handle( 16 const String& error = String::Handle(
17 String::NewFormatted("mask (%" Pd64 ") must be in the range [0..256)", 17 String::NewFormatted("mask (%" Pd64 ") must be in the range [0..256)",
18 m)); 18 m));
19 const Array& args = Array::Handle(Array::New(1)); 19 const Array& args = Array::Handle(Array::New(1));
20 args.SetAt(0, error); 20 args.SetAt(0, error);
21 Exceptions::ThrowByType(Exceptions::kRange, args); 21 Exceptions::ThrowByType(Exceptions::kRange, args);
22 } 22 }
23 } 23 }
24 24
25 25
26 DEFINE_NATIVE_ENTRY(Float32x4_fromDoubles, 5) { 26 DEFINE_NATIVE_ENTRY(Float32x4_fromDoubles, 5) {
27 ASSERT(AbstractTypeArguments::CheckedHandle( 27 ASSERT(TypeArguments::CheckedHandle(arguments->NativeArgAt(0)).IsNull());
28 arguments->NativeArgAt(0)).IsNull());
29 GET_NON_NULL_NATIVE_ARGUMENT(Double, x, arguments->NativeArgAt(1)); 28 GET_NON_NULL_NATIVE_ARGUMENT(Double, x, arguments->NativeArgAt(1));
30 GET_NON_NULL_NATIVE_ARGUMENT(Double, y, arguments->NativeArgAt(2)); 29 GET_NON_NULL_NATIVE_ARGUMENT(Double, y, arguments->NativeArgAt(2));
31 GET_NON_NULL_NATIVE_ARGUMENT(Double, z, arguments->NativeArgAt(3)); 30 GET_NON_NULL_NATIVE_ARGUMENT(Double, z, arguments->NativeArgAt(3));
32 GET_NON_NULL_NATIVE_ARGUMENT(Double, w, arguments->NativeArgAt(4)); 31 GET_NON_NULL_NATIVE_ARGUMENT(Double, w, arguments->NativeArgAt(4));
33 float _x = static_cast<float>(x.value()); 32 float _x = static_cast<float>(x.value());
34 float _y = static_cast<float>(y.value()); 33 float _y = static_cast<float>(y.value());
35 float _z = static_cast<float>(z.value()); 34 float _z = static_cast<float>(z.value());
36 float _w = static_cast<float>(w.value()); 35 float _w = static_cast<float>(w.value());
37 return Float32x4::New(_x, _y, _z, _w); 36 return Float32x4::New(_x, _y, _z, _w);
38 } 37 }
39 38
40 39
41 DEFINE_NATIVE_ENTRY(Float32x4_splat, 2) { 40 DEFINE_NATIVE_ENTRY(Float32x4_splat, 2) {
42 ASSERT(AbstractTypeArguments::CheckedHandle( 41 ASSERT(TypeArguments::CheckedHandle(arguments->NativeArgAt(0)).IsNull());
43 arguments->NativeArgAt(0)).IsNull());
44 GET_NON_NULL_NATIVE_ARGUMENT(Double, v, arguments->NativeArgAt(1)); 42 GET_NON_NULL_NATIVE_ARGUMENT(Double, v, arguments->NativeArgAt(1));
45 float _v = v.value(); 43 float _v = v.value();
46 return Float32x4::New(_v, _v, _v, _v); 44 return Float32x4::New(_v, _v, _v, _v);
47 } 45 }
48 46
49 47
50 DEFINE_NATIVE_ENTRY(Float32x4_zero, 1) { 48 DEFINE_NATIVE_ENTRY(Float32x4_zero, 1) {
51 ASSERT(AbstractTypeArguments::CheckedHandle( 49 ASSERT(TypeArguments::CheckedHandle(arguments->NativeArgAt(0)).IsNull());
52 arguments->NativeArgAt(0)).IsNull());
53 return Float32x4::New(0.0f, 0.0f, 0.0f, 0.0f); 50 return Float32x4::New(0.0f, 0.0f, 0.0f, 0.0f);
54 } 51 }
55 52
56 53
57 DEFINE_NATIVE_ENTRY(Float32x4_fromInt32x4Bits, 2) { 54 DEFINE_NATIVE_ENTRY(Float32x4_fromInt32x4Bits, 2) {
58 GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, v, arguments->NativeArgAt(1)); 55 GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, v, arguments->NativeArgAt(1));
59 return Float32x4::New(v.value()); 56 return Float32x4::New(v.value());
60 } 57 }
61 58
62 59
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after
401 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, self, arguments->NativeArgAt(0)); 398 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, self, arguments->NativeArgAt(0));
402 float _x = sqrtf(1.0f / self.x()); 399 float _x = sqrtf(1.0f / self.x());
403 float _y = sqrtf(1.0f / self.y()); 400 float _y = sqrtf(1.0f / self.y());
404 float _z = sqrtf(1.0f / self.z()); 401 float _z = sqrtf(1.0f / self.z());
405 float _w = sqrtf(1.0f / self.w()); 402 float _w = sqrtf(1.0f / self.w());
406 return Float32x4::New(_x, _y, _z, _w); 403 return Float32x4::New(_x, _y, _z, _w);
407 } 404 }
408 405
409 406
410 DEFINE_NATIVE_ENTRY(Int32x4_fromInts, 5) { 407 DEFINE_NATIVE_ENTRY(Int32x4_fromInts, 5) {
411 ASSERT(AbstractTypeArguments::CheckedHandle( 408 ASSERT(TypeArguments::CheckedHandle(arguments->NativeArgAt(0)).IsNull());
412 arguments->NativeArgAt(0)).IsNull());
413 GET_NON_NULL_NATIVE_ARGUMENT(Integer, x, arguments->NativeArgAt(1)); 409 GET_NON_NULL_NATIVE_ARGUMENT(Integer, x, arguments->NativeArgAt(1));
414 GET_NON_NULL_NATIVE_ARGUMENT(Integer, y, arguments->NativeArgAt(2)); 410 GET_NON_NULL_NATIVE_ARGUMENT(Integer, y, arguments->NativeArgAt(2));
415 GET_NON_NULL_NATIVE_ARGUMENT(Integer, z, arguments->NativeArgAt(3)); 411 GET_NON_NULL_NATIVE_ARGUMENT(Integer, z, arguments->NativeArgAt(3));
416 GET_NON_NULL_NATIVE_ARGUMENT(Integer, w, arguments->NativeArgAt(4)); 412 GET_NON_NULL_NATIVE_ARGUMENT(Integer, w, arguments->NativeArgAt(4));
417 int32_t _x = static_cast<int32_t>(x.AsTruncatedUint32Value()); 413 int32_t _x = static_cast<int32_t>(x.AsTruncatedUint32Value());
418 int32_t _y = static_cast<int32_t>(y.AsTruncatedUint32Value()); 414 int32_t _y = static_cast<int32_t>(y.AsTruncatedUint32Value());
419 int32_t _z = static_cast<int32_t>(z.AsTruncatedUint32Value()); 415 int32_t _z = static_cast<int32_t>(z.AsTruncatedUint32Value());
420 int32_t _w = static_cast<int32_t>(w.AsTruncatedUint32Value()); 416 int32_t _w = static_cast<int32_t>(w.AsTruncatedUint32Value());
421 return Int32x4::New(_x, _y, _z, _w); 417 return Int32x4::New(_x, _y, _z, _w);
422 } 418 }
423 419
424 420
425 DEFINE_NATIVE_ENTRY(Int32x4_fromBools, 5) { 421 DEFINE_NATIVE_ENTRY(Int32x4_fromBools, 5) {
426 ASSERT(AbstractTypeArguments::CheckedHandle( 422 ASSERT(TypeArguments::CheckedHandle(arguments->NativeArgAt(0)).IsNull());
427 arguments->NativeArgAt(0)).IsNull());
428 GET_NON_NULL_NATIVE_ARGUMENT(Bool, x, arguments->NativeArgAt(1)); 423 GET_NON_NULL_NATIVE_ARGUMENT(Bool, x, arguments->NativeArgAt(1));
429 GET_NON_NULL_NATIVE_ARGUMENT(Bool, y, arguments->NativeArgAt(2)); 424 GET_NON_NULL_NATIVE_ARGUMENT(Bool, y, arguments->NativeArgAt(2));
430 GET_NON_NULL_NATIVE_ARGUMENT(Bool, z, arguments->NativeArgAt(3)); 425 GET_NON_NULL_NATIVE_ARGUMENT(Bool, z, arguments->NativeArgAt(3));
431 GET_NON_NULL_NATIVE_ARGUMENT(Bool, w, arguments->NativeArgAt(4)); 426 GET_NON_NULL_NATIVE_ARGUMENT(Bool, w, arguments->NativeArgAt(4));
432 int32_t _x = x.value() ? 0xFFFFFFFF : 0x0; 427 int32_t _x = x.value() ? 0xFFFFFFFF : 0x0;
433 int32_t _y = y.value() ? 0xFFFFFFFF : 0x0; 428 int32_t _y = y.value() ? 0xFFFFFFFF : 0x0;
434 int32_t _z = z.value() ? 0xFFFFFFFF : 0x0; 429 int32_t _z = z.value() ? 0xFFFFFFFF : 0x0;
435 int32_t _w = w.value() ? 0xFFFFFFFF : 0x0; 430 int32_t _w = w.value() ? 0xFFFFFFFF : 0x0;
436 return Int32x4::New(_x, _y, _z, _w); 431 return Int32x4::New(_x, _y, _z, _w);
437 } 432 }
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after
710 // Perform select. 705 // Perform select.
711 float32_int32 tempX((_maskX & tvx.u) | (~_maskX & fvx.u)); 706 float32_int32 tempX((_maskX & tvx.u) | (~_maskX & fvx.u));
712 float32_int32 tempY((_maskY & tvy.u) | (~_maskY & fvy.u)); 707 float32_int32 tempY((_maskY & tvy.u) | (~_maskY & fvy.u));
713 float32_int32 tempZ((_maskZ & tvz.u) | (~_maskZ & fvz.u)); 708 float32_int32 tempZ((_maskZ & tvz.u) | (~_maskZ & fvz.u));
714 float32_int32 tempW((_maskW & tvw.u) | (~_maskW & fvw.u)); 709 float32_int32 tempW((_maskW & tvw.u) | (~_maskW & fvw.u));
715 return Float32x4::New(tempX.f, tempY.f, tempZ.f, tempW.f); 710 return Float32x4::New(tempX.f, tempY.f, tempZ.f, tempW.f);
716 } 711 }
717 712
718 713
719 DEFINE_NATIVE_ENTRY(Float64x2_fromDoubles, 3) { 714 DEFINE_NATIVE_ENTRY(Float64x2_fromDoubles, 3) {
720 ASSERT(AbstractTypeArguments::CheckedHandle( 715 ASSERT(TypeArguments::CheckedHandle(arguments->NativeArgAt(0)).IsNull());
721 arguments->NativeArgAt(0)).IsNull());
722 GET_NON_NULL_NATIVE_ARGUMENT(Double, x, arguments->NativeArgAt(1)); 716 GET_NON_NULL_NATIVE_ARGUMENT(Double, x, arguments->NativeArgAt(1));
723 GET_NON_NULL_NATIVE_ARGUMENT(Double, y, arguments->NativeArgAt(2)); 717 GET_NON_NULL_NATIVE_ARGUMENT(Double, y, arguments->NativeArgAt(2));
724 return Float64x2::New(x.value(), y.value()); 718 return Float64x2::New(x.value(), y.value());
725 } 719 }
726 720
727 721
728 DEFINE_NATIVE_ENTRY(Float64x2_splat, 2) { 722 DEFINE_NATIVE_ENTRY(Float64x2_splat, 2) {
729 ASSERT(AbstractTypeArguments::CheckedHandle( 723 ASSERT(TypeArguments::CheckedHandle(arguments->NativeArgAt(0)).IsNull());
730 arguments->NativeArgAt(0)).IsNull());
731 GET_NON_NULL_NATIVE_ARGUMENT(Double, v, arguments->NativeArgAt(1)); 724 GET_NON_NULL_NATIVE_ARGUMENT(Double, v, arguments->NativeArgAt(1));
732 return Float64x2::New(v.value(), v.value()); 725 return Float64x2::New(v.value(), v.value());
733 } 726 }
734 727
735 728
736 DEFINE_NATIVE_ENTRY(Float64x2_zero, 1) { 729 DEFINE_NATIVE_ENTRY(Float64x2_zero, 1) {
737 ASSERT(AbstractTypeArguments::CheckedHandle( 730 ASSERT(TypeArguments::CheckedHandle(arguments->NativeArgAt(0)).IsNull());
738 arguments->NativeArgAt(0)).IsNull());
739 return Float64x2::New(0.0, 0.0); 731 return Float64x2::New(0.0, 0.0);
740 } 732 }
741 733
742 734
743 DEFINE_NATIVE_ENTRY(Float64x2_fromFloat32x4, 2) { 735 DEFINE_NATIVE_ENTRY(Float64x2_fromFloat32x4, 2) {
744 ASSERT(AbstractTypeArguments::CheckedHandle( 736 ASSERT(TypeArguments::CheckedHandle(arguments->NativeArgAt(0)).IsNull());
745 arguments->NativeArgAt(0)).IsNull());
746 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, v, arguments->NativeArgAt(1)); 737 GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, v, arguments->NativeArgAt(1));
747 double _x = v.x(); 738 double _x = v.x();
748 double _y = v.y(); 739 double _y = v.y();
749 return Float64x2::New(_x, _y); 740 return Float64x2::New(_x, _y);
750 } 741 }
751 742
752 743
753 DEFINE_NATIVE_ENTRY(Float64x2_add, 2) { 744 DEFINE_NATIVE_ENTRY(Float64x2_add, 2) {
754 GET_NON_NULL_NATIVE_ARGUMENT(Float64x2, self, arguments->NativeArgAt(0)); 745 GET_NON_NULL_NATIVE_ARGUMENT(Float64x2, self, arguments->NativeArgAt(0));
755 GET_NON_NULL_NATIVE_ARGUMENT(Float64x2, other, arguments->NativeArgAt(1)); 746 GET_NON_NULL_NATIVE_ARGUMENT(Float64x2, other, arguments->NativeArgAt(1));
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
886 877
887 878
888 DEFINE_NATIVE_ENTRY(Float64x2_sqrt, 1) { 879 DEFINE_NATIVE_ENTRY(Float64x2_sqrt, 1) {
889 GET_NON_NULL_NATIVE_ARGUMENT(Float64x2, self, arguments->NativeArgAt(0)); 880 GET_NON_NULL_NATIVE_ARGUMENT(Float64x2, self, arguments->NativeArgAt(0));
890 double _x = sqrt(self.x()); 881 double _x = sqrt(self.x());
891 double _y = sqrt(self.y()); 882 double _y = sqrt(self.y());
892 return Float64x2::New(_x, _y); 883 return Float64x2::New(_x, _y);
893 } 884 }
894 885
895 } // namespace dart 886 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/lib/regexp.cc ('k') | runtime/vm/ast.h » ('j') | runtime/vm/code_generator.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698