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

Side by Side Diff: src/IceTargetLoweringX8632.cpp

Issue 296823013: Fix g++ -pedantic warnings (Closed) Base URL: https://gerrit.chromium.org/gerrit/p/native_client/pnacl-subzero.git@master
Patch Set: Remove the empty string concatenation since macro args won't be empty Created 6 years, 7 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/IceInstX8632.def ('k') | src/IceTypes.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 //===- subzero/src/IceTargetLoweringX8632.cpp - x86-32 lowering -----------===// 1 //===- subzero/src/IceTargetLoweringX8632.cpp - x86-32 lowering -----------===//
2 // 2 //
3 // The Subzero Code Generator 3 // The Subzero Code Generator
4 // 4 //
5 // This file is distributed under the University of Illinois Open Source 5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details. 6 // License. See LICENSE.TXT for details.
7 // 7 //
8 //===----------------------------------------------------------------------===// 8 //===----------------------------------------------------------------------===//
9 // 9 //
10 // This file implements the TargetLoweringX8632 class, which 10 // This file implements the TargetLoweringX8632 class, which
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 // ensure everything is kept in sync. 94 // ensure everything is kept in sync.
95 void xMacroIntegrityCheck() { 95 void xMacroIntegrityCheck() {
96 // Validate the enum values in FCMPX8632_TABLE. 96 // Validate the enum values in FCMPX8632_TABLE.
97 { 97 {
98 // Define a temporary set of enum values based on low-level 98 // Define a temporary set of enum values based on low-level
99 // table entries. 99 // table entries.
100 enum _tmp_enum { 100 enum _tmp_enum {
101 #define X(val, dflt, swap, C1, C2) _tmp_##val, 101 #define X(val, dflt, swap, C1, C2) _tmp_##val,
102 FCMPX8632_TABLE 102 FCMPX8632_TABLE
103 #undef X 103 #undef X
104 _num
104 }; 105 };
105 // Define a set of constants based on high-level table entries. 106 // Define a set of constants based on high-level table entries.
106 #define X(tag, str) static const int _table1_##tag = InstFcmp::tag; 107 #define X(tag, str) static const int _table1_##tag = InstFcmp::tag;
107 ICEINSTFCMP_TABLE; 108 ICEINSTFCMP_TABLE;
108 #undef X 109 #undef X
109 // Define a set of constants based on low-level table entries, 110 // Define a set of constants based on low-level table entries,
110 // and ensure the table entry keys are consistent. 111 // and ensure the table entry keys are consistent.
111 #define X(val, dflt, swap, C1, C2) \ 112 #define X(val, dflt, swap, C1, C2) \
112 static const int _table2_##val = _tmp_##val; \ 113 static const int _table2_##val = _tmp_##val; \
113 STATIC_ASSERT(_table1_##val == _table2_##val); 114 STATIC_ASSERT(_table1_##val == _table2_##val);
114 FCMPX8632_TABLE; 115 FCMPX8632_TABLE;
115 #undef X 116 #undef X
116 // Repeat the static asserts with respect to the high-level 117 // Repeat the static asserts with respect to the high-level
117 // table entries in case the high-level table has extra entries. 118 // table entries in case the high-level table has extra entries.
118 #define X(tag, str) STATIC_ASSERT(_table1_##tag == _table2_##tag); 119 #define X(tag, str) STATIC_ASSERT(_table1_##tag == _table2_##tag);
119 ICEINSTFCMP_TABLE; 120 ICEINSTFCMP_TABLE;
120 #undef X 121 #undef X
121 } 122 }
122 123
123 // Validate the enum values in ICMPX8632_TABLE. 124 // Validate the enum values in ICMPX8632_TABLE.
124 { 125 {
125 // Define a temporary set of enum values based on low-level 126 // Define a temporary set of enum values based on low-level
126 // table entries. 127 // table entries.
127 enum _tmp_enum { 128 enum _tmp_enum {
128 #define X(val, C_32, C1_64, C2_64, C3_64) _tmp_##val, 129 #define X(val, C_32, C1_64, C2_64, C3_64) _tmp_##val,
129 ICMPX8632_TABLE 130 ICMPX8632_TABLE
130 #undef X 131 #undef X
132 _num
131 }; 133 };
132 // Define a set of constants based on high-level table entries. 134 // Define a set of constants based on high-level table entries.
133 #define X(tag, str) static const int _table1_##tag = InstIcmp::tag; 135 #define X(tag, str) static const int _table1_##tag = InstIcmp::tag;
134 ICEINSTICMP_TABLE; 136 ICEINSTICMP_TABLE;
135 #undef X 137 #undef X
136 // Define a set of constants based on low-level table entries, 138 // Define a set of constants based on low-level table entries,
137 // and ensure the table entry keys are consistent. 139 // and ensure the table entry keys are consistent.
138 #define X(val, C_32, C1_64, C2_64, C3_64) \ 140 #define X(val, C_32, C1_64, C2_64, C3_64) \
139 static const int _table2_##val = _tmp_##val; \ 141 static const int _table2_##val = _tmp_##val; \
140 STATIC_ASSERT(_table1_##val == _table2_##val); 142 STATIC_ASSERT(_table1_##val == _table2_##val);
141 ICMPX8632_TABLE; 143 ICMPX8632_TABLE;
142 #undef X 144 #undef X
143 // Repeat the static asserts with respect to the high-level 145 // Repeat the static asserts with respect to the high-level
144 // table entries in case the high-level table has extra entries. 146 // table entries in case the high-level table has extra entries.
145 #define X(tag, str) STATIC_ASSERT(_table1_##tag == _table2_##tag); 147 #define X(tag, str) STATIC_ASSERT(_table1_##tag == _table2_##tag);
146 ICEINSTICMP_TABLE; 148 ICEINSTICMP_TABLE;
147 #undef X 149 #undef X
148 } 150 }
149 151
150 // Validate the enum values in ICETYPEX8632_TABLE. 152 // Validate the enum values in ICETYPEX8632_TABLE.
151 { 153 {
152 // Define a temporary set of enum values based on low-level 154 // Define a temporary set of enum values based on low-level
153 // table entries. 155 // table entries.
154 enum _tmp_enum { 156 enum _tmp_enum {
155 #define X(tag, cvt, sdss, width) _tmp_##tag, 157 #define X(tag, cvt, sdss, width) _tmp_##tag,
156 ICETYPEX8632_TABLE 158 ICETYPEX8632_TABLE
157 #undef X 159 #undef X
160 _num
158 }; 161 };
159 // Define a set of constants based on high-level table entries. 162 // Define a set of constants based on high-level table entries.
160 #define X(tag, size, align, str) static const int _table1_##tag = tag; 163 #define X(tag, size, align, str) static const int _table1_##tag = tag;
161 ICETYPE_TABLE; 164 ICETYPE_TABLE;
162 #undef X 165 #undef X
163 // Define a set of constants based on low-level table entries, 166 // Define a set of constants based on low-level table entries,
164 // and ensure the table entry keys are consistent. 167 // and ensure the table entry keys are consistent.
165 #define X(tag, cvt, sdss, width) \ 168 #define X(tag, cvt, sdss, width) \
166 static const int _table2_##tag = _tmp_##tag; \ 169 static const int _table2_##tag = _tmp_##tag; \
167 STATIC_ASSERT(_table1_##tag == _table2_##tag); 170 STATIC_ASSERT(_table1_##tag == _table2_##tag);
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 PhysicalRegisters[RegNum] = Reg; 272 PhysicalRegisters[RegNum] = Reg;
270 } 273 }
271 return Reg; 274 return Reg;
272 } 275 }
273 276
274 IceString TargetX8632::getRegName(SizeT RegNum, Type Ty) const { 277 IceString TargetX8632::getRegName(SizeT RegNum, Type Ty) const {
275 assert(RegNum < Reg_NUM); 278 assert(RegNum < Reg_NUM);
276 static IceString RegNames8[] = { 279 static IceString RegNames8[] = {
277 #define X(val, init, name, name16, name8, scratch, preserved, stackptr, \ 280 #define X(val, init, name, name16, name8, scratch, preserved, stackptr, \
278 frameptr, isI8, isInt, isFP) \ 281 frameptr, isI8, isInt, isFP) \
279 "" name8, 282 name8,
280 REGX8632_TABLE 283 REGX8632_TABLE
281 #undef X 284 #undef X
282 }; 285 };
283 static IceString RegNames16[] = { 286 static IceString RegNames16[] = {
284 #define X(val, init, name, name16, name8, scratch, preserved, stackptr, \ 287 #define X(val, init, name, name16, name8, scratch, preserved, stackptr, \
285 frameptr, isI8, isInt, isFP) \ 288 frameptr, isI8, isInt, isFP) \
286 "" name16, 289 name16,
287 REGX8632_TABLE 290 REGX8632_TABLE
288 #undef X 291 #undef X
289 }; 292 };
290 switch (Ty) { 293 switch (Ty) {
291 case IceType_i1: 294 case IceType_i1:
292 case IceType_i8: 295 case IceType_i8:
293 return RegNames8[RegNum]; 296 return RegNames8[RegNum];
294 case IceType_i16: 297 case IceType_i16:
295 return RegNames16[RegNum]; 298 return RegNames16[RegNum];
296 default: 299 default:
(...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after
689 Operand *Src1 = legalize(Inst->getSrc(1)); 692 Operand *Src1 = legalize(Inst->getSrc(1));
690 if (Dest->getType() == IceType_i64) { 693 if (Dest->getType() == IceType_i64) {
691 Variable *DestLo = llvm::cast<Variable>(loOperand(Dest)); 694 Variable *DestLo = llvm::cast<Variable>(loOperand(Dest));
692 Variable *DestHi = llvm::cast<Variable>(hiOperand(Dest)); 695 Variable *DestHi = llvm::cast<Variable>(hiOperand(Dest));
693 Operand *Src0Lo = loOperand(Src0); 696 Operand *Src0Lo = loOperand(Src0);
694 Operand *Src0Hi = hiOperand(Src0); 697 Operand *Src0Hi = hiOperand(Src0);
695 Operand *Src1Lo = loOperand(Src1); 698 Operand *Src1Lo = loOperand(Src1);
696 Operand *Src1Hi = hiOperand(Src1); 699 Operand *Src1Hi = hiOperand(Src1);
697 Variable *T_Lo = NULL, *T_Hi = NULL; 700 Variable *T_Lo = NULL, *T_Hi = NULL;
698 switch (Inst->getOp()) { 701 switch (Inst->getOp()) {
702 case InstArithmetic::_num:
703 llvm_unreachable("Unknown arithmetic operator");
704 break;
699 case InstArithmetic::Add: 705 case InstArithmetic::Add:
700 _mov(T_Lo, Src0Lo); 706 _mov(T_Lo, Src0Lo);
701 _add(T_Lo, Src1Lo); 707 _add(T_Lo, Src1Lo);
702 _mov(DestLo, T_Lo); 708 _mov(DestLo, T_Lo);
703 _mov(T_Hi, Src0Hi); 709 _mov(T_Hi, Src0Hi);
704 _adc(T_Hi, Src1Hi); 710 _adc(T_Hi, Src1Hi);
705 _mov(DestHi, T_Hi); 711 _mov(DestHi, T_Hi);
706 break; 712 break;
707 case InstArithmetic::And: 713 case InstArithmetic::And:
708 _mov(T_Lo, Src0Lo); 714 _mov(T_Lo, Src0Lo);
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
907 case InstArithmetic::Fmul: 913 case InstArithmetic::Fmul:
908 case InstArithmetic::Fdiv: 914 case InstArithmetic::Fdiv:
909 case InstArithmetic::Frem: 915 case InstArithmetic::Frem:
910 llvm_unreachable("FP instruction with i64 type"); 916 llvm_unreachable("FP instruction with i64 type");
911 break; 917 break;
912 } 918 }
913 } else { // Dest->getType() != IceType_i64 919 } else { // Dest->getType() != IceType_i64
914 Variable *T_edx = NULL; 920 Variable *T_edx = NULL;
915 Variable *T = NULL; 921 Variable *T = NULL;
916 switch (Inst->getOp()) { 922 switch (Inst->getOp()) {
923 case InstArithmetic::_num:
924 llvm_unreachable("Unknown arithmetic operator");
925 break;
917 case InstArithmetic::Add: 926 case InstArithmetic::Add:
918 _mov(T, Src0); 927 _mov(T, Src0);
919 _add(T, Src1); 928 _add(T, Src1);
920 _mov(Dest, T); 929 _mov(Dest, T);
921 break; 930 break;
922 case InstArithmetic::And: 931 case InstArithmetic::And:
923 _mov(T, Src0); 932 _mov(T, Src0);
924 _and(T, Src1); 933 _and(T, Src1);
925 _mov(Dest, T); 934 _mov(Dest, T);
926 break; 935 break;
(...skipping 945 matching lines...) Expand 10 before | Expand all | Expand 10 after
1872 assert(AvailableTypedRegisters.any()); 1881 assert(AvailableTypedRegisters.any());
1873 int32_t RegNum = AvailableTypedRegisters.find_first(); 1882 int32_t RegNum = AvailableTypedRegisters.find_first();
1874 Var->setRegNum(RegNum); 1883 Var->setRegNum(RegNum);
1875 AvailableRegisters[RegNum] = false; 1884 AvailableRegisters[RegNum] = false;
1876 } 1885 }
1877 } 1886 }
1878 } 1887 }
1879 } 1888 }
1880 1889
1881 } // end of namespace Ice 1890 } // end of namespace Ice
OLDNEW
« no previous file with comments | « src/IceInstX8632.def ('k') | src/IceTypes.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698