Define constant static template members as constexpr

The static Opcode and Emitter members of the InstImpl<> template class
have constant values, so we can make them constexpr and define them in
the header.

Note that we can't make them constexpr in the template class definition,
since that requires in-class initialization, and GCC considers the
definition of the static members of the concrete instantiations to be
doing duplicate initialization (this might be a compiler bug, since
Clang and MSVC allow it). Fortunately, constexpr is a specifier, which
implies const, a qualifier, meaning a definition which is constexpr is
compatible with a declaration which is only const. Declaring them as
const in the class has the added benefit that if we instantiated the
template without providing initialization of these members, we'd get a
compilation error instead of using the in-class initializer of the
primary template.

Note also that defining these static members in the header doesn't lead
to multiple definition errors because in C++17, static constexpr member
variables are implicitly inline.

Lastly, constexpr applied to a pointer affects the pointer value itself,
not the pointee, so "constexpr const char *s" is a constexpr pointer to
const characters. Thus while constexpr implies const, the second const
isn't redundant because it applies to the pointee type.

Bug: b/192890685
Change-Id: Ia7c6a889d08007d42393979f3b08bcfc5fa8c614
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/55428
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Tested-by: Nicolas Capens <nicolascapens@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
diff --git a/third_party/subzero/src/IceInstX8632.cpp b/third_party/subzero/src/IceInstX8632.cpp
index 136858c..aba0a27 100644
--- a/third_party/subzero/src/IceInstX8632.cpp
+++ b/third_party/subzero/src/IceInstX8632.cpp
@@ -346,5 +346,3 @@
 
 } // namespace X8632
 } // end of namespace Ice
-
-X86INSTS_DEFINE_STATIC_DATA(X8632, X8632::Traits)
diff --git a/third_party/subzero/src/IceInstX8632.h b/third_party/subzero/src/IceInstX8632.h
index 56cc7ec..af6faef 100644
--- a/third_party/subzero/src/IceInstX8632.h
+++ b/third_party/subzero/src/IceInstX8632.h
@@ -34,6 +34,6 @@
 #include "IceOperand.h"
 #include "IceTargetLoweringX8632Traits.h"
 
-X86INSTS_DECLARE_STATIC_DATA(X8632, X8632::Traits)
+X86INSTS_DEFINE_STATIC_DATA(X8632, X8632::Traits)
 
 #endif // SUBZERO_SRC_ICEINSTX8632_H
diff --git a/third_party/subzero/src/IceInstX8664.cpp b/third_party/subzero/src/IceInstX8664.cpp
index 1377ae8..da9e9f6 100644
--- a/third_party/subzero/src/IceInstX8664.cpp
+++ b/third_party/subzero/src/IceInstX8664.cpp
@@ -355,5 +355,3 @@
 
 } // namespace X8664
 } // end of namespace Ice
-
-X86INSTS_DEFINE_STATIC_DATA(X8664, X8664::Traits)
diff --git a/third_party/subzero/src/IceInstX8664.h b/third_party/subzero/src/IceInstX8664.h
index 1c5fd79..070c272 100644
--- a/third_party/subzero/src/IceInstX8664.h
+++ b/third_party/subzero/src/IceInstX8664.h
@@ -32,6 +32,6 @@
 #include "IceOperand.h"
 #include "IceTargetLoweringX8664Traits.h"
 
-X86INSTS_DECLARE_STATIC_DATA(X8664, X8664::Traits)
+X86INSTS_DEFINE_STATIC_DATA(X8664, X8664::Traits)
 
 #endif // SUBZERO_SRC_ICEINSTX8664_H
diff --git a/third_party/subzero/src/IceInstX86Base.h b/third_party/subzero/src/IceInstX86Base.h
index ab8bc7c..1a13358 100644
--- a/third_party/subzero/src/IceInstX86Base.h
+++ b/third_party/subzero/src/IceInstX86Base.h
@@ -3327,822 +3327,799 @@
 /// emitters). Each X86 target needs to declare and define all of these, so the
 /// macros below are provided so that, if something changes, all X86
 /// targets will be updated automatically.
-#define ICE_INIT(...) = {__VA_ARGS__}
-#define ICE_NO_INIT(...)
-
 #define X86INSTS_DEFINE_STATIC_DATA(X86NAMESPACE, TraitsType)                  \
