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 |
11 namespace { | 11 namespace { |
12 | 12 |
13 // Immediates (random subset). | 13 // Immediates (random subset). |
14 static const int32_t kImmediates[] = { | 14 const int32_t kImmediates[] = {kMinInt, -42, -1, 0, 1, 2, |
15 kMinInt, -42, -1, 0, 1, 2, 3, 4, 5, | 15 3, 4, 5, 6, 7, 8, |
16 6, 7, 8, 16, 42, 0xff, 0xffff, 0x0f0f0f0f, kMaxInt}; | 16 16, 42, 0xff, 0xffff, 0x0f0f0f0f, kMaxInt}; |
17 | 17 |
18 } // namespace | 18 } // namespace |
19 | 19 |
20 | 20 |
21 TEST_F(InstructionSelectorTest, Int32AddWithParameter) { | 21 TEST_F(InstructionSelectorTest, Int32AddWithParameter) { |
22 StreamBuilder m(this, kMachInt32, kMachInt32, kMachInt32); | 22 StreamBuilder m(this, kMachInt32, kMachInt32, kMachInt32); |
23 m.Return(m.Int32Add(m.Parameter(0), m.Parameter(1))); | 23 m.Return(m.Int32Add(m.Parameter(0), m.Parameter(1))); |
24 Stream s = m.Build(); | 24 Stream s = m.Build(); |
25 ASSERT_EQ(1U, s.size()); | 25 ASSERT_EQ(1U, s.size()); |
26 EXPECT_EQ(kIA32Lea, s[0]->arch_opcode()); | 26 EXPECT_EQ(kIA32Lea, s[0]->arch_opcode()); |
(...skipping 655 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
682 Stream s = m.Build(); | 682 Stream s = m.Build(); |
683 ASSERT_EQ(1U, s.size()); | 683 ASSERT_EQ(1U, s.size()); |
684 EXPECT_EQ(kIA32StackCheck, s[0]->arch_opcode()); | 684 EXPECT_EQ(kIA32StackCheck, s[0]->arch_opcode()); |
685 ASSERT_EQ(0U, s[0]->InputCount()); | 685 ASSERT_EQ(0U, s[0]->InputCount()); |
686 ASSERT_EQ(1U, s[0]->OutputCount()); | 686 ASSERT_EQ(1U, s[0]->OutputCount()); |
687 EXPECT_EQ(s.ToVreg(n), s.ToVreg(s[0]->Output())); | 687 EXPECT_EQ(s.ToVreg(n), s.ToVreg(s[0]->Output())); |
688 EXPECT_EQ(kFlags_set, s[0]->flags_mode()); | 688 EXPECT_EQ(kFlags_set, s[0]->flags_mode()); |
689 EXPECT_EQ(kUnsignedGreaterThan, s[0]->flags_condition()); | 689 EXPECT_EQ(kUnsignedGreaterThan, s[0]->flags_condition()); |
690 } | 690 } |
691 | 691 |
| 692 |
| 693 TEST_F(InstructionSelectorTest, Word32Clz) { |
| 694 StreamBuilder m(this, kMachUint32, kMachUint32); |
| 695 Node* const p0 = m.Parameter(0); |
| 696 Node* const n = m.Word32Clz(p0); |
| 697 m.Return(n); |
| 698 Stream s = m.Build(); |
| 699 ASSERT_EQ(1U, s.size()); |
| 700 EXPECT_EQ(kIA32Lzcnt, s[0]->arch_opcode()); |
| 701 ASSERT_EQ(1U, s[0]->InputCount()); |
| 702 EXPECT_EQ(s.ToVreg(p0), s.ToVreg(s[0]->InputAt(0))); |
| 703 ASSERT_EQ(1U, s[0]->OutputCount()); |
| 704 EXPECT_EQ(s.ToVreg(n), s.ToVreg(s[0]->Output())); |
| 705 } |
| 706 |
692 } // namespace compiler | 707 } // namespace compiler |
693 } // namespace internal | 708 } // namespace internal |
694 } // namespace v8 | 709 } // namespace v8 |
OLD | NEW |