Index: src/IceTargetLoweringX8632.h |
diff --git a/src/IceTargetLoweringX8632.h b/src/IceTargetLoweringX8632.h |
index f1d8bb3565b25190569babf8f9f9ddf72ae80173..1f1d2cb0a2555507fc692c408b6044a93d40c8e4 100644 |
--- a/src/IceTargetLoweringX8632.h |
+++ b/src/IceTargetLoweringX8632.h |
@@ -23,10 +23,12 @@ |
#include "IceRegistersX8632.h" |
#include "IceTargetLowering.h" |
#include "IceTargetLoweringX8632Traits.h" |
+#include "IceTargetLoweringX86Base.h" |
namespace Ice { |
-class TargetX8632 : public TargetLowering { |
+class TargetX8632 final |
+ : public ::Ice::X86Internal::TargetX86Base<TargetX8632> { |
TargetX8632() = delete; |
TargetX8632(const TargetX8632 &) = delete; |
TargetX8632 &operator=(const TargetX8632 &) = delete; |
@@ -34,13 +36,20 @@ class TargetX8632 : public TargetLowering { |
public: |
using X86InstructionSet = X8632::Traits::InstructionSet; |
- static TargetX8632 *create(Cfg *Func); |
- virtual X8632::Traits::Address |
- stackVarToAsmOperand(const Variable *Var) const = 0; |
- virtual X86InstructionSet getInstructionSet() const = 0; |
+ static TargetX8632 *create(Cfg *Func) { return new TargetX8632(Func); } |
protected: |
- explicit TargetX8632(Cfg *Func) : TargetLowering(Func) {} |
+ Operand *createNaClReadTPSrcOperand() { |
+ Constant *Zero = Ctx->getConstantZero(IceType_i32); |
+ return Traits::X86OperandMem::create(Func, IceType_i32, nullptr, Zero, |
+ nullptr, 0, |
+ Traits::X86OperandMem::SegReg_GS); |
+ } |
+ |
+private: |
+ friend class ::Ice::X86Internal::TargetX86Base<TargetX8632>; |
+ |
+ explicit TargetX8632(Cfg *Func) : TargetX86Base(Func) {} |
}; |
class TargetDataX8632 final : public TargetDataLowering { |