-  X86INSTS_STATIC_DATA(X86NAMESPACE, TraitsType, ICE_INIT)
-
-// The -Wundefined-var-template warning requires to forward-declare static
-// members of template class specializations. Note that "An explicit
-// specialization of a static data member of a template is a definition if the
-// declaration includes an initializer; otherwise, it is a declaration."
-#if defined(__clang__)
-#define X86INSTS_DECLARE_STATIC_DATA(X86NAMESPACE, TraitsType)                 \
-  X86INSTS_STATIC_DATA(X86NAMESPACE, TraitsType, ICE_NO_INIT)
-#else
-// Visual Studio has a bug which treats these declarations as definitions,
-// leading to multiple definition errors. Since we only enable
-// -Wundefined-var-template for Clang, omit these declarations on other
-// compilers.
-#define X86INSTS_DECLARE_STATIC_DATA(X86NAMESPACE, TraitsType)
-#endif
-
-#define X86INSTS_STATIC_DATA(X86NAMESPACE, TraitsType, INIT_OR_NOT)            \
   namespace Ice {                                                              \
   namespace X86NAMESPACE {                                                     \
   /* In-place ops */                                                           \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Bswap::Base::Opcode           \
-      INIT_OR_NOT("bswap");                                                    \
+  constexpr const char *InstImpl<TraitsType>::InstX86Bswap::Base::Opcode =     \
+      "bswap";                                                                 \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Neg::Base::Opcode             \
-      INIT_OR_NOT("neg");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86Neg::Base::Opcode =       \
+      "neg";                                                                   \
   /* Unary ops */                                                              \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Bsf::Base::Opcode             \
-      INIT_OR_NOT("bsf");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86Bsf::Base::Opcode =       \
+      "bsf";                                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Bsr::Base::Opcode             \
-      INIT_OR_NOT("bsr");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86Bsr::Base::Opcode =       \
+      "bsr";                                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Lea::Base::Opcode             \
-      INIT_OR_NOT("lea");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86Lea::Base::Opcode =       \
+      "lea";                                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Movd::Base::Opcode            \
-      INIT_OR_NOT("movd");                                                     \
+  constexpr const char *InstImpl<TraitsType>::InstX86Movd::Base::Opcode =      \
+      "movd";                                                                  \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Movsx::Base::Opcode           \
-      INIT_OR_NOT("movs");                                                     \
+  constexpr const char *InstImpl<TraitsType>::InstX86Movsx::Base::Opcode =     \
+      "movs";                                                                  \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Movzx::Base::Opcode           \
-      INIT_OR_NOT("movz");                                                     \
+  constexpr const char *InstImpl<TraitsType>::InstX86Movzx::Base::Opcode =     \
+      "movz";                                                                  \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Sqrt::Base::Opcode            \
-      INIT_OR_NOT("sqrt");                                                     \
+  constexpr const char *InstImpl<TraitsType>::InstX86Sqrt::Base::Opcode =      \
+      "sqrt";                                                                  \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Cbwdq::Base::Opcode           \
-      INIT_OR_NOT("cbw/cwd/cdq");                                              \
+  constexpr const char *InstImpl<TraitsType>::InstX86Cbwdq::Base::Opcode =     \
+      "cbw/cwd/cdq";                                                           \
   /* Mov-like ops */                                                           \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Mov::Base::Opcode             \
-      INIT_OR_NOT("mov");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86Mov::Base::Opcode =       \
+      "mov";                                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Movp::Base::Opcode            \
-      INIT_OR_NOT("movups");                                                   \
+  constexpr const char *InstImpl<TraitsType>::InstX86Movp::Base::Opcode =      \
+      "movups";                                                                \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Movq::Base::Opcode            \
-      INIT_OR_NOT("movq");                                                     \
+  constexpr const char *InstImpl<TraitsType>::InstX86Movq::Base::Opcode =      \
+      "movq";                                                                  \
   /* Binary ops */                                                             \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Add::Base::Opcode             \
-      INIT_OR_NOT("add");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86Add::Base::Opcode =       \
+      "add";                                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86AddRMW::Base::Opcode          \
-      INIT_OR_NOT("add");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86AddRMW::Base::Opcode =    \
+      "add";                                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Addps::Base::Opcode           \
-      INIT_OR_NOT("add");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86Addps::Base::Opcode =     \
+      "add";                                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Adc::Base::Opcode             \
-      INIT_OR_NOT("adc");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86Adc::Base::Opcode =       \
+      "adc";                                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86AdcRMW::Base::Opcode          \
-      INIT_OR_NOT("adc");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86AdcRMW::Base::Opcode =    \
+      "adc";                                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Addss::Base::Opcode           \
-      INIT_OR_NOT("add");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86Addss::Base::Opcode =     \
+      "add";                                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Andnps::Base::Opcode          \
-      INIT_OR_NOT("andn");                                                     \
+  constexpr const char *InstImpl<TraitsType>::InstX86Andnps::Base::Opcode =    \
+      "andn";                                                                  \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Andps::Base::Opcode           \
-      INIT_OR_NOT("and");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86Andps::Base::Opcode =     \
+      "and";                                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Maxss::Base::Opcode           \
-      INIT_OR_NOT("max");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86Maxss::Base::Opcode =     \
+      "max";                                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Minss::Base::Opcode           \
-      INIT_OR_NOT("min");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86Minss::Base::Opcode =     \
+      "min";                                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Maxps::Base::Opcode           \
-      INIT_OR_NOT("max");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86Maxps::Base::Opcode =     \
+      "max";                                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Minps::Base::Opcode           \
-      INIT_OR_NOT("min");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86Minps::Base::Opcode =     \
+      "min";                                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Padd::Base::Opcode            \
-      INIT_OR_NOT("padd");                                                     \
+  constexpr const char *InstImpl<TraitsType>::InstX86Padd::Base::Opcode =      \
+      "padd";                                                                  \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Padds::Base::Opcode           \
-      INIT_OR_NOT("padds");                                                    \
+  constexpr const char *InstImpl<TraitsType>::InstX86Padds::Base::Opcode =     \
+      "padds";                                                                 \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Paddus::Base::Opcode          \
-      INIT_OR_NOT("paddus");                                                   \
+  constexpr const char *InstImpl<TraitsType>::InstX86Paddus::Base::Opcode =    \
+      "paddus";                                                                \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Sub::Base::Opcode             \
-      INIT_OR_NOT("sub");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86Sub::Base::Opcode =       \
+      "sub";                                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86SubRMW::Base::Opcode          \
-      INIT_OR_NOT("sub");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86SubRMW::Base::Opcode =    \
+      "sub";                                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Subps::Base::Opcode           \
-      INIT_OR_NOT("sub");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86Subps::Base::Opcode =     \
+      "sub";                                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Subss::Base::Opcode           \
-      INIT_OR_NOT("sub");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86Subss::Base::Opcode =     \
+      "sub";                                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Sbb::Base::Opcode             \
-      INIT_OR_NOT("sbb");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86Sbb::Base::Opcode =       \
+      "sbb";                                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86SbbRMW::Base::Opcode          \
-      INIT_OR_NOT("sbb");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86SbbRMW::Base::Opcode =    \
+      "sbb";                                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Psub::Base::Opcode            \
-      INIT_OR_NOT("psub");                                                     \
+  constexpr const char *InstImpl<TraitsType>::InstX86Psub::Base::Opcode =      \
+      "psub";                                                                  \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Psubs::Base::Opcode           \
-      INIT_OR_NOT("psubs");                                                    \
+  constexpr const char *InstImpl<TraitsType>::InstX86Psubs::Base::Opcode =     \
+      "psubs";                                                                 \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Psubus::Base::Opcode          \
-      INIT_OR_NOT("psubus");                                                   \
+  constexpr const char *InstImpl<TraitsType>::InstX86Psubus::Base::Opcode =    \
+      "psubus";                                                                \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86And::Base::Opcode             \
-      INIT_OR_NOT("and");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86And::Base::Opcode =       \
+      "and";                                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86AndRMW::Base::Opcode          \
-      INIT_OR_NOT("and");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86AndRMW::Base::Opcode =    \
+      "and";                                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Pand::Base::Opcode            \
-      INIT_OR_NOT("pand");                                                     \
+  constexpr const char *InstImpl<TraitsType>::InstX86Pand::Base::Opcode =      \
+      "pand";                                                                  \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Pandn::Base::Opcode           \
-      INIT_OR_NOT("pandn");                                                    \
+  constexpr const char *InstImpl<TraitsType>::InstX86Pandn::Base::Opcode =     \
+      "pandn";                                                                 \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Or::Base::Opcode              \
-      INIT_OR_NOT("or");                                                       \
+  constexpr const char *InstImpl<TraitsType>::InstX86Or::Base::Opcode = "or";  \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Orps::Base::Opcode            \
-      INIT_OR_NOT("or");                                                       \
+  constexpr const char *InstImpl<TraitsType>::InstX86Orps::Base::Opcode =      \
+      "or";                                                                    \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86OrRMW::Base::Opcode           \
-      INIT_OR_NOT("or");                                                       \
+  constexpr const char *InstImpl<TraitsType>::InstX86OrRMW::Base::Opcode =     \
+      "or";                                                                    \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Por::Base::Opcode             \
-      INIT_OR_NOT("por");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86Por::Base::Opcode =       \
+      "por";                                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Xor::Base::Opcode             \
-      INIT_OR_NOT("xor");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86Xor::Base::Opcode =       \
+      "xor";                                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Xorps::Base::Opcode           \
-      INIT_OR_NOT("xor");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86Xorps::Base::Opcode =     \
+      "xor";                                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86XorRMW::Base::Opcode          \
-      INIT_OR_NOT("xor");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86XorRMW::Base::Opcode =    \
+      "xor";                                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Pxor::Base::Opcode            \
-      INIT_OR_NOT("pxor");                                                     \
+  constexpr const char *InstImpl<TraitsType>::InstX86Pxor::Base::Opcode =      \
+      "pxor";                                                                  \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Imul::Base::Opcode            \
-      INIT_OR_NOT("imul");                                                     \
+  constexpr const char *InstImpl<TraitsType>::InstX86Imul::Base::Opcode =      \
+      "imul";                                                                  \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86ImulImm::Base::Opcode         \
-      INIT_OR_NOT("imul");                                                     \
+  constexpr const char *InstImpl<TraitsType>::InstX86ImulImm::Base::Opcode =   \
+      "imul";                                                                  \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Mulps::Base::Opcode           \
-      INIT_OR_NOT("mul");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86Mulps::Base::Opcode =     \
+      "mul";                                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Mulss::Base::Opcode           \
-      INIT_OR_NOT("mul");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86Mulss::Base::Opcode =     \
+      "mul";                                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Pmull::Base::Opcode           \
-      INIT_OR_NOT("pmull");                                                    \
+  constexpr const char *InstImpl<TraitsType>::InstX86Pmull::Base::Opcode =     \
+      "pmull";                                                                 \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Pmulhw::Base::Opcode          \
-      INIT_OR_NOT("pmulhw");                                                   \
+  constexpr const char *InstImpl<TraitsType>::InstX86Pmulhw::Base::Opcode =    \
+      "pmulhw";                                                                \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Pmulhuw::Base::Opcode         \
-      INIT_OR_NOT("pmulhuw");                                                  \
+  constexpr const char *InstImpl<TraitsType>::InstX86Pmulhuw::Base::Opcode =   \
+      "pmulhuw";                                                               \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Pmaddwd::Base::Opcode         \
-      INIT_OR_NOT("pmaddwd");                                                  \
+  constexpr const char *InstImpl<TraitsType>::InstX86Pmaddwd::Base::Opcode =   \
+      "pmaddwd";                                                               \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Pmuludq::Base::Opcode         \
-      INIT_OR_NOT("pmuludq");                                                  \
+  constexpr const char *InstImpl<TraitsType>::InstX86Pmuludq::Base::Opcode =   \
+      "pmuludq";                                                               \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Div::Base::Opcode             \
-      INIT_OR_NOT("div");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86Div::Base::Opcode =       \
+      "div";                                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Divps::Base::Opcode           \
-      INIT_OR_NOT("div");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86Divps::Base::Opcode =     \
+      "div";                                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Divss::Base::Opcode           \
-      INIT_OR_NOT("div");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86Divss::Base::Opcode =     \
+      "div";                                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Idiv::Base::Opcode            \
-      INIT_OR_NOT("idiv");                                                     \
+  constexpr const char *InstImpl<TraitsType>::InstX86Idiv::Base::Opcode =      \
+      "idiv";                                                                  \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Rol::Base::Opcode             \
-      INIT_OR_NOT("rol");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86Rol::Base::Opcode =       \
+      "rol";                                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Shl::Base::Opcode             \
-      INIT_OR_NOT("shl");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86Shl::Base::Opcode =       \
+      "shl";                                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Psll::Base::Opcode            \
-      INIT_OR_NOT("psll");                                                     \
+  constexpr const char *InstImpl<TraitsType>::InstX86Psll::Base::Opcode =      \
+      "psll";                                                                  \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Shr::Base::Opcode             \
-      INIT_OR_NOT("shr");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86Shr::Base::Opcode =       \
+      "shr";                                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Sar::Base::Opcode             \
-      INIT_OR_NOT("sar");                                                      \
+  constexpr const char *InstImpl<TraitsType>::InstX86Sar::Base::Opcode =       \
+      "sar";                                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Psra::Base::Opcode            \
-      INIT_OR_NOT("psra");                                                     \
+  constexpr const char *InstImpl<TraitsType>::InstX86Psra::Base::Opcode =      \
+      "psra";                                                                  \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Psrl::Base::Opcode            \
-      INIT_OR_NOT("psrl");                                                     \
+  constexpr const char *InstImpl<TraitsType>::InstX86Psrl::Base::Opcode =      \
+      "psrl";                                                                  \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Pcmpeq::Base::Opcode          \
-      INIT_OR_NOT("pcmpeq");                                                   \
+  constexpr const char *InstImpl<TraitsType>::InstX86Pcmpeq::Base::Opcode =    \
+      "pcmpeq";                                                                \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Pcmpgt::Base::Opcode          \
-      INIT_OR_NOT("pcmpgt");                                                   \
+  constexpr const char *InstImpl<TraitsType>::InstX86Pcmpgt::Base::Opcode =    \
+      "pcmpgt";                                                                \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86MovssRegs::Base::Opcode       \
-      INIT_OR_NOT("movss");                                                    \
+  constexpr const char *InstImpl<TraitsType>::InstX86MovssRegs::Base::Opcode = \
+      "movss";                                                                 \
   /* Ternary ops */                                                            \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Insertps::Base::Opcode        \
-      INIT_OR_NOT("insertps");                                                 \
+  constexpr const char *InstImpl<TraitsType>::InstX86Insertps::Base::Opcode =  \
+      "insertps";                                                              \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Round::Base::Opcode           \
-      INIT_OR_NOT("round");                                                    \
+  constexpr const char *InstImpl<TraitsType>::InstX86Round::Base::Opcode =     \
+      "round";                                                                 \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Shufps::Base::Opcode          \
-      INIT_OR_NOT("shufps");                                                   \
+  constexpr const char *InstImpl<TraitsType>::InstX86Shufps::Base::Opcode =    \
+      "shufps";                                                                \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Pinsr::Base::Opcode           \
-      INIT_OR_NOT("pinsr");                                                    \
+  constexpr const char *InstImpl<TraitsType>::InstX86Pinsr::Base::Opcode =     \
+      "pinsr";                                                                 \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Blendvps::Base::Opcode        \
-      INIT_OR_NOT("blendvps");                                                 \
+  constexpr const char *InstImpl<TraitsType>::InstX86Blendvps::Base::Opcode =  \
+      "blendvps";                                                              \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Pblendvb::Base::Opcode        \
-      INIT_OR_NOT("pblendvb");                                                 \
+  constexpr const char *InstImpl<TraitsType>::InstX86Pblendvb::Base::Opcode =  \
+      "pblendvb";                                                              \
   /* Three address ops */                                                      \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Pextr::Base::Opcode           \
-      INIT_OR_NOT("pextr");                                                    \
+  constexpr const char *InstImpl<TraitsType>::InstX86Pextr::Base::Opcode =     \
+      "pextr";                                                                 \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Pshufd::Base::Opcode          \
-      INIT_OR_NOT("pshufd");                                                   \
+  constexpr const char *InstImpl<TraitsType>::InstX86Pshufd::Base::Opcode =    \
+      "pshufd";                                                                \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Pshufb::Base::Opcode          \
-      INIT_OR_NOT("pshufb");                                                   \
+  constexpr const char *InstImpl<TraitsType>::InstX86Pshufb::Base::Opcode =    \
+      "pshufb";                                                                \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Punpckl::Base::Opcode         \
-      INIT_OR_NOT("punpckl");                                                  \
+  constexpr const char *InstImpl<TraitsType>::InstX86Punpckl::Base::Opcode =   \
+      "punpckl";                                                               \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Punpckh::Base::Opcode         \
-      INIT_OR_NOT("punpckh");                                                  \
+  constexpr const char *InstImpl<TraitsType>::InstX86Punpckh::Base::Opcode =   \
+      "punpckh";                                                               \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Packss::Base::Opcode          \
-      INIT_OR_NOT("packss");                                                   \
+  constexpr const char *InstImpl<TraitsType>::InstX86Packss::Base::Opcode =    \
+      "packss";                                                                \
   template <>                                                                  \
   template <>                                                                  \
-  const char *const InstImpl<TraitsType>::InstX86Packus::Base::Opcode          \
-      INIT_OR_NOT("packus");                                                   \
+  constexpr const char *InstImpl<TraitsType>::InstX86Packus::Base::Opcode =    \
+      "packus";                                                                \
   /* Inplace GPR ops */                                                        \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::GPREmitterOneOp                       \
-      InstImpl<TraitsType>::InstX86Bswap::Base::Emitter                        \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::bswap,                 \
-                      nullptr /* only a reg form exists */                     \
-          );                                                                   \
+  constexpr InstImpl<TraitsType>::Assembler::GPREmitterOneOp                   \
+      InstImpl<TraitsType>::InstX86Bswap::Base::Emitter = {                    \
+          &InstImpl<TraitsType>::Assembler::bswap,                             \
+          nullptr /* only a reg form exists */                                 \
+  };                                                                           \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::GPREmitterOneOp                       \
-      InstImpl<TraitsType>::InstX86Neg::Base::Emitter                          \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::neg,                   \
-                      &InstImpl<TraitsType>::Assembler::neg);                  \
+  constexpr InstImpl<TraitsType>::Assembler::GPREmitterOneOp                   \
+      InstImpl<TraitsType>::InstX86Neg::Base::Emitter = {                      \
+          &InstImpl<TraitsType>::Assembler::neg,                               \
+          &InstImpl<TraitsType>::Assembler::neg};                              \
                                                                                \
   /* Unary GPR ops */                                                          \
   template <>                                                                  \
   template <> /* uses specialized emitter. */                                  \
