OLD | NEW |
| (Empty) |
1 // Copyright 2015 the V8 project authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "src/v8.h" | |
6 | |
7 #include "src/factory.h" | |
8 #include "src/isolate.h" | |
9 #include "src/objects.h" | |
10 // FIXME(mstarzinger, marja): This is weird, but required because of the missing | |
11 // (disallowed) include: src/factory.h -> src/objects-inl.h | |
12 #include "src/objects-inl.h" | |
13 #include "src/ostreams.h" | |
14 // FIXME(mstarzinger, marja): This is weird, but required because of the missing | |
15 // (disallowed) include: src/feedback-vector.h -> | |
16 // src/feedback-vector-inl.h | |
17 #include "src/feedback-vector-inl.h" | |
18 #include "test/cctest/cctest.h" | |
19 | |
20 using namespace v8::internal; | |
21 | |
22 #define FLOAT_TEST(type, lane_count) \ | |
23 { \ | |
24 float nan = std::numeric_limits<float>::quiet_NaN(); \ | |
25 float lanes[lane_count] = {0}; \ | |
26 Handle<type> a = factory->New##type(lanes); \ | |
27 Handle<type> b = factory->New##type(lanes); \ | |
28 CHECK(a->BitwiseEquals(*b)); \ | |
29 CHECK(a->SameValue(*b)); \ | |
30 CHECK(a->SameValueZero(*b)); \ | |
31 CHECK_EQ(a->Hash(), b->Hash()); \ | |
32 for (int i = 0; i < lane_count; i++) { \ | |
33 a->set_lane(i, -0.0); \ | |
34 CHECK(!a->BitwiseEquals(*b)); \ | |
35 CHECK_NE(a->Hash(), b->Hash()); \ | |
36 CHECK(!a->SameValue(*b)); \ | |
37 CHECK(a->SameValueZero(*b)); \ | |
38 b->set_lane(i, -0.0); \ | |
39 CHECK(a->BitwiseEquals(*b)); \ | |
40 CHECK_EQ(a->Hash(), b->Hash()); \ | |
41 CHECK(a->SameValue(*b)); \ | |
42 CHECK(a->SameValueZero(*b)); \ | |
43 a->set_lane(i, nan); \ | |
44 CHECK(!a->BitwiseEquals(*b)); \ | |
45 CHECK(!a->SameValue(*b)); \ | |
46 CHECK(!a->SameValueZero(*b)); \ | |
47 CHECK_NE(a->Hash(), b->Hash()); \ | |
48 b->set_lane(i, nan); \ | |
49 CHECK(a->BitwiseEquals(*b)); \ | |
50 CHECK_EQ(a->Hash(), b->Hash()); \ | |
51 CHECK(a->SameValue(*b)); \ | |
52 CHECK(a->SameValueZero(*b)); \ | |
53 } \ | |
54 } | |
55 | |
56 #define INT_TEST(type, lane_count, lane_type) \ | |
57 { \ | |
58 lane_type lanes[lane_count] = {0}; \ | |
59 Handle<type> a = factory->New##type(lanes); \ | |
60 Handle<type> b = factory->New##type(lanes); \ | |
61 CHECK(a->BitwiseEquals(*b)); \ | |
62 CHECK(a->SameValue(*b)); \ | |
63 CHECK(a->SameValueZero(*b)); \ | |
64 CHECK_EQ(a->Hash(), b->Hash()); \ | |
65 for (int i = 0; i < lane_count; i++) { \ | |
66 a->set_lane(i, i + 1); \ | |
67 CHECK(!a->BitwiseEquals(*b)); \ | |
68 CHECK_NE(a->Hash(), b->Hash()); \ | |
69 CHECK(!a->SameValue(*b)); \ | |
70 CHECK(!a->SameValueZero(*b)); \ | |
71 b->set_lane(i, i + 1); \ | |
72 CHECK(a->BitwiseEquals(*b)); \ | |
73 CHECK_EQ(a->Hash(), b->Hash()); \ | |
74 CHECK(a->SameValue(*b)); \ | |
75 CHECK(a->SameValueZero(*b)); \ | |
76 a->set_lane(i, -(i + 1)); \ | |
77 CHECK(!a->BitwiseEquals(*b)); \ | |
78 CHECK_NE(a->Hash(), b->Hash()); \ | |
79 CHECK(!a->SameValue(*b)); \ | |
80 CHECK(!a->SameValueZero(*b)); \ | |
81 b->set_lane(i, -(i + 1)); \ | |
82 CHECK(a->BitwiseEquals(*b)); \ | |
83 CHECK_EQ(a->Hash(), b->Hash()); \ | |
84 CHECK(a->SameValue(*b)); \ | |
85 CHECK(a->SameValueZero(*b)); \ | |
86 } \ | |
87 } | |
88 | |
89 #define BOOL_TEST(type, lane_count) \ | |
90 { \ | |
91 bool lanes[lane_count] = {false}; \ | |
92 Handle<type> a = factory->New##type(lanes); \ | |
93 Handle<type> b = factory->New##type(lanes); \ | |
94 CHECK(a->BitwiseEquals(*b)); \ | |
95 CHECK(a->SameValue(*b)); \ | |
96 CHECK(a->SameValueZero(*b)); \ | |
97 CHECK_EQ(a->Hash(), b->Hash()); \ | |
98 for (int i = 0; i < lane_count; i++) { \ | |
99 a->set_lane(i, true); \ | |
100 CHECK(!a->BitwiseEquals(*b)); \ | |
101 CHECK_NE(a->Hash(), b->Hash()); \ | |
102 CHECK(!a->SameValue(*b)); \ | |
103 CHECK(!a->SameValueZero(*b)); \ | |
104 b->set_lane(i, true); \ | |
105 CHECK(a->BitwiseEquals(*b)); \ | |
106 CHECK_EQ(a->Hash(), b->Hash()); \ | |
107 CHECK(a->SameValue(*b)); \ | |
108 CHECK(a->SameValueZero(*b)); \ | |
109 } \ | |
110 } | |
111 | |
112 TEST(SimdTypes) { | |
113 CcTest::InitializeVM(); | |
114 Isolate* isolate = CcTest::i_isolate(); | |
115 Factory* factory = isolate->factory(); | |
116 | |
117 HandleScope sc(isolate); | |
118 | |
119 FLOAT_TEST(Float32x4, 4) | |
120 INT_TEST(Int32x4, 4, int32_t) | |
121 INT_TEST(Uint32x4, 4, uint32_t) | |
122 BOOL_TEST(Bool32x4, 4) | |
123 INT_TEST(Int16x8, 8, int16_t) | |
124 INT_TEST(Uint16x8, 8, uint16_t) | |
125 BOOL_TEST(Bool16x8, 8) | |
126 INT_TEST(Int8x16, 16, int8_t) | |
127 INT_TEST(Uint8x16, 16, uint8_t) | |
128 BOOL_TEST(Bool8x16, 16) | |
129 } | |
OLD | NEW |