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

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

Issue 658283003: [arm] Prefer BIC over BFC. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 2 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 | Annotate | Revision Log
« no previous file with comments | « test/mjsunit/asm/word32and.js ('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 <limits>
6
5 #include "test/unittests/compiler/instruction-selector-unittest.h" 7 #include "test/unittests/compiler/instruction-selector-unittest.h"
6 8
7 namespace v8 { 9 namespace v8 {
8 namespace internal { 10 namespace internal {
9 namespace compiler { 11 namespace compiler {
10 12
11 namespace { 13 namespace {
12 14
13 typedef RawMachineAssembler::Label MLabel; 15 typedef RawMachineAssembler::Label MLabel;
14 typedef Node* (RawMachineAssembler::*Constructor)(Node*, Node*); 16 typedef Node* (RawMachineAssembler::*Constructor)(Node*, Node*);
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 {&RawMachineAssembler::Word32Shl, "Word32Shl", 0, 31, 81 {&RawMachineAssembler::Word32Shl, "Word32Shl", 0, 31,
80 kMode_Operand2_R_LSL_I, kMode_Operand2_R_LSL_R}, 82 kMode_Operand2_R_LSL_I, kMode_Operand2_R_LSL_R},
81 {&RawMachineAssembler::Word32Shr, "Word32Shr", 1, 32, 83 {&RawMachineAssembler::Word32Shr, "Word32Shr", 1, 32,
82 kMode_Operand2_R_LSR_I, kMode_Operand2_R_LSR_R}, 84 kMode_Operand2_R_LSR_I, kMode_Operand2_R_LSR_R},
83 {&RawMachineAssembler::Word32Ror, "Word32Ror", 1, 31, 85 {&RawMachineAssembler::Word32Ror, "Word32Ror", 1, 31,
84 kMode_Operand2_R_ROR_I, kMode_Operand2_R_ROR_R}}; 86 kMode_Operand2_R_ROR_I, kMode_Operand2_R_ROR_R}};
85 87
86 88
87 // Immediates (random subset). 89 // Immediates (random subset).
88 static const int32_t kImmediates[] = { 90 static const int32_t kImmediates[] = {
89 -2147483617, -2147483606, -2113929216, -2080374784, -1996488704, 91 std::numeric_limits<int32_t>::min(), -2147483617, -2147483606, -2113929216,
90 -1879048192, -1459617792, -1358954496, -1342177265, -1275068414, 92 -2080374784, -1996488704, -1879048192, -1459617792,
91 -1073741818, -1073741777, -855638016, -805306368, -402653184, 93 -1358954496, -1342177265, -1275068414, -1073741818,
92 -268435444, -16777216, 0, 35, 61, 94 -1073741777, -855638016, -805306368, -402653184,
93 105, 116, 171, 245, 255, 95 -268435444, -16777216, 0, 35,
94 692, 1216, 1248, 1520, 1600, 96 61, 105, 116, 171,
95 1888, 3744, 4080, 5888, 8384, 97 245, 255, 692, 1216,
96 9344, 9472, 9792, 13312, 15040, 98 1248, 1520, 1600, 1888,
97 15360, 20736, 22272, 23296, 32000, 99 3744, 4080, 5888, 8384,
98 33536, 37120, 45824, 47872, 56320, 100 9344, 9472, 9792, 13312,
99 59392, 65280, 72704, 101376, 147456, 101 15040, 15360, 20736, 22272,
100 161792, 164864, 167936, 173056, 195584, 102 23296, 32000, 33536, 37120,
101 209920, 212992, 356352, 655360, 704512, 103 45824, 47872, 56320, 59392,
102 716800, 851968, 901120, 1044480, 1523712, 104 65280, 72704, 101376, 147456,
103 2572288, 3211264, 3588096, 3833856, 3866624, 105 161792, 164864, 167936, 173056,
104 4325376, 5177344, 6488064, 7012352, 7471104, 106 195584, 209920, 212992, 356352,
105 14090240, 16711680, 19398656, 22282240, 28573696, 107 655360, 704512, 716800, 851968,
106 30408704, 30670848, 43253760, 54525952, 55312384, 108 901120, 1044480, 1523712, 2572288,
107 56623104, 68157440, 115343360, 131072000, 187695104, 109 3211264, 3588096, 3833856, 3866624,
108 188743680, 195035136, 197132288, 203423744, 218103808, 110 4325376, 5177344, 6488064, 7012352,
109 267386880, 268435470, 285212672, 402653185, 415236096, 111 7471104, 14090240, 16711680, 19398656,
110 595591168, 603979776, 603979778, 629145600, 1073741835, 112 22282240, 28573696, 30408704, 30670848,
111 1073741855, 1073741861, 1073741884, 1157627904, 1476395008, 113 43253760, 54525952, 55312384, 56623104,
112 1476395010, 1610612741, 2030043136, 2080374785, 2097152000}; 114 68157440, 115343360, 131072000, 187695104,
115 188743680, 195035136, 197132288, 203423744,
116 218103808, 267386880, 268435470, 285212672,
117 402653185, 415236096, 595591168, 603979776,
118 603979778, 629145600, 1073741835, 1073741855,
119 1073741861, 1073741884, 1157627904, 1476395008,
120 1476395010, 1610612741, 2030043136, 2080374785,
121 2097152000};
113 122
114 } // namespace 123 } // namespace
115 124
116 125
117 // ----------------------------------------------------------------------------- 126 // -----------------------------------------------------------------------------
118 // Data processing instructions. 127 // Data processing instructions.
119 128
120 129
121 typedef InstructionSelectorTestWithParam<DPI> InstructionSelectorDPITest; 130 typedef InstructionSelectorTestWithParam<DPI> InstructionSelectorDPITest;
122 131
(...skipping 1644 matching lines...) Expand 10 before | Expand all | Expand 10 after
1767 EXPECT_EQ(kArmUbfx, s[0]->arch_opcode()); 1776 EXPECT_EQ(kArmUbfx, s[0]->arch_opcode());
1768 ASSERT_EQ(3U, s[0]->InputCount()); 1777 ASSERT_EQ(3U, s[0]->InputCount());
1769 EXPECT_EQ(0, s.ToInt32(s[0]->InputAt(1))); 1778 EXPECT_EQ(0, s.ToInt32(s[0]->InputAt(1)));
1770 EXPECT_EQ(width, s.ToInt32(s[0]->InputAt(2))); 1779 EXPECT_EQ(width, s.ToInt32(s[0]->InputAt(2)));
1771 } 1780 }
1772 } 1781 }
1773 1782
1774 1783
1775 TEST_F(InstructionSelectorTest, Word32AndWithBfcImmediateForARMv7) { 1784 TEST_F(InstructionSelectorTest, Word32AndWithBfcImmediateForARMv7) {
1776 TRACED_FORRANGE(int32_t, lsb, 0, 31) { 1785 TRACED_FORRANGE(int32_t, lsb, 0, 31) {
1777 TRACED_FORRANGE(int32_t, width, 1, (32 - lsb) - 1) { 1786 TRACED_FORRANGE(int32_t, width, 9, (32 - lsb) - 1) {
1778 StreamBuilder m(this, kMachInt32, kMachInt32); 1787 StreamBuilder m(this, kMachInt32, kMachInt32);
1779 m.Return(m.Word32And( 1788 m.Return(m.Word32And(
1780 m.Parameter(0), 1789 m.Parameter(0),
1781 m.Int32Constant(~((0xffffffffu >> (32 - width)) << lsb)))); 1790 m.Int32Constant(~((0xffffffffu >> (32 - width)) << lsb))));
1782 Stream s = m.Build(ARMv7); 1791 Stream s = m.Build(ARMv7);
1783 ASSERT_EQ(1U, s.size()); 1792 ASSERT_EQ(1U, s.size());
1784 EXPECT_EQ(kArmBfc, s[0]->arch_opcode()); 1793 EXPECT_EQ(kArmBfc, s[0]->arch_opcode());
1785 ASSERT_EQ(1U, s[0]->OutputCount()); 1794 ASSERT_EQ(1U, s[0]->OutputCount());
1786 EXPECT_TRUE( 1795 EXPECT_TRUE(
1787 UnallocatedOperand::cast(s[0]->Output())->HasSameAsInputPolicy()); 1796 UnallocatedOperand::cast(s[0]->Output())->HasSameAsInputPolicy());
1788 ASSERT_EQ(3U, s[0]->InputCount()); 1797 ASSERT_EQ(3U, s[0]->InputCount());
1789 EXPECT_EQ(lsb, s.ToInt32(s[0]->InputAt(1))); 1798 EXPECT_EQ(lsb, s.ToInt32(s[0]->InputAt(1)));
1790 EXPECT_EQ(width, s.ToInt32(s[0]->InputAt(2))); 1799 EXPECT_EQ(width, s.ToInt32(s[0]->InputAt(2)));
1791 } 1800 }
1792 } 1801 }
1793 TRACED_FORRANGE(int32_t, lsb, 0, 31) { 1802 TRACED_FORRANGE(int32_t, lsb, 0, 31) {
1794 TRACED_FORRANGE(int32_t, width, 1, (32 - lsb) - 1) { 1803 TRACED_FORRANGE(int32_t, width, 9, (32 - lsb) - 1) {
1795 StreamBuilder m(this, kMachInt32, kMachInt32); 1804 StreamBuilder m(this, kMachInt32, kMachInt32);
1796 m.Return( 1805 m.Return(
1797 m.Word32And(m.Int32Constant(~((0xffffffffu >> (32 - width)) << lsb)), 1806 m.Word32And(m.Int32Constant(~((0xffffffffu >> (32 - width)) << lsb)),
1798 m.Parameter(0))); 1807 m.Parameter(0)));
1799 Stream s = m.Build(ARMv7); 1808 Stream s = m.Build(ARMv7);
1800 ASSERT_EQ(1U, s.size()); 1809 ASSERT_EQ(1U, s.size());
1801 EXPECT_EQ(kArmBfc, s[0]->arch_opcode()); 1810 EXPECT_EQ(kArmBfc, s[0]->arch_opcode());
1802 ASSERT_EQ(1U, s[0]->OutputCount()); 1811 ASSERT_EQ(1U, s[0]->OutputCount());
1803 EXPECT_TRUE( 1812 EXPECT_TRUE(
1804 UnallocatedOperand::cast(s[0]->Output())->HasSameAsInputPolicy()); 1813 UnallocatedOperand::cast(s[0]->Output())->HasSameAsInputPolicy());
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
1985 ASSERT_EQ(3U, s[0]->InputCount()); 1994 ASSERT_EQ(3U, s[0]->InputCount());
1986 EXPECT_EQ(lsb, s.ToInt32(s[0]->InputAt(1))); 1995 EXPECT_EQ(lsb, s.ToInt32(s[0]->InputAt(1)));
1987 EXPECT_EQ(width, s.ToInt32(s[0]->InputAt(2))); 1996 EXPECT_EQ(width, s.ToInt32(s[0]->InputAt(2)));
1988 } 1997 }
1989 } 1998 }
1990 } 1999 }
1991 2000
1992 } // namespace compiler 2001 } // namespace compiler
1993 } // namespace internal 2002 } // namespace internal
1994 } // namespace v8 2003 } // namespace v8
OLDNEW
« no previous file with comments | « test/mjsunit/asm/word32and.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698