-  const InstImpl<TraitsType>::Assembler::GPREmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Cbwdq::Base::Emitter                        \
-          INIT_OR_NOT(nullptr, nullptr, nullptr);                              \
+  constexpr InstImpl<TraitsType>::Assembler::GPREmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Cbwdq::Base::Emitter = {nullptr, nullptr,   \
+                                                           nullptr};           \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::GPREmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Bsf::Base::Emitter                          \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::bsf,                   \
-                      &InstImpl<TraitsType>::Assembler::bsf, nullptr);         \
+  constexpr InstImpl<TraitsType>::Assembler::GPREmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Bsf::Base::Emitter = {                      \
+          &InstImpl<TraitsType>::Assembler::bsf,                               \
+          &InstImpl<TraitsType>::Assembler::bsf, nullptr};                     \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::GPREmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Bsr::Base::Emitter                          \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::bsr,                   \
-                      &InstImpl<TraitsType>::Assembler::bsr, nullptr);         \
+  constexpr InstImpl<TraitsType>::Assembler::GPREmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Bsr::Base::Emitter = {                      \
+          &InstImpl<TraitsType>::Assembler::bsr,                               \
+          &InstImpl<TraitsType>::Assembler::bsr, nullptr};                     \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::GPREmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Lea::Base::Emitter                          \
-          INIT_OR_NOT(/* reg/reg and reg/imm are illegal */ nullptr,           \
-                      &InstImpl<TraitsType>::Assembler::lea, nullptr);         \
+  constexpr InstImpl<TraitsType>::Assembler::GPREmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Lea::Base::Emitter = {                      \
+          /* reg/reg and reg/imm are illegal */ nullptr,                       \
+          &InstImpl<TraitsType>::Assembler::lea, nullptr};                     \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::GPREmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Movsx::Base::Emitter                        \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::movsx,                 \
-                      &InstImpl<TraitsType>::Assembler::movsx, nullptr);       \
+  constexpr InstImpl<TraitsType>::Assembler::GPREmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Movsx::Base::Emitter = {                    \
+          &InstImpl<TraitsType>::Assembler::movsx,                             \
+          &InstImpl<TraitsType>::Assembler::movsx, nullptr};                   \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::GPREmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Movzx::Base::Emitter                        \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::movzx,                 \
-                      &InstImpl<TraitsType>::Assembler::movzx, nullptr);       \
+  constexpr InstImpl<TraitsType>::Assembler::GPREmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Movzx::Base::Emitter = {                    \
+          &InstImpl<TraitsType>::Assembler::movzx,                             \
+          &InstImpl<TraitsType>::Assembler::movzx, nullptr};                   \
                                                                                \
   /* Unary XMM ops */                                                          \
   template <>                                                                  \
   template <> /* uses specialized emitter. */                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Movd::Base::Emitter INIT_OR_NOT(nullptr,    \
-                                                                   nullptr);   \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Movd::Base::Emitter = {nullptr, nullptr};   \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Sqrt::Base::Emitter                         \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::sqrt,                  \
-                      &InstImpl<TraitsType>::Assembler::sqrt);                 \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Sqrt::Base::Emitter = {                     \
+          &InstImpl<TraitsType>::Assembler::sqrt,                              \
+          &InstImpl<TraitsType>::Assembler::sqrt};                             \
                                                                                \
   /* Binary GPR ops */                                                         \
   template <>                                                                  \
   template <> /* uses specialized emitter. */                                  \
