| Index: src/IceInstX8664.cpp
|
| diff --git a/src/IceInstX8632.cpp b/src/IceInstX8664.cpp
|
| similarity index 63%
|
| copy from src/IceInstX8632.cpp
|
| copy to src/IceInstX8664.cpp
|
| index c6d6abf46b2a439395e3078e74a247c880687533..08fa36827ad0f02c041fbe7fe975f59996913948 100644
|
| --- a/src/IceInstX8632.cpp
|
| +++ b/src/IceInstX8664.cpp
|
| @@ -1,4 +1,4 @@
|
| -//===- subzero/src/IceInstX8632.cpp - X86-32 instruction implementation ---===//
|
| +//===- subzero/src/IceInstX8664.cpp - X86-64 instruction implementation ---===//
|
| //
|
| // The Subzero Code Generator
|
| //
|
| @@ -8,74 +8,62 @@
|
| //===----------------------------------------------------------------------===//
|
| ///
|
| /// \file
|
| -/// This file defines X8632 specific data related to X8632 Instructions and
|
| -/// Instruction traits. These are declared in the IceTargetLoweringX8632Traits.h
|
| +/// This file defines X8664 specific data related to X8664 Instructions and
|
| +/// Instruction traits. These are declared in the IceTargetLoweringX8664Traits.h
|
| /// header file.
|
| ///
|
| -/// This file also defines X8632 operand specific methods (dump and emit.)
|
| +/// This file also defines X8664 operand specific methods (dump and emit.)
|
| ///
|
| //===----------------------------------------------------------------------===//
|
| -#include "IceInstX8632.h"
|
| +#include "IceInstX8664.h"
|
|
|
| -#include "IceAssemblerX8632.h"
|
| +#include "IceAssemblerX8664.h"
|
| #include "IceCfg.h"
|
| #include "IceCfgNode.h"
|
| -#include "IceConditionCodesX8632.h"
|
| +#include "IceConditionCodesX8664.h"
|
| #include "IceInst.h"
|
| -#include "IceRegistersX8632.h"
|
| -#include "IceTargetLoweringX8632.h"
|
| +#include "IceRegistersX8664.h"
|
| +#include "IceTargetLoweringX8664.h"
|
| #include "IceOperand.h"
|
|
|
| namespace Ice {
|
|
|
| namespace X86Internal {
|
|
|
| -const MachineTraits<TargetX8632>::InstBrAttributesType
|
| - MachineTraits<TargetX8632>::InstBrAttributes[] = {
|
| +const MachineTraits<TargetX8664>::InstBrAttributesType
|
| + MachineTraits<TargetX8664>::InstBrAttributes[] = {
|
| #define X(tag, encode, opp, dump, emit) \
|
| - { X8632::Traits::Cond::opp, dump, emit } \
|
| + { X8664::Traits::Cond::opp, dump, emit } \
|
| ,
|
| - ICEINSTX8632BR_TABLE
|
| + ICEINSTX8664BR_TABLE
|
| #undef X
|
| };
|
|
|
| -const MachineTraits<TargetX8632>::InstCmppsAttributesType
|
| - MachineTraits<TargetX8632>::InstCmppsAttributes[] = {
|
| +const MachineTraits<TargetX8664>::InstCmppsAttributesType
|
| + MachineTraits<TargetX8664>::InstCmppsAttributes[] = {
|
| #define X(tag, emit) \
|
| { emit } \
|
| ,
|
| - ICEINSTX8632CMPPS_TABLE
|
| + ICEINSTX8664CMPPS_TABLE
|
| #undef X
|
| };
|
|
|
| -const MachineTraits<TargetX8632>::TypeAttributesType
|
| - MachineTraits<TargetX8632>::TypeAttributes[] = {
|
| +const MachineTraits<TargetX8664>::TypeAttributesType
|
| + MachineTraits<TargetX8664>::TypeAttributes[] = {
|
| #define X(tag, elementty, cvt, sdss, pack, width, fld) \
|
| { cvt, sdss, pack, width, fld } \
|
| ,
|
| - ICETYPEX8632_TABLE
|
| + ICETYPEX8664_TABLE
|
| #undef X
|
| };
|
|
|
| -const char *MachineTraits<TargetX8632>::InstSegmentRegNames[] = {
|
| -#define X(val, name, prefix) name,
|
| - SEG_REGX8632_TABLE
|
| -#undef X
|
| -};
|
| -
|
| -uint8_t MachineTraits<TargetX8632>::InstSegmentPrefixes[] = {
|
| -#define X(val, name, prefix) prefix,
|
| - SEG_REGX8632_TABLE
|
| -#undef X
|
| -};
|
| -
|
| -void MachineTraits<TargetX8632>::X86Operand::dump(const Cfg *,
|
| +void MachineTraits<TargetX8664>::X86Operand::dump(const Cfg *,
|
| Ostream &Str) const {
|
| if (BuildDefs::dump())
|
| - Str << "<OperandX8632>";
|
| + Str << "<OperandX8664>";
|
| }
|
|
|
| -MachineTraits<TargetX8632>::X86OperandMem::X86OperandMem(
|
| +MachineTraits<TargetX8664>::X86OperandMem::X86OperandMem(
|
| Cfg *Func, Type Ty, Variable *Base, Constant *Offset, Variable *Index,
|
| uint16_t Shift, SegmentRegisters SegmentReg)
|
| : X86Operand(kMem, Ty), Base(Base), Offset(Offset), Index(Index),
|
| @@ -98,14 +86,11 @@ MachineTraits<TargetX8632>::X86OperandMem::X86OperandMem(
|
| }
|
| }
|
|
|
| -void MachineTraits<TargetX8632>::X86OperandMem::emit(const Cfg *Func) const {
|
| +void MachineTraits<TargetX8664>::X86OperandMem::emit(const Cfg *Func) const {
|
| if (!BuildDefs::dump())
|
| return;
|
| Ostream &Str = Func->getContext()->getStrEmit();
|
| - if (SegmentReg != DefaultSegment) {
|
| - assert(SegmentReg >= 0 && SegmentReg < SegReg_NUM);
|
| - Str << "%" << X8632::Traits::InstSegmentRegNames[SegmentReg] << ":";
|
| - }
|
| + assert(SegmentReg == DefaultSegment);
|
| // Emit as Offset(Base,Index,1<<Shift).
|
| // Offset is emitted without the leading '$'.
|
| // Omit the (Base,Index,1<<Shift) part if Base==nullptr.
|
| @@ -134,14 +119,11 @@ void MachineTraits<TargetX8632>::X86OperandMem::emit(const Cfg *Func) const {
|
| }
|
| }
|
|
|
| -void MachineTraits<TargetX8632>::X86OperandMem::dump(const Cfg *Func,
|
| +void MachineTraits<TargetX8664>::X86OperandMem::dump(const Cfg *Func,
|
| Ostream &Str) const {
|
| if (!BuildDefs::dump())
|
| return;
|
| - if (SegmentReg != DefaultSegment) {
|
| - assert(SegmentReg >= 0 && SegmentReg < SegReg_NUM);
|
| - Str << X8632::Traits::InstSegmentRegNames[SegmentReg] << ":";
|
| - }
|
| + assert(SegmentReg == DefaultSegment);
|
| bool Dumped = false;
|
| Str << "[";
|
| if (Base) {
|
| @@ -186,17 +168,14 @@ void MachineTraits<TargetX8632>::X86OperandMem::dump(const Cfg *Func,
|
| Str << "]";
|
| }
|
|
|
| -void MachineTraits<TargetX8632>::X86OperandMem::emitSegmentOverride(
|
| - MachineTraits<TargetX8632>::Assembler *Asm) const {
|
| - if (SegmentReg != DefaultSegment) {
|
| - assert(SegmentReg >= 0 && SegmentReg < SegReg_NUM);
|
| - Asm->emitSegmentOverride(X8632::Traits::InstSegmentPrefixes[SegmentReg]);
|
| - }
|
| +void MachineTraits<TargetX8664>::X86OperandMem::emitSegmentOverride(
|
| + MachineTraits<TargetX8664>::Assembler *) const {
|
| + assert(SegmentReg == DefaultSegment);
|
| }
|
|
|
| -MachineTraits<TargetX8632>::Address
|
| -MachineTraits<TargetX8632>::X86OperandMem::toAsmAddress(
|
| - MachineTraits<TargetX8632>::Assembler *Asm) const {
|
| +MachineTraits<TargetX8664>::Address
|
| +MachineTraits<TargetX8664>::X86OperandMem::toAsmAddress(
|
| + MachineTraits<TargetX8664>::Assembler *Asm) const {
|
| int32_t Disp = 0;
|
| AssemblerFixup *Fixup = nullptr;
|
| // Determine the offset (is it relocatable?)
|
| @@ -214,40 +193,40 @@ MachineTraits<TargetX8632>::X86OperandMem::toAsmAddress(
|
|
|
| // Now convert to the various possible forms.
|
| if (getBase() && getIndex()) {
|
| - return X8632::Traits::Address(
|
| - RegX8632::getEncodedGPR(getBase()->getRegNum()),
|
| - RegX8632::getEncodedGPR(getIndex()->getRegNum()),
|
| - X8632::Traits::ScaleFactor(getShift()), Disp);
|
| + return X8664::Traits::Address(
|
| + RegX8664::getEncodedGPR(getBase()->getRegNum()),
|
| + RegX8664::getEncodedGPR(getIndex()->getRegNum()),
|
| + X8664::Traits::ScaleFactor(getShift()), Disp);
|
| } else if (getBase()) {
|
| - return X8632::Traits::Address(
|
| - RegX8632::getEncodedGPR(getBase()->getRegNum()), Disp);
|
| + return X8664::Traits::Address(
|
| + RegX8664::getEncodedGPR(getBase()->getRegNum()), Disp);
|
| } else if (getIndex()) {
|
| - return X8632::Traits::Address(
|
| - RegX8632::getEncodedGPR(getIndex()->getRegNum()),
|
| - X8632::Traits::ScaleFactor(getShift()), Disp);
|
| + return X8664::Traits::Address(
|
| + RegX8664::getEncodedGPR(getIndex()->getRegNum()),
|
| + X8664::Traits::ScaleFactor(getShift()), Disp);
|
| } else if (Fixup) {
|
| - return X8632::Traits::Address::Absolute(Disp, Fixup);
|
| + return X8664::Traits::Address::Absolute(Disp, Fixup);
|
| } else {
|
| - return X8632::Traits::Address::Absolute(Disp);
|
| + return X8664::Traits::Address::Absolute(Disp);
|
| }
|
| }
|
|
|
| -MachineTraits<TargetX8632>::Address
|
| -MachineTraits<TargetX8632>::VariableSplit::toAsmAddress(const Cfg *Func) const {
|
| +MachineTraits<TargetX8664>::Address
|
| +MachineTraits<TargetX8664>::VariableSplit::toAsmAddress(const Cfg *Func) const {
|
| assert(!Var->hasReg());
|
| const ::Ice::TargetLowering *Target = Func->getTarget();
|
| int32_t Offset =
|
| Var->getStackOffset() + Target->getStackAdjustment() + getOffset();
|
| - return X8632::Traits::Address(
|
| - RegX8632::getEncodedGPR(Target->getFrameOrStackReg()), Offset);
|
| + return X8664::Traits::Address(
|
| + RegX8664::getEncodedGPR(Target->getFrameOrStackReg()), Offset);
|
| }
|
|
|
| -void MachineTraits<TargetX8632>::VariableSplit::emit(const Cfg *Func) const {
|
| +void MachineTraits<TargetX8664>::VariableSplit::emit(const Cfg *Func) const {
|
| if (!BuildDefs::dump())
|
| return;
|
| Ostream &Str = Func->getContext()->getStrEmit();
|
| assert(!Var->hasReg());
|
| - // The following is copied/adapted from TargetX8632::emitVariable().
|
| + // The following is copied/adapted from TargetX8664::emitVariable().
|
| const ::Ice::TargetLowering *Target = Func->getTarget();
|
| const Type Ty = IceType_i32;
|
| int32_t Offset =
|
| @@ -257,7 +236,7 @@ void MachineTraits<TargetX8632>::VariableSplit::emit(const Cfg *Func) const {
|
| Str << "(%" << Target->getRegName(Target->getFrameOrStackReg(), Ty) << ")";
|
| }
|
|
|
| -void MachineTraits<TargetX8632>::VariableSplit::dump(const Cfg *Func,
|
| +void MachineTraits<TargetX8664>::VariableSplit::dump(const Cfg *Func,
|
| Ostream &Str) const {
|
| if (!BuildDefs::dump())
|
| return;
|
| @@ -280,4 +259,4 @@ void MachineTraits<TargetX8632>::VariableSplit::dump(const Cfg *Func,
|
| } // namespace X86Internal
|
| } // end of namespace Ice
|
|
|
| -X86INSTS_DEFINE_STATIC_DATA(TargetX8632);
|
| +X86INSTS_DEFINE_STATIC_DATA(TargetX8664);
|
|
|