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

Side by Side Diff: src/IceTargetLoweringX8664Traits.h

Issue 1537703002: Subzero. x8664. Resurrects the Target. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Beautifies the assembler. Created 5 years 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/IceTargetLoweringX8664Traits.h - x86-64 traits -*- C++ -*-=// 1 //===- subzero/src/IceTargetLoweringX8664Traits.h - x86-64 traits -*- C++ -*-=//
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 /// \file 10 /// \file
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 60
61 enum ScaleFactor { TIMES_1 = 0, TIMES_2 = 1, TIMES_4 = 2, TIMES_8 = 3 }; 61 enum ScaleFactor { TIMES_1 = 0, TIMES_2 = 1, TIMES_4 = 2, TIMES_8 = 3 };
62 62
63 using GPRRegister = ::Ice::RegX8664::GPRRegister; 63 using GPRRegister = ::Ice::RegX8664::GPRRegister;
64 using ByteRegister = ::Ice::RegX8664::ByteRegister; 64 using ByteRegister = ::Ice::RegX8664::ByteRegister;
65 using XmmRegister = ::Ice::RegX8664::XmmRegister; 65 using XmmRegister = ::Ice::RegX8664::XmmRegister;
66 66
67 using Cond = ::Ice::CondX8664; 67 using Cond = ::Ice::CondX8664;
68 68
69 using RegisterSet = ::Ice::RegX8664; 69 using RegisterSet = ::Ice::RegX8664;
70 static const SizeT StackPtr = RegX8664::Reg_rsp;
71 static const SizeT FramePtr = RegX8664::Reg_rbp;
70 static const GPRRegister Encoded_Reg_Accumulator = RegX8664::Encoded_Reg_eax; 72 static const GPRRegister Encoded_Reg_Accumulator = RegX8664::Encoded_Reg_eax;
71 static const GPRRegister Encoded_Reg_Counter = RegX8664::Encoded_Reg_ecx; 73 static const GPRRegister Encoded_Reg_Counter = RegX8664::Encoded_Reg_ecx;
72 static const FixupKind PcRelFixup = llvm::ELF::R_X86_64_PC32; 74 static const FixupKind PcRelFixup = llvm::ELF::R_X86_64_PC32;
73 static const FixupKind RelFixup = llvm::ELF::R_X86_64_32S; 75 static const FixupKind RelFixup = llvm::ELF::R_X86_64_32;
74 76
75 class Operand { 77 class Operand {
76 public: 78 public:
77 enum RexBits { 79 enum RexBits {
78 RexNone = 0x00, 80 RexNone = 0x00,
79 RexBase = 0x40, 81 RexBase = 0x40,
80 RexW = RexBase | (1 << 3), 82 RexW = RexBase | (1 << 3),
81 RexR = RexBase | (1 << 2), 83 RexR = RexBase | (1 << 2),
82 RexX = RexBase | (1 << 1), 84 RexX = RexBase | (1 << 1),
83 RexB = RexBase | (1 << 0), 85 RexB = RexBase | (1 << 0),
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 SetModRM(2, RegX8664::Encoded_Reg_esp); 250 SetModRM(2, RegX8664::Encoded_Reg_esp);
249 SetSIB(Scale, Index, Base); 251 SetSIB(Scale, Index, Base);
250 SetDisp32(Disp); 252 SetDisp32(Disp);
251 if (Fixup) 253 if (Fixup)
252 SetFixup(Fixup); 254 SetFixup(Fixup);
253 } 255 }
254 } 256 }
255 257
256 /// Generate a RIP-relative address expression on x86-64. 258 /// Generate a RIP-relative address expression on x86-64.
257 Address(RelocOffsetT Offset, AssemblerFixup *Fixup) { 259 Address(RelocOffsetT Offset, AssemblerFixup *Fixup) {
258 SetModRM(0, RegX8664::Encoded_Reg_ebp); 260 SetModRM(0x0, RegX8664::Encoded_Reg_esp);
261
262 static constexpr ScaleFactor Scale = TIMES_1;
263 SetSIB(Scale, RegX8664::Encoded_Reg_esp, RegX8664::Encoded_Reg_ebp);
259 // Use the Offset in the displacement for now. If we decide to process 264 // Use the Offset in the displacement for now. If we decide to process
260 // fixups later, we'll need to patch up the emitted displacement. 265 // fixups later, we'll need to patch up the emitted displacement.
261 SetDisp32(Offset); 266 SetDisp32(Offset);
262 if (Fixup) 267 if (Fixup)
263 SetFixup(Fixup); 268 SetFixup(Fixup);
264 } 269 }
265 270
266 static Address ofConstPool(Assembler *Asm, const Constant *Imm) { 271 static Address ofConstPool(Assembler *Asm, const Constant *Imm) {
267 // TODO(jpp): ??? 272 // TODO(jpp): ???
268 AssemblerFixup *Fixup = Asm->createFixup(RelFixup, Imm); 273 AssemblerFixup *Fixup = Asm->createFixup(RelFixup, Imm);
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after
554 if (!First) 559 if (!First)
555 Str << " "; 560 Str << " ";
556 First = false; 561 First = false;
557 Str << getRegName(Register); 562 Str << getRegName(Register);
558 } 563 }
559 Str << "}\n"; 564 Str << "}\n";
560 } 565 }
561 } 566 }
562 } 567 }
563 568
569 static int32_t getRaxOrDie() { return RegisterSet::Reg_rax; }
570
571 static int32_t getRdxOrDie() { return RegisterSet::Reg_rdx; }
572
564 /// The maximum number of arguments to pass in XMM registers 573 /// The maximum number of arguments to pass in XMM registers
565 static const uint32_t X86_MAX_XMM_ARGS = 8; 574 static const uint32_t X86_MAX_XMM_ARGS = 8;
566 /// The maximum number of arguments to pass in GPR registers 575 /// The maximum number of arguments to pass in GPR registers
567 static const uint32_t X86_MAX_GPR_ARGS = 6; 576 static const uint32_t X86_MAX_GPR_ARGS = 6;
568 /// The number of bits in a byte 577 /// The number of bits in a byte
569 static const uint32_t X86_CHAR_BIT = 8; 578 static const uint32_t X86_CHAR_BIT = 8;
570 /// Stack alignment. This is defined in IceTargetLoweringX8664.cpp because it 579 /// Stack alignment. This is defined in IceTargetLoweringX8664.cpp because it
571 /// is used as an argument to std::max(), and the default std::less<T> has an 580 /// is used as an argument to std::max(), and the default std::less<T> has an
572 /// operator(T const&, T const&) which requires this member to have an 581 /// operator(T const&, T const&) which requires this member to have an
573 /// address. 582 /// address.
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after
842 851
843 } // end of namespace X86Internal 852 } // end of namespace X86Internal
844 853
845 namespace X8664 { 854 namespace X8664 {
846 using Traits = ::Ice::X86Internal::MachineTraits<TargetX8664>; 855 using Traits = ::Ice::X86Internal::MachineTraits<TargetX8664>;
847 } // end of namespace X8664 856 } // end of namespace X8664
848 857
849 } // end of namespace Ice 858 } // end of namespace Ice
850 859
851 #endif // SUBZERO_SRC_ICETARGETLOWERINGX8664TRAITS_H 860 #endif // SUBZERO_SRC_ICETARGETLOWERINGX8664TRAITS_H
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698