-  const InstImpl<TraitsType>::Assembler::GPREmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Imul::Base::Emitter                         \
-          INIT_OR_NOT(nullptr, nullptr, nullptr);                              \
+  constexpr InstImpl<TraitsType>::Assembler::GPREmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Imul::Base::Emitter = {nullptr, nullptr,    \
+                                                          nullptr};            \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::GPREmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Add::Base::Emitter                          \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::add,                   \
-                      &InstImpl<TraitsType>::Assembler::add,                   \
-                      &InstImpl<TraitsType>::Assembler::add);                  \
+  constexpr InstImpl<TraitsType>::Assembler::GPREmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Add::Base::Emitter = {                      \
+          &InstImpl<TraitsType>::Assembler::add,                               \
+          &InstImpl<TraitsType>::Assembler::add,                               \
+          &InstImpl<TraitsType>::Assembler::add};                              \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::GPREmitterAddrOp                      \
-      InstImpl<TraitsType>::InstX86AddRMW::Base::Emitter                       \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::add,                   \
-                      &InstImpl<TraitsType>::Assembler::add);                  \
+  constexpr InstImpl<TraitsType>::Assembler::GPREmitterAddrOp                  \
+      InstImpl<TraitsType>::InstX86AddRMW::Base::Emitter = {                   \
+          &InstImpl<TraitsType>::Assembler::add,                               \
+          &InstImpl<TraitsType>::Assembler::add};                              \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::GPREmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Adc::Base::Emitter                          \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::adc,                   \
-                      &InstImpl<TraitsType>::Assembler::adc,                   \
-                      &InstImpl<TraitsType>::Assembler::adc);                  \
+  constexpr InstImpl<TraitsType>::Assembler::GPREmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Adc::Base::Emitter = {                      \
+          &InstImpl<TraitsType>::Assembler::adc,                               \
+          &InstImpl<TraitsType>::Assembler::adc,                               \
+          &InstImpl<TraitsType>::Assembler::adc};                              \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::GPREmitterAddrOp                      \
-      InstImpl<TraitsType>::InstX86AdcRMW::Base::Emitter                       \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::adc,                   \
-                      &InstImpl<TraitsType>::Assembler::adc);                  \
+  constexpr InstImpl<TraitsType>::Assembler::GPREmitterAddrOp                  \
+      InstImpl<TraitsType>::InstX86AdcRMW::Base::Emitter = {                   \
+          &InstImpl<TraitsType>::Assembler::adc,                               \
+          &InstImpl<TraitsType>::Assembler::adc};                              \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::GPREmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86And::Base::Emitter                          \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::And,                   \
-                      &InstImpl<TraitsType>::Assembler::And,                   \
-                      &InstImpl<TraitsType>::Assembler::And);                  \
+  constexpr InstImpl<TraitsType>::Assembler::GPREmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86And::Base::Emitter = {                      \
+          &InstImpl<TraitsType>::Assembler::And,                               \
+          &InstImpl<TraitsType>::Assembler::And,                               \
+          &InstImpl<TraitsType>::Assembler::And};                              \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::GPREmitterAddrOp                      \
-      InstImpl<TraitsType>::InstX86AndRMW::Base::Emitter                       \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::And,                   \
-                      &InstImpl<TraitsType>::Assembler::And);                  \
+  constexpr InstImpl<TraitsType>::Assembler::GPREmitterAddrOp                  \
+      InstImpl<TraitsType>::InstX86AndRMW::Base::Emitter = {                   \
+          &InstImpl<TraitsType>::Assembler::And,                               \
+          &InstImpl<TraitsType>::Assembler::And};                              \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::GPREmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Or::Base::Emitter                           \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::Or,                    \
-                      &InstImpl<TraitsType>::Assembler::Or,                    \
-                      &InstImpl<TraitsType>::Assembler::Or);                   \
+  constexpr InstImpl<TraitsType>::Assembler::GPREmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Or::Base::Emitter = {                       \
+          &InstImpl<TraitsType>::Assembler::Or,                                \
+          &InstImpl<TraitsType>::Assembler::Or,                                \
+          &InstImpl<TraitsType>::Assembler::Or};                               \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::GPREmitterAddrOp                      \
-      InstImpl<TraitsType>::InstX86OrRMW::Base::Emitter                        \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::Or,                    \
-                      &InstImpl<TraitsType>::Assembler::Or);                   \
+  constexpr InstImpl<TraitsType>::Assembler::GPREmitterAddrOp                  \
+      InstImpl<TraitsType>::InstX86OrRMW::Base::Emitter = {                    \
+          &InstImpl<TraitsType>::Assembler::Or,                                \
+          &InstImpl<TraitsType>::Assembler::Or};                               \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::GPREmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Sbb::Base::Emitter                          \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::sbb,                   \
-                      &InstImpl<TraitsType>::Assembler::sbb,                   \
-                      &InstImpl<TraitsType>::Assembler::sbb);                  \
+  constexpr InstImpl<TraitsType>::Assembler::GPREmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Sbb::Base::Emitter = {                      \
+          &InstImpl<TraitsType>::Assembler::sbb,                               \
+          &InstImpl<TraitsType>::Assembler::sbb,                               \
+          &InstImpl<TraitsType>::Assembler::sbb};                              \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::GPREmitterAddrOp                      \
-      InstImpl<TraitsType>::InstX86SbbRMW::Base::Emitter                       \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::sbb,                   \
-                      &InstImpl<TraitsType>::Assembler::sbb);                  \
+  constexpr InstImpl<TraitsType>::Assembler::GPREmitterAddrOp                  \
+      InstImpl<TraitsType>::InstX86SbbRMW::Base::Emitter = {                   \
+          &InstImpl<TraitsType>::Assembler::sbb,                               \
+          &InstImpl<TraitsType>::Assembler::sbb};                              \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::GPREmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Sub::Base::Emitter                          \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::sub,                   \
-                      &InstImpl<TraitsType>::Assembler::sub,                   \
-                      &InstImpl<TraitsType>::Assembler::sub);                  \
+  constexpr InstImpl<TraitsType>::Assembler::GPREmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Sub::Base::Emitter = {                      \
+          &InstImpl<TraitsType>::Assembler::sub,                               \
+          &InstImpl<TraitsType>::Assembler::sub,                               \
+          &InstImpl<TraitsType>::Assembler::sub};                              \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::GPREmitterAddrOp                      \
-      InstImpl<TraitsType>::InstX86SubRMW::Base::Emitter                       \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::sub,                   \
-                      &InstImpl<TraitsType>::Assembler::sub);                  \
+  constexpr InstImpl<TraitsType>::Assembler::GPREmitterAddrOp                  \
+      InstImpl<TraitsType>::InstX86SubRMW::Base::Emitter = {                   \
+          &InstImpl<TraitsType>::Assembler::sub,                               \
+          &InstImpl<TraitsType>::Assembler::sub};                              \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::GPREmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Xor::Base::Emitter                          \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::Xor,                   \
-                      &InstImpl<TraitsType>::Assembler::Xor,                   \
-                      &InstImpl<TraitsType>::Assembler::Xor);                  \
+  constexpr InstImpl<TraitsType>::Assembler::GPREmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Xor::Base::Emitter = {                      \
+          &InstImpl<TraitsType>::Assembler::Xor,                               \
+          &InstImpl<TraitsType>::Assembler::Xor,                               \
+          &InstImpl<TraitsType>::Assembler::Xor};                              \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::GPREmitterAddrOp                      \
-      InstImpl<TraitsType>::InstX86XorRMW::Base::Emitter                       \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::Xor,                   \
-                      &InstImpl<TraitsType>::Assembler::Xor);                  \
+  constexpr InstImpl<TraitsType>::Assembler::GPREmitterAddrOp                  \
+      InstImpl<TraitsType>::InstX86XorRMW::Base::Emitter = {                   \
+          &InstImpl<TraitsType>::Assembler::Xor,                               \
+          &InstImpl<TraitsType>::Assembler::Xor};                              \
                                                                                \
   /* Binary Shift GPR ops */                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::GPREmitterShiftOp                     \
