OLD | NEW |
---|---|
1 //===- subzero/src/IceTargetLoweringX86Base.h - x86 lowering ----*- C++ -*-===// | 1 //===- subzero/src/IceTargetLoweringX86Base.h - x86 lowering ----*- 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 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
72 using SegmentRegisters = typename Traits::X86OperandMem::SegmentRegisters; | 72 using SegmentRegisters = typename Traits::X86OperandMem::SegmentRegisters; |
73 using SpillVariable = typename Traits::SpillVariable; | 73 using SpillVariable = typename Traits::SpillVariable; |
74 | 74 |
75 using InstX86Br = typename Traits::Insts::Br; | 75 using InstX86Br = typename Traits::Insts::Br; |
76 using InstX86FakeRMW = typename Traits::Insts::FakeRMW; | 76 using InstX86FakeRMW = typename Traits::Insts::FakeRMW; |
77 using InstX86Label = typename Traits::Insts::Label; | 77 using InstX86Label = typename Traits::Insts::Label; |
78 | 78 |
79 ~TargetX86Base() override = default; | 79 ~TargetX86Base() override = default; |
80 | 80 |
81 static void staticInit(GlobalContext *Ctx); | 81 static void staticInit(GlobalContext *Ctx); |
82 static TargetX86Base *create(Cfg *Func) { return new TargetX86Base(Func); } | 82 static TargetX86Base *create(Cfg *Func) { return new TargetX86Base(Func); } |
John
2016/03/09 16:33:29
instead of adding those three methods, create shou
| |
83 std::unique_ptr<::Ice::Assembler> createAssembler() const override { | |
84 return nullptr; | |
85 } | |
83 | 86 |
84 static FixupKind getPcRelFixup() { return PcRelFixup; } | 87 static FixupKind getPcRelFixup() { return PcRelFixup; } |
85 static FixupKind getAbsFixup() { return AbsFixup; } | 88 static FixupKind getAbsFixup() { return AbsFixup; } |
86 | 89 |
87 bool needSandboxing() const { return NeedSandboxing; } | 90 bool needSandboxing() const { return NeedSandboxing; } |
88 | 91 |
89 void translateOm1() override; | 92 void translateOm1() override; |
90 void translateO2() override; | 93 void translateO2() override; |
91 void doLoadOpt(); | 94 void doLoadOpt(); |
92 bool doBranchOpt(Inst *I, const CfgNode *NextNode) override; | 95 bool doBranchOpt(Inst *I, const CfgNode *NextNode) override; |
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
346 | 349 |
347 void emitGetIP(CfgNode *Node) { | 350 void emitGetIP(CfgNode *Node) { |
348 dispatchToConcrete(&Traits::ConcreteTarget::emitGetIP, std::move(Node)); | 351 dispatchToConcrete(&Traits::ConcreteTarget::emitGetIP, std::move(Node)); |
349 } | 352 } |
350 /// Emit a sandboxed return sequence rather than a return. | 353 /// Emit a sandboxed return sequence rather than a return. |
351 void emitSandboxedReturn() { | 354 void emitSandboxedReturn() { |
352 dispatchToConcrete(&Traits::ConcreteTarget::emitSandboxedReturn); | 355 dispatchToConcrete(&Traits::ConcreteTarget::emitSandboxedReturn); |
353 } | 356 } |
354 /// Emit just the call instruction (without argument or return variable | 357 /// Emit just the call instruction (without argument or return variable |
355 /// processing), sandboxing if needed. | 358 /// processing), sandboxing if needed. |
356 virtual Inst *emitCallToTarget(Operand *CallTarget, Variable *ReturnReg) = 0; | 359 virtual Inst *emitCallToTarget(Operand *CallTarget, Variable *ReturnReg) { |
360 (void)CallTarget; | |
361 (void)ReturnReg; | |
362 return nullptr; | |
363 } | |
357 /// Materialize the moves needed to return a value of the specified type. | 364 /// Materialize the moves needed to return a value of the specified type. |
358 virtual Variable *moveReturnValueToRegister(Operand *Value, | 365 virtual Variable *moveReturnValueToRegister(Operand *Value, Type ReturnType) { |
359 Type ReturnType) = 0; | 366 (void)Value; |
367 (void)ReturnType; | |
368 return nullptr; | |
369 } | |
360 | 370 |
361 /// Emit a jump table to the constant pool. | 371 /// Emit a jump table to the constant pool. |
362 void emitJumpTable(const Cfg *Func, | 372 void emitJumpTable(const Cfg *Func, |
363 const InstJumpTable *JumpTable) const override; | 373 const InstJumpTable *JumpTable) const override; |
364 | 374 |
365 /// Emit a fake use of esp to make sure esp stays alive for the entire | 375 /// Emit a fake use of esp to make sure esp stays alive for the entire |
366 /// function. Otherwise some esp adjustments get dead-code eliminated. | 376 /// function. Otherwise some esp adjustments get dead-code eliminated. |
367 void keepEspLiveAtExit() { | 377 void keepEspLiveAtExit() { |
368 Variable *esp = | 378 Variable *esp = |
369 Func->getTarget()->getPhysicalRegister(getStackReg(), Traits::WordType); | 379 Func->getTarget()->getPhysicalRegister(getStackReg(), Traits::WordType); |
(...skipping 751 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1121 | 1131 |
1122 explicit TargetHeaderX86(GlobalContext *Ctx) : TargetHeaderLowering(Ctx) {} | 1132 explicit TargetHeaderX86(GlobalContext *Ctx) : TargetHeaderLowering(Ctx) {} |
1123 }; | 1133 }; |
1124 | 1134 |
1125 } // end of namespace X86NAMESPACE | 1135 } // end of namespace X86NAMESPACE |
1126 } // end of namespace Ice | 1136 } // end of namespace Ice |
1127 | 1137 |
1128 #include "IceTargetLoweringX86BaseImpl.h" | 1138 #include "IceTargetLoweringX86BaseImpl.h" |
1129 | 1139 |
1130 #endif // SUBZERO_SRC_ICETARGETLOWERINGX86BASE_H | 1140 #endif // SUBZERO_SRC_ICETARGETLOWERINGX86BASE_H |
OLD | NEW |