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

Side by Side Diff: src/IceTargetLoweringX8632.cpp

Issue 695993004: Subzero: Switch to AT&T asm syntax. I give up. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Minor cleanup Created 6 years, 1 month 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
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 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 100
101 CondX86::BrCond getIcmp32Mapping(InstIcmp::ICond Cond) { 101 CondX86::BrCond getIcmp32Mapping(InstIcmp::ICond Cond) {
102 size_t Index = static_cast<size_t>(Cond); 102 size_t Index = static_cast<size_t>(Cond);
103 assert(Index < TableIcmp32Size); 103 assert(Index < TableIcmp32Size);
104 return TableIcmp32[Index].Mapping; 104 return TableIcmp32[Index].Mapping;
105 } 105 }
106 106
107 const struct TableTypeX8632Attributes_ { 107 const struct TableTypeX8632Attributes_ {
108 Type InVectorElementType; 108 Type InVectorElementType;
109 } TableTypeX8632Attributes[] = { 109 } TableTypeX8632Attributes[] = {
110 #define X(tag, elementty, cvt, sdss, pack, width) \ 110 #define X(tag, elementty, cvt, sdss, pack, width, fld) \
111 { elementty } \ 111 { elementty } \
112 , 112 ,
113 ICETYPEX8632_TABLE 113 ICETYPEX8632_TABLE
114 #undef X 114 #undef X
115 }; 115 };
116 const size_t TableTypeX8632AttributesSize = 116 const size_t TableTypeX8632AttributesSize =
117 llvm::array_lengthof(TableTypeX8632Attributes); 117 llvm::array_lengthof(TableTypeX8632Attributes);
118 118
119 // Return the type which the elements of the vector have in the X86 119 // Return the type which the elements of the vector have in the X86
120 // representation of the vector. 120 // representation of the vector.
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 "Inconsistency between ICMPX8632_TABLE and ICEINSTICMP_TABLE"); 238 "Inconsistency between ICMPX8632_TABLE and ICEINSTICMP_TABLE");
239 ICEINSTICMP_TABLE; 239 ICEINSTICMP_TABLE;
240 #undef X 240 #undef X
241 } // end of namespace dummy2 241 } // end of namespace dummy2
242 242
243 // Validate the enum values in ICETYPEX8632_TABLE. 243 // Validate the enum values in ICETYPEX8632_TABLE.
244 namespace dummy3 { 244 namespace dummy3 {
245 // Define a temporary set of enum values based on low-level table 245 // Define a temporary set of enum values based on low-level table
246 // entries. 246 // entries.
247 enum _tmp_enum { 247 enum _tmp_enum {
248 #define X(tag, elementty, cvt, sdss, pack, width) _tmp_##tag, 248 #define X(tag, elementty, cvt, sdss, pack, width, fld) _tmp_##tag,
249 ICETYPEX8632_TABLE 249 ICETYPEX8632_TABLE
250 #undef X 250 #undef X
251 _num 251 _num
252 }; 252 };
253 // Define a set of constants based on high-level table entries. 253 // Define a set of constants based on high-level table entries.
254 #define X(tag, size, align, elts, elty, str) \ 254 #define X(tag, size, align, elts, elty, str) \
255 static const int _table1_##tag = tag; 255 static const int _table1_##tag = tag;
256 ICETYPE_TABLE; 256 ICETYPE_TABLE;
257 #undef X 257 #undef X
258 // Define a set of constants based on low-level table entries, and 258 // Define a set of constants based on low-level table entries, and
259 // ensure the table entry keys are consistent. 259 // ensure the table entry keys are consistent.
260 #define X(tag, elementty, cvt, sdss, pack, width) \ 260 #define X(tag, elementty, cvt, sdss, pack, width, fld) \
261 static const int _table2_##tag = _tmp_##tag; \ 261 static const int _table2_##tag = _tmp_##tag; \
262 static_assert(_table1_##tag == _table2_##tag, \ 262 static_assert(_table1_##tag == _table2_##tag, \
263 "Inconsistency between ICETYPEX8632_TABLE and ICETYPE_TABLE"); 263 "Inconsistency between ICETYPEX8632_TABLE and ICETYPE_TABLE");
264 ICETYPEX8632_TABLE; 264 ICETYPEX8632_TABLE;
265 #undef X 265 #undef X
266 // Repeat the static asserts with respect to the high-level table 266 // Repeat the static asserts with respect to the high-level table
267 // entries in case the high-level table has extra entries. 267 // entries in case the high-level table has extra entries.
268 #define X(tag, size, align, elts, elty, str) \ 268 #define X(tag, size, align, elts, elty, str) \
269 static_assert(_table1_##tag == _table2_##tag, \ 269 static_assert(_table1_##tag == _table2_##tag, \
270 "Inconsistency between ICETYPEX8632_TABLE and ICETYPE_TABLE"); 270 "Inconsistency between ICETYPEX8632_TABLE and ICETYPE_TABLE");
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 case IceType_i16: 502 case IceType_i16:
503 return RegNames16[RegNum]; 503 return RegNames16[RegNum];
504 default: 504 default:
505 return RegNames[RegNum]; 505 return RegNames[RegNum];
506 } 506 }
507 } 507 }
508 508
509 void TargetX8632::emitVariable(const Variable *Var) const { 509 void TargetX8632::emitVariable(const Variable *Var) const {
510 Ostream &Str = Ctx->getStrEmit(); 510 Ostream &Str = Ctx->getStrEmit();
511 if (Var->hasReg()) { 511 if (Var->hasReg()) {
512 Str << getRegName(Var->getRegNum(), Var->getType()); 512 Str << "%" << getRegName(Var->getRegNum(), Var->getType());
513 return; 513 return;
514 } 514 }
515 Str << InstX8632::getWidthString(Var->getType()); 515 const Type Ty = IceType_i32;
516 Str << " [" << getRegName(getFrameOrStackReg(), IceType_i32);
517 int32_t Offset = Var->getStackOffset(); 516 int32_t Offset = Var->getStackOffset();
518 if (!hasFramePointer()) 517 if (!hasFramePointer())
519 Offset += getStackAdjustment(); 518 Offset += getStackAdjustment();
520 if (Offset) { 519 if (Offset)
521 if (Offset > 0)
522 Str << "+";
523 Str << Offset; 520 Str << Offset;
524 } 521 Str << "(%" << getRegName(getFrameOrStackReg(), Ty) << ")";
525 Str << "]";
526 } 522 }
527 523
528 x86::Address TargetX8632::stackVarToAsmOperand(const Variable *Var) const { 524 x86::Address TargetX8632::stackVarToAsmOperand(const Variable *Var) const {
529 assert(!Var->hasReg()); 525 assert(!Var->hasReg());
530 int32_t Offset = Var->getStackOffset(); 526 int32_t Offset = Var->getStackOffset();
531 if (!hasFramePointer()) 527 if (!hasFramePointer())
532 Offset += getStackAdjustment(); 528 Offset += getStackAdjustment();
533 return x86::Address(RegX8632::getEncodedGPR(getFrameOrStackReg()), Offset); 529 return x86::Address(RegX8632::getEncodedGPR(getFrameOrStackReg()), Offset);
534 } 530 }
535 531
(...skipping 4055 matching lines...) Expand 10 before | Expand all | Expand 10 after
4591 } 4587 }
4592 } 4588 }
4593 } 4589 }
4594 } 4590 }
4595 AvailableRegisters |= FreedRegisters; 4591 AvailableRegisters |= FreedRegisters;
4596 } 4592 }
4597 } 4593 }
4598 4594
4599 template <> void ConstantInteger32::emit(GlobalContext *Ctx) const { 4595 template <> void ConstantInteger32::emit(GlobalContext *Ctx) const {
4600 Ostream &Str = Ctx->getStrEmit(); 4596 Ostream &Str = Ctx->getStrEmit();
4601 Str << (int32_t)getValue(); 4597 Str << "$" << (int32_t)getValue();
4602 } 4598 }
4603 4599
4604 template <> void ConstantInteger64::emit(GlobalContext *) const { 4600 template <> void ConstantInteger64::emit(GlobalContext *) const {
4605 llvm_unreachable("Not expecting to emit 64-bit integers"); 4601 llvm_unreachable("Not expecting to emit 64-bit integers");
4606 } 4602 }
4607 4603
4608 template <> void ConstantFloat::emit(GlobalContext *Ctx) const { 4604 template <> void ConstantFloat::emit(GlobalContext *Ctx) const {
4609 Ostream &Str = Ctx->getStrEmit(); 4605 Ostream &Str = Ctx->getStrEmit();
4610 // It would be better to prefix with ".L$" instead of "L$", but 4606 // It would be better to prefix with ".L$" instead of "L$", but
4611 // llvm-mc doesn't parse "dword ptr [.L$foo]". 4607 // llvm-mc doesn't parse "dword ptr [.L$foo]".
jvoung (off chromium) 2014/10/31 22:12:18 adjust comment about "dword ptr" ?
Jim Stichnoth 2014/11/01 13:44:17 Even better, adjusted the code to use .L$ prefix.
4612 Str << "dword ptr [L$" << IceType_f32 << "$" << getPoolEntryID() << "]"; 4608 Str << "L$" << IceType_f32 << "$" << getPoolEntryID();
4613 } 4609 }
4614 4610
4615 template <> void ConstantDouble::emit(GlobalContext *Ctx) const { 4611 template <> void ConstantDouble::emit(GlobalContext *Ctx) const {
4616 Ostream &Str = Ctx->getStrEmit(); 4612 Ostream &Str = Ctx->getStrEmit();
4617 Str << "qword ptr [L$" << IceType_f64 << "$" << getPoolEntryID() << "]"; 4613 Str << "L$" << IceType_f64 << "$" << getPoolEntryID();
4618 } 4614 }
4619 4615
4620 void ConstantUndef::emit(GlobalContext *) const { 4616 void ConstantUndef::emit(GlobalContext *) const {
4621 llvm_unreachable("undef value encountered by emitter."); 4617 llvm_unreachable("undef value encountered by emitter.");
4622 } 4618 }
4623 4619
4624 TargetGlobalInitX8632::TargetGlobalInitX8632(GlobalContext *Ctx) 4620 TargetGlobalInitX8632::TargetGlobalInitX8632(GlobalContext *Ctx)
4625 : TargetGlobalInitLowering(Ctx) {} 4621 : TargetGlobalInitLowering(Ctx) {}
4626 4622
4627 void TargetGlobalInitX8632::lower(const VariableDeclaration &Var) { 4623 void TargetGlobalInitX8632::lower(const VariableDeclaration &Var) {
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
4711 } else if (IsConstant || IsExternal) 4707 } else if (IsConstant || IsExternal)
4712 Str << "\t.zero\t" << Size << "\n"; 4708 Str << "\t.zero\t" << Size << "\n";
4713 // Size is part of .comm. 4709 // Size is part of .comm.
4714 4710
4715 if (IsConstant || HasNonzeroInitializer || IsExternal) 4711 if (IsConstant || HasNonzeroInitializer || IsExternal)
4716 Str << "\t.size\t" << MangledName << ", " << Size << "\n"; 4712 Str << "\t.size\t" << MangledName << ", " << Size << "\n";
4717 // Size is part of .comm. 4713 // Size is part of .comm.
4718 } 4714 }
4719 4715
4720 } // end of namespace Ice 4716 } // end of namespace Ice
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698