-      InstImpl<TraitsType>::InstX86Rol::Base::Emitter                          \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::rol,                   \
-                      &InstImpl<TraitsType>::Assembler::rol);                  \
+  constexpr InstImpl<TraitsType>::Assembler::GPREmitterShiftOp                 \
+      InstImpl<TraitsType>::InstX86Rol::Base::Emitter = {                      \
+          &InstImpl<TraitsType>::Assembler::rol,                               \
+          &InstImpl<TraitsType>::Assembler::rol};                              \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::GPREmitterShiftOp                     \
-      InstImpl<TraitsType>::InstX86Sar::Base::Emitter                          \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::sar,                   \
-                      &InstImpl<TraitsType>::Assembler::sar);                  \
+  constexpr InstImpl<TraitsType>::Assembler::GPREmitterShiftOp                 \
+      InstImpl<TraitsType>::InstX86Sar::Base::Emitter = {                      \
+          &InstImpl<TraitsType>::Assembler::sar,                               \
+          &InstImpl<TraitsType>::Assembler::sar};                              \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::GPREmitterShiftOp                     \
-      InstImpl<TraitsType>::InstX86Shl::Base::Emitter                          \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::shl,                   \
-                      &InstImpl<TraitsType>::Assembler::shl);                  \
+  constexpr InstImpl<TraitsType>::Assembler::GPREmitterShiftOp                 \
+      InstImpl<TraitsType>::InstX86Shl::Base::Emitter = {                      \
+          &InstImpl<TraitsType>::Assembler::shl,                               \
+          &InstImpl<TraitsType>::Assembler::shl};                              \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::GPREmitterShiftOp                     \
-      InstImpl<TraitsType>::InstX86Shr::Base::Emitter                          \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::shr,                   \
-                      &InstImpl<TraitsType>::Assembler::shr);                  \
+  constexpr InstImpl<TraitsType>::Assembler::GPREmitterShiftOp                 \
+      InstImpl<TraitsType>::InstX86Shr::Base::Emitter = {                      \
+          &InstImpl<TraitsType>::Assembler::shr,                               \
+          &InstImpl<TraitsType>::Assembler::shr};                              \
                                                                                \
   /* Binary XMM ops */                                                         \
   template <>                                                                  \
   template <> /* uses specialized emitter. */                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86MovssRegs::Base::Emitter                    \
