Commit fddd4f20 by Nicolas Capens Committed by Nicolas Capens

Make Subzero opcode pointer constant

The static Opcode member variable of the template class which represents instructions was not a constant pointer, which allowed to accidentally change it. Bug: b/192890685 Change-Id: Ife9a172ef69c3ba831e2512d877862496eed091b Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/55448 Kokoro-Result: kokoro <noreply+kokoro@google.com> Tested-by: 's avatarNicolas Capens <nicolascapens@google.com> Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com>
parent 6f126055
...@@ -599,7 +599,7 @@ template <typename TraitsType> struct InstImpl { ...@@ -599,7 +599,7 @@ template <typename TraitsType> struct InstImpl {
} }
private: private:
static const char *Opcode; static const char *const Opcode;
static const GPREmitterOneOp Emitter; static const GPREmitterOneOp Emitter;
}; };
...@@ -682,7 +682,7 @@ template <typename TraitsType> struct InstImpl { ...@@ -682,7 +682,7 @@ template <typename TraitsType> struct InstImpl {
return nullptr; return nullptr;
} }
static const char *Opcode; static const char *const Opcode;
static const GPREmitterRegOp Emitter; static const GPREmitterRegOp Emitter;
}; };
...@@ -728,7 +728,7 @@ template <typename TraitsType> struct InstImpl { ...@@ -728,7 +728,7 @@ template <typename TraitsType> struct InstImpl {
this->addSource(Src); this->addSource(Src);
} }
static const char *Opcode; static const char *const Opcode;
static const XmmEmitterRegOp Emitter; static const XmmEmitterRegOp Emitter;
}; };
...@@ -771,7 +771,7 @@ template <typename TraitsType> struct InstImpl { ...@@ -771,7 +771,7 @@ template <typename TraitsType> struct InstImpl {
this->addSource(Source); this->addSource(Source);
} }
static const char *Opcode; static const char *const Opcode;
static const GPREmitterShiftOp Emitter; static const GPREmitterShiftOp Emitter;
}; };
...@@ -816,7 +816,7 @@ template <typename TraitsType> struct InstImpl { ...@@ -816,7 +816,7 @@ template <typename TraitsType> struct InstImpl {
this->addSource(Source); this->addSource(Source);
} }
static const char *Opcode; static const char *const Opcode;
static const GPREmitterRegOp Emitter; static const GPREmitterRegOp Emitter;
}; };
...@@ -857,7 +857,7 @@ template <typename TraitsType> struct InstImpl { ...@@ -857,7 +857,7 @@ template <typename TraitsType> struct InstImpl {
this->addSource(Src1); this->addSource(Src1);
} }
static const char *Opcode; static const char *const Opcode;
static const GPREmitterAddrOp Emitter; static const GPREmitterAddrOp Emitter;
}; };
...@@ -930,7 +930,8 @@ template <typename TraitsType> struct InstImpl { ...@@ -930,7 +930,8 @@ template <typename TraitsType> struct InstImpl {
} }
const Type ArithmeticTypeOverride; const Type ArithmeticTypeOverride;
static const char *Opcode;
static const char *const Opcode;
static const XmmEmitterRegOp Emitter; static const XmmEmitterRegOp Emitter;
}; };
...@@ -981,7 +982,7 @@ template <typename TraitsType> struct InstImpl { ...@@ -981,7 +982,7 @@ template <typename TraitsType> struct InstImpl {
this->addSource(Source); this->addSource(Source);
} }
static const char *Opcode; static const char *const Opcode;
static const XmmEmitterShiftOp Emitter; static const XmmEmitterShiftOp Emitter;
}; };
...@@ -1027,7 +1028,7 @@ template <typename TraitsType> struct InstImpl { ...@@ -1027,7 +1028,7 @@ template <typename TraitsType> struct InstImpl {
this->addSource(Source2); this->addSource(Source2);
} }
static const char *Opcode; static const char *const Opcode;
}; };
// Instructions of the form x := y op z // Instructions of the form x := y op z
...@@ -1073,7 +1074,7 @@ template <typename TraitsType> struct InstImpl { ...@@ -1073,7 +1074,7 @@ template <typename TraitsType> struct InstImpl {
this->addSource(Source1); this->addSource(Source1);
} }
static const char *Opcode; static const char *const Opcode;
}; };
/// Base class for assignment instructions /// Base class for assignment instructions
...@@ -1133,7 +1134,7 @@ template <typename TraitsType> struct InstImpl { ...@@ -1133,7 +1134,7 @@ template <typename TraitsType> struct InstImpl {
typeWidthInBytes(Source->getType()))); typeWidthInBytes(Source->getType())));
} }
static const char *Opcode; static const char *const Opcode;
}; };
class InstX86Bswap : public InstX86BaseInplaceopGPR<InstX86Base::Bswap> { class InstX86Bswap : public InstX86BaseInplaceopGPR<InstX86Base::Bswap> {
...@@ -3353,347 +3354,348 @@ template <typename TraitsType> struct Insts { ...@@ -3353,347 +3354,348 @@ template <typename TraitsType> struct Insts {
/* In-place ops */ \ /* In-place ops */ \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Bswap::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Bswap::Base::Opcode \
INIT_OR_NOT("bswap"); \ INIT_OR_NOT("bswap"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Neg::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Neg::Base::Opcode \
INIT_OR_NOT("neg"); \ INIT_OR_NOT("neg"); \
/* Unary ops */ \ /* Unary ops */ \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Bsf::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Bsf::Base::Opcode \
INIT_OR_NOT("bsf"); \ INIT_OR_NOT("bsf"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Bsr::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Bsr::Base::Opcode \
INIT_OR_NOT("bsr"); \ INIT_OR_NOT("bsr"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Lea::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Lea::Base::Opcode \
INIT_OR_NOT("lea"); \ INIT_OR_NOT("lea"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Movd::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Movd::Base::Opcode \
INIT_OR_NOT("movd"); \ INIT_OR_NOT("movd"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Movsx::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Movsx::Base::Opcode \
INIT_OR_NOT("movs"); \ INIT_OR_NOT("movs"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Movzx::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Movzx::Base::Opcode \
INIT_OR_NOT("movz"); \ INIT_OR_NOT("movz"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Sqrt::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Sqrt::Base::Opcode \
INIT_OR_NOT("sqrt"); \ INIT_OR_NOT("sqrt"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Cbwdq::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Cbwdq::Base::Opcode \
INIT_OR_NOT("cbw/cwd/cdq"); \ INIT_OR_NOT("cbw/cwd/cdq"); \
/* Mov-like ops */ \ /* Mov-like ops */ \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Mov::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Mov::Base::Opcode \
INIT_OR_NOT("mov"); \ INIT_OR_NOT("mov"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Movp::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Movp::Base::Opcode \
INIT_OR_NOT("movups"); \ INIT_OR_NOT("movups"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Movq::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Movq::Base::Opcode \
INIT_OR_NOT("movq"); \ INIT_OR_NOT("movq"); \
/* Binary ops */ \ /* Binary ops */ \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Add::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Add::Base::Opcode \
INIT_OR_NOT("add"); \ INIT_OR_NOT("add"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86AddRMW::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86AddRMW::Base::Opcode \
INIT_OR_NOT("add"); \ INIT_OR_NOT("add"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Addps::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Addps::Base::Opcode \
INIT_OR_NOT("add"); \ INIT_OR_NOT("add"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Adc::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Adc::Base::Opcode \
INIT_OR_NOT("adc"); \ INIT_OR_NOT("adc"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86AdcRMW::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86AdcRMW::Base::Opcode \
INIT_OR_NOT("adc"); \ INIT_OR_NOT("adc"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Addss::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Addss::Base::Opcode \
INIT_OR_NOT("add"); \ INIT_OR_NOT("add"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Andnps::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Andnps::Base::Opcode \
INIT_OR_NOT("andn"); \ INIT_OR_NOT("andn"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Andps::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Andps::Base::Opcode \
INIT_OR_NOT("and"); \ INIT_OR_NOT("and"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Maxss::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Maxss::Base::Opcode \
INIT_OR_NOT("max"); \ INIT_OR_NOT("max"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Minss::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Minss::Base::Opcode \
INIT_OR_NOT("min"); \ INIT_OR_NOT("min"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Maxps::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Maxps::Base::Opcode \
INIT_OR_NOT("max"); \ INIT_OR_NOT("max"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Minps::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Minps::Base::Opcode \
INIT_OR_NOT("min"); \ INIT_OR_NOT("min"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Padd::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Padd::Base::Opcode \
INIT_OR_NOT("padd"); \ INIT_OR_NOT("padd"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Padds::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Padds::Base::Opcode \
INIT_OR_NOT("padds"); \ INIT_OR_NOT("padds"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Paddus::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Paddus::Base::Opcode \
INIT_OR_NOT("paddus"); \ INIT_OR_NOT("paddus"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Sub::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Sub::Base::Opcode \
INIT_OR_NOT("sub"); \ INIT_OR_NOT("sub"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86SubRMW::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86SubRMW::Base::Opcode \
INIT_OR_NOT("sub"); \ INIT_OR_NOT("sub"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Subps::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Subps::Base::Opcode \
INIT_OR_NOT("sub"); \ INIT_OR_NOT("sub"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Subss::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Subss::Base::Opcode \
INIT_OR_NOT("sub"); \ INIT_OR_NOT("sub"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Sbb::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Sbb::Base::Opcode \
INIT_OR_NOT("sbb"); \ INIT_OR_NOT("sbb"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86SbbRMW::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86SbbRMW::Base::Opcode \
INIT_OR_NOT("sbb"); \ INIT_OR_NOT("sbb"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Psub::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Psub::Base::Opcode \
INIT_OR_NOT("psub"); \ INIT_OR_NOT("psub"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Psubs::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Psubs::Base::Opcode \
INIT_OR_NOT("psubs"); \ INIT_OR_NOT("psubs"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Psubus::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Psubus::Base::Opcode \
INIT_OR_NOT("psubus"); \ INIT_OR_NOT("psubus"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86And::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86And::Base::Opcode \
INIT_OR_NOT("and"); \ INIT_OR_NOT("and"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86AndRMW::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86AndRMW::Base::Opcode \
INIT_OR_NOT("and"); \ INIT_OR_NOT("and"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Pand::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Pand::Base::Opcode \
INIT_OR_NOT("pand"); \ INIT_OR_NOT("pand"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Pandn::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Pandn::Base::Opcode \
INIT_OR_NOT("pandn"); \ INIT_OR_NOT("pandn"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Or::Base::Opcode INIT_OR_NOT("or"); \ const char *const InstImpl<TraitsType>::InstX86Or::Base::Opcode \
INIT_OR_NOT("or"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Orps::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Orps::Base::Opcode \
INIT_OR_NOT("or"); \ INIT_OR_NOT("or"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86OrRMW::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86OrRMW::Base::Opcode \
INIT_OR_NOT("or"); \ INIT_OR_NOT("or"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Por::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Por::Base::Opcode \
INIT_OR_NOT("por"); \ INIT_OR_NOT("por"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Xor::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Xor::Base::Opcode \
INIT_OR_NOT("xor"); \ INIT_OR_NOT("xor"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Xorps::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Xorps::Base::Opcode \
INIT_OR_NOT("xor"); \ INIT_OR_NOT("xor"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86XorRMW::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86XorRMW::Base::Opcode \
INIT_OR_NOT("xor"); \ INIT_OR_NOT("xor"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Pxor::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Pxor::Base::Opcode \
INIT_OR_NOT("pxor"); \ INIT_OR_NOT("pxor"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Imul::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Imul::Base::Opcode \
INIT_OR_NOT("imul"); \ INIT_OR_NOT("imul"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86ImulImm::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86ImulImm::Base::Opcode \
INIT_OR_NOT("imul"); \ INIT_OR_NOT("imul"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Mulps::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Mulps::Base::Opcode \
INIT_OR_NOT("mul"); \ INIT_OR_NOT("mul"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Mulss::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Mulss::Base::Opcode \
INIT_OR_NOT("mul"); \ INIT_OR_NOT("mul"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Pmull::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Pmull::Base::Opcode \
INIT_OR_NOT("pmull"); \ INIT_OR_NOT("pmull"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Pmulhw::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Pmulhw::Base::Opcode \
INIT_OR_NOT("pmulhw"); \ INIT_OR_NOT("pmulhw"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Pmulhuw::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Pmulhuw::Base::Opcode \
INIT_OR_NOT("pmulhuw"); \ INIT_OR_NOT("pmulhuw"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Pmaddwd::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Pmaddwd::Base::Opcode \
INIT_OR_NOT("pmaddwd"); \ INIT_OR_NOT("pmaddwd"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Pmuludq::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Pmuludq::Base::Opcode \
INIT_OR_NOT("pmuludq"); \ INIT_OR_NOT("pmuludq"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Div::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Div::Base::Opcode \
INIT_OR_NOT("div"); \ INIT_OR_NOT("div"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Divps::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Divps::Base::Opcode \
INIT_OR_NOT("div"); \ INIT_OR_NOT("div"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Divss::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Divss::Base::Opcode \
INIT_OR_NOT("div"); \ INIT_OR_NOT("div"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Idiv::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Idiv::Base::Opcode \
INIT_OR_NOT("idiv"); \ INIT_OR_NOT("idiv"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Rol::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Rol::Base::Opcode \
INIT_OR_NOT("rol"); \ INIT_OR_NOT("rol"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Shl::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Shl::Base::Opcode \
INIT_OR_NOT("shl"); \ INIT_OR_NOT("shl"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Psll::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Psll::Base::Opcode \
INIT_OR_NOT("psll"); \ INIT_OR_NOT("psll"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Shr::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Shr::Base::Opcode \
INIT_OR_NOT("shr"); \ INIT_OR_NOT("shr"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Sar::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Sar::Base::Opcode \
INIT_OR_NOT("sar"); \ INIT_OR_NOT("sar"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Psra::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Psra::Base::Opcode \
INIT_OR_NOT("psra"); \ INIT_OR_NOT("psra"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Psrl::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Psrl::Base::Opcode \
INIT_OR_NOT("psrl"); \ INIT_OR_NOT("psrl"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Pcmpeq::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Pcmpeq::Base::Opcode \
INIT_OR_NOT("pcmpeq"); \ INIT_OR_NOT("pcmpeq"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Pcmpgt::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Pcmpgt::Base::Opcode \
INIT_OR_NOT("pcmpgt"); \ INIT_OR_NOT("pcmpgt"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86MovssRegs::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86MovssRegs::Base::Opcode \
INIT_OR_NOT("movss"); \ INIT_OR_NOT("movss"); \
/* Ternary ops */ \ /* Ternary ops */ \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Insertps::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Insertps::Base::Opcode \
INIT_OR_NOT("insertps"); \ INIT_OR_NOT("insertps"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Round::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Round::Base::Opcode \
INIT_OR_NOT("round"); \ INIT_OR_NOT("round"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Shufps::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Shufps::Base::Opcode \
INIT_OR_NOT("shufps"); \ INIT_OR_NOT("shufps"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Pinsr::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Pinsr::Base::Opcode \
INIT_OR_NOT("pinsr"); \ INIT_OR_NOT("pinsr"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Blendvps::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Blendvps::Base::Opcode \
INIT_OR_NOT("blendvps"); \ INIT_OR_NOT("blendvps"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Pblendvb::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Pblendvb::Base::Opcode \
INIT_OR_NOT("pblendvb"); \ INIT_OR_NOT("pblendvb"); \
/* Three address ops */ \ /* Three address ops */ \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Pextr::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Pextr::Base::Opcode \
INIT_OR_NOT("pextr"); \ INIT_OR_NOT("pextr"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Pshufd::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Pshufd::Base::Opcode \
INIT_OR_NOT("pshufd"); \ INIT_OR_NOT("pshufd"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Pshufb::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Pshufb::Base::Opcode \
INIT_OR_NOT("pshufb"); \ INIT_OR_NOT("pshufb"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Punpckl::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Punpckl::Base::Opcode \
INIT_OR_NOT("punpckl"); \ INIT_OR_NOT("punpckl"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Punpckh::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Punpckh::Base::Opcode \
INIT_OR_NOT("punpckh"); \ INIT_OR_NOT("punpckh"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Packss::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Packss::Base::Opcode \
INIT_OR_NOT("packss"); \ INIT_OR_NOT("packss"); \
template <> \ template <> \
template <> \ template <> \
const char *InstImpl<TraitsType>::InstX86Packus::Base::Opcode \ const char *const InstImpl<TraitsType>::InstX86Packus::Base::Opcode \
INIT_OR_NOT("packus"); \ INIT_OR_NOT("packus"); \
/* Inplace GPR ops */ \ /* Inplace GPR ops */ \
template <> \ template <> \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment