OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "test/unittests/compiler/instruction-selector-unittest.h" | 5 #include "test/unittests/compiler/instruction-selector-unittest.h" |
6 | 6 |
7 namespace v8 { | 7 namespace v8 { |
8 namespace internal { | 8 namespace internal { |
9 namespace compiler { | 9 namespace compiler { |
10 | 10 |
(...skipping 2394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2405 Stream s = m.Build(); | 2405 Stream s = m.Build(); |
2406 ASSERT_EQ(1U, s.size()); | 2406 ASSERT_EQ(1U, s.size()); |
2407 EXPECT_EQ(kArm64Clz32, s[0]->arch_opcode()); | 2407 EXPECT_EQ(kArm64Clz32, s[0]->arch_opcode()); |
2408 ASSERT_EQ(1U, s[0]->InputCount()); | 2408 ASSERT_EQ(1U, s[0]->InputCount()); |
2409 EXPECT_EQ(s.ToVreg(p0), s.ToVreg(s[0]->InputAt(0))); | 2409 EXPECT_EQ(s.ToVreg(p0), s.ToVreg(s[0]->InputAt(0))); |
2410 ASSERT_EQ(1U, s[0]->OutputCount()); | 2410 ASSERT_EQ(1U, s[0]->OutputCount()); |
2411 EXPECT_EQ(s.ToVreg(n), s.ToVreg(s[0]->Output())); | 2411 EXPECT_EQ(s.ToVreg(n), s.ToVreg(s[0]->Output())); |
2412 } | 2412 } |
2413 | 2413 |
2414 | 2414 |
| 2415 TEST_F(InstructionSelectorTest, Float32Abs) { |
| 2416 StreamBuilder m(this, kMachFloat32, kMachFloat32); |
| 2417 Node* const p0 = m.Parameter(0); |
| 2418 Node* const n = m.Float32Abs(p0); |
| 2419 m.Return(n); |
| 2420 Stream s = m.Build(); |
| 2421 ASSERT_EQ(1U, s.size()); |
| 2422 EXPECT_EQ(kArm64Float32Abs, s[0]->arch_opcode()); |
| 2423 ASSERT_EQ(1U, s[0]->InputCount()); |
| 2424 EXPECT_EQ(s.ToVreg(p0), s.ToVreg(s[0]->InputAt(0))); |
| 2425 ASSERT_EQ(1U, s[0]->OutputCount()); |
| 2426 EXPECT_EQ(s.ToVreg(n), s.ToVreg(s[0]->Output())); |
| 2427 } |
| 2428 |
| 2429 |
| 2430 TEST_F(InstructionSelectorTest, Float64Abs) { |
| 2431 StreamBuilder m(this, kMachFloat64, kMachFloat64); |
| 2432 Node* const p0 = m.Parameter(0); |
| 2433 Node* const n = m.Float64Abs(p0); |
| 2434 m.Return(n); |
| 2435 Stream s = m.Build(); |
| 2436 ASSERT_EQ(1U, s.size()); |
| 2437 EXPECT_EQ(kArm64Float64Abs, s[0]->arch_opcode()); |
| 2438 ASSERT_EQ(1U, s[0]->InputCount()); |
| 2439 EXPECT_EQ(s.ToVreg(p0), s.ToVreg(s[0]->InputAt(0))); |
| 2440 ASSERT_EQ(1U, s[0]->OutputCount()); |
| 2441 EXPECT_EQ(s.ToVreg(n), s.ToVreg(s[0]->Output())); |
| 2442 } |
| 2443 |
| 2444 |
2415 TEST_F(InstructionSelectorTest, Float64SubWithMinusZero) { | 2445 TEST_F(InstructionSelectorTest, Float64SubWithMinusZero) { |
2416 StreamBuilder m(this, kMachFloat64, kMachFloat64); | 2446 StreamBuilder m(this, kMachFloat64, kMachFloat64); |
2417 Node* const p0 = m.Parameter(0); | 2447 Node* const p0 = m.Parameter(0); |
2418 Node* const n = m.Float64Sub(m.Float64Constant(-0.0), p0); | 2448 Node* const n = m.Float64Sub(m.Float64Constant(-0.0), p0); |
2419 m.Return(n); | 2449 m.Return(n); |
2420 Stream s = m.Build(); | 2450 Stream s = m.Build(); |
2421 ASSERT_EQ(1U, s.size()); | 2451 ASSERT_EQ(1U, s.size()); |
2422 EXPECT_EQ(kArm64Float64Neg, s[0]->arch_opcode()); | 2452 EXPECT_EQ(kArm64Float64Neg, s[0]->arch_opcode()); |
2423 ASSERT_EQ(1U, s[0]->InputCount()); | 2453 ASSERT_EQ(1U, s[0]->InputCount()); |
2424 EXPECT_EQ(s.ToVreg(p0), s.ToVreg(s[0]->InputAt(0))); | 2454 EXPECT_EQ(s.ToVreg(p0), s.ToVreg(s[0]->InputAt(0))); |
2425 ASSERT_EQ(1U, s[0]->OutputCount()); | 2455 ASSERT_EQ(1U, s[0]->OutputCount()); |
2426 EXPECT_EQ(s.ToVreg(n), s.ToVreg(s[0]->Output())); | 2456 EXPECT_EQ(s.ToVreg(n), s.ToVreg(s[0]->Output())); |
2427 } | 2457 } |
2428 | 2458 |
2429 } // namespace compiler | 2459 } // namespace compiler |
2430 } // namespace internal | 2460 } // namespace internal |
2431 } // namespace v8 | 2461 } // namespace v8 |
OLD | NEW |