-          INIT_OR_NOT(nullptr, nullptr);                                       \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86MovssRegs::Base::Emitter = {nullptr,        \
+                                                               nullptr};       \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Addss::Base::Emitter                        \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::addss,                 \
-                      &InstImpl<TraitsType>::Assembler::addss);                \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Addss::Base::Emitter = {                    \
+          &InstImpl<TraitsType>::Assembler::addss,                             \
+          &InstImpl<TraitsType>::Assembler::addss};                            \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Addps::Base::Emitter                        \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::addps,                 \
-                      &InstImpl<TraitsType>::Assembler::addps);                \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Addps::Base::Emitter = {                    \
+          &InstImpl<TraitsType>::Assembler::addps,                             \
+          &InstImpl<TraitsType>::Assembler::addps};                            \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Divss::Base::Emitter                        \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::divss,                 \
-                      &InstImpl<TraitsType>::Assembler::divss);                \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Divss::Base::Emitter = {                    \
+          &InstImpl<TraitsType>::Assembler::divss,                             \
+          &InstImpl<TraitsType>::Assembler::divss};                            \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Divps::Base::Emitter                        \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::divps,                 \
-                      &InstImpl<TraitsType>::Assembler::divps);                \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Divps::Base::Emitter = {                    \
+          &InstImpl<TraitsType>::Assembler::divps,                             \
+          &InstImpl<TraitsType>::Assembler::divps};                            \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Mulss::Base::Emitter                        \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::mulss,                 \
-                      &InstImpl<TraitsType>::Assembler::mulss);                \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Mulss::Base::Emitter = {                    \
+          &InstImpl<TraitsType>::Assembler::mulss,                             \
+          &InstImpl<TraitsType>::Assembler::mulss};                            \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Mulps::Base::Emitter                        \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::mulps,                 \
-                      &InstImpl<TraitsType>::Assembler::mulps);                \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Mulps::Base::Emitter = {                    \
+          &InstImpl<TraitsType>::Assembler::mulps,                             \
+          &InstImpl<TraitsType>::Assembler::mulps};                            \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Padd::Base::Emitter                         \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::padd,                  \
-                      &InstImpl<TraitsType>::Assembler::padd);                 \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Padd::Base::Emitter = {                     \
+          &InstImpl<TraitsType>::Assembler::padd,                              \
+          &InstImpl<TraitsType>::Assembler::padd};                             \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Padds::Base::Emitter                        \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::padds,                 \
-                      &InstImpl<TraitsType>::Assembler::padds);                \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Padds::Base::Emitter = {                    \
+          &InstImpl<TraitsType>::Assembler::padds,                             \
+          &InstImpl<TraitsType>::Assembler::padds};                            \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Paddus::Base::Emitter                       \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::paddus,                \
-                      &InstImpl<TraitsType>::Assembler::paddus);               \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Paddus::Base::Emitter = {                   \
+          &InstImpl<TraitsType>::Assembler::paddus,                            \
+          &InstImpl<TraitsType>::Assembler::paddus};                           \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Pand::Base::Emitter                         \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::pand,                  \
-                      &InstImpl<TraitsType>::Assembler::pand);                 \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Pand::Base::Emitter = {                     \
+          &InstImpl<TraitsType>::Assembler::pand,                              \
+          &InstImpl<TraitsType>::Assembler::pand};                             \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Pandn::Base::Emitter                        \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::pandn,                 \
-                      &InstImpl<TraitsType>::Assembler::pandn);                \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Pandn::Base::Emitter = {                    \
+          &InstImpl<TraitsType>::Assembler::pandn,                             \
+          &InstImpl<TraitsType>::Assembler::pandn};                            \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Pcmpeq::Base::Emitter                       \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::pcmpeq,                \
-                      &InstImpl<TraitsType>::Assembler::pcmpeq);               \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Pcmpeq::Base::Emitter = {                   \
+          &InstImpl<TraitsType>::Assembler::pcmpeq,                            \
+          &InstImpl<TraitsType>::Assembler::pcmpeq};                           \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Pcmpgt::Base::Emitter                       \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::pcmpgt,                \
-                      &InstImpl<TraitsType>::Assembler::pcmpgt);               \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Pcmpgt::Base::Emitter = {                   \
+          &InstImpl<TraitsType>::Assembler::pcmpgt,                            \
+          &InstImpl<TraitsType>::Assembler::pcmpgt};                           \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Pmull::Base::Emitter                        \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::pmull,                 \
-                      &InstImpl<TraitsType>::Assembler::pmull);                \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Pmull::Base::Emitter = {                    \
+          &InstImpl<TraitsType>::Assembler::pmull,                             \
+          &InstImpl<TraitsType>::Assembler::pmull};                            \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Pmulhw::Base::Emitter                       \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::pmulhw,                \
-                      &InstImpl<TraitsType>::Assembler::pmulhw);               \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Pmulhw::Base::Emitter = {                   \
+          &InstImpl<TraitsType>::Assembler::pmulhw,                            \
+          &InstImpl<TraitsType>::Assembler::pmulhw};                           \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Pmulhuw::Base::Emitter                      \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::pmulhuw,               \
-                      &InstImpl<TraitsType>::Assembler::pmulhuw);              \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Pmulhuw::Base::Emitter = {                  \
+          &InstImpl<TraitsType>::Assembler::pmulhuw,                           \
+          &InstImpl<TraitsType>::Assembler::pmulhuw};                          \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Pmaddwd::Base::Emitter                      \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::pmaddwd,               \
-                      &InstImpl<TraitsType>::Assembler::pmaddwd);              \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Pmaddwd::Base::Emitter = {                  \
+          &InstImpl<TraitsType>::Assembler::pmaddwd,                           \
+          &InstImpl<TraitsType>::Assembler::pmaddwd};                          \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Pmuludq::Base::Emitter                      \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::pmuludq,               \
-                      &InstImpl<TraitsType>::Assembler::pmuludq);              \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Pmuludq::Base::Emitter = {                  \
+          &InstImpl<TraitsType>::Assembler::pmuludq,                           \
+          &InstImpl<TraitsType>::Assembler::pmuludq};                          \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Por::Base::Emitter                          \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::por,                   \
-                      &InstImpl<TraitsType>::Assembler::por);                  \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Por::Base::Emitter = {                      \
+          &InstImpl<TraitsType>::Assembler::por,                               \
+          &InstImpl<TraitsType>::Assembler::por};                              \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Psub::Base::Emitter                         \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::psub,                  \
-                      &InstImpl<TraitsType>::Assembler::psub);                 \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Psub::Base::Emitter = {                     \
+          &InstImpl<TraitsType>::Assembler::psub,                              \
+          &InstImpl<TraitsType>::Assembler::psub};                             \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Psubs::Base::Emitter                        \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::psubs,                 \
-                      &InstImpl<TraitsType>::Assembler::psubs);                \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Psubs::Base::Emitter = {                    \
+          &InstImpl<TraitsType>::Assembler::psubs,                             \
+          &InstImpl<TraitsType>::Assembler::psubs};                            \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Psubus::Base::Emitter                       \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::psubus,                \
-                      &InstImpl<TraitsType>::Assembler::psubus);               \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Psubus::Base::Emitter = {                   \
+          &InstImpl<TraitsType>::Assembler::psubus,                            \
+          &InstImpl<TraitsType>::Assembler::psubus};                           \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Pxor::Base::Emitter                         \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::pxor,                  \
-                      &InstImpl<TraitsType>::Assembler::pxor);                 \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Pxor::Base::Emitter = {                     \
+          &InstImpl<TraitsType>::Assembler::pxor,                              \
+          &InstImpl<TraitsType>::Assembler::pxor};                             \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Subss::Base::Emitter                        \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::subss,                 \
-                      &InstImpl<TraitsType>::Assembler::subss);                \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Subss::Base::Emitter = {                    \
+          &InstImpl<TraitsType>::Assembler::subss,                             \
+          &InstImpl<TraitsType>::Assembler::subss};                            \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Subps::Base::Emitter                        \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::subps,                 \
-                      &InstImpl<TraitsType>::Assembler::subps);                \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Subps::Base::Emitter = {                    \
+          &InstImpl<TraitsType>::Assembler::subps,                             \
+          &InstImpl<TraitsType>::Assembler::subps};                            \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Andnps::Base::Emitter                       \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::andnps,                \
-                      &InstImpl<TraitsType>::Assembler::andnps);               \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Andnps::Base::Emitter = {                   \
+          &InstImpl<TraitsType>::Assembler::andnps,                            \
+          &InstImpl<TraitsType>::Assembler::andnps};                           \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Andps::Base::Emitter                        \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::andps,                 \
-                      &InstImpl<TraitsType>::Assembler::andps);                \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Andps::Base::Emitter = {                    \
+          &InstImpl<TraitsType>::Assembler::andps,                             \
+          &InstImpl<TraitsType>::Assembler::andps};                            \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Maxss::Base::Emitter                        \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::maxss,                 \
-                      &InstImpl<TraitsType>::Assembler::maxss);                \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Maxss::Base::Emitter = {                    \
+          &InstImpl<TraitsType>::Assembler::maxss,                             \
+          &InstImpl<TraitsType>::Assembler::maxss};                            \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Minss::Base::Emitter                        \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::minss,                 \
-                      &InstImpl<TraitsType>::Assembler::minss);                \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Minss::Base::Emitter = {                    \
+          &InstImpl<TraitsType>::Assembler::minss,                             \
+          &InstImpl<TraitsType>::Assembler::minss};                            \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Maxps::Base::Emitter                        \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::maxps,                 \
-                      &InstImpl<TraitsType>::Assembler::maxps);                \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Maxps::Base::Emitter = {                    \
+          &InstImpl<TraitsType>::Assembler::maxps,                             \
+          &InstImpl<TraitsType>::Assembler::maxps};                            \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Minps::Base::Emitter                        \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::minps,                 \
-                      &InstImpl<TraitsType>::Assembler::minps);                \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Minps::Base::Emitter = {                    \
+          &InstImpl<TraitsType>::Assembler::minps,                             \
+          &InstImpl<TraitsType>::Assembler::minps};                            \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Orps::Base::Emitter                         \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::orps,                  \
-                      &InstImpl<TraitsType>::Assembler::orps);                 \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Orps::Base::Emitter = {                     \
+          &InstImpl<TraitsType>::Assembler::orps,                              \
+          &InstImpl<TraitsType>::Assembler::orps};                             \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Xorps::Base::Emitter                        \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::xorps,                 \
-                      &InstImpl<TraitsType>::Assembler::xorps);                \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Xorps::Base::Emitter = {                    \
+          &InstImpl<TraitsType>::Assembler::xorps,                             \
+          &InstImpl<TraitsType>::Assembler::xorps};                            \
                                                                                \
   /* Binary XMM Shift ops */                                                   \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterShiftOp                     \
