Chromium Code Reviews| 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 |