OLD | NEW |
---|---|
1 // Copyright 2014 the V8 project authors. All rights reserved. Use of this | 1 // Copyright 2014 the V8 project authors. All rights reserved. Use of this |
2 // source code is governed by a BSD-style license that can be found in the | 2 // source code is governed by a BSD-style license that can be found in the |
3 // LICENSE file. | 3 // LICENSE file. |
4 | 4 |
5 #include <cmath> | 5 #include <cmath> |
6 #include <functional> | 6 #include <functional> |
7 #include <limits> | 7 #include <limits> |
8 | 8 |
9 #include "src/base/bits.h" | 9 #include "src/base/bits.h" |
10 #include "src/base/ieee754.h" | 10 #include "src/base/ieee754.h" |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
74 CHECK_EQ(uint32_t(0x00000000), m.Call(uint32_t(0x00000000))); | 74 CHECK_EQ(uint32_t(0x00000000), m.Call(uint32_t(0x00000000))); |
75 CHECK_EQ(uint32_t(0x12345678), m.Call(uint32_t(0x1e6a2c48))); | 75 CHECK_EQ(uint32_t(0x12345678), m.Call(uint32_t(0x1e6a2c48))); |
76 CHECK_EQ(uint32_t(0xfedcba09), m.Call(uint32_t(0x905d3b7f))); | 76 CHECK_EQ(uint32_t(0xfedcba09), m.Call(uint32_t(0x905d3b7f))); |
77 CHECK_EQ(uint32_t(0x01010101), m.Call(uint32_t(0x80808080))); | 77 CHECK_EQ(uint32_t(0x01010101), m.Call(uint32_t(0x80808080))); |
78 CHECK_EQ(uint32_t(0x01020408), m.Call(uint32_t(0x10204080))); | 78 CHECK_EQ(uint32_t(0x01020408), m.Call(uint32_t(0x10204080))); |
79 CHECK_EQ(uint32_t(0xf0703010), m.Call(uint32_t(0x080c0e0f))); | 79 CHECK_EQ(uint32_t(0xf0703010), m.Call(uint32_t(0x080c0e0f))); |
80 CHECK_EQ(uint32_t(0x1f8d0a3a), m.Call(uint32_t(0x5c50b1f8))); | 80 CHECK_EQ(uint32_t(0x1f8d0a3a), m.Call(uint32_t(0x5c50b1f8))); |
81 CHECK_EQ(uint32_t(0xffffffff), m.Call(uint32_t(0xffffffff))); | 81 CHECK_EQ(uint32_t(0xffffffff), m.Call(uint32_t(0xffffffff))); |
82 } | 82 } |
83 | 83 |
84 TEST(RunWord32ReverseBytes) { | |
85 BufferedRawMachineAssemblerTester<uint32_t> m(MachineType::Uint32()); | |
86 if (!m.machine()->Word32ReverseBytes().IsSupported()) { | |
87 // We can only test the operator if it exists on the testing platform. | |
88 return; | |
89 } | |
90 m.Return(m.AddNode(m.machine()->Word32ReverseBytes().op(), m.Parameter(0))); | |
91 | |
92 CHECK_EQ(uint32_t(0x00000000), m.Call(uint32_t(0x00000000))); | |
93 CHECK_EQ(uint32_t(0x12345678), m.Call(uint32_t(0x78563412))); | |
94 CHECK_EQ(uint32_t(0xfedcba09), m.Call(uint32_t(0x09badcfe))); | |
95 CHECK_EQ(uint32_t(0x01010101), m.Call(uint32_t(0x01010101))); | |
96 CHECK_EQ(uint32_t(0x01020408), m.Call(uint32_t(0x08040201))); | |
97 CHECK_EQ(uint32_t(0xf0703010), m.Call(uint32_t(0x103070f0))); | |
98 CHECK_EQ(uint32_t(0x1f8d0a3a), m.Call(uint32_t(0x3a0a8d1f))); | |
99 CHECK_EQ(uint32_t(0xffffffff), m.Call(uint32_t(0xffffffff))); | |
100 } | |
84 | 101 |
85 TEST(RunWord32Ctz) { | 102 TEST(RunWord32Ctz) { |
86 BufferedRawMachineAssemblerTester<int32_t> m(MachineType::Uint32()); | 103 BufferedRawMachineAssemblerTester<int32_t> m(MachineType::Uint32()); |
87 if (!m.machine()->Word32Ctz().IsSupported()) { | 104 if (!m.machine()->Word32Ctz().IsSupported()) { |
88 // We can only test the operator if it exists on the testing platform. | 105 // We can only test the operator if it exists on the testing platform. |
89 return; | 106 return; |
90 } | 107 } |
91 m.Return(m.AddNode(m.machine()->Word32Ctz().op(), m.Parameter(0))); | 108 m.Return(m.AddNode(m.machine()->Word32Ctz().op(), m.Parameter(0))); |
92 | 109 |
93 CHECK_EQ(32, m.Call(uint32_t(0x00000000))); | 110 CHECK_EQ(32, m.Call(uint32_t(0x00000000))); |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
196 CHECK_EQ(uint64_t(0x0000000000000000), m.Call(uint64_t(0x0000000000000000))); | 213 CHECK_EQ(uint64_t(0x0000000000000000), m.Call(uint64_t(0x0000000000000000))); |
197 CHECK_EQ(uint64_t(0x1234567890abcdef), m.Call(uint64_t(0xf7b3d5091e6a2c48))); | 214 CHECK_EQ(uint64_t(0x1234567890abcdef), m.Call(uint64_t(0xf7b3d5091e6a2c48))); |
198 CHECK_EQ(uint64_t(0xfedcba0987654321), m.Call(uint64_t(0x84c2a6e1905d3b7f))); | 215 CHECK_EQ(uint64_t(0xfedcba0987654321), m.Call(uint64_t(0x84c2a6e1905d3b7f))); |
199 CHECK_EQ(uint64_t(0x0101010101010101), m.Call(uint64_t(0x8080808080808080))); | 216 CHECK_EQ(uint64_t(0x0101010101010101), m.Call(uint64_t(0x8080808080808080))); |
200 CHECK_EQ(uint64_t(0x0102040803060c01), m.Call(uint64_t(0x803060c010204080))); | 217 CHECK_EQ(uint64_t(0x0102040803060c01), m.Call(uint64_t(0x803060c010204080))); |
201 CHECK_EQ(uint64_t(0xf0703010e060200f), m.Call(uint64_t(0xf0040607080c0e0f))); | 218 CHECK_EQ(uint64_t(0xf0703010e060200f), m.Call(uint64_t(0xf0040607080c0e0f))); |
202 CHECK_EQ(uint64_t(0x2f8a6df01c21fa3b), m.Call(uint64_t(0xdc5f84380fb651f4))); | 219 CHECK_EQ(uint64_t(0x2f8a6df01c21fa3b), m.Call(uint64_t(0xdc5f84380fb651f4))); |
203 CHECK_EQ(uint64_t(0xffffffffffffffff), m.Call(uint64_t(0xffffffffffffffff))); | 220 CHECK_EQ(uint64_t(0xffffffffffffffff), m.Call(uint64_t(0xffffffffffffffff))); |
204 } | 221 } |
205 | 222 |
223 TEST(RunWord64ReverseBytes) { | |
224 RawMachineAssemblerTester<uint64_t> m(MachineType::Uint64()); | |
ahaas
2016/07/29 04:15:18
Did you intentionally use the RawMachineAssemblerT
john.yan
2016/07/29 17:12:03
No. The test case was modified based on RunWord64R
| |
225 if (!m.machine()->Word64ReverseBytes().IsSupported()) { | |
226 return; | |
227 } | |
228 | |
229 m.Return(m.AddNode(m.machine()->Word64ReverseBytes().op(), m.Parameter(0))); | |
230 | |
231 CHECK_EQ(uint64_t(0x0000000000000000), m.Call(uint64_t(0x0000000000000000))); | |
232 CHECK_EQ(uint64_t(0x1234567890abcdef), m.Call(uint64_t(0xefcdab9078563412))); | |
233 CHECK_EQ(uint64_t(0xfedcba0987654321), m.Call(uint64_t(0x2143658709badcfe))); | |
234 CHECK_EQ(uint64_t(0x0101010101010101), m.Call(uint64_t(0x0101010101010101))); | |
235 CHECK_EQ(uint64_t(0x0102040803060c01), m.Call(uint64_t(0x010c060308040201))); | |
236 CHECK_EQ(uint64_t(0xf0703010e060200f), m.Call(uint64_t(0x0f2060e0103070f0))); | |
237 CHECK_EQ(uint64_t(0x2f8a6df01c21fa3b), m.Call(uint64_t(0x3bfa211cf06d8a2f))); | |
238 CHECK_EQ(uint64_t(0xffffffffffffffff), m.Call(uint64_t(0xffffffffffffffff))); | |
239 } | |
206 | 240 |
207 TEST(RunWord64Clz) { | 241 TEST(RunWord64Clz) { |
208 BufferedRawMachineAssemblerTester<int32_t> m(MachineType::Uint64()); | 242 BufferedRawMachineAssemblerTester<int32_t> m(MachineType::Uint64()); |
209 m.Return(m.Word64Clz(m.Parameter(0))); | 243 m.Return(m.Word64Clz(m.Parameter(0))); |
210 | 244 |
211 CHECK_EQ(0, m.Call(uint64_t(0x8000100000000000))); | 245 CHECK_EQ(0, m.Call(uint64_t(0x8000100000000000))); |
212 CHECK_EQ(1, m.Call(uint64_t(0x4000050000000000))); | 246 CHECK_EQ(1, m.Call(uint64_t(0x4000050000000000))); |
213 CHECK_EQ(2, m.Call(uint64_t(0x2000030000000000))); | 247 CHECK_EQ(2, m.Call(uint64_t(0x2000030000000000))); |
214 CHECK_EQ(3, m.Call(uint64_t(0x1000000300000000))); | 248 CHECK_EQ(3, m.Call(uint64_t(0x1000000300000000))); |
215 CHECK_EQ(4, m.Call(uint64_t(0x0805000000000000))); | 249 CHECK_EQ(4, m.Call(uint64_t(0x0805000000000000))); |
(...skipping 6334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6550 r.Goto(&merge); | 6584 r.Goto(&merge); |
6551 r.Bind(&merge); | 6585 r.Bind(&merge); |
6552 Node* phi = r.Phi(MachineRepresentation::kWord32, fa, fb); | 6586 Node* phi = r.Phi(MachineRepresentation::kWord32, fa, fb); |
6553 r.Return(phi); | 6587 r.Return(phi); |
6554 CHECK_EQ(1, r.Call(1)); | 6588 CHECK_EQ(1, r.Call(1)); |
6555 } | 6589 } |
6556 | 6590 |
6557 } // namespace compiler | 6591 } // namespace compiler |
6558 } // namespace internal | 6592 } // namespace internal |
6559 } // namespace v8 | 6593 } // namespace v8 |
OLD | NEW |