-      InstImpl<TraitsType>::InstX86Psll::Base::Emitter                         \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::psll,                  \
-                      &InstImpl<TraitsType>::Assembler::psll,                  \
-                      &InstImpl<TraitsType>::Assembler::psll);                 \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterShiftOp                 \
+      InstImpl<TraitsType>::InstX86Psll::Base::Emitter = {                     \
+          &InstImpl<TraitsType>::Assembler::psll,                              \
+          &InstImpl<TraitsType>::Assembler::psll,                              \
+          &InstImpl<TraitsType>::Assembler::psll};                             \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterShiftOp                     \
-      InstImpl<TraitsType>::InstX86Psra::Base::Emitter                         \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::psra,                  \
-                      &InstImpl<TraitsType>::Assembler::psra,                  \
-                      &InstImpl<TraitsType>::Assembler::psra);                 \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterShiftOp                 \
+      InstImpl<TraitsType>::InstX86Psra::Base::Emitter = {                     \
+          &InstImpl<TraitsType>::Assembler::psra,                              \
+          &InstImpl<TraitsType>::Assembler::psra,                              \
+          &InstImpl<TraitsType>::Assembler::psra};                             \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterShiftOp                     \
-      InstImpl<TraitsType>::InstX86Psrl::Base::Emitter                         \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::psrl,                  \
-                      &InstImpl<TraitsType>::Assembler::psrl,                  \
-                      &InstImpl<TraitsType>::Assembler::psrl);                 \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterShiftOp                 \
+      InstImpl<TraitsType>::InstX86Psrl::Base::Emitter = {                     \
+          &InstImpl<TraitsType>::Assembler::psrl,                              \
+          &InstImpl<TraitsType>::Assembler::psrl,                              \
+          &InstImpl<TraitsType>::Assembler::psrl};                             \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Pshufb::Base::Emitter                       \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::pshufb,                \
-                      &InstImpl<TraitsType>::Assembler::pshufb);               \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Pshufb::Base::Emitter = {                   \
+          &InstImpl<TraitsType>::Assembler::pshufb,                            \
+          &InstImpl<TraitsType>::Assembler::pshufb};                           \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Punpckl::Base::Emitter                      \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::punpckl,               \
-                      &InstImpl<TraitsType>::Assembler::punpckl);              \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Punpckl::Base::Emitter = {                  \
+          &InstImpl<TraitsType>::Assembler::punpckl,                           \
+          &InstImpl<TraitsType>::Assembler::punpckl};                          \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Punpckh::Base::Emitter                      \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::punpckh,               \
-                      &InstImpl<TraitsType>::Assembler::punpckh);              \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Punpckh::Base::Emitter = {                  \
+          &InstImpl<TraitsType>::Assembler::punpckh,                           \
+          &InstImpl<TraitsType>::Assembler::punpckh};                          \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Packss::Base::Emitter                       \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::packss,                \
-                      &InstImpl<TraitsType>::Assembler::packss);               \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Packss::Base::Emitter = {                   \
+          &InstImpl<TraitsType>::Assembler::packss,                            \
+          &InstImpl<TraitsType>::Assembler::packss};                           \
   template <>                                                                  \
   template <>                                                                  \
-  const InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                       \
-      InstImpl<TraitsType>::InstX86Packus::Base::Emitter                       \
-          INIT_OR_NOT(&InstImpl<TraitsType>::Assembler::packus,                \
-                      &InstImpl<TraitsType>::Assembler::packus);               \
+  constexpr InstImpl<TraitsType>::Assembler::XmmEmitterRegOp                   \
+      InstImpl<TraitsType>::InstX86Packus::Base::Emitter = {                   \
+          &InstImpl<TraitsType>::Assembler::packus,                            \
+          &InstImpl<TraitsType>::Assembler::packus};                           \
   }                                                                            \
   }