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

Side by Side Diff: test/unittests/compiler/mips64/instruction-selector-mips64-unittest.cc

Issue 2147883002: MIPS64: Implement Mips64And32, Mips64Or32, Mips64Nor32 and Mips64Xor32 operators. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Address comments. Created 4 years, 5 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
« no previous file with comments | « src/compiler/mips64/instruction-selector-mips64.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 // The machine_type field in MachInst1 represents the destination type. 60 // The machine_type field in MachInst1 represents the destination type.
61 MachInst1 mi; 61 MachInst1 mi;
62 MachineType src_machine_type; 62 MachineType src_machine_type;
63 }; 63 };
64 64
65 65
66 // ---------------------------------------------------------------------------- 66 // ----------------------------------------------------------------------------
67 // Logical instructions. 67 // Logical instructions.
68 // ---------------------------------------------------------------------------- 68 // ----------------------------------------------------------------------------
69 69
70
71 const MachInst2 kLogicalInstructions[] = { 70 const MachInst2 kLogicalInstructions[] = {
72 {&RawMachineAssembler::Word32And, "Word32And", kMips64And, 71 {&RawMachineAssembler::Word32And, "Word32And", kMips64And32,
73 MachineType::Int32()}, 72 MachineType::Int32()},
74 {&RawMachineAssembler::Word64And, "Word64And", kMips64And, 73 {&RawMachineAssembler::Word64And, "Word64And", kMips64And,
75 MachineType::Int64()}, 74 MachineType::Int64()},
76 {&RawMachineAssembler::Word32Or, "Word32Or", kMips64Or, 75 {&RawMachineAssembler::Word32Or, "Word32Or", kMips64Or32,
77 MachineType::Int32()}, 76 MachineType::Int32()},
78 {&RawMachineAssembler::Word64Or, "Word64Or", kMips64Or, 77 {&RawMachineAssembler::Word64Or, "Word64Or", kMips64Or,
79 MachineType::Int64()}, 78 MachineType::Int64()},
80 {&RawMachineAssembler::Word32Xor, "Word32Xor", kMips64Xor, 79 {&RawMachineAssembler::Word32Xor, "Word32Xor", kMips64Xor32,
81 MachineType::Int32()}, 80 MachineType::Int32()},
82 {&RawMachineAssembler::Word64Xor, "Word64Xor", kMips64Xor, 81 {&RawMachineAssembler::Word64Xor, "Word64Xor", kMips64Xor,
83 MachineType::Int64()}}; 82 MachineType::Int64()}};
84 83
85
86 // ---------------------------------------------------------------------------- 84 // ----------------------------------------------------------------------------
87 // Shift instructions. 85 // Shift instructions.
88 // ---------------------------------------------------------------------------- 86 // ----------------------------------------------------------------------------
89 87
90 88
91 const MachInst2 kShiftInstructions[] = { 89 const MachInst2 kShiftInstructions[] = {
92 {&RawMachineAssembler::Word32Shl, "Word32Shl", kMips64Shl, 90 {&RawMachineAssembler::Word32Shl, "Word32Shl", kMips64Shl,
93 MachineType::Int32()}, 91 MachineType::Int32()},
94 {&RawMachineAssembler::Word64Shl, "Word64Shl", kMips64Dshl, 92 {&RawMachineAssembler::Word64Shl, "Word64Shl", kMips64Dshl,
95 MachineType::Int64()}, 93 MachineType::Int64()},
(...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after
535 } 533 }
536 } 534 }
537 535
538 536
539 TEST_F(InstructionSelectorTest, Word32XorMinusOneWithParameter) { 537 TEST_F(InstructionSelectorTest, Word32XorMinusOneWithParameter) {
540 { 538 {
541 StreamBuilder m(this, MachineType::Int32(), MachineType::Int32()); 539 StreamBuilder m(this, MachineType::Int32(), MachineType::Int32());
542 m.Return(m.Word32Xor(m.Parameter(0), m.Int32Constant(-1))); 540 m.Return(m.Word32Xor(m.Parameter(0), m.Int32Constant(-1)));
543 Stream s = m.Build(); 541 Stream s = m.Build();
544 ASSERT_EQ(1U, s.size()); 542 ASSERT_EQ(1U, s.size());
545 EXPECT_EQ(kMips64Nor, s[0]->arch_opcode()); 543 EXPECT_EQ(kMips64Nor32, s[0]->arch_opcode());
546 EXPECT_EQ(2U, s[0]->InputCount()); 544 EXPECT_EQ(2U, s[0]->InputCount());
547 EXPECT_EQ(1U, s[0]->OutputCount()); 545 EXPECT_EQ(1U, s[0]->OutputCount());
548 } 546 }
549 { 547 {
550 StreamBuilder m(this, MachineType::Int32(), MachineType::Int32()); 548 StreamBuilder m(this, MachineType::Int32(), MachineType::Int32());
551 m.Return(m.Word32Xor(m.Int32Constant(-1), m.Parameter(0))); 549 m.Return(m.Word32Xor(m.Int32Constant(-1), m.Parameter(0)));
552 Stream s = m.Build(); 550 Stream s = m.Build();
553 ASSERT_EQ(1U, s.size()); 551 ASSERT_EQ(1U, s.size());
554 EXPECT_EQ(kMips64Nor, s[0]->arch_opcode()); 552 EXPECT_EQ(kMips64Nor32, s[0]->arch_opcode());
555 EXPECT_EQ(2U, s[0]->InputCount()); 553 EXPECT_EQ(2U, s[0]->InputCount());
556 EXPECT_EQ(1U, s[0]->OutputCount()); 554 EXPECT_EQ(1U, s[0]->OutputCount());
557 } 555 }
558 } 556 }
559 557
560 558
561 TEST_F(InstructionSelectorTest, Word64XorMinusOneWithWord64Or) { 559 TEST_F(InstructionSelectorTest, Word64XorMinusOneWithWord64Or) {
562 { 560 {
563 StreamBuilder m(this, MachineType::Int64(), MachineType::Int64()); 561 StreamBuilder m(this, MachineType::Int64(), MachineType::Int64());
564 m.Return(m.Word64Xor(m.Word64Or(m.Parameter(0), m.Parameter(0)), 562 m.Return(m.Word64Xor(m.Word64Or(m.Parameter(0), m.Parameter(0)),
(...skipping 17 matching lines...) Expand all
582 } 580 }
583 581
584 582
585 TEST_F(InstructionSelectorTest, Word32XorMinusOneWithWord32Or) { 583 TEST_F(InstructionSelectorTest, Word32XorMinusOneWithWord32Or) {
586 { 584 {
587 StreamBuilder m(this, MachineType::Int32(), MachineType::Int32()); 585 StreamBuilder m(this, MachineType::Int32(), MachineType::Int32());
588 m.Return(m.Word32Xor(m.Word32Or(m.Parameter(0), m.Parameter(0)), 586 m.Return(m.Word32Xor(m.Word32Or(m.Parameter(0), m.Parameter(0)),
589 m.Int32Constant(-1))); 587 m.Int32Constant(-1)));
590 Stream s = m.Build(); 588 Stream s = m.Build();
591 ASSERT_EQ(1U, s.size()); 589 ASSERT_EQ(1U, s.size());
592 EXPECT_EQ(kMips64Nor, s[0]->arch_opcode()); 590 EXPECT_EQ(kMips64Nor32, s[0]->arch_opcode());
593 EXPECT_EQ(2U, s[0]->InputCount()); 591 EXPECT_EQ(2U, s[0]->InputCount());
594 EXPECT_EQ(1U, s[0]->OutputCount()); 592 EXPECT_EQ(1U, s[0]->OutputCount());
595 } 593 }
596 { 594 {
597 StreamBuilder m(this, MachineType::Int32(), MachineType::Int32()); 595 StreamBuilder m(this, MachineType::Int32(), MachineType::Int32());
598 m.Return(m.Word32Xor(m.Int32Constant(-1), 596 m.Return(m.Word32Xor(m.Int32Constant(-1),
599 m.Word32Or(m.Parameter(0), m.Parameter(0)))); 597 m.Word32Or(m.Parameter(0), m.Parameter(0))));
600 Stream s = m.Build(); 598 Stream s = m.Build();
601 ASSERT_EQ(1U, s.size()); 599 ASSERT_EQ(1U, s.size());
602 EXPECT_EQ(kMips64Nor, s[0]->arch_opcode()); 600 EXPECT_EQ(kMips64Nor32, s[0]->arch_opcode());
603 EXPECT_EQ(2U, s[0]->InputCount()); 601 EXPECT_EQ(2U, s[0]->InputCount());
604 EXPECT_EQ(1U, s[0]->OutputCount()); 602 EXPECT_EQ(1U, s[0]->OutputCount());
605 } 603 }
606 } 604 }
607 605
608 606
609 TEST_F(InstructionSelectorTest, Word32AndWithImmediateWithWord32Shr) { 607 TEST_F(InstructionSelectorTest, Word32AndWithImmediateWithWord32Shr) {
610 // The available shift operand range is `0 <= imm < 32`, but we also test 608 // The available shift operand range is `0 <= imm < 32`, but we also test
611 // that immediates outside this range are handled properly (modulo-32). 609 // that immediates outside this range are handled properly (modulo-32).
612 TRACED_FORRANGE(int32_t, shift, -32, 63) { 610 TRACED_FORRANGE(int32_t, shift, -32, 63) {
(...skipping 861 matching lines...) Expand 10 before | Expand all | Expand 10 after
1474 ASSERT_EQ(1U, s.size()); 1472 ASSERT_EQ(1U, s.size());
1475 EXPECT_EQ(kMips64Float64Min, s[0]->arch_opcode()); 1473 EXPECT_EQ(kMips64Float64Min, s[0]->arch_opcode());
1476 ASSERT_EQ(2U, s[0]->InputCount()); 1474 ASSERT_EQ(2U, s[0]->InputCount());
1477 ASSERT_EQ(1U, s[0]->OutputCount()); 1475 ASSERT_EQ(1U, s[0]->OutputCount());
1478 EXPECT_EQ(s.ToVreg(n), s.ToVreg(s[0]->Output())); 1476 EXPECT_EQ(s.ToVreg(n), s.ToVreg(s[0]->Output()));
1479 } 1477 }
1480 1478
1481 } // namespace compiler 1479 } // namespace compiler
1482 } // namespace internal 1480 } // namespace internal
1483 } // namespace v8 1481 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/mips64/instruction-selector-mips64.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698