From f2fc9da4d4bdd50141a36aa36e80e86803037b9f Mon Sep 17 00:00:00 2001 From: garc0 Date: Sun, 25 Apr 2021 20:23:34 +1000 Subject: [PATCH] some improvements --- asm.hpp | 1248 +++++++++++++++++++++++++++----------------------- asm_emit.hpp | 996 +++++++++++++++++++++++++--------------- 2 files changed, 1310 insertions(+), 934 deletions(-) diff --git a/asm.hpp b/asm.hpp index 10a2a84..73559cc 100644 --- a/asm.hpp +++ b/asm.hpp @@ -10,6 +10,9 @@ #include template using byte_seq = std::integer_sequence; +template using char_seq = std::integer_sequence; + +template using null_sequence = std::integer_sequence; template struct expand_byte_seq { @@ -46,8 +49,6 @@ struct seq_to_arr> { static constexpr auto value = std::array{ints...}; }; - - template struct hold {}; template struct zip { @@ -74,23 +75,22 @@ struct mmx {}; // mask reg struct reg_k {}; -template struct reg { static constexpr auto value = N % 8; }; - -template struct reg_n { static constexpr int value = 0; }; - -template struct reg_n, T...> { - static constexpr int value = reg::value; -}; +template +struct reg : std::integral_constant {}; -template -struct reg_n, reg, T...> { - static constexpr int value = reg::value; +template +struct reg_n { + static constexpr uint8_t value = 0; }; template -struct reg_n> { - static constexpr int value = reg::value; -}; +struct reg_n> : reg{}; + +template +struct reg_n, T...> : reg {}; + +template +struct reg_n, reg, T...> : reg {}; struct ext {}; struct avx_ext {}; @@ -198,27 +198,17 @@ using st = typename std::conditional_t< void>>; template -using _mm = typename std::conditional_t< - N / 8 == 0, typename T::template with>, - typename std::conditional_t< - N / 8 == 1, typename T::template with, ext>, - typename std::conditional_t< - N / 8 == 2, typename T::template with, avx_ext>, - typename std::conditional_t< - N / 8 == 3, typename T::template with, ext, avx_ext>, +using _mm = + typename std::conditional_t>, + typename std::conditional_t, ext>, + typename std::conditional_t, avx_ext>, + typename std::conditional_t, ext, avx_ext>, void>>>>; -template -using xmm = _mm, N>; - -template -using ymm = _mm, N>; - -template -using zmm = _mm, N>; - -template -using tmm = _mm, N>; +template using xmm = _mm, N>; +template using ymm = _mm, N>; +template using zmm = _mm, N>; +template using tmm = _mm, N>; struct zmask {}; @@ -265,10 +255,10 @@ template using disp16 = uw; template using disp32 = ud; template using disp64 = uq; -template struct rel8: ub {}; -template struct rel16: uw {}; -template struct rel32: ud {}; -template struct rel64: uq {}; +template using rel8 = ub; +template using rel16 = uw; +template using rel32 = ud; +template using rel64 = uq; template struct disp_reg {}; @@ -294,7 +284,7 @@ struct _log2<0>{ template struct is_ext: std::false_type {}; template struct is_ext, ext, T...> : std::true_type {}; -template struct is_ext> : std::true_type {}; +template struct is_ext> : is_ext {}; template static constexpr auto is_ext_v = is_ext::value; @@ -302,8 +292,7 @@ static constexpr auto is_ext_v = is_ext::value; template struct is_avx_ext: std::false_type {}; template struct is_avx_ext, avx_ext, T...> : std::true_type {}; template struct is_avx_ext, ext, avx_ext, T...> : std::true_type {}; -template struct is_avx_ext, avx_ext, T...>>: std::true_type {}; -template struct is_avx_ext, ext, avx_ext, T...>>: std::true_type {}; +template struct is_avx_ext>: is_avx_ext {}; template static constexpr auto is_avx_ext_v = is_avx_ext::value; @@ -320,8 +309,8 @@ template struct XOP {}; template -struct XOP, disp8, disp8, disp8, disp8, hold, - disp16, disp8> { +struct XOP, ub, ub, ub, ub, hold, + uw, ub> { static constexpr auto vvvv = reg_n>::value | (is_ext_v> << 3); using value = byte_seq< @@ -333,7 +322,7 @@ struct XOP, disp8, disp8, disp8, disp8, hold, template struct VEX {}; template -struct VEX, hold, disp16, disp8> { +struct VEX, hold, uw, ub> { static constexpr uint8_t pp = pp_byte == 0x66 ? 1 : pp_byte == 0xF3 ? 2 : pp_byte == 0xF2 ? 3 @@ -349,8 +338,8 @@ struct VEX, hold, disp16, disp8> { template -struct VEX, disp8, disp8, disp8, disp8, hold, - disp16, disp8> { +struct VEX, ub, ub, ub, ub, hold, + uw, ub> { static constexpr uint8_t pp = pp_byte == 0x66 ? 1 : pp_byte == 0xF3 ? 2 : pp_byte == 0xF2 ? 3 @@ -371,8 +360,8 @@ template -struct EVEX, disp8, disp8, disp8, disp8, disp8, - hold, disp8, disp8, disp16, disp8, +struct EVEX, ub, ub, ub, ub, ub, + hold, ub, ub, uw, ub, hold> { static constexpr uint8_t pp = pp_byte == 0x66 ? 1 @@ -643,12 +632,7 @@ struct byte_67h { using value = byte_seq<0x67>; }; - namespace { - template using null_sequence = std::integer_sequence; - - template using char_seq = std::integer_sequence; - template struct first_elem { static constexpr auto value = first_letter; }; @@ -658,7 +642,6 @@ namespace { static constexpr auto value = first_letter; }; - template struct num {}; template struct get_elem { static constexpr char value = 0; }; @@ -666,522 +649,661 @@ namespace { static constexpr char value = f; }; -namespace { - template struct _slice_ { - using value = std::integer_sequence; - }; - template struct _first_elements {}; - - template - struct _first_elements, std::integer_sequence> { - using value = - typename _first_elements, - typename _slice_::value>::value; - }; - - template - struct _first_elements, std::integer_sequence> { - using value = typename std::integer_sequence; - }; + namespace { + template struct _slice_ { + using value = std::integer_sequence; + }; + template struct _first_elements {}; - template - struct slice - : _first_elements, std::integer_sequence> {}; + template + struct _first_elements, std::integer_sequence> { + using value = + typename _first_elements, + typename _slice_::value>::value; + }; + + template + struct _first_elements, std::integer_sequence> { + using value = typename std::integer_sequence; + }; + + template + struct slice + : _first_elements, std::integer_sequence> {}; + + } // namespace + + namespace { + namespace { + + template + struct _pow{ + static constexpr uint64_t value = _pow::value; + }; + + template + struct _pow{ + static constexpr uint64_t value = x; + }; + + template struct skip_underscores {}; + template + struct skip_underscores, char_seq> { + using value = + typename skip_underscores, char_seq>::value; + }; + template + struct skip_underscores, char_seq<'_', str...>> { + using value = + typename skip_underscores, char_seq>::value; + }; + template + struct skip_underscores, null_sequence> { + using value = char_seq; + }; + + template + struct parse_num_impl { + static constexpr uint64_t value = -1; + }; + + template + struct parse_num_impl, N> { + static constexpr uint64_t value = + parse_num_impl, N>::value * (_pow::value) + + parse_num_impl, N>::value; + }; + + template + struct parse_num_impl, N> { + static constexpr uint64_t value = ((first >= 'A') && (first <= 'F')) ? (first - 'A' + 10) : (first - '0'); + }; + + template + struct parse_num: parse_num_impl {}; + + template + struct parse_num>: parse_num_impl, 10> {}; + + template + struct parse_num>: parse_num_impl, 10> {}; + + template + struct parse_num>: parse_num_impl, 16> {}; + + template + struct parse_num>: parse_num_impl, 16> {}; + + template + struct parse_num>: parse_num_impl, 8> {}; + + template + struct parse_num>: parse_num_impl, 8> {}; + + template + struct parse_num>: parse_num_impl, 2> {}; + + template + struct parse_num>: parse_num_impl, 2> {}; + + template + struct parse_num>: parse_num_impl, 16>{}; + + template + struct parse_num>: parse_num_impl, 16>{}; + + + template + struct make_null_seq { + using value = expand_byte_seq_v, typename make_null_seq::value>; + }; + + template <> + struct make_null_seq<1> { + using value = std::integer_sequence; + }; + + template + struct parse_str {}; + + template + struct parse_str> { + using value = ub(c)>; + }; + + template + struct parse_str> { + using value = uw((c << 8) + c1)>; + }; + + template + struct parse_str> { + using value = ud((c << 24) + (c1 << 16) + (c2 << 8) + 0)>; + }; + + template + struct parse_str> { + using value = ud((c << 24) + (c1 << 16) + + (c2 << 8) + c3)>; + }; + + //template + //struct parse_str> { + // using value = expand_byte_seq_v, make_null_seq<8 - (sizeof...(chars) % 8)>>; + //}; + + /* + template + struct parse_str> { + using value = expand_byte_seq_v, make_null_seq<8 - (sizeof...(chars) % 8)>>; + };*/ + + template + using parse_str_v = typename parse_str::value; + + template struct parse_instr_register { + using value = void; + }; + + template <> struct parse_instr_register> { + using value = al; + }; + template <> struct parse_instr_register> { + using value = cl; + }; + template <> struct parse_instr_register> { + using value = dl; + }; + template <> struct parse_instr_register> { + using value = bl; + }; + template <> struct parse_instr_register> { + using value = ah; + }; + template <> struct parse_instr_register> { + using value = ch; + }; + template <> struct parse_instr_register> { + using value = dh; + }; + template <> struct parse_instr_register> { + using value = bh; + }; + + template <> struct parse_instr_register> { + using value = r8l; + }; + template <> struct parse_instr_register> { + using value = r9l; + }; + template <> struct parse_instr_register> { + using value = r10l; + }; + template <> struct parse_instr_register> { + using value = r11l; + }; + template <> struct parse_instr_register> { + using value = r12l; + }; + template <> struct parse_instr_register> { + using value = r13l; + }; + template <> struct parse_instr_register> { + using value = r14l; + }; + template <> struct parse_instr_register> { + using value = r15l; + }; + + template <> struct parse_instr_register> { + using value = ax; + }; + template <> struct parse_instr_register> { + using value = bx; + }; + template <> struct parse_instr_register> { + using value = cx; + }; + template <> struct parse_instr_register> { + using value = dx; + }; + template <> struct parse_instr_register> { + using value = si; + }; + template <> struct parse_instr_register> { + using value = di; + }; + template <> struct parse_instr_register> { + using value = sp; + }; + template <> struct parse_instr_register> { + using value = bp; + }; + + template <> struct parse_instr_register> { + using value = r8w; + }; + template <> struct parse_instr_register> { + using value = r9w; + }; + template <> struct parse_instr_register> { + using value = r10w; + }; + template <> struct parse_instr_register> { + using value = r11w; + }; + template <> struct parse_instr_register> { + using value = r12w; + }; + template <> struct parse_instr_register> { + using value = r13w; + }; + template <> struct parse_instr_register> { + using value = r14w; + }; + template <> struct parse_instr_register> { + using value = r15w; + }; + + template <> struct parse_instr_register> { + using value = eax; + }; + template <> struct parse_instr_register> { + using value = ebx; + }; + template <> struct parse_instr_register> { + using value = ecx; + }; + template <> struct parse_instr_register> { + using value = edx; + }; + template <> struct parse_instr_register> { + using value = esi; + }; + template <> struct parse_instr_register> { + using value = edi; + }; + template <> struct parse_instr_register> { + using value = esp; + }; + template <> struct parse_instr_register> { + using value = ebp; + }; + + template <> struct parse_instr_register> { + using value = zax; + }; + template <> struct parse_instr_register> { + using value = zbx; + }; + template <> struct parse_instr_register> { + using value = zcx; + }; + template <> struct parse_instr_register> { + using value = zdx; + }; + template <> struct parse_instr_register> { + using value = zsi; + }; + template <> struct parse_instr_register> { + using value = zdi; + }; + template <> struct parse_instr_register> { + using value = zsp; + }; + template <> struct parse_instr_register> { + using value = zbp; + }; + + template <> struct parse_instr_register> { + using value = r8d; + }; + template <> struct parse_instr_register> { + using value = r9d; + }; + template <> struct parse_instr_register> { + using value = r10d; + }; + template <> struct parse_instr_register> { + using value = r11d; + }; + template <> struct parse_instr_register> { + using value = r12d; + }; + template <> struct parse_instr_register> { + using value = r13d; + }; + template <> struct parse_instr_register> { + using value = r14d; + }; + template <> struct parse_instr_register> { + using value = r15d; + }; + + template <> struct parse_instr_register> { + using value = rax; + }; + template <> struct parse_instr_register> { + using value = rbx; + }; + template <> struct parse_instr_register> { + using value = rcx; + }; + template <> struct parse_instr_register> { + using value = rdx; + }; + template <> struct parse_instr_register> { + using value = rsi; + }; + template <> struct parse_instr_register> { + using value = rdi; + }; + template <> struct parse_instr_register> { + using value = rsp; + }; + template <> struct parse_instr_register> { + using value = rbp; + }; + + template <> struct parse_instr_register> { + using value = r8; + }; + template <> struct parse_instr_register> { + using value = r9; + }; + template <> struct parse_instr_register> { + using value = r10; + }; + template <> struct parse_instr_register> { + using value = r11; + }; + template <> struct parse_instr_register> { + using value = r12; + }; + template <> struct parse_instr_register> { + using value = r13; + }; + template <> struct parse_instr_register> { + using value = r14; + }; + template <> struct parse_instr_register> { + using value = r15; + }; + + template + struct parse_instr_register> { + using value = st(parse_num>::value)>; + }; + + template + struct parse_instr_register> { + using value = mm(parse_num>::value)>; + }; + + template + struct parse_instr_register> { + using value = xmm(parse_num>::value)>; + }; + template + struct parse_instr_register> { + using value = ymm(parse_num>::value)>; + }; + template + struct parse_instr_register> { + using value = zmm(parse_num>::value)>; + }; + + template + struct parse_instr_register> { + using value = tmm(parse_num>::value)>; + }; + + template + struct parse_reg_or_num {}; + + template + struct parse_reg_or_num>{ + using value = + typename std::conditional_t, ub< uint8_t(parse_num>::value)>, + typename std::conditional_t, uw>::value)>, + typename std::conditional_t, ud>::value)>, + typename std::conditional_t, uq>::value)>, void + >>>>; + }; + + template + struct parse_reg_or_num>{ + using value = + typename std::conditional_t, ib< -int8_t(parse_num>::value)>, + typename std::conditional_t, iw<-int16_t(parse_num>::value)>, + typename std::conditional_t, id<-int32_t(parse_num>::value)>, + typename std::conditional_t, iq<-int64_t(parse_num>::value)>, void + >>>>; + }; + + template + struct parse_reg_or_num>{ + using value = + typename std::conditional_t::value <= '9' && + first_elem::value >= '0'), + typename parse_instr_register>::value, + ub>::value)>>; + }; + + template + struct parse_reg_or_num>{ + using value = + typename std::conditional_t::value <= '9' && + first_elem::value >= '0'), + typename parse_instr_register>::value, + ub(-int8_t(parse_num>::value))>>; + }; + + template + struct parse_reg_or_num> { + using value = typename parse_str>::value; + }; + + + template + using parse_reg_or_num_v = typename parse_reg_or_num::value; + + template struct parse_instr_ptr {}; + + template + struct parse_instr_ptr, char_seq, char_seq<'*', str...>> { + using value = typename parse_instr_ptr>, mul>, null_sequence, char_seq>::value; + }; + + template + struct parse_instr_ptr, char_seq, char_seq<'+', str...>> { + using value = typename parse_instr_ptr>, plus>, null_sequence, char_seq>::value; + }; + + template + struct parse_instr_ptr, char_seq, char_seq<'-', str...>> { + using value = typename parse_instr_ptr>, plus>, char_seq<'-'>, char_seq>::value; + }; + + template + struct parse_instr_ptr, char_seq, + char_seq> { + using value = typename parse_instr_ptr,char_seq, char_seq>::value; + }; + + template + struct parse_instr_ptr, char_seq, + char_seq<']', str...>> { + using value = ptr>>; + }; + + } // namespace + + namespace { + template struct skip_ptr {}; + template struct skip_ptr> { + using value = typename skip_ptr>::value; + }; + template struct skip_ptr> { + using value = char_seq; + }; + + template struct skip_spaces {}; + template + struct skip_spaces, char_seq> { + using value = typename skip_spaces, + char_seq>::value; + }; + template + struct skip_spaces, char_seq<' ', str...>> { + using value = typename skip_spaces, + char_seq>::value; + }; + template + struct skip_spaces, null_sequence> { + using value = char_seq; + }; + } // namespace + + template struct parse_instr_operand { + using value = void; + }; + + template struct parse_instr_operand> { + using value = + typename parse_instr_ptr, null_sequence, + char_seq>::value; + }; + + template + struct parse_instr_operand> { + using value = typename parse_instr_ptr, null_sequence, + char_seq>::value; + }; + + template + struct parse_instr_operand> { + using value = typename parse_instr_operand>::value; + }; + + template + struct parse_instr_operand> { + using value = typename parse_instr_operand>::value; + }; + + template + struct parse_instr_operand> { + using value = typename parse_instr_operand>::value; + }; + + template + struct parse_instr_operand> { + using value = typename parse_instr_operand>::value; + }; + + template + struct parse_instr_operand> { + using value = typename parse_instr_operand>::value; + }; + + template + struct parse_instr_operand> { + using value = typename parse_instr_operand>::value; + }; + + template + struct parse_instr_operand> { + using value = typename parse_instr_operand>::value; + }; + + template + struct parse_instr_operand> { + using value = typename parse_instr_operand>::value; + }; + + template struct parse_instr_operand> { + using value = parse_reg_or_num_v>; + }; + + template + struct parse_instr_operand> { + using value = parse_reg_or_num_v>; + }; + + template struct parse_instr_operands { using value = void; }; + + template + struct parse_instr_operands, char_seq, + char_seq> { + using value = typename parse_instr_operands< + hold, char_seq::value>, + typename _slice_::value>::value; + }; + + template + struct parse_instr_operands, char_seq, + char_seq<',', str...>> { + using value = typename parse_instr_operands< + hold>::value>, + null_sequence, char_seq>::value; + }; + + template + struct parse_instr_operands, char_seq, + char_seq<';', str...>> { + using value = hold>::value>; + }; + + template + struct parse_instr_operands, char_seq<>, + char_seq<';', str...>> { + using value = hold; + }; + + template struct parse_instr_name { + static constexpr auto value = std::array{}; + }; + + template struct parse_instr {}; + + template + struct parse_instr, char_seq> { + static constexpr auto value = + parse_instr::value>, + typename _slice_::value>::value; + }; + + template + struct parse_instr, char_seq<' ', str...>> { + static constexpr auto value = parse_instr_name< + char_seq, + typename parse_instr_operands< + hold<>, null_sequence, + typename skip_spaces, + char_seq>::value>::value>::value; + }; + + template + struct parse_instr, char_seq<';', str...>> { + static constexpr auto value = parse_instr_name< + char_seq, hold<>>::value; + }; + template struct parse_asm {}; + } // namespace } // namespace - namespace { - namespace { - - template - struct _pow{ - static constexpr uint64_t value = _pow::value; - }; - - template - struct _pow{ - static constexpr uint64_t value = x; - }; - - template - struct parse_num { - static constexpr uint64_t value = -1; - }; - template struct parse_num> { - static constexpr uint64_t value = - (first - '0') * (_pow<10, sizeof...(str)>::value) + - parse_num>::value; - }; - - template struct parse_num> { - static constexpr uint64_t value = str - '0'; - }; - - template struct parse_instr_register { - using value = void; - }; - - template <> struct parse_instr_register> { - using value = al; - }; - template <> struct parse_instr_register> { - using value = cl; - }; - template <> struct parse_instr_register> { - using value = dl; - }; - template <> struct parse_instr_register> { - using value = bl; - }; - template <> struct parse_instr_register> { - using value = ah; - }; - template <> struct parse_instr_register> { - using value = ch; - }; - template <> struct parse_instr_register> { - using value = dh; - }; - template <> struct parse_instr_register> { - using value = bh; - }; - - - template <> struct parse_instr_register> { - using value = r8l; - }; - template <> struct parse_instr_register> { - using value = r9l; - }; - template <> struct parse_instr_register> { - using value = r10l; - }; - template <> struct parse_instr_register> { - using value = r11l; - }; - template <> struct parse_instr_register> { - using value = r12l; - }; - template <> struct parse_instr_register> { - using value = r13l; - }; - template <> struct parse_instr_register> { - using value = r14l; - }; - template <> struct parse_instr_register> { - using value = r15l; - }; - - template <> struct parse_instr_register> { - using value = ax; - }; - template <> struct parse_instr_register> { - using value = bx; - }; - template <> struct parse_instr_register> { - using value = cx; - }; - template <> struct parse_instr_register> { - using value = dx; - }; - template <> struct parse_instr_register> { - using value = si; - }; - template <> struct parse_instr_register> { - using value = di; - }; - template <> struct parse_instr_register> { - using value = sp; - }; - template <> struct parse_instr_register> { - using value = bp; - }; - - template <> struct parse_instr_register> { - using value = r8w; - }; - template <> struct parse_instr_register> { - using value = r9w; - }; - template <> struct parse_instr_register> { - using value = r10w; - }; - template <> struct parse_instr_register> { - using value = r11w; - }; - template <> struct parse_instr_register> { - using value = r12w; - }; - template <> struct parse_instr_register> { - using value = r13w; - }; - template <> struct parse_instr_register> { - using value = r14w; - }; - template <> struct parse_instr_register> { - using value = r15w; - }; - - template <> struct parse_instr_register> { - using value = eax; - }; - template <> struct parse_instr_register> { - using value = ebx; - }; - template <> struct parse_instr_register> { - using value = ecx; - }; - template <> struct parse_instr_register> { - using value = edx; - }; - template <> struct parse_instr_register> { - using value = esi; - }; - template <> struct parse_instr_register> { - using value = edi; - }; - template <> struct parse_instr_register> { - using value = esp; - }; - template <> struct parse_instr_register> { - using value = ebp; - }; - - template <> struct parse_instr_register> { - using value = zax; - }; - template <> struct parse_instr_register> { - using value = zbx; - }; - template <> struct parse_instr_register> { - using value = zcx; - }; - template <> struct parse_instr_register> { - using value = zdx; - }; - template <> struct parse_instr_register> { - using value = zsi; - }; - template <> struct parse_instr_register> { - using value = zdi; - }; - template <> struct parse_instr_register> { - using value = zsp; - }; - template <> struct parse_instr_register> { - using value = zbp; - }; - - template <> struct parse_instr_register> { - using value = r8d; - }; - template <> struct parse_instr_register> { - using value = r9d; - }; - template <> struct parse_instr_register> { - using value = r10d; - }; - template <> struct parse_instr_register> { - using value = r11d; - }; - template <> struct parse_instr_register> { - using value = r12d; - }; - template <> struct parse_instr_register> { - using value = r13d; - }; - template <> struct parse_instr_register> { - using value = r14d; - }; - template <> struct parse_instr_register> { - using value = r15d; - }; - - template <> struct parse_instr_register> { - using value = rax; - }; - template <> struct parse_instr_register> { - using value = rbx; - }; - template <> struct parse_instr_register> { - using value = rcx; - }; - template <> struct parse_instr_register> { - using value = rdx; - }; - template <> struct parse_instr_register> { - using value = rsi; - }; - template <> struct parse_instr_register> { - using value = rdi; - }; - template <> struct parse_instr_register> { - using value = rsp; - }; - template <> struct parse_instr_register> { - using value = rbp; - }; - - template <> struct parse_instr_register> { - using value = r8; - }; - template <> struct parse_instr_register> { - using value = r9; - }; - template <> struct parse_instr_register> { - using value = r10; - }; - template <> struct parse_instr_register> { - using value = r11; - }; - template <> struct parse_instr_register> { - using value = r12; - }; - template <> struct parse_instr_register> { - using value = r13; - }; - template <> struct parse_instr_register> { - using value = r14; - }; - template <> struct parse_instr_register> { - using value = r15; - }; - - template - struct parse_instr_register> { - using value = st(parse_num>::value)>; - }; - - template - struct parse_instr_register> { - using value = mm(parse_num>::value)>; - }; - - template - struct parse_instr_register> { - using value = xmm(parse_num>::value)>; - }; - template - struct parse_instr_register> { - using value = ymm(parse_num>::value)>; - }; - template - struct parse_instr_register> { - using value = zmm(parse_num>::value)>; - }; - - template - struct parse_instr_register> { - using value = tmm(parse_num>::value)>; - }; - - template - struct parse_reg_or_num {}; - - template - struct parse_reg_or_num>{ - using value = - typename std::conditional_t, disp8 >::value)>, - typename std::conditional_t, disp16>::value)>, - typename std::conditional_t, disp32>::value)>, - typename std::conditional_t, disp64>::value)>, void - >>>>; - }; - - template - struct parse_reg_or_num>{ - using value = - typename std::conditional_t::value <= '9' && - first_elem::value >= '0'), - typename parse_instr_register>::value, - disp8>::value)>>; - }; - - template - using parse_reg_or_num_v = typename parse_reg_or_num::value; - - template struct parse_instr_ptr {}; - - template - struct parse_instr_ptr, char_seq, char_seq<'*', str...>> { - using value = typename parse_instr_ptr>, mul>, null_sequence, char_seq>::value; - }; - - template - struct parse_instr_ptr, char_seq, char_seq<'+', str...>> { - using value = typename parse_instr_ptr>, plus>, null_sequence, char_seq>::value; - }; - - template - struct parse_instr_ptr, char_seq, - char_seq> { - using value = typename parse_instr_ptr,char_seq, char_seq>::value; - }; - - template - struct parse_instr_ptr, char_seq, - char_seq<']', str...>> { - using value = ptr>>; - }; - - } // namespace - - namespace { - template struct skip_ptr {}; - template struct skip_ptr> { - using value = typename skip_ptr>::value; - }; - template struct skip_ptr> { - using value = char_seq; - }; - - template struct del_spaces {}; - template - struct del_spaces, char_seq> { - using value = - typename del_spaces, char_seq>::value; - }; - template - struct del_spaces, char_seq<' ', str...>> { - using value = - typename del_spaces, char_seq>::value; - }; - template - struct del_spaces, null_sequence> { - using value = char_seq; - }; - } // namespace - - template struct parse_instr_operand { - using value = void; - }; - - template struct parse_instr_operand> { - using value = - typename parse_instr_ptr, null_sequence, - char_seq>::value; - }; - - template - struct parse_instr_operand> { - using value = typename parse_instr_ptr, null_sequence, - char_seq>::value; - }; - - template - struct parse_instr_operand> { - using value = typename parse_instr_operand>::value; - }; - - template - struct parse_instr_operand> { - using value = typename parse_instr_operand>::value; - }; - - template - struct parse_instr_operand> { - using value = typename parse_instr_operand>::value; - }; - - template - struct parse_instr_operand> { - using value = typename parse_instr_operand>::value; - }; - - template - struct parse_instr_operand> { - using value = typename parse_instr_operand>::value; - }; - - template - struct parse_instr_operand> { - using value = typename parse_instr_operand>::value; - }; - - template - struct parse_instr_operand> { - using value = typename parse_instr_operand>::value; - }; - - template - struct parse_instr_operand> { - using value = typename parse_instr_operand>::value; - }; - - template struct parse_instr_operand> { - using value = parse_reg_or_num_v>; - }; - - template - struct parse_instr_operand> { - using value = parse_reg_or_num_v>; - }; - - template struct parse_instr_operands { using value = void; }; - - template - struct parse_instr_operands, char_seq, - char_seq> { - using value = typename parse_instr_operands< - hold, char_seq::value>, - typename _slice_::value>::value; - }; - - template - struct parse_instr_operands, char_seq, - char_seq<',', str...>> { - using value = typename parse_instr_operands< - hold>::value>, - null_sequence, char_seq>::value; - }; - - template - struct parse_instr_operands, char_seq, - char_seq<';', str...>> { - using value = hold>::value>; - }; - - template - struct parse_instr_operands, char_seq<>, - char_seq<';', str...>> { - using value = hold; - }; - - template struct parse_instr_name { - static constexpr auto value = std::array{}; - }; - - template struct parse_instr {}; - - template - struct parse_instr, char_seq> { - static constexpr auto value = - parse_instr::value>, - typename _slice_::value>::value; - }; - - template - struct parse_instr, char_seq<' ', str...>> { - static constexpr auto value = parse_instr_name< - char_seq, - typename parse_instr_operands< - hold<>, null_sequence, - typename del_spaces, - char_seq>::value>::value>::value; - }; +template static constexpr std::array _db = {}; +template +struct parse_instr_name, hold> { + static constexpr auto value = _db; +}; - template - struct parse_instr, char_seq<';', str...>> { - static constexpr auto value = parse_instr_name< - char_seq, hold<>>::value; - }; - template struct parse_asm {}; - } // namespace -} // namespace +} // asm-like shit template struct make_char_sequence_impl; diff --git a/asm_emit.hpp b/asm_emit.hpp index afec80f..20a878c 100644 --- a/asm_emit.hpp +++ b/asm_emit.hpp @@ -6,7 +6,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_aaa; }; template <> -constexpr auto asm_aaa<> = seq_to_arr::value, byte_seq<0x37>>>::value; +constexpr auto asm_aaa<> = seq_to_arr>>::value; // aad X86 [I] [] D5 template static constexpr std::array asm_aad = {}; template @@ -15,7 +15,7 @@ struct parse_instr_name, hold> { }; template constexpr auto asm_aad> = - seq_to_arr::value, byte_seq<0xD5>, typename disp8::value>>::value; + seq_to_arr, typename disp8::value>>::value; // aam X86 [I] [] D4 template static constexpr std::array asm_aam = {}; template @@ -24,7 +24,7 @@ struct parse_instr_name, hold> { }; template constexpr auto asm_aam> = - seq_to_arr::value, byte_seq<0xD4>, typename disp8::value>>::value; + seq_to_arr, typename disp8::value>>::value; // aas X86 [NONE] [] 3F template static constexpr std::array asm_aas = {}; template @@ -32,7 +32,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_aas; }; template <> -constexpr auto asm_aas<> = seq_to_arr::value, byte_seq<0x3F>>>::value; +constexpr auto asm_aas<> = seq_to_arr>>::value; // adc ANY [I] [] 14 template static constexpr std::array asm_adc = {}; template @@ -41,17 +41,17 @@ struct parse_instr_name, hold> { }; template constexpr auto asm_adc> = - seq_to_arr::value, byte_seq<0x14>, typename disp8::value>>::value; + seq_to_arr, typename disp8::value>>::value; // adc ANY [I] [66] 15 template constexpr auto asm_adc> = - seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x15>, typename disp16::value>>::value; + seq_to_arr, byte_seq<0x15>, typename disp16::value>>::value; // adc ANY [I] [] 15 template constexpr auto asm_adc> = - seq_to_arr::value, byte_seq<0x15>, typename disp32::value>>::value; + seq_to_arr, typename disp32::value>>::value; // adc X64 [I] [] 15 template @@ -195,17 +195,17 @@ struct parse_instr_name, hold> { }; template constexpr auto asm_add> = - seq_to_arr::value, byte_seq<0x04>, typename disp8::value>>::value; + seq_to_arr, typename disp8::value>>::value; // add ANY [I] [66] 05 template constexpr auto asm_add> = - seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x05>, typename disp16::value>>::value; + seq_to_arr, byte_seq<0x05>, typename disp16::value>>::value; // add ANY [I] [] 05 template constexpr auto asm_add> = - seq_to_arr::value, byte_seq<0x05>, typename disp32::value>>::value; + seq_to_arr, typename disp32::value>>::value; // add X64 [I] [] 05 template @@ -517,22 +517,22 @@ struct parse_instr_name, hold> { }; template constexpr auto asm_and> = - seq_to_arr::value, byte_seq<0x24>, typename disp8::value>>::value; + seq_to_arr, typename disp8::value>>::value; // and ANY [I] [66] 25 template constexpr auto asm_and> = - seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x25>, typename disp16::value>>::value; + seq_to_arr, byte_seq<0x25>, typename disp16::value>>::value; // and ANY [I] [] 25 template constexpr auto asm_and> = - seq_to_arr::value, byte_seq<0x25>, typename disp32::value>>::value; + seq_to_arr, typename disp32::value>>::value; // and X64 [I] [] 25 template constexpr auto asm_and> = - seq_to_arr::value, byte_seq<0x25>, typename disp32::value>>::value; + seq_to_arr, typename disp32::value>>::value; // and X64 [I] [] 25 template @@ -732,6 +732,10 @@ template struct parse_instr_name, hold> { static constexpr auto value = asm_arpl; }; +template +constexpr auto asm_arpl::with, zip::with> = + seq_to_arr>, is_ext_v>, 0>::value, byte_seq<0x63>, typename modrm, hold>::value>>::value; + template constexpr auto asm_arpl, zip::with> = seq_to_arr::_67h>::value, typename REX<0, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0x63>, typename mrm::template value>>>::value; @@ -1006,18 +1010,30 @@ seq_to_arr::_67h>::value, byte_seq // bt ANY [MR] r [66] A3 +template +constexpr auto asm_bt::with, zip::with> = + seq_to_arr, byte_seq<0x0F>, typename REX<0, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0xA3>, typename modrm, hold>::value>>::value; + template constexpr auto asm_bt, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x66>, byte_seq<0x0F>, typename REX<0, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0xA3>, typename mrm::template value>>>::value; // bt ANY [MR] r [] A3 +template +constexpr auto asm_bt::with, zip::with> = + seq_to_arr, typename REX<0, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0xA3>, typename modrm, hold>::value>>::value; + template constexpr auto asm_bt, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x0F>, typename REX<0, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0xA3>, typename mrm::template value>>>::value; // bt X64 [MR] r [] A3 +template +constexpr auto asm_bt::with, zip::with> = + seq_to_arr, typename REX<1, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0xA3>, typename modrm, hold>::value>>::value; + template constexpr auto asm_bt, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x0F>, typename REX<1, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0xA3>, typename mrm::template value>>>::value; @@ -1046,18 +1062,30 @@ seq_to_arr::_67h>::value, byte_seq // btc ANY [MR] r [66] BB +template +constexpr auto asm_btc::with, zip::with> = + seq_to_arr, byte_seq<0x0F>, typename REX<0, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0xBB>, typename modrm, hold>::value>>::value; + template constexpr auto asm_btc, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x66>, byte_seq<0x0F>, typename REX<0, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0xBB>, typename mrm::template value>>>::value; // btc ANY [MR] r [] BB +template +constexpr auto asm_btc::with, zip::with> = + seq_to_arr, typename REX<0, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0xBB>, typename modrm, hold>::value>>::value; + template constexpr auto asm_btc, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x0F>, typename REX<0, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0xBB>, typename mrm::template value>>>::value; // btc X64 [MR] r [] BB +template +constexpr auto asm_btc::with, zip::with> = + seq_to_arr, typename REX<1, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0xBB>, typename modrm, hold>::value>>::value; + template constexpr auto asm_btc, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x0F>, typename REX<1, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0xBB>, typename mrm::template value>>>::value; @@ -1086,18 +1114,30 @@ seq_to_arr::_67h>::value, byte_seq // btr ANY [MR] r [66] B3 +template +constexpr auto asm_btr::with, zip::with> = + seq_to_arr, byte_seq<0x0F>, typename REX<0, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0xB3>, typename modrm, hold>::value>>::value; + template constexpr auto asm_btr, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x66>, byte_seq<0x0F>, typename REX<0, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0xB3>, typename mrm::template value>>>::value; // btr ANY [MR] r [] B3 +template +constexpr auto asm_btr::with, zip::with> = + seq_to_arr, typename REX<0, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0xB3>, typename modrm, hold>::value>>::value; + template constexpr auto asm_btr, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x0F>, typename REX<0, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0xB3>, typename mrm::template value>>>::value; // btr X64 [MR] r [] B3 +template +constexpr auto asm_btr::with, zip::with> = + seq_to_arr, typename REX<1, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0xB3>, typename modrm, hold>::value>>::value; + template constexpr auto asm_btr, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x0F>, typename REX<1, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0xB3>, typename mrm::template value>>>::value; @@ -1126,18 +1166,30 @@ seq_to_arr::_67h>::value, byte_seq // bts ANY [MR] r [66] AB +template +constexpr auto asm_bts::with, zip::with> = + seq_to_arr, byte_seq<0x0F>, typename REX<0, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0xAB>, typename modrm, hold>::value>>::value; + template constexpr auto asm_bts, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x66>, byte_seq<0x0F>, typename REX<0, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0xAB>, typename mrm::template value>>>::value; // bts ANY [MR] r [] AB +template +constexpr auto asm_bts::with, zip::with> = + seq_to_arr, typename REX<0, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0xAB>, typename modrm, hold>::value>>::value; + template constexpr auto asm_bts, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x0F>, typename REX<0, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0xAB>, typename mrm::template value>>>::value; // bts X64 [MR] r [] AB +template +constexpr auto asm_bts::with, zip::with> = + seq_to_arr, typename REX<1, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0xAB>, typename modrm, hold>::value>>::value; + template constexpr auto asm_bts, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x0F>, typename REX<1, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0xAB>, typename mrm::template value>>>::value; @@ -1157,11 +1209,11 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_call; }; template -constexpr auto asm_call> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xE8>, typename rel16::value>>::value; +constexpr auto asm_call> = seq_to_arr, byte_seq<0xE8>, typename rel16::value>>::value; // call ANY [D] [] E8 template -constexpr auto asm_call> = seq_to_arr::value, byte_seq<0xE8>, typename rel32::value>>::value; +constexpr auto asm_call> = seq_to_arr, typename rel32::value>>::value; // call X86 [M] 2 [66] FF template @@ -1199,7 +1251,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_cbw; }; template <> -constexpr auto asm_cbw<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x98>>>::value; +constexpr auto asm_cbw<> = seq_to_arr, byte_seq<0x98>>>::value; // cdq ANY [NONE] [] 99 template static constexpr std::array asm_cdq = {}; template @@ -1207,7 +1259,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_cdq; }; template <> -constexpr auto asm_cdq<> = seq_to_arr::value, byte_seq<0x99>>>::value; +constexpr auto asm_cdq<> = seq_to_arr>>::value; // cdqe X64 [NONE] [] 98 template static constexpr std::array asm_cdqe = {}; template @@ -1223,7 +1275,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_clac; }; template <> -constexpr auto asm_clac<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xCA>>>::value; +constexpr auto asm_clac<> = seq_to_arr, byte_seq<0xCA>>>::value; // clc ANY [NONE] [] F8 template static constexpr std::array asm_clc = {}; template @@ -1231,7 +1283,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_clc; }; template <> -constexpr auto asm_clc<> = seq_to_arr::value, byte_seq<0xF8>>>::value; +constexpr auto asm_clc<> = seq_to_arr>>::value; // cld ANY [NONE] [] FC template static constexpr std::array asm_cld = {}; template @@ -1239,7 +1291,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_cld; }; template <> -constexpr auto asm_cld<> = seq_to_arr::value, byte_seq<0xFC>>>::value; +constexpr auto asm_cld<> = seq_to_arr>>::value; // cldemote ANY [M] 0 [] 1C template static constexpr std::array asm_cldemote = {}; template @@ -1277,7 +1329,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_clgi; }; template <> -constexpr auto asm_clgi<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xDD>>>::value; +constexpr auto asm_clgi<> = seq_to_arr, byte_seq<0xDD>>>::value; // cli ANY [NONE] [] FA template static constexpr std::array asm_cli = {}; template @@ -1285,7 +1337,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_cli; }; template <> -constexpr auto asm_cli<> = seq_to_arr::value, byte_seq<0xFA>>>::value; +constexpr auto asm_cli<> = seq_to_arr>>::value; // clrssbsy ANY [M] 6 [F3] AE template static constexpr std::array asm_clrssbsy = {}; template @@ -1307,7 +1359,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_clts; }; template <> -constexpr auto asm_clts<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x06>>>::value; +constexpr auto asm_clts<> = seq_to_arr, byte_seq<0x06>>>::value; // clui X64 [NONE] [F3] EE template static constexpr std::array asm_clui = {}; template @@ -1315,7 +1367,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_clui; }; template <> -constexpr auto asm_clui<> = seq_to_arr, byte_seq<0x0F, 0x01>, typename REX<0, 0, 0, 0>::value, byte_seq<0xEE>>>::value; +constexpr auto asm_clui<> = seq_to_arr, byte_seq<0x0F, 0x01>, byte_seq<0xEE>>>::value; // clwb ANY [M] 6 [66] AE template static constexpr std::array asm_clwb = {}; template @@ -1333,7 +1385,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_clzero; }; template <> -constexpr auto asm_clzero<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xFC>>>::value; +constexpr auto asm_clzero<> = seq_to_arr, byte_seq<0xFC>>>::value; // cmc ANY [NONE] [] F5 template static constexpr std::array asm_cmc = {}; template @@ -1341,7 +1393,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_cmc; }; template <> -constexpr auto asm_cmc<> = seq_to_arr::value, byte_seq<0xF5>>>::value; +constexpr auto asm_cmc<> = seq_to_arr>>::value; // cmova ANY [RM] r [66] 47 template static constexpr std::array asm_cmova = {}; template @@ -2370,17 +2422,17 @@ struct parse_instr_name, hold> { }; template constexpr auto asm_cmp> = - seq_to_arr::value, byte_seq<0x3C>, typename disp8::value>>::value; + seq_to_arr, typename disp8::value>>::value; // cmp ANY [I] [66] 3D template constexpr auto asm_cmp> = - seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x3D>, typename disp16::value>>::value; + seq_to_arr, byte_seq<0x3D>, typename disp16::value>>::value; // cmp ANY [I] [] 3D template constexpr auto asm_cmp> = - seq_to_arr::value, byte_seq<0x3D>, typename disp32::value>>::value; + seq_to_arr, typename disp32::value>>::value; // cmp X64 [I] [] 3D template @@ -2527,7 +2579,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_cmpsb; }; template <> -constexpr auto asm_cmpsb<> = seq_to_arr::value, byte_seq<0xA6>>>::value; +constexpr auto asm_cmpsb<> = seq_to_arr>>::value; // cmpsd ANY [NONE] [] A7 template static constexpr std::array asm_cmpsd = {}; template @@ -2535,7 +2587,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_cmpsd; }; template <> -constexpr auto asm_cmpsd<> = seq_to_arr::value, byte_seq<0xA7>>>::value; +constexpr auto asm_cmpsd<> = seq_to_arr>>::value; // cmpsd ANY [RMI] r [F2] C2 template @@ -2575,31 +2627,47 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_cmpsw; }; template <> -constexpr auto asm_cmpsw<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xA7>>>::value; +constexpr auto asm_cmpsw<> = seq_to_arr, byte_seq<0xA7>>>::value; // cmpxchg ANY [MR] r [] B0 template static constexpr std::array asm_cmpxchg = {}; template struct parse_instr_name, hold> { static constexpr auto value = asm_cmpxchg; }; +template +constexpr auto asm_cmpxchg::with, zip::with> = + seq_to_arr, typename REX<0, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0xB0>, typename modrm, hold>::value>>::value; + template constexpr auto asm_cmpxchg, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x0F>, typename REX<0, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0xB0>, typename mrm::template value>>>::value; // cmpxchg ANY [MR] r [66] B1 +template +constexpr auto asm_cmpxchg::with, zip::with> = + seq_to_arr, byte_seq<0x0F>, typename REX<0, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0xB1>, typename modrm, hold>::value>>::value; + template constexpr auto asm_cmpxchg, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x66>, byte_seq<0x0F>, typename REX<0, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0xB1>, typename mrm::template value>>>::value; // cmpxchg ANY [MR] r [] B1 +template +constexpr auto asm_cmpxchg::with, zip::with> = + seq_to_arr, typename REX<0, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0xB1>, typename modrm, hold>::value>>::value; + template constexpr auto asm_cmpxchg, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x0F>, typename REX<0, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0xB1>, typename mrm::template value>>>::value; // cmpxchg X64 [MR] r [] B1 +template +constexpr auto asm_cmpxchg::with, zip::with> = + seq_to_arr, typename REX<1, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0xB1>, typename modrm, hold>::value>>::value; + template constexpr auto asm_cmpxchg, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x0F>, typename REX<1, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0xB1>, typename mrm::template value>>>::value; @@ -2667,7 +2735,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_cpuid; }; template <> -constexpr auto asm_cpuid<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xA2>>>::value; +constexpr auto asm_cpuid<> = seq_to_arr, byte_seq<0xA2>>>::value; // cqo X64 [NONE] [] 99 template static constexpr std::array asm_cqo = {}; template @@ -3105,7 +3173,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_cwd; }; template <> -constexpr auto asm_cwd<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x99>>>::value; +constexpr auto asm_cwd<> = seq_to_arr, byte_seq<0x99>>>::value; // cwde ANY [NONE] [] 98 template static constexpr std::array asm_cwde = {}; template @@ -3113,7 +3181,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_cwde; }; template <> -constexpr auto asm_cwde<> = seq_to_arr::value, byte_seq<0x98>>>::value; +constexpr auto asm_cwde<> = seq_to_arr>>::value; // daa X86 [NONE] [] 27 template static constexpr std::array asm_daa = {}; template @@ -3121,7 +3189,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_daa; }; template <> -constexpr auto asm_daa<> = seq_to_arr::value, byte_seq<0x27>>>::value; +constexpr auto asm_daa<> = seq_to_arr>>::value; // das X86 [NONE] [] 2F template static constexpr std::array asm_das = {}; template @@ -3129,7 +3197,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_das; }; template <> -constexpr auto asm_das<> = seq_to_arr::value, byte_seq<0x2F>>>::value; +constexpr auto asm_das<> = seq_to_arr>>::value; // dec X86 [O] [66] 48 template static constexpr std::array asm_dec = {}; template @@ -3313,7 +3381,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_emms; }; template <> -constexpr auto asm_emms<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x77>>>::value; +constexpr auto asm_emms<> = seq_to_arr, byte_seq<0x77>>>::value; // endbr32 ANY [NONE] 7 3 [F3] FB template static constexpr std::array asm_endbr32 = {}; template @@ -3321,7 +3389,7 @@ struct parse_instr_name, hold; }; template <> -constexpr auto asm_endbr32<> = seq_to_arr, byte_seq<0x0F>, typename REX<0, 0, 0, 0>::value, byte_seq<0xFB>>>::value; +constexpr auto asm_endbr32<> = seq_to_arr, byte_seq<0x0F>, byte_seq<0xFB>>>::value; // endbr64 ANY [NONE] 7 2 [F3] FA template static constexpr std::array asm_endbr64 = {}; template @@ -3329,7 +3397,7 @@ struct parse_instr_name, hold; }; template <> -constexpr auto asm_endbr64<> = seq_to_arr, byte_seq<0x0F>, typename REX<0, 0, 0, 0>::value, byte_seq<0xFA>>>::value; +constexpr auto asm_endbr64<> = seq_to_arr, byte_seq<0x0F>, byte_seq<0xFA>>>::value; // enqcmd X86 [RM] r [F2] F8 template static constexpr std::array asm_enqcmd = {}; template @@ -3386,7 +3454,7 @@ struct parse_instr_name, hold> { }; template constexpr auto asm_enter, disp8> = - seq_to_arr::value, byte_seq<0xC8>, typename disp16::value, typename disp8::value>>::value; + seq_to_arr, typename disp16::value, typename disp8::value>>::value; // extractps ANY [MRI] r [66] 17 template static constexpr std::array asm_extractps = {}; template @@ -3416,7 +3484,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_f2xm1; }; template <> -constexpr auto asm_f2xm1<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xF0>>>::value; +constexpr auto asm_f2xm1<> = seq_to_arr, byte_seq<0xF0>>>::value; // fabs ANY [NONE] [] E1 template static constexpr std::array asm_fabs = {}; template @@ -3424,7 +3492,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fabs; }; template <> -constexpr auto asm_fabs<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xE1>>>::value; +constexpr auto asm_fabs<> = seq_to_arr, byte_seq<0xE1>>>::value; // fadd ANY [M] 0 [] D8 template static constexpr std::array asm_fadd = {}; template @@ -3452,11 +3520,11 @@ seq_to_arr::_67h>::value, typename // fadd ANY [O] [] C0 template -constexpr auto asm_fadd, zip::with> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xC0 + reg::value>::value>>>::value; +constexpr auto asm_fadd, zip::with> = seq_to_arr, byte_seq<0xC0 + reg::value>::value>>>::value; // fadd ANY [O] [] C0 template -constexpr auto asm_fadd::with, st<0>> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xC0 + reg::value>::value>>>::value; +constexpr auto asm_fadd::with, st<0>> = seq_to_arr, byte_seq<0xC0 + reg::value>::value>>>::value; // faddp ANY [NONE] [] C1 template static constexpr std::array asm_faddp = {}; template @@ -3464,11 +3532,11 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_faddp; }; template <> -constexpr auto asm_faddp<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xC1>>>::value; +constexpr auto asm_faddp<> = seq_to_arr, byte_seq<0xC1>>>::value; // faddp ANY [O] [] C0 template -constexpr auto asm_faddp::with> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xC0 + reg::value>::value>>>::value; +constexpr auto asm_faddp::with> = seq_to_arr, byte_seq<0xC0 + reg::value>::value>>>::value; // fbld ANY [M] 4 [] DF template static constexpr std::array asm_fbld = {}; template @@ -3504,7 +3572,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fchs; }; template <> -constexpr auto asm_fchs<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xE0>>>::value; +constexpr auto asm_fchs<> = seq_to_arr, byte_seq<0xE0>>>::value; // fclex ANY [NONE] [9B] E2 template static constexpr std::array asm_fclex = {}; template @@ -3512,7 +3580,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fclex; }; template <> -constexpr auto asm_fclex<> = seq_to_arr, byte_seq<0xDB>, typename REX<0, 0, 0, 0>::value, byte_seq<0xE2>>>::value; +constexpr auto asm_fclex<> = seq_to_arr, byte_seq<0xDB>, byte_seq<0xE2>>>::value; // fcmovb ANY [O] [] C0 template static constexpr std::array asm_fcmovb = {}; template @@ -3520,7 +3588,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fcmovb; }; template -constexpr auto asm_fcmovb::with> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xC0 + reg::value>::value>>>::value; +constexpr auto asm_fcmovb::with> = seq_to_arr, byte_seq<0xC0 + reg::value>::value>>>::value; // fcmovbe ANY [O] [] D0 template static constexpr std::array asm_fcmovbe = {}; template @@ -3528,7 +3596,7 @@ struct parse_instr_name, hold; }; template -constexpr auto asm_fcmovbe::with> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xD0 + reg::value>::value>>>::value; +constexpr auto asm_fcmovbe::with> = seq_to_arr, byte_seq<0xD0 + reg::value>::value>>>::value; // fcmove ANY [O] [] C8 template static constexpr std::array asm_fcmove = {}; template @@ -3536,7 +3604,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fcmove; }; template -constexpr auto asm_fcmove::with> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xC8 + reg::value>::value>>>::value; +constexpr auto asm_fcmove::with> = seq_to_arr, byte_seq<0xC8 + reg::value>::value>>>::value; // fcmovnb ANY [O] [] C0 template static constexpr std::array asm_fcmovnb = {}; template @@ -3544,7 +3612,7 @@ struct parse_instr_name, hold; }; template -constexpr auto asm_fcmovnb::with> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xC0 + reg::value>::value>>>::value; +constexpr auto asm_fcmovnb::with> = seq_to_arr, byte_seq<0xC0 + reg::value>::value>>>::value; // fcmovnbe ANY [O] [] D0 template static constexpr std::array asm_fcmovnbe = {}; template @@ -3552,7 +3620,7 @@ struct parse_instr_name, hold< static constexpr auto value = asm_fcmovnbe; }; template -constexpr auto asm_fcmovnbe::with> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xD0 + reg::value>::value>>>::value; +constexpr auto asm_fcmovnbe::with> = seq_to_arr, byte_seq<0xD0 + reg::value>::value>>>::value; // fcmovne ANY [O] [] C8 template static constexpr std::array asm_fcmovne = {}; template @@ -3560,7 +3628,7 @@ struct parse_instr_name, hold; }; template -constexpr auto asm_fcmovne::with> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xC8 + reg::value>::value>>>::value; +constexpr auto asm_fcmovne::with> = seq_to_arr, byte_seq<0xC8 + reg::value>::value>>>::value; // fcmovnu ANY [O] [] D8 template static constexpr std::array asm_fcmovnu = {}; template @@ -3568,7 +3636,7 @@ struct parse_instr_name, hold; }; template -constexpr auto asm_fcmovnu::with> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xD8 + reg::value>::value>>>::value; +constexpr auto asm_fcmovnu::with> = seq_to_arr, byte_seq<0xD8 + reg::value>::value>>>::value; // fcmovu ANY [O] [] D8 template static constexpr std::array asm_fcmovu = {}; template @@ -3576,7 +3644,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fcmovu; }; template -constexpr auto asm_fcmovu::with> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xD8 + reg::value>::value>>>::value; +constexpr auto asm_fcmovu::with> = seq_to_arr, byte_seq<0xD8 + reg::value>::value>>>::value; // fcom ANY [NONE] [] D1 template static constexpr std::array asm_fcom = {}; template @@ -3584,7 +3652,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fcom; }; template <> -constexpr auto asm_fcom<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xD1>>>::value; +constexpr auto asm_fcom<> = seq_to_arr, byte_seq<0xD1>>>::value; // fcom ANY [M] 2 [] D8 template @@ -3608,7 +3676,7 @@ seq_to_arr::_67h>::value, typename // fcom ANY [O] [] D0 template -constexpr auto asm_fcom::with> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xD0 + reg::value>::value>>>::value; +constexpr auto asm_fcom::with> = seq_to_arr, byte_seq<0xD0 + reg::value>::value>>>::value; // fcomi ANY [O] [] F0 template static constexpr std::array asm_fcomi = {}; template @@ -3616,7 +3684,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fcomi; }; template -constexpr auto asm_fcomi::with> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xF0 + reg::value>::value>>>::value; +constexpr auto asm_fcomi::with> = seq_to_arr, byte_seq<0xF0 + reg::value>::value>>>::value; // fcomip ANY [O] [] F0 template static constexpr std::array asm_fcomip = {}; template @@ -3624,7 +3692,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fcomip; }; template -constexpr auto asm_fcomip::with> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xF0 + reg::value>::value>>>::value; +constexpr auto asm_fcomip::with> = seq_to_arr, byte_seq<0xF0 + reg::value>::value>>>::value; // fcomp ANY [NONE] [] D9 template static constexpr std::array asm_fcomp = {}; template @@ -3632,7 +3700,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fcomp; }; template <> -constexpr auto asm_fcomp<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xD9>>>::value; +constexpr auto asm_fcomp<> = seq_to_arr, byte_seq<0xD9>>>::value; // fcomp ANY [M] 3 [] D8 template @@ -3656,7 +3724,7 @@ seq_to_arr::_67h>::value, typename // fcomp ANY [O] [] D8 template -constexpr auto asm_fcomp::with> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xD8 + reg::value>::value>>>::value; +constexpr auto asm_fcomp::with> = seq_to_arr, byte_seq<0xD8 + reg::value>::value>>>::value; // fcompp ANY [NONE] [] D9 template static constexpr std::array asm_fcompp = {}; template @@ -3664,7 +3732,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fcompp; }; template <> -constexpr auto asm_fcompp<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xD9>>>::value; +constexpr auto asm_fcompp<> = seq_to_arr, byte_seq<0xD9>>>::value; // fcos ANY [NONE] [] FF template static constexpr std::array asm_fcos = {}; template @@ -3672,7 +3740,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fcos; }; template <> -constexpr auto asm_fcos<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xFF>>>::value; +constexpr auto asm_fcos<> = seq_to_arr, byte_seq<0xFF>>>::value; // fdecstp ANY [NONE] [] F6 template static constexpr std::array asm_fdecstp = {}; template @@ -3680,7 +3748,7 @@ struct parse_instr_name, hold; }; template <> -constexpr auto asm_fdecstp<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xF6>>>::value; +constexpr auto asm_fdecstp<> = seq_to_arr, byte_seq<0xF6>>>::value; // fdiv ANY [M] 6 [] D8 template static constexpr std::array asm_fdiv = {}; template @@ -3708,11 +3776,11 @@ seq_to_arr::_67h>::value, typename // fdiv ANY [O] [] F0 template -constexpr auto asm_fdiv, zip::with> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xF0 + reg::value>::value>>>::value; +constexpr auto asm_fdiv, zip::with> = seq_to_arr, byte_seq<0xF0 + reg::value>::value>>>::value; // fdiv ANY [O] [] F8 template -constexpr auto asm_fdiv::with, st<0>> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xF8 + reg::value>::value>>>::value; +constexpr auto asm_fdiv::with, st<0>> = seq_to_arr, byte_seq<0xF8 + reg::value>::value>>>::value; // fdivp ANY [NONE] [] F9 template static constexpr std::array asm_fdivp = {}; template @@ -3720,11 +3788,11 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fdivp; }; template <> -constexpr auto asm_fdivp<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xF9>>>::value; +constexpr auto asm_fdivp<> = seq_to_arr, byte_seq<0xF9>>>::value; // fdivp ANY [O] [] F8 template -constexpr auto asm_fdivp::with> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xF8 + reg::value>::value>>>::value; +constexpr auto asm_fdivp::with> = seq_to_arr, byte_seq<0xF8 + reg::value>::value>>>::value; // fdivr ANY [M] 7 [] D8 template static constexpr std::array asm_fdivr = {}; template @@ -3752,11 +3820,11 @@ seq_to_arr::_67h>::value, typename // fdivr ANY [O] [] F8 template -constexpr auto asm_fdivr, zip::with> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xF8 + reg::value>::value>>>::value; +constexpr auto asm_fdivr, zip::with> = seq_to_arr, byte_seq<0xF8 + reg::value>::value>>>::value; // fdivr ANY [O] [] F0 template -constexpr auto asm_fdivr::with, st<0>> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xF0 + reg::value>::value>>>::value; +constexpr auto asm_fdivr::with, st<0>> = seq_to_arr, byte_seq<0xF0 + reg::value>::value>>>::value; // fdivrp ANY [NONE] [] F1 template static constexpr std::array asm_fdivrp = {}; template @@ -3764,11 +3832,11 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fdivrp; }; template <> -constexpr auto asm_fdivrp<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xF1>>>::value; +constexpr auto asm_fdivrp<> = seq_to_arr, byte_seq<0xF1>>>::value; // fdivrp ANY [O] [] F0 template -constexpr auto asm_fdivrp::with> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xF0 + reg::value>::value>>>::value; +constexpr auto asm_fdivrp::with> = seq_to_arr, byte_seq<0xF0 + reg::value>::value>>>::value; // femms ANY [NONE] [] 0E template static constexpr std::array asm_femms = {}; template @@ -3776,7 +3844,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_femms; }; template <> -constexpr auto asm_femms<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x0E>>>::value; +constexpr auto asm_femms<> = seq_to_arr, byte_seq<0x0E>>>::value; // ffree ANY [O] [] C0 template static constexpr std::array asm_ffree = {}; template @@ -3784,7 +3852,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_ffree; }; template -constexpr auto asm_ffree::with> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xC0 + reg::value>::value>>>::value; +constexpr auto asm_ffree::with> = seq_to_arr, byte_seq<0xC0 + reg::value>::value>>>::value; // fiadd ANY [M] 0 [] DE template static constexpr std::array asm_fiadd = {}; template @@ -3970,7 +4038,7 @@ struct parse_instr_name, hold; }; template <> -constexpr auto asm_fincstp<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xF7>>>::value; +constexpr auto asm_fincstp<> = seq_to_arr, byte_seq<0xF7>>>::value; // finit ANY [NONE] [9B] E3 template static constexpr std::array asm_finit = {}; template @@ -3978,7 +4046,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_finit; }; template <> -constexpr auto asm_finit<> = seq_to_arr, byte_seq<0xDB>, typename REX<0, 0, 0, 0>::value, byte_seq<0xE3>>>::value; +constexpr auto asm_finit<> = seq_to_arr, byte_seq<0xDB>, byte_seq<0xE3>>>::value; // fist ANY [M] 2 [] DF template static constexpr std::array asm_fist = {}; template @@ -4156,7 +4224,7 @@ seq_to_arr::_67h>::value, typename // fld ANY [O] [] C0 template -constexpr auto asm_fld::with> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xC0 + reg::value>::value>>>::value; +constexpr auto asm_fld::with> = seq_to_arr, byte_seq<0xC0 + reg::value>::value>>>::value; // fld1 ANY [NONE] [] E8 template static constexpr std::array asm_fld1 = {}; template @@ -4164,7 +4232,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fld1; }; template <> -constexpr auto asm_fld1<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xE8>>>::value; +constexpr auto asm_fld1<> = seq_to_arr, byte_seq<0xE8>>>::value; // fldcw ANY [M] 5 [] D9 template static constexpr std::array asm_fldcw = {}; template @@ -4196,7 +4264,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fldl2e; }; template <> -constexpr auto asm_fldl2e<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xEA>>>::value; +constexpr auto asm_fldl2e<> = seq_to_arr, byte_seq<0xEA>>>::value; // fldl2t ANY [NONE] [] E9 template static constexpr std::array asm_fldl2t = {}; template @@ -4204,7 +4272,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fldl2t; }; template <> -constexpr auto asm_fldl2t<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xE9>>>::value; +constexpr auto asm_fldl2t<> = seq_to_arr, byte_seq<0xE9>>>::value; // fldlg2 ANY [NONE] [] EC template static constexpr std::array asm_fldlg2 = {}; template @@ -4212,7 +4280,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fldlg2; }; template <> -constexpr auto asm_fldlg2<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xEC>>>::value; +constexpr auto asm_fldlg2<> = seq_to_arr, byte_seq<0xEC>>>::value; // fldln2 ANY [NONE] [] ED template static constexpr std::array asm_fldln2 = {}; template @@ -4220,7 +4288,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fldln2; }; template <> -constexpr auto asm_fldln2<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xED>>>::value; +constexpr auto asm_fldln2<> = seq_to_arr, byte_seq<0xED>>>::value; // fldpi ANY [NONE] [] EB template static constexpr std::array asm_fldpi = {}; template @@ -4228,7 +4296,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fldpi; }; template <> -constexpr auto asm_fldpi<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xEB>>>::value; +constexpr auto asm_fldpi<> = seq_to_arr, byte_seq<0xEB>>>::value; // fldz ANY [NONE] [] EE template static constexpr std::array asm_fldz = {}; template @@ -4236,7 +4304,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fldz; }; template <> -constexpr auto asm_fldz<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xEE>>>::value; +constexpr auto asm_fldz<> = seq_to_arr, byte_seq<0xEE>>>::value; // fmul ANY [M] 1 [] D8 template static constexpr std::array asm_fmul = {}; template @@ -4264,11 +4332,11 @@ seq_to_arr::_67h>::value, typename // fmul ANY [O] [] C8 template -constexpr auto asm_fmul, zip::with> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xC8 + reg::value>::value>>>::value; +constexpr auto asm_fmul, zip::with> = seq_to_arr, byte_seq<0xC8 + reg::value>::value>>>::value; // fmul ANY [O] [] C8 template -constexpr auto asm_fmul::with, st<0>> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xC8 + reg::value>::value>>>::value; +constexpr auto asm_fmul::with, st<0>> = seq_to_arr, byte_seq<0xC8 + reg::value>::value>>>::value; // fmulp ANY [NONE] [] C9 template static constexpr std::array asm_fmulp = {}; template @@ -4276,11 +4344,11 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fmulp; }; template <> -constexpr auto asm_fmulp<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xC9>>>::value; +constexpr auto asm_fmulp<> = seq_to_arr, byte_seq<0xC9>>>::value; // fmulp ANY [O] [] C8 template -constexpr auto asm_fmulp::with> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xC8 + reg::value>::value>>>::value; +constexpr auto asm_fmulp::with> = seq_to_arr, byte_seq<0xC8 + reg::value>::value>>>::value; // fnclex ANY [NONE] [] E2 template static constexpr std::array asm_fnclex = {}; template @@ -4288,7 +4356,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fnclex; }; template <> -constexpr auto asm_fnclex<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xE2>>>::value; +constexpr auto asm_fnclex<> = seq_to_arr, byte_seq<0xE2>>>::value; // fninit ANY [NONE] [] E3 template static constexpr std::array asm_fninit = {}; template @@ -4296,7 +4364,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fninit; }; template <> -constexpr auto asm_fninit<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xE3>>>::value; +constexpr auto asm_fninit<> = seq_to_arr, byte_seq<0xE3>>>::value; // fnop ANY [NONE] [] D0 template static constexpr std::array asm_fnop = {}; template @@ -4304,7 +4372,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fnop; }; template <> -constexpr auto asm_fnop<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xD0>>>::value; +constexpr auto asm_fnop<> = seq_to_arr, byte_seq<0xD0>>>::value; // fnsave ANY [M] 6 [] DD template static constexpr std::array asm_fnsave = {}; template @@ -4346,7 +4414,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fnstsw; }; template <> -constexpr auto asm_fnstsw = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xE0>>>::value; +constexpr auto asm_fnstsw = seq_to_arr, byte_seq<0xE0>>>::value; // fnstsw ANY [M] 7 [] DD template @@ -4364,7 +4432,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fpatan; }; template <> -constexpr auto asm_fpatan<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xD9>>>::value; +constexpr auto asm_fpatan<> = seq_to_arr, byte_seq<0xD9>>>::value; // fprem ANY [NONE] [] F8 template static constexpr std::array asm_fprem = {}; template @@ -4372,7 +4440,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fprem; }; template <> -constexpr auto asm_fprem<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xF8>>>::value; +constexpr auto asm_fprem<> = seq_to_arr, byte_seq<0xF8>>>::value; // fprem1 ANY [NONE] [] F5 template static constexpr std::array asm_fprem1 = {}; template @@ -4380,7 +4448,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fprem1; }; template <> -constexpr auto asm_fprem1<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xF5>>>::value; +constexpr auto asm_fprem1<> = seq_to_arr, byte_seq<0xF5>>>::value; // fptan ANY [NONE] [F2] D9 template static constexpr std::array asm_fptan = {}; template @@ -4388,7 +4456,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fptan; }; template <> -constexpr auto asm_fptan<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xD9>>>::value; +constexpr auto asm_fptan<> = seq_to_arr, byte_seq<0xD9>>>::value; // frndint ANY [NONE] [] FC template static constexpr std::array asm_frndint = {}; template @@ -4396,7 +4464,7 @@ struct parse_instr_name, hold; }; template <> -constexpr auto asm_frndint<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xFC>>>::value; +constexpr auto asm_frndint<> = seq_to_arr, byte_seq<0xFC>>>::value; // frstor ANY [M] 4 [] DD template static constexpr std::array asm_frstor = {}; template @@ -4424,7 +4492,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fscale; }; template <> -constexpr auto asm_fscale<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xFD>>>::value; +constexpr auto asm_fscale<> = seq_to_arr, byte_seq<0xFD>>>::value; // fsin ANY [NONE] [] FE template static constexpr std::array asm_fsin = {}; template @@ -4432,7 +4500,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fsin; }; template <> -constexpr auto asm_fsin<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xFE>>>::value; +constexpr auto asm_fsin<> = seq_to_arr, byte_seq<0xFE>>>::value; // fsincos ANY [NONE] [] FB template static constexpr std::array asm_fsincos = {}; template @@ -4440,7 +4508,7 @@ struct parse_instr_name, hold; }; template <> -constexpr auto asm_fsincos<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xFB>>>::value; +constexpr auto asm_fsincos<> = seq_to_arr, byte_seq<0xFB>>>::value; // fsqrt ANY [NONE] [] FE template static constexpr std::array asm_fsqrt = {}; template @@ -4448,7 +4516,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fsqrt; }; template <> -constexpr auto asm_fsqrt<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xFE>>>::value; +constexpr auto asm_fsqrt<> = seq_to_arr, byte_seq<0xFE>>>::value; // fst ANY [M] 2 [] D9 template static constexpr std::array asm_fst = {}; template @@ -4476,7 +4544,7 @@ seq_to_arr::_67h>::value, typename // fst ANY [O] [] D0 template -constexpr auto asm_fst::with> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xD0 + reg::value>::value>>>::value; +constexpr auto asm_fst::with> = seq_to_arr, byte_seq<0xD0 + reg::value>::value>>>::value; // fstcw ANY [M] 7 [9B] D9 template static constexpr std::array asm_fstcw = {}; template @@ -4538,7 +4606,7 @@ seq_to_arr::_67h>::value, typename // fstp ANY [O] [] D8 template -constexpr auto asm_fstp::with> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xD8 + reg::value>::value>>>::value; +constexpr auto asm_fstp::with> = seq_to_arr, byte_seq<0xD8 + reg::value>::value>>>::value; // fstsw ANY [NONE] [9B] E0 template static constexpr std::array asm_fstsw = {}; template @@ -4546,7 +4614,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fstsw; }; template <> -constexpr auto asm_fstsw = seq_to_arr, byte_seq<0xDF>, typename REX<0, 0, 0, 0>::value, byte_seq<0xE0>>>::value; +constexpr auto asm_fstsw = seq_to_arr, byte_seq<0xDF>, byte_seq<0xE0>>>::value; // fstsw ANY [M] 7 [9B] DD template @@ -4584,11 +4652,11 @@ seq_to_arr::_67h>::value, typename // fsub ANY [O] [] E0 template -constexpr auto asm_fsub, zip::with> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xE0 + reg::value>::value>>>::value; +constexpr auto asm_fsub, zip::with> = seq_to_arr, byte_seq<0xE0 + reg::value>::value>>>::value; // fsub ANY [O] [] E8 template -constexpr auto asm_fsub::with, st<0>> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xE8 + reg::value>::value>>>::value; +constexpr auto asm_fsub::with, st<0>> = seq_to_arr, byte_seq<0xE8 + reg::value>::value>>>::value; // fsubp ANY [NONE] [] E9 template static constexpr std::array asm_fsubp = {}; template @@ -4596,11 +4664,11 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fsubp; }; template <> -constexpr auto asm_fsubp<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xE9>>>::value; +constexpr auto asm_fsubp<> = seq_to_arr, byte_seq<0xE9>>>::value; // fsubp ANY [O] [] E8 template -constexpr auto asm_fsubp::with> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xE8 + reg::value>::value>>>::value; +constexpr auto asm_fsubp::with> = seq_to_arr, byte_seq<0xE8 + reg::value>::value>>>::value; // fsubr ANY [M] 5 [] D8 template static constexpr std::array asm_fsubr = {}; template @@ -4628,11 +4696,11 @@ seq_to_arr::_67h>::value, typename // fsubr ANY [O] [] E8 template -constexpr auto asm_fsubr, zip::with> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xE8 + reg::value>::value>>>::value; +constexpr auto asm_fsubr, zip::with> = seq_to_arr, byte_seq<0xE8 + reg::value>::value>>>::value; // fsubr ANY [O] [] E0 template -constexpr auto asm_fsubr::with, st<0>> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xE0 + reg::value>::value>>>::value; +constexpr auto asm_fsubr::with, st<0>> = seq_to_arr, byte_seq<0xE0 + reg::value>::value>>>::value; // fsubrp ANY [NONE] [] E1 template static constexpr std::array asm_fsubrp = {}; template @@ -4640,11 +4708,11 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fsubrp; }; template <> -constexpr auto asm_fsubrp<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xE1>>>::value; +constexpr auto asm_fsubrp<> = seq_to_arr, byte_seq<0xE1>>>::value; // fsubrp ANY [O] [] E0 template -constexpr auto asm_fsubrp::with> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xE0 + reg::value>::value>>>::value; +constexpr auto asm_fsubrp::with> = seq_to_arr, byte_seq<0xE0 + reg::value>::value>>>::value; // ftst ANY [NONE] [] E4 template static constexpr std::array asm_ftst = {}; template @@ -4652,7 +4720,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_ftst; }; template <> -constexpr auto asm_ftst<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xE4>>>::value; +constexpr auto asm_ftst<> = seq_to_arr, byte_seq<0xE4>>>::value; // fucom ANY [NONE] [] E1 template static constexpr std::array asm_fucom = {}; template @@ -4660,11 +4728,11 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fucom; }; template <> -constexpr auto asm_fucom<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xE1>>>::value; +constexpr auto asm_fucom<> = seq_to_arr, byte_seq<0xE1>>>::value; // fucom ANY [O] [] E0 template -constexpr auto asm_fucom::with> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xE0 + reg::value>::value>>>::value; +constexpr auto asm_fucom::with> = seq_to_arr, byte_seq<0xE0 + reg::value>::value>>>::value; // fucomi ANY [O] [] E8 template static constexpr std::array asm_fucomi = {}; template @@ -4672,7 +4740,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fucomi; }; template -constexpr auto asm_fucomi::with> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xE8 + reg::value>::value>>>::value; +constexpr auto asm_fucomi::with> = seq_to_arr, byte_seq<0xE8 + reg::value>::value>>>::value; // fucomip ANY [O] [] E8 template static constexpr std::array asm_fucomip = {}; template @@ -4680,7 +4748,7 @@ struct parse_instr_name, hold; }; template -constexpr auto asm_fucomip::with> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xE8 + reg::value>::value>>>::value; +constexpr auto asm_fucomip::with> = seq_to_arr, byte_seq<0xE8 + reg::value>::value>>>::value; // fucomp ANY [NONE] [] E9 template static constexpr std::array asm_fucomp = {}; template @@ -4688,11 +4756,11 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fucomp; }; template <> -constexpr auto asm_fucomp<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xE9>>>::value; +constexpr auto asm_fucomp<> = seq_to_arr, byte_seq<0xE9>>>::value; // fucomp ANY [O] [] E8 template -constexpr auto asm_fucomp::with> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xE8 + reg::value>::value>>>::value; +constexpr auto asm_fucomp::with> = seq_to_arr, byte_seq<0xE8 + reg::value>::value>>>::value; // fucompp ANY [NONE] [] E9 template static constexpr std::array asm_fucompp = {}; template @@ -4700,7 +4768,7 @@ struct parse_instr_name, hold; }; template <> -constexpr auto asm_fucompp<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xE9>>>::value; +constexpr auto asm_fucompp<> = seq_to_arr, byte_seq<0xE9>>>::value; // fwait ANY [NONE] [] 9B template static constexpr std::array asm_fwait = {}; template @@ -4708,7 +4776,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fwait; }; template <> -constexpr auto asm_fwait<> = seq_to_arr::value, byte_seq<0x9B>>>::value; +constexpr auto asm_fwait<> = seq_to_arr>>::value; // fxam ANY [NONE] [] E5 template static constexpr std::array asm_fxam = {}; template @@ -4716,7 +4784,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fxam; }; template <> -constexpr auto asm_fxam<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xE5>>>::value; +constexpr auto asm_fxam<> = seq_to_arr, byte_seq<0xE5>>>::value; // fxch ANY [NONE] [] C9 template static constexpr std::array asm_fxch = {}; template @@ -4724,11 +4792,11 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fxch; }; template <> -constexpr auto asm_fxch<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xC9>>>::value; +constexpr auto asm_fxch<> = seq_to_arr, byte_seq<0xC9>>>::value; // fxch ANY [O] [] C8 template -constexpr auto asm_fxch::with> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xC8 + reg::value>::value>>>::value; +constexpr auto asm_fxch::with> = seq_to_arr, byte_seq<0xC8 + reg::value>::value>>>::value; // fxrstor ANY [NONE] 1 [] AE template static constexpr std::array asm_fxrstor = {}; template @@ -4736,7 +4804,7 @@ struct parse_instr_name, hold; }; template -constexpr auto asm_fxrstor> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xAE>, typename mrm::template value>>>>::value; +constexpr auto asm_fxrstor> = seq_to_arr, byte_seq<0xAE>, typename mrm::template value>>>>::value; // fxrstor64 X64 [NONE] 1 [] AE template static constexpr std::array asm_fxrstor64 = {}; template @@ -4752,7 +4820,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fxsave; }; template -constexpr auto asm_fxsave> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xAE>, typename mrm::template value>>>>::value; +constexpr auto asm_fxsave> = seq_to_arr, byte_seq<0xAE>, typename mrm::template value>>>>::value; // fxsave64 X64 [NONE] 0 [] AE template static constexpr std::array asm_fxsave64 = {}; template @@ -4768,7 +4836,7 @@ struct parse_instr_name, hold; }; template <> -constexpr auto asm_fxtract<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xF4>>>::value; +constexpr auto asm_fxtract<> = seq_to_arr, byte_seq<0xF4>>>::value; // fyl2x ANY [NONE] [] F1 template static constexpr std::array asm_fyl2x = {}; template @@ -4776,7 +4844,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_fyl2x; }; template <> -constexpr auto asm_fyl2x<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xF1>>>::value; +constexpr auto asm_fyl2x<> = seq_to_arr, byte_seq<0xF1>>>::value; // fyl2xp1 ANY [NONE] [] F9 template static constexpr std::array asm_fyl2xp1 = {}; template @@ -4784,7 +4852,7 @@ struct parse_instr_name, hold; }; template <> -constexpr auto asm_fyl2xp1<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xF9>>>::value; +constexpr auto asm_fyl2xp1<> = seq_to_arr, byte_seq<0xF9>>>::value; // getsec ANY [NONE] [] 37 template static constexpr std::array asm_getsec = {}; template @@ -4792,7 +4860,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_getsec; }; template <> -constexpr auto asm_getsec<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x37>>>::value; +constexpr auto asm_getsec<> = seq_to_arr, byte_seq<0x37>>>::value; // gf2p8affineinvqb ANY [RMI] r [66] CF template static constexpr std::array asm_gf2p8affineinvqb = {}; template @@ -4870,7 +4938,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_hlt; }; template <> -constexpr auto asm_hlt<> = seq_to_arr::value, byte_seq<0xF4>>>::value; +constexpr auto asm_hlt<> = seq_to_arr>>::value; // hreset ANY [I] 0 [F3] F0 template static constexpr std::array asm_hreset = {}; template @@ -4879,7 +4947,7 @@ struct parse_instr_name, hold> { }; template constexpr auto asm_hreset, eax> = - seq_to_arr, byte_seq<0x0F, 0x3A>, typename REX<0, 0, 0, 0>::value, byte_seq<0xF0>, typename disp8::value>>::value; + seq_to_arr, byte_seq<0x0F, 0x3A>, byte_seq<0xF0>, typename disp8::value>>::value; // hsubpd ANY [RM] r [66] 7D template static constexpr std::array asm_hsubpd = {}; template @@ -5094,17 +5162,17 @@ struct parse_instr_name, hold> { }; template constexpr auto asm_in> = - seq_to_arr::value, byte_seq<0xE4>, typename disp8::value>>::value; + seq_to_arr, typename disp8::value>>::value; // in ANY [I] [66] E5 template constexpr auto asm_in> = - seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xE5>, typename disp8::value>>::value; + seq_to_arr, byte_seq<0xE5>, typename disp8::value>>::value; // in ANY [I] [] E5 template constexpr auto asm_in> = - seq_to_arr::value, byte_seq<0xE5>, typename disp8::value>>::value; + seq_to_arr, typename disp8::value>>::value; // inc X86 [O] [66] 40 template static constexpr std::array asm_inc = {}; template @@ -5180,7 +5248,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_insb; }; template <> -constexpr auto asm_insb = seq_to_arr::value, byte_seq<0x6C>>>::value; +constexpr auto asm_insb = seq_to_arr>>::value; // insd ANY [NONE] [] 6D template static constexpr std::array asm_insd = {}; template @@ -5188,7 +5256,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_insd; }; template <> -constexpr auto asm_insd = seq_to_arr::value, byte_seq<0x6D>>>::value; +constexpr auto asm_insd = seq_to_arr>>::value; // insertps ANY [RMI] r [66] 21 template static constexpr std::array asm_insertps = {}; template @@ -5226,7 +5294,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_insw; }; template <> -constexpr auto asm_insw = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x6D>>>::value; +constexpr auto asm_insw = seq_to_arr, byte_seq<0x6D>>>::value; // int ANY [I] [] CD template static constexpr std::array asm_int = {}; template @@ -5235,7 +5303,7 @@ struct parse_instr_name, hold> { }; template constexpr auto asm_int> = - seq_to_arr::value, byte_seq<0xCD>, typename disp8::value>>::value; + seq_to_arr, typename disp8::value>>::value; // int3 ANY [NONE] [] CC template static constexpr std::array asm_int3 = {}; template @@ -5243,7 +5311,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_int3; }; template <> -constexpr auto asm_int3<> = seq_to_arr::value, byte_seq<0xCC>>>::value; +constexpr auto asm_int3<> = seq_to_arr>>::value; // into X86 [NONE] [] CE template static constexpr std::array asm_into = {}; template @@ -5251,7 +5319,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_into; }; template <> -constexpr auto asm_into<> = seq_to_arr::value, byte_seq<0xCE>>>::value; +constexpr auto asm_into<> = seq_to_arr>>::value; // invd ANY [NONE] [] 08 template static constexpr std::array asm_invd = {}; template @@ -5259,7 +5327,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_invd; }; template <> -constexpr auto asm_invd<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x08>>>::value; +constexpr auto asm_invd<> = seq_to_arr, byte_seq<0x08>>>::value; // invept X86 [RM] r [66] 80 template static constexpr std::array asm_invept = {}; template @@ -5301,7 +5369,7 @@ struct parse_instr_name, hold; }; template <> -constexpr auto asm_invlpga<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xDF>>>::value; +constexpr auto asm_invlpga<> = seq_to_arr, byte_seq<0xDF>>>::value; // invpcid X86 [RM] r [66] 82 template static constexpr std::array asm_invpcid = {}; template @@ -5357,7 +5425,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_iret; }; template <> -constexpr auto asm_iret<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xCF>>>::value; +constexpr auto asm_iret<> = seq_to_arr, byte_seq<0xCF>>>::value; // iretd ANY [NONE] [] CF template static constexpr std::array asm_iretd = {}; template @@ -5365,7 +5433,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_iretd; }; template <> -constexpr auto asm_iretd<> = seq_to_arr::value, byte_seq<0xCF>>>::value; +constexpr auto asm_iretd<> = seq_to_arr>>::value; // iretq X64 [NONE] [] CF template static constexpr std::array asm_iretq = {}; template @@ -5381,15 +5449,15 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_ja; }; template -constexpr auto asm_ja> = seq_to_arr::value, byte_seq<0x77>, typename rel8::value>>::value; +constexpr auto asm_ja> = seq_to_arr, typename rel8::value>>::value; // ja X86 [D] [66] 87 template -constexpr auto asm_ja> = seq_to_arr, byte_seq<0x0F>, typename REX<0, 0, 0, 0>::value, byte_seq<0x87>, typename rel16::value>>::value; +constexpr auto asm_ja> = seq_to_arr, byte_seq<0x0F>, byte_seq<0x87>, typename rel16::value>>::value; // ja ANY [D] [] 87 template -constexpr auto asm_ja> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x87>, typename rel32::value>>::value; +constexpr auto asm_ja> = seq_to_arr, byte_seq<0x87>, typename rel32::value>>::value; // jae ANY [D] [] 73 template static constexpr std::array asm_jae = {}; template @@ -5397,15 +5465,15 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_jae; }; template -constexpr auto asm_jae> = seq_to_arr::value, byte_seq<0x73>, typename rel8::value>>::value; +constexpr auto asm_jae> = seq_to_arr, typename rel8::value>>::value; // jae X86 [D] [66] 83 template -constexpr auto asm_jae> = seq_to_arr, byte_seq<0x0F>, typename REX<0, 0, 0, 0>::value, byte_seq<0x83>, typename rel16::value>>::value; +constexpr auto asm_jae> = seq_to_arr, byte_seq<0x0F>, byte_seq<0x83>, typename rel16::value>>::value; // jae ANY [D] [] 83 template -constexpr auto asm_jae> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x83>, typename rel32::value>>::value; +constexpr auto asm_jae> = seq_to_arr, byte_seq<0x83>, typename rel32::value>>::value; // jb ANY [D] [] 72 template static constexpr std::array asm_jb = {}; template @@ -5413,15 +5481,15 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_jb; }; template -constexpr auto asm_jb> = seq_to_arr::value, byte_seq<0x72>, typename rel8::value>>::value; +constexpr auto asm_jb> = seq_to_arr, typename rel8::value>>::value; // jb X86 [D] [66] 82 template -constexpr auto asm_jb> = seq_to_arr, byte_seq<0x0F>, typename REX<0, 0, 0, 0>::value, byte_seq<0x82>, typename rel16::value>>::value; +constexpr auto asm_jb> = seq_to_arr, byte_seq<0x0F>, byte_seq<0x82>, typename rel16::value>>::value; // jb ANY [D] [] 82 template -constexpr auto asm_jb> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x82>, typename rel32::value>>::value; +constexpr auto asm_jb> = seq_to_arr, byte_seq<0x82>, typename rel32::value>>::value; // jbe ANY [D] [] 76 template static constexpr std::array asm_jbe = {}; template @@ -5429,15 +5497,15 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_jbe; }; template -constexpr auto asm_jbe> = seq_to_arr::value, byte_seq<0x76>, typename rel8::value>>::value; +constexpr auto asm_jbe> = seq_to_arr, typename rel8::value>>::value; // jbe X86 [D] [66] 86 template -constexpr auto asm_jbe> = seq_to_arr, byte_seq<0x0F>, typename REX<0, 0, 0, 0>::value, byte_seq<0x86>, typename rel16::value>>::value; +constexpr auto asm_jbe> = seq_to_arr, byte_seq<0x0F>, byte_seq<0x86>, typename rel16::value>>::value; // jbe ANY [D] [] 86 template -constexpr auto asm_jbe> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x86>, typename rel32::value>>::value; +constexpr auto asm_jbe> = seq_to_arr, byte_seq<0x86>, typename rel32::value>>::value; // jc ANY [D] [] 72 template static constexpr std::array asm_jc = {}; template @@ -5445,15 +5513,15 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_jc; }; template -constexpr auto asm_jc> = seq_to_arr::value, byte_seq<0x72>, typename rel8::value>>::value; +constexpr auto asm_jc> = seq_to_arr, typename rel8::value>>::value; // jc X86 [D] [66] 82 template -constexpr auto asm_jc> = seq_to_arr, byte_seq<0x0F>, typename REX<0, 0, 0, 0>::value, byte_seq<0x82>, typename rel16::value>>::value; +constexpr auto asm_jc> = seq_to_arr, byte_seq<0x0F>, byte_seq<0x82>, typename rel16::value>>::value; // jc ANY [D] [] 82 template -constexpr auto asm_jc> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x82>, typename rel32::value>>::value; +constexpr auto asm_jc> = seq_to_arr, byte_seq<0x82>, typename rel32::value>>::value; // je ANY [D] [] 74 template static constexpr std::array asm_je = {}; template @@ -5461,15 +5529,15 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_je; }; template -constexpr auto asm_je> = seq_to_arr::value, byte_seq<0x74>, typename rel8::value>>::value; +constexpr auto asm_je> = seq_to_arr, typename rel8::value>>::value; // je X86 [D] [66] 84 template -constexpr auto asm_je> = seq_to_arr, byte_seq<0x0F>, typename REX<0, 0, 0, 0>::value, byte_seq<0x84>, typename rel16::value>>::value; +constexpr auto asm_je> = seq_to_arr, byte_seq<0x0F>, byte_seq<0x84>, typename rel16::value>>::value; // je ANY [D] [] 84 template -constexpr auto asm_je> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x84>, typename rel32::value>>::value; +constexpr auto asm_je> = seq_to_arr, byte_seq<0x84>, typename rel32::value>>::value; // jecxz X86 [D] [] E3 template static constexpr std::array asm_jecxz = {}; template @@ -5477,7 +5545,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_jecxz; }; template -constexpr auto asm_jecxz> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xE3>, typename rel8::value>>::value; +constexpr auto asm_jecxz> = seq_to_arr, byte_seq<0xE3>, typename rel8::value>>::value; // jg ANY [D] [] 7F template static constexpr std::array asm_jg = {}; template @@ -5485,15 +5553,15 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_jg; }; template -constexpr auto asm_jg> = seq_to_arr::value, byte_seq<0x7F>, typename rel8::value>>::value; +constexpr auto asm_jg> = seq_to_arr, typename rel8::value>>::value; // jg X86 [D] [66] 8F template -constexpr auto asm_jg> = seq_to_arr, byte_seq<0x0F>, typename REX<0, 0, 0, 0>::value, byte_seq<0x8F>, typename rel16::value>>::value; +constexpr auto asm_jg> = seq_to_arr, byte_seq<0x0F>, byte_seq<0x8F>, typename rel16::value>>::value; // jg ANY [D] [] 8F template -constexpr auto asm_jg> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x8F>, typename rel32::value>>::value; +constexpr auto asm_jg> = seq_to_arr, byte_seq<0x8F>, typename rel32::value>>::value; // jge ANY [D] [] 7D template static constexpr std::array asm_jge = {}; template @@ -5501,15 +5569,15 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_jge; }; template -constexpr auto asm_jge> = seq_to_arr::value, byte_seq<0x7D>, typename rel8::value>>::value; +constexpr auto asm_jge> = seq_to_arr, typename rel8::value>>::value; // jge X86 [D] [66] 8D template -constexpr auto asm_jge> = seq_to_arr, byte_seq<0x0F>, typename REX<0, 0, 0, 0>::value, byte_seq<0x8D>, typename rel16::value>>::value; +constexpr auto asm_jge> = seq_to_arr, byte_seq<0x0F>, byte_seq<0x8D>, typename rel16::value>>::value; // jge ANY [D] [] 8D template -constexpr auto asm_jge> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x8D>, typename rel32::value>>::value; +constexpr auto asm_jge> = seq_to_arr, byte_seq<0x8D>, typename rel32::value>>::value; // jl ANY [D] [] 7C template static constexpr std::array asm_jl = {}; template @@ -5517,15 +5585,15 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_jl; }; template -constexpr auto asm_jl> = seq_to_arr::value, byte_seq<0x7C>, typename rel8::value>>::value; +constexpr auto asm_jl> = seq_to_arr, typename rel8::value>>::value; // jl X86 [D] [66] 8C template -constexpr auto asm_jl> = seq_to_arr, byte_seq<0x0F>, typename REX<0, 0, 0, 0>::value, byte_seq<0x8C>, typename rel16::value>>::value; +constexpr auto asm_jl> = seq_to_arr, byte_seq<0x0F>, byte_seq<0x8C>, typename rel16::value>>::value; // jl ANY [D] [] 8C template -constexpr auto asm_jl> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x8C>, typename rel32::value>>::value; +constexpr auto asm_jl> = seq_to_arr, byte_seq<0x8C>, typename rel32::value>>::value; // jle ANY [D] [] 7E template static constexpr std::array asm_jle = {}; template @@ -5533,15 +5601,15 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_jle; }; template -constexpr auto asm_jle> = seq_to_arr::value, byte_seq<0x7E>, typename rel8::value>>::value; +constexpr auto asm_jle> = seq_to_arr, typename rel8::value>>::value; // jle X86 [D] [66] 8E template -constexpr auto asm_jle> = seq_to_arr, byte_seq<0x0F>, typename REX<0, 0, 0, 0>::value, byte_seq<0x8E>, typename rel16::value>>::value; +constexpr auto asm_jle> = seq_to_arr, byte_seq<0x0F>, byte_seq<0x8E>, typename rel16::value>>::value; // jle ANY [D] [] 8E template -constexpr auto asm_jle> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x8E>, typename rel32::value>>::value; +constexpr auto asm_jle> = seq_to_arr, byte_seq<0x8E>, typename rel32::value>>::value; // jmp ANY [D] [] EB template static constexpr std::array asm_jmp = {}; template @@ -5549,27 +5617,35 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_jmp; }; template -constexpr auto asm_jmp> = seq_to_arr::value, byte_seq<0xEB>, typename rel8::value>>::value; +constexpr auto asm_jmp> = seq_to_arr, typename rel8::value>>::value; // jmp X86 [D] [66] E9 template -constexpr auto asm_jmp> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xE9>, typename rel16::value>>::value; +constexpr auto asm_jmp> = seq_to_arr, byte_seq<0xE9>, typename rel16::value>>::value; // jmp ANY [D] [] E9 template -constexpr auto asm_jmp> = seq_to_arr::value, byte_seq<0xE9>, typename rel32::value>>::value; +constexpr auto asm_jmp> = seq_to_arr, typename rel32::value>>::value; // jmp X86 [D] 4 [] FF template constexpr auto asm_jmp::with> = seq_to_arr>>, is_ext_v>, 0>::value, byte_seq<0xFF>, typename modrm, hold>>::value>>::value; +template +constexpr auto asm_jmp> = +seq_to_arr::_67h>::value, typename REX<0, is_ext_v>>, mrm::X, mrm::B>::value, byte_seq<0xFF>, typename mrm::template value>>>>::value; + // jmp X64 [D] 4 [] FF template constexpr auto asm_jmp::with> = seq_to_arr>>, is_ext_v>, 0>::value, byte_seq<0xFF>, typename modrm, hold>>::value>>::value; +template +constexpr auto asm_jmp> = +seq_to_arr::_67h>::value, typename REX<0, is_ext_v>>, mrm::X, mrm::B>::value, byte_seq<0xFF>, typename mrm::template value>>>>::value; + // jna ANY [D] [] 76 template static constexpr std::array asm_jna = {}; template @@ -5577,15 +5653,15 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_jna; }; template -constexpr auto asm_jna> = seq_to_arr::value, byte_seq<0x76>, typename rel8::value>>::value; +constexpr auto asm_jna> = seq_to_arr, typename rel8::value>>::value; // jna X86 [D] [66] 86 template -constexpr auto asm_jna> = seq_to_arr, byte_seq<0x0F>, typename REX<0, 0, 0, 0>::value, byte_seq<0x86>, typename rel16::value>>::value; +constexpr auto asm_jna> = seq_to_arr, byte_seq<0x0F>, byte_seq<0x86>, typename rel16::value>>::value; // jna ANY [D] [] 86 template -constexpr auto asm_jna> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x86>, typename rel32::value>>::value; +constexpr auto asm_jna> = seq_to_arr, byte_seq<0x86>, typename rel32::value>>::value; // jnae ANY [D] [] 72 template static constexpr std::array asm_jnae = {}; template @@ -5593,15 +5669,15 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_jnae; }; template -constexpr auto asm_jnae> = seq_to_arr::value, byte_seq<0x72>, typename rel8::value>>::value; +constexpr auto asm_jnae> = seq_to_arr, typename rel8::value>>::value; // jnae X86 [D] [66] 82 template -constexpr auto asm_jnae> = seq_to_arr, byte_seq<0x0F>, typename REX<0, 0, 0, 0>::value, byte_seq<0x82>, typename rel16::value>>::value; +constexpr auto asm_jnae> = seq_to_arr, byte_seq<0x0F>, byte_seq<0x82>, typename rel16::value>>::value; // jnae ANY [D] [] 82 template -constexpr auto asm_jnae> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x82>, typename rel32::value>>::value; +constexpr auto asm_jnae> = seq_to_arr, byte_seq<0x82>, typename rel32::value>>::value; // jnb ANY [D] [] 73 template static constexpr std::array asm_jnb = {}; template @@ -5609,15 +5685,15 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_jnb; }; template -constexpr auto asm_jnb> = seq_to_arr::value, byte_seq<0x73>, typename rel8::value>>::value; +constexpr auto asm_jnb> = seq_to_arr, typename rel8::value>>::value; // jnb X86 [D] [66] 83 template -constexpr auto asm_jnb> = seq_to_arr, byte_seq<0x0F>, typename REX<0, 0, 0, 0>::value, byte_seq<0x83>, typename rel16::value>>::value; +constexpr auto asm_jnb> = seq_to_arr, byte_seq<0x0F>, byte_seq<0x83>, typename rel16::value>>::value; // jnb ANY [D] [] 83 template -constexpr auto asm_jnb> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x83>, typename rel32::value>>::value; +constexpr auto asm_jnb> = seq_to_arr, byte_seq<0x83>, typename rel32::value>>::value; // jnbe ANY [D] [] 77 template static constexpr std::array asm_jnbe = {}; template @@ -5625,15 +5701,15 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_jnbe; }; template -constexpr auto asm_jnbe> = seq_to_arr::value, byte_seq<0x77>, typename rel8::value>>::value; +constexpr auto asm_jnbe> = seq_to_arr, typename rel8::value>>::value; // jnbe X86 [D] [66] 87 template -constexpr auto asm_jnbe> = seq_to_arr, byte_seq<0x0F>, typename REX<0, 0, 0, 0>::value, byte_seq<0x87>, typename rel16::value>>::value; +constexpr auto asm_jnbe> = seq_to_arr, byte_seq<0x0F>, byte_seq<0x87>, typename rel16::value>>::value; // jnbe ANY [D] [] 87 template -constexpr auto asm_jnbe> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x87>, typename rel32::value>>::value; +constexpr auto asm_jnbe> = seq_to_arr, byte_seq<0x87>, typename rel32::value>>::value; // jnc ANY [D] [] 73 template static constexpr std::array asm_jnc = {}; template @@ -5641,15 +5717,15 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_jnc; }; template -constexpr auto asm_jnc> = seq_to_arr::value, byte_seq<0x73>, typename rel8::value>>::value; +constexpr auto asm_jnc> = seq_to_arr, typename rel8::value>>::value; // jnc X86 [D] [66] 83 template -constexpr auto asm_jnc> = seq_to_arr, byte_seq<0x0F>, typename REX<0, 0, 0, 0>::value, byte_seq<0x83>, typename rel16::value>>::value; +constexpr auto asm_jnc> = seq_to_arr, byte_seq<0x0F>, byte_seq<0x83>, typename rel16::value>>::value; // jnc ANY [D] [] 83 template -constexpr auto asm_jnc> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x83>, typename rel32::value>>::value; +constexpr auto asm_jnc> = seq_to_arr, byte_seq<0x83>, typename rel32::value>>::value; // jne ANY [D] [] 75 template static constexpr std::array asm_jne = {}; template @@ -5657,15 +5733,15 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_jne; }; template -constexpr auto asm_jne> = seq_to_arr::value, byte_seq<0x75>, typename rel8::value>>::value; +constexpr auto asm_jne> = seq_to_arr, typename rel8::value>>::value; // jne X86 [D] [66] 85 template -constexpr auto asm_jne> = seq_to_arr, byte_seq<0x0F>, typename REX<0, 0, 0, 0>::value, byte_seq<0x85>, typename rel16::value>>::value; +constexpr auto asm_jne> = seq_to_arr, byte_seq<0x0F>, byte_seq<0x85>, typename rel16::value>>::value; // jne ANY [D] [] 85 template -constexpr auto asm_jne> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x85>, typename rel32::value>>::value; +constexpr auto asm_jne> = seq_to_arr, byte_seq<0x85>, typename rel32::value>>::value; // jng ANY [D] [] 7E template static constexpr std::array asm_jng = {}; template @@ -5673,15 +5749,15 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_jng; }; template -constexpr auto asm_jng> = seq_to_arr::value, byte_seq<0x7E>, typename rel8::value>>::value; +constexpr auto asm_jng> = seq_to_arr, typename rel8::value>>::value; // jng X86 [D] [66] 8E template -constexpr auto asm_jng> = seq_to_arr, byte_seq<0x0F>, typename REX<0, 0, 0, 0>::value, byte_seq<0x8E>, typename rel16::value>>::value; +constexpr auto asm_jng> = seq_to_arr, byte_seq<0x0F>, byte_seq<0x8E>, typename rel16::value>>::value; // jng ANY [D] [] 8E template -constexpr auto asm_jng> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x8E>, typename rel32::value>>::value; +constexpr auto asm_jng> = seq_to_arr, byte_seq<0x8E>, typename rel32::value>>::value; // jnge ANY [D] [] 7C template static constexpr std::array asm_jnge = {}; template @@ -5689,15 +5765,15 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_jnge; }; template -constexpr auto asm_jnge> = seq_to_arr::value, byte_seq<0x7C>, typename rel8::value>>::value; +constexpr auto asm_jnge> = seq_to_arr, typename rel8::value>>::value; // jnge X86 [D] [66] 8C template -constexpr auto asm_jnge> = seq_to_arr, byte_seq<0x0F>, typename REX<0, 0, 0, 0>::value, byte_seq<0x8C>, typename rel16::value>>::value; +constexpr auto asm_jnge> = seq_to_arr, byte_seq<0x0F>, byte_seq<0x8C>, typename rel16::value>>::value; // jnge ANY [D] [] 8C template -constexpr auto asm_jnge> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x8C>, typename rel32::value>>::value; +constexpr auto asm_jnge> = seq_to_arr, byte_seq<0x8C>, typename rel32::value>>::value; // jnl ANY [D] [] 7D template static constexpr std::array asm_jnl = {}; template @@ -5705,15 +5781,15 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_jnl; }; template -constexpr auto asm_jnl> = seq_to_arr::value, byte_seq<0x7D>, typename rel8::value>>::value; +constexpr auto asm_jnl> = seq_to_arr, typename rel8::value>>::value; // jnl X86 [D] [66] 8D template -constexpr auto asm_jnl> = seq_to_arr, byte_seq<0x0F>, typename REX<0, 0, 0, 0>::value, byte_seq<0x8D>, typename rel16::value>>::value; +constexpr auto asm_jnl> = seq_to_arr, byte_seq<0x0F>, byte_seq<0x8D>, typename rel16::value>>::value; // jnl ANY [D] [] 8D template -constexpr auto asm_jnl> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x8D>, typename rel32::value>>::value; +constexpr auto asm_jnl> = seq_to_arr, byte_seq<0x8D>, typename rel32::value>>::value; // jnle ANY [D] [] 7F template static constexpr std::array asm_jnle = {}; template @@ -5721,15 +5797,15 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_jnle; }; template -constexpr auto asm_jnle> = seq_to_arr::value, byte_seq<0x7F>, typename rel8::value>>::value; +constexpr auto asm_jnle> = seq_to_arr, typename rel8::value>>::value; // jnle X86 [D] [66] 8F template -constexpr auto asm_jnle> = seq_to_arr, byte_seq<0x0F>, typename REX<0, 0, 0, 0>::value, byte_seq<0x8F>, typename rel16::value>>::value; +constexpr auto asm_jnle> = seq_to_arr, byte_seq<0x0F>, byte_seq<0x8F>, typename rel16::value>>::value; // jnle ANY [D] [] 8F template -constexpr auto asm_jnle> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x8F>, typename rel32::value>>::value; +constexpr auto asm_jnle> = seq_to_arr, byte_seq<0x8F>, typename rel32::value>>::value; // jno ANY [D] [] 71 template static constexpr std::array asm_jno = {}; template @@ -5737,15 +5813,15 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_jno; }; template -constexpr auto asm_jno> = seq_to_arr::value, byte_seq<0x71>, typename rel8::value>>::value; +constexpr auto asm_jno> = seq_to_arr, typename rel8::value>>::value; // jno X86 [D] [66] 81 template -constexpr auto asm_jno> = seq_to_arr, byte_seq<0x0F>, typename REX<0, 0, 0, 0>::value, byte_seq<0x81>, typename rel16::value>>::value; +constexpr auto asm_jno> = seq_to_arr, byte_seq<0x0F>, byte_seq<0x81>, typename rel16::value>>::value; // jno ANY [D] [] 81 template -constexpr auto asm_jno> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x81>, typename rel32::value>>::value; +constexpr auto asm_jno> = seq_to_arr, byte_seq<0x81>, typename rel32::value>>::value; // jnp ANY [D] [] 7B template static constexpr std::array asm_jnp = {}; template @@ -5753,15 +5829,15 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_jnp; }; template -constexpr auto asm_jnp> = seq_to_arr::value, byte_seq<0x7B>, typename rel8::value>>::value; +constexpr auto asm_jnp> = seq_to_arr, typename rel8::value>>::value; // jnp X86 [D] [66] 8B template -constexpr auto asm_jnp> = seq_to_arr, byte_seq<0x0F>, typename REX<0, 0, 0, 0>::value, byte_seq<0x8B>, typename rel16::value>>::value; +constexpr auto asm_jnp> = seq_to_arr, byte_seq<0x0F>, byte_seq<0x8B>, typename rel16::value>>::value; // jnp ANY [D] [] 8B template -constexpr auto asm_jnp> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x8B>, typename rel32::value>>::value; +constexpr auto asm_jnp> = seq_to_arr, byte_seq<0x8B>, typename rel32::value>>::value; // jns ANY [D] [] 79 template static constexpr std::array asm_jns = {}; template @@ -5769,15 +5845,15 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_jns; }; template -constexpr auto asm_jns> = seq_to_arr::value, byte_seq<0x79>, typename rel8::value>>::value; +constexpr auto asm_jns> = seq_to_arr, typename rel8::value>>::value; // jns X86 [D] [66] 89 template -constexpr auto asm_jns> = seq_to_arr, byte_seq<0x0F>, typename REX<0, 0, 0, 0>::value, byte_seq<0x89>, typename rel16::value>>::value; +constexpr auto asm_jns> = seq_to_arr, byte_seq<0x0F>, byte_seq<0x89>, typename rel16::value>>::value; // jns ANY [D] [] 89 template -constexpr auto asm_jns> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x89>, typename rel32::value>>::value; +constexpr auto asm_jns> = seq_to_arr, byte_seq<0x89>, typename rel32::value>>::value; // jnz ANY [D] [] 75 template static constexpr std::array asm_jnz = {}; template @@ -5785,15 +5861,15 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_jnz; }; template -constexpr auto asm_jnz> = seq_to_arr::value, byte_seq<0x75>, typename rel8::value>>::value; +constexpr auto asm_jnz> = seq_to_arr, typename rel8::value>>::value; // jnz X86 [D] [66] 85 template -constexpr auto asm_jnz> = seq_to_arr, byte_seq<0x0F>, typename REX<0, 0, 0, 0>::value, byte_seq<0x85>, typename rel16::value>>::value; +constexpr auto asm_jnz> = seq_to_arr, byte_seq<0x0F>, byte_seq<0x85>, typename rel16::value>>::value; // jnz ANY [D] [] 85 template -constexpr auto asm_jnz> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x85>, typename rel32::value>>::value; +constexpr auto asm_jnz> = seq_to_arr, byte_seq<0x85>, typename rel32::value>>::value; // jo ANY [D] [] 70 template static constexpr std::array asm_jo = {}; template @@ -5801,15 +5877,15 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_jo; }; template -constexpr auto asm_jo> = seq_to_arr::value, byte_seq<0x70>, typename rel8::value>>::value; +constexpr auto asm_jo> = seq_to_arr, typename rel8::value>>::value; // jo X86 [D] [66] 80 template -constexpr auto asm_jo> = seq_to_arr, byte_seq<0x0F>, typename REX<0, 0, 0, 0>::value, byte_seq<0x80>, typename rel16::value>>::value; +constexpr auto asm_jo> = seq_to_arr, byte_seq<0x0F>, byte_seq<0x80>, typename rel16::value>>::value; // jo ANY [D] [] 80 template -constexpr auto asm_jo> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x80>, typename rel32::value>>::value; +constexpr auto asm_jo> = seq_to_arr, byte_seq<0x80>, typename rel32::value>>::value; // jp ANY [D] [] 7A template static constexpr std::array asm_jp = {}; template @@ -5817,15 +5893,15 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_jp; }; template -constexpr auto asm_jp> = seq_to_arr::value, byte_seq<0x7A>, typename rel8::value>>::value; +constexpr auto asm_jp> = seq_to_arr, typename rel8::value>>::value; // jp X86 [D] [66] 8A template -constexpr auto asm_jp> = seq_to_arr, byte_seq<0x0F>, typename REX<0, 0, 0, 0>::value, byte_seq<0x8A>, typename rel16::value>>::value; +constexpr auto asm_jp> = seq_to_arr, byte_seq<0x0F>, byte_seq<0x8A>, typename rel16::value>>::value; // jp ANY [D] [] 8A template -constexpr auto asm_jp> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x8A>, typename rel32::value>>::value; +constexpr auto asm_jp> = seq_to_arr, byte_seq<0x8A>, typename rel32::value>>::value; // jpe ANY [D] [] 7A template static constexpr std::array asm_jpe = {}; template @@ -5833,15 +5909,15 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_jpe; }; template -constexpr auto asm_jpe> = seq_to_arr::value, byte_seq<0x7A>, typename rel8::value>>::value; +constexpr auto asm_jpe> = seq_to_arr, typename rel8::value>>::value; // jpe X86 [D] [66] 8A template -constexpr auto asm_jpe> = seq_to_arr, byte_seq<0x0F>, typename REX<0, 0, 0, 0>::value, byte_seq<0x8A>, typename rel16::value>>::value; +constexpr auto asm_jpe> = seq_to_arr, byte_seq<0x0F>, byte_seq<0x8A>, typename rel16::value>>::value; // jpe ANY [D] [] 8A template -constexpr auto asm_jpe> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x8A>, typename rel32::value>>::value; +constexpr auto asm_jpe> = seq_to_arr, byte_seq<0x8A>, typename rel32::value>>::value; // jpo ANY [D] [] 7B template static constexpr std::array asm_jpo = {}; template @@ -5849,15 +5925,15 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_jpo; }; template -constexpr auto asm_jpo> = seq_to_arr::value, byte_seq<0x7B>, typename rel8::value>>::value; +constexpr auto asm_jpo> = seq_to_arr, typename rel8::value>>::value; // jpo X86 [D] [66] 8B template -constexpr auto asm_jpo> = seq_to_arr, byte_seq<0x0F>, typename REX<0, 0, 0, 0>::value, byte_seq<0x8B>, typename rel16::value>>::value; +constexpr auto asm_jpo> = seq_to_arr, byte_seq<0x0F>, byte_seq<0x8B>, typename rel16::value>>::value; // jpo ANY [D] [] 8B template -constexpr auto asm_jpo> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x8B>, typename rel32::value>>::value; +constexpr auto asm_jpo> = seq_to_arr, byte_seq<0x8B>, typename rel32::value>>::value; // js ANY [D] [] 78 template static constexpr std::array asm_js = {}; template @@ -5865,15 +5941,15 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_js; }; template -constexpr auto asm_js> = seq_to_arr::value, byte_seq<0x78>, typename rel8::value>>::value; +constexpr auto asm_js> = seq_to_arr, typename rel8::value>>::value; // js X86 [D] [66] 88 template -constexpr auto asm_js> = seq_to_arr, byte_seq<0x0F>, typename REX<0, 0, 0, 0>::value, byte_seq<0x88>, typename rel16::value>>::value; +constexpr auto asm_js> = seq_to_arr, byte_seq<0x0F>, byte_seq<0x88>, typename rel16::value>>::value; // js ANY [D] [] 88 template -constexpr auto asm_js> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x88>, typename rel32::value>>::value; +constexpr auto asm_js> = seq_to_arr, byte_seq<0x88>, typename rel32::value>>::value; // jz ANY [D] [] 74 template static constexpr std::array asm_jz = {}; template @@ -5881,15 +5957,15 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_jz; }; template -constexpr auto asm_jz> = seq_to_arr::value, byte_seq<0x74>, typename rel8::value>>::value; +constexpr auto asm_jz> = seq_to_arr, typename rel8::value>>::value; // jz X86 [D] [66] 84 template -constexpr auto asm_jz> = seq_to_arr, byte_seq<0x0F>, typename REX<0, 0, 0, 0>::value, byte_seq<0x84>, typename rel16::value>>::value; +constexpr auto asm_jz> = seq_to_arr, byte_seq<0x0F>, byte_seq<0x84>, typename rel16::value>>::value; // jz ANY [D] [] 84 template -constexpr auto asm_jz> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x84>, typename rel32::value>>::value; +constexpr auto asm_jz> = seq_to_arr, byte_seq<0x84>, typename rel32::value>>::value; // lahf ANY [NONE] [] 9F template static constexpr std::array asm_lahf = {}; template @@ -5897,7 +5973,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_lahf; }; template <> -constexpr auto asm_lahf<> = seq_to_arr::value, byte_seq<0x9F>>>::value; +constexpr auto asm_lahf<> = seq_to_arr>>::value; // lar ANY [RM] r [66] 02 template static constexpr std::array asm_lar = {}; template @@ -5930,12 +6006,12 @@ struct parse_instr_name, hold> { }; template constexpr auto asm_lcall, disp16> = - seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x9A>, typename disp16::value, typename disp16::value>>::value; + seq_to_arr, byte_seq<0x9A>, typename disp16::value, typename disp16::value>>::value; // lcall X86 [II] [] 9A template constexpr auto asm_lcall, disp32> = - seq_to_arr::value, byte_seq<0x9A>, typename disp16::value, typename disp32::value>>::value; + seq_to_arr, typename disp16::value, typename disp32::value>>::value; // lcall ANY [M] 3 [66] FF template @@ -6046,6 +6122,16 @@ template constexpr auto asm_lea::with, ptr> = seq_to_arr, typename REX<0, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0x8D>, typename mrm::template value>>>::value; +// lea ANY [RM] r [] 8D + +template +constexpr auto asm_lea::with, zip::with> = + seq_to_arr>, is_ext_v>, 0>::value, byte_seq<0x8D>, typename modrm, hold>::value>>::value; + +template +constexpr auto asm_lea::with, ptr> = +seq_to_arr::_67h>::value, typename REX<0, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0x8D>, typename mrm::template value>>>::value; + // lea X64 [RM] r [] 8D template @@ -6063,7 +6149,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_leave; }; template <> -constexpr auto asm_leave<> = seq_to_arr::value, byte_seq<0xC9>>>::value; +constexpr auto asm_leave<> = seq_to_arr>>::value; // les X86 [RM] r [66] C4 template static constexpr std::array asm_les = {}; template @@ -6095,7 +6181,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_lfence; }; template <> -constexpr auto asm_lfence<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xE8>>>::value; +constexpr auto asm_lfence<> = seq_to_arr, byte_seq<0xE8>>>::value; // lfs ANY [RM] r [66] B4 template static constexpr std::array asm_lfs = {}; template @@ -6192,12 +6278,12 @@ struct parse_instr_name, hold> { }; template constexpr auto asm_ljmp, disp16> = - seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xEA>, typename disp16::value, typename disp16::value>>::value; + seq_to_arr, byte_seq<0xEA>, typename disp16::value, typename disp16::value>>::value; // ljmp X86 [II] [] EA template constexpr auto asm_ljmp, disp32> = - seq_to_arr::value, byte_seq<0xEA>, typename disp16::value, typename disp32::value>>::value; + seq_to_arr, typename disp16::value, typename disp32::value>>::value; // ljmp ANY [M] 5 [66] FF template @@ -6279,7 +6365,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_lodsb; }; template <> -constexpr auto asm_lodsb<> = seq_to_arr::value, byte_seq<0xAC>>>::value; +constexpr auto asm_lodsb<> = seq_to_arr>>::value; // lodsd ANY [NONE] [] AD template static constexpr std::array asm_lodsd = {}; template @@ -6287,7 +6373,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_lodsd; }; template <> -constexpr auto asm_lodsd<> = seq_to_arr::value, byte_seq<0xAD>>>::value; +constexpr auto asm_lodsd<> = seq_to_arr>>::value; // lodsq X64 [NONE] [] AD template static constexpr std::array asm_lodsq = {}; template @@ -6303,7 +6389,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_lodsw; }; template <> -constexpr auto asm_lodsw<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xAD>>>::value; +constexpr auto asm_lodsw<> = seq_to_arr, byte_seq<0xAD>>>::value; // loop X86 [D] [] E2 template static constexpr std::array asm_loop = {}; template @@ -6311,7 +6397,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_loop; }; template -constexpr auto asm_loop> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xE2>, typename rel8::value>>::value; +constexpr auto asm_loop> = seq_to_arr, byte_seq<0xE2>, typename rel8::value>>::value; // loope X86 [D] [] E1 template static constexpr std::array asm_loope = {}; template @@ -6319,7 +6405,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_loope; }; template -constexpr auto asm_loope> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xE1>, typename rel8::value>>::value; +constexpr auto asm_loope> = seq_to_arr, byte_seq<0xE1>, typename rel8::value>>::value; // loopne X86 [D] [] E0 template static constexpr std::array asm_loopne = {}; template @@ -6327,7 +6413,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_loopne; }; template -constexpr auto asm_loopne> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xE0>, typename rel8::value>>::value; +constexpr auto asm_loopne> = seq_to_arr, byte_seq<0xE0>, typename rel8::value>>::value; // lsl ANY [RM] r [66] 03 template static constexpr std::array asm_lsl = {}; template @@ -6575,7 +6661,7 @@ struct parse_instr_name, hold; }; template <> -constexpr auto asm_mcommit<> = seq_to_arr, byte_seq<0x0F, 0x01>, typename REX<0, 0, 0, 0>::value, byte_seq<0xFA>>>::value; +constexpr auto asm_mcommit<> = seq_to_arr, byte_seq<0x0F, 0x01>, byte_seq<0xFA>>>::value; // mfence ANY [NONE] 6 0 [] F0 template static constexpr std::array asm_mfence = {}; template @@ -6583,7 +6669,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_mfence; }; template <> -constexpr auto asm_mfence<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xF0>>>::value; +constexpr auto asm_mfence<> = seq_to_arr, byte_seq<0xF0>>>::value; // minpd ANY [RM] r [66] 5D template static constexpr std::array asm_minpd = {}; template @@ -6647,7 +6733,7 @@ struct parse_instr_name, hold; }; template <> -constexpr auto asm_monitor<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xC8>>>::value; +constexpr auto asm_monitor<> = seq_to_arr, byte_seq<0xC8>>>::value; // monitorx ANY [NONE] [] FA template static constexpr std::array asm_monitorx = {}; template @@ -6655,7 +6741,7 @@ struct parse_instr_name, hold< static constexpr auto value = asm_monitorx; }; template <> -constexpr auto asm_monitorx<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xFA>>>::value; +constexpr auto asm_monitorx<> = seq_to_arr, byte_seq<0xFA>>>::value; // mov ANY [MR] r [] 88 template static constexpr std::array asm_mov = {}; template @@ -6712,17 +6798,17 @@ seq_to_arr::_67h>::value, typename template constexpr auto asm_mov::with, disp8> = - seq_to_arr::value, byte_seq<0xB0>, typename disp8::value>>::value; + seq_to_arr, typename disp8::value>>::value; // mov ANY [I] [66] B8 template constexpr auto asm_mov::with, disp16> = - seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xB8>, typename disp16::value>>::value; + seq_to_arr, byte_seq<0xB8>, typename disp16::value>>::value; // mov ANY [I] [] B8 template constexpr auto asm_mov::with, disp32> = - seq_to_arr::value, byte_seq<0xB8>, typename disp32::value>>::value; + seq_to_arr, typename disp32::value>>::value; // mov X64 [I] [] B8 template @@ -6940,12 +7026,20 @@ template struct parse_instr_name, hold> { static constexpr auto value = asm_movdiri; }; +template +constexpr auto asm_movdiri::with, zip::with> = + seq_to_arr, typename REX<0, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0xF9>, typename modrm, hold>::value>>::value; + template constexpr auto asm_movdiri, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x0F, 0x38>, typename REX<0, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0xF9>, typename mrm::template value>>>::value; // movdiri X64 [MR] r [] F9 +template +constexpr auto asm_movdiri::with, zip::with> = + seq_to_arr, typename REX<1, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0xF9>, typename modrm, hold>::value>>::value; + template constexpr auto asm_movdiri, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x0F, 0x38>, typename REX<1, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0xF9>, typename mrm::template value>>>::value; @@ -7126,6 +7220,10 @@ template struct parse_instr_name, hold> { static constexpr auto value = asm_movntdq; }; +template +constexpr auto asm_movntdq::with, zip::with> = + seq_to_arr, byte_seq<0x0F>, typename REX<0, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0xE7>, typename modrm, hold>::value>>::value; + template constexpr auto asm_movntdq, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x66>, byte_seq<0x0F>, typename REX<0, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0xE7>, typename mrm::template value>>>::value; @@ -7150,12 +7248,20 @@ template struct parse_instr_name, hold> { static constexpr auto value = asm_movnti; }; +template +constexpr auto asm_movnti::with, zip::with> = + seq_to_arr, typename REX<0, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0xC3>, typename modrm, hold>::value>>::value; + template constexpr auto asm_movnti, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x0F>, typename REX<0, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0xC3>, typename mrm::template value>>>::value; // movnti X64 [MR] r [] C3 +template +constexpr auto asm_movnti::with, zip::with> = + seq_to_arr, typename REX<1, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0xC3>, typename modrm, hold>::value>>::value; + template constexpr auto asm_movnti, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x0F>, typename REX<1, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0xC3>, typename mrm::template value>>>::value; @@ -7166,6 +7272,10 @@ template struct parse_instr_name, hold> { static constexpr auto value = asm_movntpd; }; +template +constexpr auto asm_movntpd::with, zip::with> = + seq_to_arr, byte_seq<0x0F>, typename REX<0, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0x2B>, typename modrm, hold>::value>>::value; + template constexpr auto asm_movntpd, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x66>, byte_seq<0x0F>, typename REX<0, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0x2B>, typename mrm::template value>>>::value; @@ -7176,6 +7286,10 @@ template struct parse_instr_name, hold> { static constexpr auto value = asm_movntps; }; +template +constexpr auto asm_movntps::with, zip::with> = + seq_to_arr, typename REX<0, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0x2B>, typename modrm, hold>::value>>::value; + template constexpr auto asm_movntps, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x0F>, typename REX<0, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0x2B>, typename mrm::template value>>>::value; @@ -7186,6 +7300,10 @@ template struct parse_instr_name, hold> { static constexpr auto value = asm_movntq; }; +template +constexpr auto asm_movntq::with, zip::with> = + seq_to_arr, typename REX<0, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0xE7>, typename modrm, hold>::value>>::value; + template constexpr auto asm_movntq, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x0F>, typename REX<0, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0xE7>, typename mrm::template value>>>::value; @@ -7271,7 +7389,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_movsb; }; template <> -constexpr auto asm_movsb<> = seq_to_arr::value, byte_seq<0xA4>>>::value; +constexpr auto asm_movsb<> = seq_to_arr>>::value; // movsd ANY [NONE] [] A5 template static constexpr std::array asm_movsd = {}; template @@ -7279,7 +7397,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_movsd; }; template <> -constexpr auto asm_movsd<> = seq_to_arr::value, byte_seq<0xA5>>>::value; +constexpr auto asm_movsd<> = seq_to_arr>>::value; // movsd ANY [RM] r [F2] 10 template @@ -7371,7 +7489,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_movsw; }; template <> -constexpr auto asm_movsw<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xA5>>>::value; +constexpr auto asm_movsw<> = seq_to_arr, byte_seq<0xA5>>>::value; // movsx ANY [RM] r [66] BE template static constexpr std::array asm_movsx = {}; template @@ -7699,7 +7817,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_mwait; }; template <> -constexpr auto asm_mwait<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xC9>>>::value; +constexpr auto asm_mwait<> = seq_to_arr, byte_seq<0xC9>>>::value; // mwaitx ANY [NONE] [] FB template static constexpr std::array asm_mwaitx = {}; template @@ -7707,7 +7825,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_mwaitx; }; template <> -constexpr auto asm_mwaitx<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xFB>>>::value; +constexpr auto asm_mwaitx<> = seq_to_arr, byte_seq<0xFB>>>::value; // neg ANY [M] 3 [] F6 template static constexpr std::array asm_neg = {}; template @@ -7759,7 +7877,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_nop; }; template <> -constexpr auto asm_nop<> = seq_to_arr::value, byte_seq<0x90>>>::value; +constexpr auto asm_nop<> = seq_to_arr>>::value; // nop ANY [M] 0 [66] 1F template @@ -7792,18 +7910,30 @@ seq_to_arr::_67h>::value, byte_seq // nop ANY [MR] r [66] 1F +template +constexpr auto asm_nop::with, zip::with> = + seq_to_arr, byte_seq<0x0F>, typename REX<0, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0x1F>, typename modrm, hold>::value>>::value; + template constexpr auto asm_nop, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x66>, byte_seq<0x0F>, typename REX<0, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0x1F>, typename mrm::template value>>>::value; // nop ANY [MR] r [] 1F +template +constexpr auto asm_nop::with, zip::with> = + seq_to_arr, typename REX<0, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0x1F>, typename modrm, hold>::value>>::value; + template constexpr auto asm_nop, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x0F>, typename REX<0, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0x1F>, typename mrm::template value>>>::value; // nop ANY [MR] r [] 1F +template +constexpr auto asm_nop::with, zip::with> = + seq_to_arr, typename REX<1, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0x1F>, typename modrm, hold>::value>>::value; + template constexpr auto asm_nop, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x0F>, typename REX<1, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0x1F>, typename mrm::template value>>>::value; @@ -7860,17 +7990,17 @@ struct parse_instr_name, hold> { }; template constexpr auto asm_or> = - seq_to_arr::value, byte_seq<0x0C>, typename disp8::value>>::value; + seq_to_arr, typename disp8::value>>::value; // or ANY [I] [66] 0D template constexpr auto asm_or> = - seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x0D>, typename disp16::value>>::value; + seq_to_arr, byte_seq<0x0D>, typename disp16::value>>::value; // or ANY [I] [] 0D template constexpr auto asm_or> = - seq_to_arr::value, byte_seq<0x0D>, typename disp32::value>>::value; + seq_to_arr, typename disp32::value>>::value; // or X64 [I] [] 0D template @@ -8018,17 +8148,17 @@ struct parse_instr_name, hold> { }; template constexpr auto asm_out, al> = - seq_to_arr::value, byte_seq<0xE6>, typename disp8::value>>::value; + seq_to_arr, typename disp8::value>>::value; // out ANY [I] [66] E7 template constexpr auto asm_out, ax> = - seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xE7>, typename disp8::value>>::value; + seq_to_arr, byte_seq<0xE7>, typename disp8::value>>::value; // out ANY [I] [] E7 template constexpr auto asm_out, eax> = - seq_to_arr::value, byte_seq<0xE7>, typename disp8::value>>::value; + seq_to_arr, typename disp8::value>>::value; // outsb ANY [NONE] [] 6E template static constexpr std::array asm_outsb = {}; template @@ -8036,7 +8166,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_outsb; }; template <> -constexpr auto asm_outsb = seq_to_arr::value, byte_seq<0x6E>>>::value; +constexpr auto asm_outsb = seq_to_arr>>::value; // outsd ANY [NONE] [] 6F template static constexpr std::array asm_outsd = {}; template @@ -8044,7 +8174,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_outsd; }; template <> -constexpr auto asm_outsd = seq_to_arr::value, byte_seq<0x6F>>>::value; +constexpr auto asm_outsd = seq_to_arr>>::value; // outsw ANY [NONE] [66] 6F template static constexpr std::array asm_outsw = {}; template @@ -8052,7 +8182,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_outsw; }; template <> -constexpr auto asm_outsw = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x6F>>>::value; +constexpr auto asm_outsw = seq_to_arr, byte_seq<0x6F>>>::value; // pabsb ANY [RM] r [] 1C template static constexpr std::array asm_pabsb = {}; template @@ -8482,7 +8612,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_pause; }; template <> -constexpr auto asm_pause<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x90>>>::value; +constexpr auto asm_pause<> = seq_to_arr, byte_seq<0x90>>>::value; // pavgb ANY [RM] r [] E0 template static constexpr std::array asm_pavgb = {}; template @@ -8822,7 +8952,7 @@ struct parse_instr_name, hold; }; template <> -constexpr auto asm_pconfig<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xC5>>>::value; +constexpr auto asm_pconfig<> = seq_to_arr, byte_seq<0xC5>>>::value; // pdep ANY [RVM] r [F2] F5 template static constexpr std::array asm_pdep = {}; template @@ -10118,7 +10248,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_popa; }; template <> -constexpr auto asm_popa<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x61>>>::value; +constexpr auto asm_popa<> = seq_to_arr, byte_seq<0x61>>>::value; // popad X86 [NONE] [] 61 template static constexpr std::array asm_popad = {}; template @@ -10126,7 +10256,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_popad; }; template <> -constexpr auto asm_popad<> = seq_to_arr::value, byte_seq<0x61>>>::value; +constexpr auto asm_popad<> = seq_to_arr>>::value; // popcnt ANY [RM] r [66F3] B8 template static constexpr std::array asm_popcnt = {}; template @@ -10168,7 +10298,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_popf; }; template <> -constexpr auto asm_popf<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x9D>>>::value; +constexpr auto asm_popf<> = seq_to_arr, byte_seq<0x9D>>>::value; // popfd X86 [NONE] [] 9D template static constexpr std::array asm_popfd = {}; template @@ -10176,7 +10306,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_popfd; }; template <> -constexpr auto asm_popfd<> = seq_to_arr::value, byte_seq<0x9D>>>::value; +constexpr auto asm_popfd<> = seq_to_arr>>::value; // popfq X64 [NONE] [] 9D template static constexpr std::array asm_popfq = {}; template @@ -10184,7 +10314,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_popfq; }; template <> -constexpr auto asm_popfq<> = seq_to_arr::value, byte_seq<0x9D>>>::value; +constexpr auto asm_popfq<> = seq_to_arr>>::value; // por ANY [RM] r [] EB template static constexpr std::array asm_por = {}; template @@ -10552,7 +10682,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_psmash; }; template <> -constexpr auto asm_psmash<> = seq_to_arr, byte_seq<0x0F, 0x01>, typename REX<0, 0, 0, 0>::value, byte_seq<0xFF>>>::value; +constexpr auto asm_psmash<> = seq_to_arr, byte_seq<0x0F, 0x01>, byte_seq<0xFF>>>::value; // psrad ANY [MI] 4 [] 72 template static constexpr std::array asm_psrad = {}; template @@ -11159,22 +11289,22 @@ seq_to_arr::_67h>::value, typename template constexpr auto asm_push> = - seq_to_arr::value, byte_seq<0x6A>, typename ib::value>>::value; + seq_to_arr, typename ib::value>>::value; // push ANY [I] [66] 68 template constexpr auto asm_push> = - seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x68>, typename iw::value>>::value; + seq_to_arr, byte_seq<0x68>, typename iw::value>>::value; // push X86 [I] [] 68 template constexpr auto asm_push> = - seq_to_arr::value, byte_seq<0x68>, typename disp32::value>>::value; + seq_to_arr, typename disp32::value>>::value; // push X64 [I] [] 68 template constexpr auto asm_push> = - seq_to_arr::value, byte_seq<0x68>, typename id::value>>::value; + seq_to_arr, typename id::value>>::value; // pusha X86 [NONE] [66] 60 template static constexpr std::array asm_pusha = {}; template @@ -11182,7 +11312,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_pusha; }; template <> -constexpr auto asm_pusha<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x60>>>::value; +constexpr auto asm_pusha<> = seq_to_arr, byte_seq<0x60>>>::value; // pushad X86 [NONE] [] 60 template static constexpr std::array asm_pushad = {}; template @@ -11190,7 +11320,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_pushad; }; template <> -constexpr auto asm_pushad<> = seq_to_arr::value, byte_seq<0x60>>>::value; +constexpr auto asm_pushad<> = seq_to_arr>>::value; // pushf ANY [NONE] [66] 9C template static constexpr std::array asm_pushf = {}; template @@ -11198,7 +11328,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_pushf; }; template <> -constexpr auto asm_pushf<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x9C>>>::value; +constexpr auto asm_pushf<> = seq_to_arr, byte_seq<0x9C>>>::value; // pushfd X86 [NONE] [] 9C template static constexpr std::array asm_pushfd = {}; template @@ -11206,7 +11336,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_pushfd; }; template <> -constexpr auto asm_pushfd<> = seq_to_arr::value, byte_seq<0x9C>>>::value; +constexpr auto asm_pushfd<> = seq_to_arr>>::value; // pushfq X64 [NONE] [] 9C template static constexpr std::array asm_pushfq = {}; template @@ -11214,7 +11344,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_pushfq; }; template <> -constexpr auto asm_pushfq<> = seq_to_arr::value, byte_seq<0x9C>>>::value; +constexpr auto asm_pushfq<> = seq_to_arr>>::value; // pvalidate ANY [NONE] [F2] FF template static constexpr std::array asm_pvalidate = {}; template @@ -11222,7 +11352,7 @@ struct parse_instr_name, h static constexpr auto value = asm_pvalidate; }; template <> -constexpr auto asm_pvalidate<> = seq_to_arr, byte_seq<0x0F, 0x01>, typename REX<0, 0, 0, 0>::value, byte_seq<0xFF>>>::value; +constexpr auto asm_pvalidate<> = seq_to_arr, byte_seq<0x0F, 0x01>, byte_seq<0xFF>>>::value; // pxor ANY [RM] r [] EF template static constexpr std::array asm_pxor = {}; template @@ -11530,7 +11660,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_rdmsr; }; template <> -constexpr auto asm_rdmsr<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x32>>>::value; +constexpr auto asm_rdmsr<> = seq_to_arr, byte_seq<0x32>>>::value; // rdpid X86 [R] 7 [F3] C7 template static constexpr std::array asm_rdpid = {}; template @@ -11546,7 +11676,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_rdpkru; }; template <> -constexpr auto asm_rdpkru<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xEE>>>::value; +constexpr auto asm_rdpkru<> = seq_to_arr, byte_seq<0xEE>>>::value; // rdpmc ANY [NONE] [] 33 template static constexpr std::array asm_rdpmc = {}; template @@ -11554,7 +11684,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_rdpmc; }; template <> -constexpr auto asm_rdpmc<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x33>>>::value; +constexpr auto asm_rdpmc<> = seq_to_arr, byte_seq<0x33>>>::value; // rdpru ANY [NONE] [] FD template static constexpr std::array asm_rdpru = {}; template @@ -11562,7 +11692,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_rdpru; }; template <> -constexpr auto asm_rdpru<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xFD>>>::value; +constexpr auto asm_rdpru<> = seq_to_arr, byte_seq<0xFD>>>::value; // rdrand ANY [M] 6 [66] C7 template static constexpr std::array asm_rdrand = {}; template @@ -11634,7 +11764,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_rdtsc; }; template <> -constexpr auto asm_rdtsc<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x31>>>::value; +constexpr auto asm_rdtsc<> = seq_to_arr, byte_seq<0x31>>>::value; // rdtscp ANY [NONE] [] F9 template static constexpr std::array asm_rdtscp = {}; template @@ -11642,7 +11772,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_rdtscp; }; template <> -constexpr auto asm_rdtscp<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xF9>>>::value; +constexpr auto asm_rdtscp<> = seq_to_arr, byte_seq<0xF9>>>::value; // ret ANY [NONE] [] C3 template static constexpr std::array asm_ret = {}; template @@ -11650,12 +11780,12 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_ret; }; template <> -constexpr auto asm_ret<> = seq_to_arr::value, byte_seq<0xC3>>>::value; +constexpr auto asm_ret<> = seq_to_arr>>::value; // ret ANY [I] [] C2 template constexpr auto asm_ret> = - seq_to_arr::value, byte_seq<0xC2>, typename disp16::value>>::value; + seq_to_arr, typename disp16::value>>::value; // retf ANY [NONE] [] CB template static constexpr std::array asm_retf = {}; template @@ -11663,12 +11793,12 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_retf; }; template <> -constexpr auto asm_retf<> = seq_to_arr::value, byte_seq<0xCB>>>::value; +constexpr auto asm_retf<> = seq_to_arr>>::value; // retf ANY [I] [] CA template constexpr auto asm_retf> = - seq_to_arr::value, byte_seq<0xCA>, typename disp16::value>>::value; + seq_to_arr, typename disp16::value>>::value; // rmpadjust X64 [NONE] [F3] FE template static constexpr std::array asm_rmpadjust = {}; template @@ -11676,7 +11806,7 @@ struct parse_instr_name, h static constexpr auto value = asm_rmpadjust; }; template <> -constexpr auto asm_rmpadjust<> = seq_to_arr, byte_seq<0x0F, 0x01>, typename REX<0, 0, 0, 0>::value, byte_seq<0xFE>>>::value; +constexpr auto asm_rmpadjust<> = seq_to_arr, byte_seq<0x0F, 0x01>, byte_seq<0xFE>>>::value; // rmpupdate X64 [NONE] [F2] FE template static constexpr std::array asm_rmpupdate = {}; template @@ -11684,7 +11814,7 @@ struct parse_instr_name, h static constexpr auto value = asm_rmpupdate; }; template <> -constexpr auto asm_rmpupdate<> = seq_to_arr, byte_seq<0x0F, 0x01>, typename REX<0, 0, 0, 0>::value, byte_seq<0xFE>>>::value; +constexpr auto asm_rmpupdate<> = seq_to_arr, byte_seq<0x0F, 0x01>, byte_seq<0xFE>>>::value; // rol ANY [M] 0 [] D0 template static constexpr std::array asm_rol = {}; template @@ -11988,7 +12118,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_rsm; }; template <> -constexpr auto asm_rsm<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xAA>>>::value; +constexpr auto asm_rsm<> = seq_to_arr, byte_seq<0xAA>>>::value; // rsqrtps ANY [RM] r [] 52 template static constexpr std::array asm_rsqrtps = {}; template @@ -12038,7 +12168,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_sahf; }; template <> -constexpr auto asm_sahf<> = seq_to_arr::value, byte_seq<0x9E>>>::value; +constexpr auto asm_sahf<> = seq_to_arr>>::value; // sal ANY [M] 4 [] D0 template static constexpr std::array asm_sal = {}; template @@ -12270,7 +12400,7 @@ struct parse_instr_name; }; template <> -constexpr auto asm_saveprevssp<> = seq_to_arr, byte_seq<0x0F, 0x01>, typename REX<0, 0, 0, 0>::value, byte_seq<0xEA>>>::value; +constexpr auto asm_saveprevssp<> = seq_to_arr, byte_seq<0x0F, 0x01>, byte_seq<0xEA>>>::value; // sbb ANY [I] [] 1C template static constexpr std::array asm_sbb = {}; template @@ -12279,17 +12409,17 @@ struct parse_instr_name, hold> { }; template constexpr auto asm_sbb> = - seq_to_arr::value, byte_seq<0x1C>, typename disp8::value>>::value; + seq_to_arr, typename disp8::value>>::value; // sbb ANY [I] [66] 1D template constexpr auto asm_sbb> = - seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x1D>, typename disp16::value>>::value; + seq_to_arr, byte_seq<0x1D>, typename disp16::value>>::value; // sbb ANY [I] [] 1D template constexpr auto asm_sbb> = - seq_to_arr::value, byte_seq<0x1D>, typename disp32::value>>::value; + seq_to_arr, typename disp32::value>>::value; // sbb X64 [I] [] 1D template @@ -12408,7 +12538,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_scasb; }; template <> -constexpr auto asm_scasb<> = seq_to_arr::value, byte_seq<0xAE>>>::value; +constexpr auto asm_scasb<> = seq_to_arr>>::value; // scasd ANY [NONE] [] AF template static constexpr std::array asm_scasd = {}; template @@ -12416,7 +12546,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_scasd; }; template <> -constexpr auto asm_scasd<> = seq_to_arr::value, byte_seq<0xAF>>>::value; +constexpr auto asm_scasd<> = seq_to_arr>>::value; // scasq X64 [NONE] [] AF template static constexpr std::array asm_scasq = {}; template @@ -12432,7 +12562,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_scasw; }; template <> -constexpr auto asm_scasw<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xAF>>>::value; +constexpr auto asm_scasw<> = seq_to_arr, byte_seq<0xAF>>>::value; // seamcall ANY [NONE] [66] CF template static constexpr std::array asm_seamcall = {}; template @@ -12440,7 +12570,7 @@ struct parse_instr_name, hold< static constexpr auto value = asm_seamcall; }; template <> -constexpr auto asm_seamcall<> = seq_to_arr, byte_seq<0x0F, 0x01>, typename REX<0, 0, 0, 0>::value, byte_seq<0xCF>>>::value; +constexpr auto asm_seamcall<> = seq_to_arr, byte_seq<0x0F, 0x01>, byte_seq<0xCF>>>::value; // seamops ANY [NONE] [66] CE template static constexpr std::array asm_seamops = {}; template @@ -12448,7 +12578,7 @@ struct parse_instr_name, hold; }; template <> -constexpr auto asm_seamops<> = seq_to_arr, byte_seq<0x0F, 0x01>, typename REX<0, 0, 0, 0>::value, byte_seq<0xCE>>>::value; +constexpr auto asm_seamops<> = seq_to_arr, byte_seq<0x0F, 0x01>, byte_seq<0xCE>>>::value; // seamret ANY [NONE] [66] CD template static constexpr std::array asm_seamret = {}; template @@ -12456,7 +12586,7 @@ struct parse_instr_name, hold; }; template <> -constexpr auto asm_seamret<> = seq_to_arr, byte_seq<0x0F, 0x01>, typename REX<0, 0, 0, 0>::value, byte_seq<0xCD>>>::value; +constexpr auto asm_seamret<> = seq_to_arr, byte_seq<0x0F, 0x01>, byte_seq<0xCD>>>::value; // senduipi X64 [R] 6 [F3] C7 template static constexpr std::array asm_senduipi = {}; template @@ -12470,7 +12600,7 @@ struct parse_instr_name, h static constexpr auto value = asm_serialize; }; template <> -constexpr auto asm_serialize<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xE8>>>::value; +constexpr auto asm_serialize<> = seq_to_arr, byte_seq<0xE8>>>::value; // seta ANY [M] r [] 97 template static constexpr std::array asm_seta = {}; template @@ -12884,7 +13014,7 @@ struct parse_instr_name, hold< static constexpr auto value = asm_setssbsy; }; template <> -constexpr auto asm_setssbsy<> = seq_to_arr, byte_seq<0x0F, 0x01>, typename REX<0, 0, 0, 0>::value, byte_seq<0xE8>>>::value; +constexpr auto asm_setssbsy<> = seq_to_arr, byte_seq<0x0F, 0x01>, byte_seq<0xE8>>>::value; // setz ANY [M] r [] 94 template static constexpr std::array asm_setz = {}; template @@ -12906,7 +13036,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_sfence; }; template <> -constexpr auto asm_sfence<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xF8>>>::value; +constexpr auto asm_sfence<> = seq_to_arr, byte_seq<0xF8>>>::value; // sgdt ANY [M] 0 [] 01 template static constexpr std::array asm_sgdt = {}; template @@ -13129,6 +13259,10 @@ template struct parse_instr_name, hold> { static constexpr auto value = asm_shld; }; +template +constexpr auto asm_shld::with, zip::with> = + seq_to_arr, byte_seq<0x0F>, typename REX<0, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0xA5>, typename modrm, hold>::value>>::value; + template constexpr auto asm_shld, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x66>, byte_seq<0x0F>, typename REX<0, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0xA5>, typename mrm::template value>>>::value; @@ -13141,6 +13275,10 @@ seq_to_arr::_67h>::value, byte_seq // shld ANY [MR] r [] A5 +template +constexpr auto asm_shld::with, zip::with> = + seq_to_arr, typename REX<0, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0xA5>, typename modrm, hold>::value>>::value; + template constexpr auto asm_shld, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x0F>, typename REX<0, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0xA5>, typename mrm::template value>>>::value; @@ -13153,6 +13291,10 @@ seq_to_arr::_67h>::value, byte_seq // shld X64 [MR] r [] A5 +template +constexpr auto asm_shld::with, zip::with> = + seq_to_arr, typename REX<1, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0xA5>, typename modrm, hold>::value>>::value; + template constexpr auto asm_shld, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x0F>, typename REX<1, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0xA5>, typename mrm::template value>>>::value; @@ -13285,6 +13427,10 @@ template struct parse_instr_name, hold> { static constexpr auto value = asm_shrd; }; +template +constexpr auto asm_shrd::with, zip::with> = + seq_to_arr, byte_seq<0x0F>, typename REX<0, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0xAD>, typename modrm, hold>::value>>::value; + template constexpr auto asm_shrd, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x66>, byte_seq<0x0F>, typename REX<0, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0xAD>, typename mrm::template value>>>::value; @@ -13297,6 +13443,10 @@ seq_to_arr::_67h>::value, byte_seq // shrd ANY [MR] r [] AD +template +constexpr auto asm_shrd::with, zip::with> = + seq_to_arr, typename REX<0, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0xAD>, typename modrm, hold>::value>>::value; + template constexpr auto asm_shrd, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x0F>, typename REX<0, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0xAD>, typename mrm::template value>>>::value; @@ -13309,6 +13459,10 @@ seq_to_arr::_67h>::value, byte_seq // shrd X64 [MR] r [] AD +template +constexpr auto asm_shrd::with, zip::with> = + seq_to_arr, typename REX<1, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0xAD>, typename modrm, hold>::value>>::value; + template constexpr auto asm_shrd, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x0F>, typename REX<1, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0xAD>, typename mrm::template value>>>::value; @@ -13372,7 +13526,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_skinit; }; template <> -constexpr auto asm_skinit<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xDE>>>::value; +constexpr auto asm_skinit<> = seq_to_arr, byte_seq<0xDE>>>::value; // sldt ANY [M] 0 [66] 00 template static constexpr std::array asm_sldt = {}; template @@ -13504,7 +13658,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_stac; }; template <> -constexpr auto asm_stac<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xCB>>>::value; +constexpr auto asm_stac<> = seq_to_arr, byte_seq<0xCB>>>::value; // stc ANY [NONE] [] F9 template static constexpr std::array asm_stc = {}; template @@ -13512,7 +13666,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_stc; }; template <> -constexpr auto asm_stc<> = seq_to_arr::value, byte_seq<0xF9>>>::value; +constexpr auto asm_stc<> = seq_to_arr>>::value; // std ANY [NONE] [] FD template static constexpr std::array asm_std = {}; template @@ -13520,7 +13674,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_std; }; template <> -constexpr auto asm_std<> = seq_to_arr::value, byte_seq<0xFD>>>::value; +constexpr auto asm_std<> = seq_to_arr>>::value; // stgi ANY [NONE] [] DC template static constexpr std::array asm_stgi = {}; template @@ -13528,7 +13682,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_stgi; }; template <> -constexpr auto asm_stgi<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xDC>>>::value; +constexpr auto asm_stgi<> = seq_to_arr, byte_seq<0xDC>>>::value; // sti ANY [NONE] [] FB template static constexpr std::array asm_sti = {}; template @@ -13536,7 +13690,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_sti; }; template <> -constexpr auto asm_sti<> = seq_to_arr::value, byte_seq<0xFB>>>::value; +constexpr auto asm_sti<> = seq_to_arr>>::value; // stmxcsr ANY [M] 3 [] AE template static constexpr std::array asm_stmxcsr = {}; template @@ -13558,7 +13712,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_stosb; }; template <> -constexpr auto asm_stosb<> = seq_to_arr::value, byte_seq<0xAA>>>::value; +constexpr auto asm_stosb<> = seq_to_arr>>::value; // stosd ANY [NONE] [] AB template static constexpr std::array asm_stosd = {}; template @@ -13566,7 +13720,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_stosd; }; template <> -constexpr auto asm_stosd<> = seq_to_arr::value, byte_seq<0xAB>>>::value; +constexpr auto asm_stosd<> = seq_to_arr>>::value; // stosq X64 [NONE] [] AB template static constexpr std::array asm_stosq = {}; template @@ -13582,7 +13736,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_stosw; }; template <> -constexpr auto asm_stosw<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xAB>>>::value; +constexpr auto asm_stosw<> = seq_to_arr, byte_seq<0xAB>>>::value; // str ANY [M] 1 [66] 00 template static constexpr std::array asm_str = {}; template @@ -13630,7 +13784,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_stui; }; template <> -constexpr auto asm_stui<> = seq_to_arr, byte_seq<0x0F, 0x01>, typename REX<0, 0, 0, 0>::value, byte_seq<0xEF>>>::value; +constexpr auto asm_stui<> = seq_to_arr, byte_seq<0x0F, 0x01>, byte_seq<0xEF>>>::value; // sub ANY [I] [] 2C template static constexpr std::array asm_sub = {}; template @@ -13639,17 +13793,17 @@ struct parse_instr_name, hold> { }; template constexpr auto asm_sub> = - seq_to_arr::value, byte_seq<0x2C>, typename disp8::value>>::value; + seq_to_arr, typename disp8::value>>::value; // sub ANY [I] [66] 2D template constexpr auto asm_sub> = - seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x2D>, typename disp16::value>>::value; + seq_to_arr, byte_seq<0x2D>, typename disp16::value>>::value; // sub ANY [I] [] 2D template constexpr auto asm_sub> = - seq_to_arr::value, byte_seq<0x2D>, typename disp32::value>>::value; + seq_to_arr, typename disp32::value>>::value; // sub X64 [I] [] 2D template @@ -13824,7 +13978,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_swapgs; }; template <> -constexpr auto asm_swapgs<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xF8>>>::value; +constexpr auto asm_swapgs<> = seq_to_arr, byte_seq<0xF8>>>::value; // syscall X64 [NONE] [] 05 template static constexpr std::array asm_syscall = {}; template @@ -13832,7 +13986,7 @@ struct parse_instr_name, hold; }; template <> -constexpr auto asm_syscall<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x05>>>::value; +constexpr auto asm_syscall<> = seq_to_arr, byte_seq<0x05>>>::value; // sysenter ANY [NONE] [] 34 template static constexpr std::array asm_sysenter = {}; template @@ -13840,7 +13994,7 @@ struct parse_instr_name, hold< static constexpr auto value = asm_sysenter; }; template <> -constexpr auto asm_sysenter<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x34>>>::value; +constexpr auto asm_sysenter<> = seq_to_arr, byte_seq<0x34>>>::value; // sysexit ANY [NONE] [] 35 template static constexpr std::array asm_sysexit = {}; template @@ -13848,7 +14002,7 @@ struct parse_instr_name, hold; }; template <> -constexpr auto asm_sysexit<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x35>>>::value; +constexpr auto asm_sysexit<> = seq_to_arr, byte_seq<0x35>>>::value; // sysexitq ANY [NONE] [] 35 template static constexpr std::array asm_sysexitq = {}; template @@ -13864,7 +14018,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_sysret; }; template <> -constexpr auto asm_sysret<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x07>>>::value; +constexpr auto asm_sysret<> = seq_to_arr, byte_seq<0x07>>>::value; // sysretq X64 [NONE] [] 07 template static constexpr std::array asm_sysretq = {}; template @@ -13888,7 +14042,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_tdcall; }; template <> -constexpr auto asm_tdcall<> = seq_to_arr, byte_seq<0x0F, 0x01>, typename REX<0, 0, 0, 0>::value, byte_seq<0xCC>>>::value; +constexpr auto asm_tdcall<> = seq_to_arr, byte_seq<0x0F, 0x01>, byte_seq<0xCC>>>::value; // tdpbf16ps X64 [RMV] r [F3] 5C template static constexpr std::array asm_tdpbf16ps = {}; template @@ -13927,17 +14081,17 @@ struct parse_instr_name, hold> { }; template constexpr auto asm_test> = - seq_to_arr::value, byte_seq<0xA8>, typename disp8::value>>::value; + seq_to_arr, typename disp8::value>>::value; // test ANY [I] [66] A9 template constexpr auto asm_test> = - seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xA9>, typename disp16::value>>::value; + seq_to_arr, byte_seq<0xA9>, typename disp16::value>>::value; // test ANY [I] [] A9 template constexpr auto asm_test> = - seq_to_arr::value, byte_seq<0xA9>, typename disp32::value>>::value; + seq_to_arr, typename disp32::value>>::value; // test X64 [I] [] A9 template @@ -13969,24 +14123,40 @@ seq_to_arr::_67h>::value, typename // test ANY [MR] r [] 84 +template +constexpr auto asm_test::with, zip::with> = + seq_to_arr>, is_ext_v>, 0>::value, byte_seq<0x84>, typename modrm, hold>::value>>::value; + template constexpr auto asm_test, zip::with> = seq_to_arr::_67h>::value, typename REX<0, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0x84>, typename mrm::template value>>>::value; // test ANY [MR] r [66] 85 +template +constexpr auto asm_test::with, zip::with> = + seq_to_arr, typename REX<0, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0x85>, typename modrm, hold>::value>>::value; + template constexpr auto asm_test, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x66>, typename REX<0, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0x85>, typename mrm::template value>>>::value; // test ANY [MR] r [] 85 +template +constexpr auto asm_test::with, zip::with> = + seq_to_arr>, is_ext_v>, 0>::value, byte_seq<0x85>, typename modrm, hold>::value>>::value; + template constexpr auto asm_test, zip::with> = seq_to_arr::_67h>::value, typename REX<0, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0x85>, typename mrm::template value>>>::value; // test X64 [MR] r [] 85 +template +constexpr auto asm_test::with, zip::with> = + seq_to_arr>, is_ext_v>, 0>::value, byte_seq<0x85>, typename modrm, hold>::value>>::value; + template constexpr auto asm_test, zip::with> = seq_to_arr::_67h>::value, typename REX<1, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0x85>, typename mrm::template value>>>::value; @@ -13998,7 +14168,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_testui; }; template <> -constexpr auto asm_testui<> = seq_to_arr, byte_seq<0x0F, 0x01>, typename REX<0, 0, 0, 0>::value, byte_seq<0xED>>>::value; +constexpr auto asm_testui<> = seq_to_arr, byte_seq<0x0F, 0x01>, byte_seq<0xED>>>::value; // tileloadd X64 [RM] r [F2] 4B template static constexpr std::array asm_tileloadd = {}; template @@ -14041,6 +14211,10 @@ template struct parse_instr_name, hold> { static constexpr auto value = asm_tilestored; }; +template +constexpr auto asm_tilestored::with, zip::with> = + seq_to_arr>>, disp8>>, disp8<0>, disp8<2>, disp8<0>, hold, disp16<128>, disp8<0xF3>>::value, byte_seq<0x4B>, typename modrm, hold>::value>>::value; + template constexpr auto asm_tilestored, zip::with> = seq_to_arr::_67h>::value, typename VEX>>, disp8::X>, disp8::B>, disp8<2>, disp8<0>, hold, disp16<128>, disp8<0xF3>>::value, byte_seq<0x4B>, typename mrm::template value>>>::value; @@ -14166,7 +14340,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_ud2; }; template <> -constexpr auto asm_ud2<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x0B>>>::value; +constexpr auto asm_ud2<> = seq_to_arr, byte_seq<0x0B>>>::value; // uiret X64 [NONE] [F3] EC template static constexpr std::array asm_uiret = {}; template @@ -14174,7 +14348,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_uiret; }; template <> -constexpr auto asm_uiret<> = seq_to_arr, byte_seq<0x0F, 0x01>, typename REX<0, 0, 0, 0>::value, byte_seq<0xEC>>>::value; +constexpr auto asm_uiret<> = seq_to_arr, byte_seq<0x0F, 0x01>, byte_seq<0xEC>>>::value; // umonitor ANY [M] 6 [F3] AE template static constexpr std::array asm_umonitor = {}; template @@ -17730,7 +17904,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_vmcall; }; template <> -constexpr auto asm_vmcall<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xC1>>>::value; +constexpr auto asm_vmcall<> = seq_to_arr, byte_seq<0xC1>>>::value; // vmclear ANY [M] 6 [66] C7 template static constexpr std::array asm_vmclear = {}; template @@ -17752,7 +17926,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_vmfunc; }; template <> -constexpr auto asm_vmfunc<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xD4>>>::value; +constexpr auto asm_vmfunc<> = seq_to_arr, byte_seq<0xD4>>>::value; // vminpd ANY [RVM] r [66] 5D template static constexpr std::array asm_vminpd = {}; template @@ -17836,7 +18010,7 @@ struct parse_instr_name, hold< static constexpr auto value = asm_vmlaunch; }; template <> -constexpr auto asm_vmlaunch<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xC2>>>::value; +constexpr auto asm_vmlaunch<> = seq_to_arr, byte_seq<0xC2>>>::value; // vmload X86 [NONE] [] DA template static constexpr std::array asm_vmload = {}; template @@ -17844,7 +18018,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_vmload; }; template <> -constexpr auto asm_vmload<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xDA>>>::value; +constexpr auto asm_vmload<> = seq_to_arr, byte_seq<0xDA>>>::value; // vmmcall ANY [NONE] [] D9 template static constexpr std::array asm_vmmcall = {}; template @@ -17852,7 +18026,7 @@ struct parse_instr_name, hold; }; template <> -constexpr auto asm_vmmcall<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xD9>>>::value; +constexpr auto asm_vmmcall<> = seq_to_arr, byte_seq<0xD9>>>::value; // vmovapd ANY [RM] r [66] 28 template static constexpr std::array asm_vmovapd = {}; template @@ -18057,6 +18231,10 @@ template struct parse_instr_name, hold> { static constexpr auto value = asm_vmovhpd; }; +template +constexpr auto asm_vmovhpd::with, zip::with> = + seq_to_arr>>, hold, disp16<128>, disp8<0x66>>::value, byte_seq<0x17>, typename modrm, hold>::value>>::value; + template constexpr auto asm_vmovhpd, zip::with> = seq_to_arr::_67h>::value, typename VEX>>, hold, disp16<128>, disp8<0x66>>::value, byte_seq<0x17>, typename mrm::template value>>>::value; @@ -18077,6 +18255,10 @@ template struct parse_instr_name, hold> { static constexpr auto value = asm_vmovhps; }; +template +constexpr auto asm_vmovhps::with, zip::with> = + seq_to_arr>>, hold, disp16<128>, disp8<0>>::value, byte_seq<0x17>, typename modrm, hold>::value>>::value; + template constexpr auto asm_vmovhps, zip::with> = seq_to_arr::_67h>::value, typename VEX>>, hold, disp16<128>, disp8<0>>::value, byte_seq<0x17>, typename mrm::template value>>>::value; @@ -18107,6 +18289,10 @@ template struct parse_instr_name, hold> { static constexpr auto value = asm_vmovlpd; }; +template +constexpr auto asm_vmovlpd::with, zip::with> = + seq_to_arr>>, hold, disp16<128>, disp8<0x66>>::value, byte_seq<0x13>, typename modrm, hold>::value>>::value; + template constexpr auto asm_vmovlpd, zip::with> = seq_to_arr::_67h>::value, typename VEX>>, hold, disp16<128>, disp8<0x66>>::value, byte_seq<0x13>, typename mrm::template value>>>::value; @@ -18127,6 +18313,10 @@ template struct parse_instr_name, hold> { static constexpr auto value = asm_vmovlps; }; +template +constexpr auto asm_vmovlps::with, zip::with> = + seq_to_arr>>, hold, disp16<128>, disp8<0>>::value, byte_seq<0x13>, typename modrm, hold>::value>>::value; + template constexpr auto asm_vmovlps, zip::with> = seq_to_arr::_67h>::value, typename VEX>>, hold, disp16<128>, disp8<0>>::value, byte_seq<0x13>, typename mrm::template value>>>::value; @@ -18179,12 +18369,20 @@ template struct parse_instr_name, hold> { static constexpr auto value = asm_vmovntdq; }; +template +constexpr auto asm_vmovntdq::with, zip::with> = + seq_to_arr>>, hold, disp16<128>, disp8<0x66>>::value, byte_seq<0xE7>, typename modrm, hold>::value>>::value; + template constexpr auto asm_vmovntdq, zip::with> = seq_to_arr::_67h>::value, typename VEX>>, hold, disp16<128>, disp8<0x66>>::value, byte_seq<0xE7>, typename mrm::template value>>>::value; // vmovntdq ANY [MR] r [66] E7 +template +constexpr auto asm_vmovntdq::with, zip::with> = + seq_to_arr>>, hold, disp16<256>, disp8<0x66>>::value, byte_seq<0xE7>, typename modrm, hold>::value>>::value; + template constexpr auto asm_vmovntdq, zip::with> = seq_to_arr::_67h>::value, typename VEX>>, hold, disp16<256>, disp8<0x66>>::value, byte_seq<0xE7>, typename mrm::template value>>>::value; @@ -18219,12 +18417,20 @@ template struct parse_instr_name, hold> { static constexpr auto value = asm_vmovntpd; }; +template +constexpr auto asm_vmovntpd::with, zip::with> = + seq_to_arr>>, hold, disp16<128>, disp8<0x66>>::value, byte_seq<0x2B>, typename modrm, hold>::value>>::value; + template constexpr auto asm_vmovntpd, zip::with> = seq_to_arr::_67h>::value, typename VEX>>, hold, disp16<128>, disp8<0x66>>::value, byte_seq<0x2B>, typename mrm::template value>>>::value; // vmovntpd ANY [MR] r [66] 2B +template +constexpr auto asm_vmovntpd::with, zip::with> = + seq_to_arr>>, hold, disp16<256>, disp8<0x66>>::value, byte_seq<0x2B>, typename modrm, hold>::value>>::value; + template constexpr auto asm_vmovntpd, zip::with> = seq_to_arr::_67h>::value, typename VEX>>, hold, disp16<256>, disp8<0x66>>::value, byte_seq<0x2B>, typename mrm::template value>>>::value; @@ -18235,12 +18441,20 @@ template struct parse_instr_name, hold> { static constexpr auto value = asm_vmovntps; }; +template +constexpr auto asm_vmovntps::with, zip::with> = + seq_to_arr>>, hold, disp16<128>, disp8<0>>::value, byte_seq<0x2B>, typename modrm, hold>::value>>::value; + template constexpr auto asm_vmovntps, zip::with> = seq_to_arr::_67h>::value, typename VEX>>, hold, disp16<128>, disp8<0>>::value, byte_seq<0x2B>, typename mrm::template value>>>::value; // vmovntps ANY [MR] r [] 2B +template +constexpr auto asm_vmovntps::with, zip::with> = + seq_to_arr>>, hold, disp16<256>, disp8<0>>::value, byte_seq<0x2B>, typename modrm, hold>::value>>::value; + template constexpr auto asm_vmovntps, zip::with> = seq_to_arr::_67h>::value, typename VEX>>, hold, disp16<256>, disp8<0>>::value, byte_seq<0x2B>, typename mrm::template value>>>::value; @@ -18503,12 +18717,20 @@ template struct parse_instr_name, hold> { static constexpr auto value = asm_vmread; }; +template +constexpr auto asm_vmread::with, zip::with> = + seq_to_arr, typename REX<0, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0x78>, typename modrm, hold>::value>>::value; + template constexpr auto asm_vmread, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x0F>, typename REX<0, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0x78>, typename mrm::template value>>>::value; // vmread X64 [MR] r [] 78 +template +constexpr auto asm_vmread::with, zip::with> = + seq_to_arr, typename REX<0, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0x78>, typename modrm, hold>::value>>::value; + template constexpr auto asm_vmread, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x0F>, typename REX<0, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0x78>, typename mrm::template value>>>::value; @@ -18520,7 +18742,7 @@ struct parse_instr_name, hold< static constexpr auto value = asm_vmresume; }; template <> -constexpr auto asm_vmresume<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xC3>>>::value; +constexpr auto asm_vmresume<> = seq_to_arr, byte_seq<0xC3>>>::value; // vmrun X86 [NONE] [] D8 template static constexpr std::array asm_vmrun = {}; template @@ -18528,7 +18750,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_vmrun; }; template <> -constexpr auto asm_vmrun<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xD8>>>::value; +constexpr auto asm_vmrun<> = seq_to_arr, byte_seq<0xD8>>>::value; // vmsave X86 [NONE] [] DB template static constexpr std::array asm_vmsave = {}; template @@ -18536,7 +18758,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_vmsave; }; template <> -constexpr auto asm_vmsave<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xDB>>>::value; +constexpr auto asm_vmsave<> = seq_to_arr, byte_seq<0xDB>>>::value; // vmulpd ANY [RVM] r [66] 59 template static constexpr std::array asm_vmulpd = {}; template @@ -23510,7 +23732,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_wait; }; template <> -constexpr auto asm_wait<> = seq_to_arr::value, byte_seq<0x9B>>>::value; +constexpr auto asm_wait<> = seq_to_arr>>::value; // wbinvd ANY [NONE] [] 09 template static constexpr std::array asm_wbinvd = {}; template @@ -23518,7 +23740,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_wbinvd; }; template <> -constexpr auto asm_wbinvd<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x09>>>::value; +constexpr auto asm_wbinvd<> = seq_to_arr, byte_seq<0x09>>>::value; // wbnoinvd ANY [NONE] [F3] 09 template static constexpr std::array asm_wbnoinvd = {}; template @@ -23526,7 +23748,7 @@ struct parse_instr_name, hold< static constexpr auto value = asm_wbnoinvd; }; template <> -constexpr auto asm_wbnoinvd<> = seq_to_arr, byte_seq<0x0F>, typename REX<0, 0, 0, 0>::value, byte_seq<0x09>>>::value; +constexpr auto asm_wbnoinvd<> = seq_to_arr, byte_seq<0x0F>, byte_seq<0x09>>>::value; // wrfsbase X64 [M] 2 [F3] AE template static constexpr std::array asm_wrfsbase = {}; template @@ -23566,13 +23788,17 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_wrmsr; }; template <> -constexpr auto asm_wrmsr<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x30>>>::value; +constexpr auto asm_wrmsr<> = seq_to_arr, byte_seq<0x30>>>::value; // wrssd ANY [MR] r [] F6 template static constexpr std::array asm_wrssd = {}; template struct parse_instr_name, hold> { static constexpr auto value = asm_wrssd; }; +template +constexpr auto asm_wrssd::with, zip::with> = + seq_to_arr, typename REX<0, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0xF6>, typename modrm, hold>::value>>::value; + template constexpr auto asm_wrssd, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x0F, 0x38>, typename REX<0, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0xF6>, typename mrm::template value>>>::value; @@ -23583,6 +23809,10 @@ template struct parse_instr_name, hold> { static constexpr auto value = asm_wrssq; }; +template +constexpr auto asm_wrssq::with, zip::with> = + seq_to_arr, typename REX<1, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0xF6>, typename modrm, hold>::value>>::value; + template constexpr auto asm_wrssq, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x0F, 0x38>, typename REX<1, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0xF6>, typename mrm::template value>>>::value; @@ -23593,6 +23823,10 @@ template struct parse_instr_name, hold> { static constexpr auto value = asm_wrussd; }; +template +constexpr auto asm_wrussd::with, zip::with> = + seq_to_arr, byte_seq<0x0F, 0x38>, typename REX<0, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0xF5>, typename modrm, hold>::value>>::value; + template constexpr auto asm_wrussd, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x66>, byte_seq<0x0F, 0x38>, typename REX<0, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0xF5>, typename mrm::template value>>>::value; @@ -23603,6 +23837,10 @@ template struct parse_instr_name, hold> { static constexpr auto value = asm_wrussq; }; +template +constexpr auto asm_wrussq::with, zip::with> = + seq_to_arr, byte_seq<0x0F, 0x38>, typename REX<1, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0xF5>, typename modrm, hold>::value>>::value; + template constexpr auto asm_wrussq, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x66>, byte_seq<0x0F, 0x38>, typename REX<1, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0xF5>, typename mrm::template value>>>::value; @@ -23615,31 +23853,47 @@ struct parse_instr_name, hold> { }; template constexpr auto asm_xabort> = - seq_to_arr::value, byte_seq<0xC6>, typename disp8::value>>::value; + seq_to_arr, typename disp8::value>>::value; // xadd ANY [MR] r [] C0 template static constexpr std::array asm_xadd = {}; template struct parse_instr_name, hold> { static constexpr auto value = asm_xadd; }; +template +constexpr auto asm_xadd::with, zip::with> = + seq_to_arr, typename REX<0, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0xC0>, typename modrm, hold>::value>>::value; + template constexpr auto asm_xadd, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x0F>, typename REX<0, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0xC0>, typename mrm::template value>>>::value; // xadd ANY [MR] r [66] C1 +template +constexpr auto asm_xadd::with, zip::with> = + seq_to_arr, byte_seq<0x0F>, typename REX<0, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0xC1>, typename modrm, hold>::value>>::value; + template constexpr auto asm_xadd, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x66>, byte_seq<0x0F>, typename REX<0, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0xC1>, typename mrm::template value>>>::value; // xadd ANY [MR] r [] C1 +template +constexpr auto asm_xadd::with, zip::with> = + seq_to_arr, typename REX<0, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0xC1>, typename modrm, hold>::value>>::value; + template constexpr auto asm_xadd, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x0F>, typename REX<0, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0xC1>, typename mrm::template value>>>::value; // xadd X64 [MR] r [] C1 +template +constexpr auto asm_xadd::with, zip::with> = + seq_to_arr, typename REX<1, is_ext_v>, is_ext_v>, 0>::value, byte_seq<0xC1>, typename modrm, hold>::value>>::value; + template constexpr auto asm_xadd, zip::with> = seq_to_arr::_67h>::value, byte_seq<0x0F>, typename REX<1, is_ext_v>, mrm::X, mrm::B>::value, byte_seq<0xC1>, typename mrm::template value>>>::value; @@ -23651,7 +23905,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_xbegin; }; template -constexpr auto asm_xbegin> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xC7>, typename disp16::value>>::value; +constexpr auto asm_xbegin> = seq_to_arr, byte_seq<0xC7>, typename disp16::value>>::value; // xchg ANY [O] [66] 90 template static constexpr std::array asm_xchg = {}; template @@ -23739,7 +23993,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_xend; }; template <> -constexpr auto asm_xend<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xD5>>>::value; +constexpr auto asm_xend<> = seq_to_arr, byte_seq<0xD5>>>::value; // xgetbv ANY [NONE] [] D0 template static constexpr std::array asm_xgetbv = {}; template @@ -23747,7 +24001,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_xgetbv; }; template <> -constexpr auto asm_xgetbv<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xD0>>>::value; +constexpr auto asm_xgetbv<> = seq_to_arr, byte_seq<0xD0>>>::value; // xlatb ANY [NONE] [] D7 template static constexpr std::array asm_xlatb = {}; template @@ -23755,7 +24009,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_xlatb; }; template <> -constexpr auto asm_xlatb<> = seq_to_arr::value, byte_seq<0xD7>>>::value; +constexpr auto asm_xlatb<> = seq_to_arr>>::value; // xor ANY [I] [] 34 template static constexpr std::array asm_xor = {}; template @@ -23764,17 +24018,17 @@ struct parse_instr_name, hold> { }; template constexpr auto asm_xor> = - seq_to_arr::value, byte_seq<0x34>, typename disp8::value>>::value; + seq_to_arr, typename disp8::value>>::value; // xor ANY [I] [66] 35 template constexpr auto asm_xor> = - seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0x35>, typename disp16::value>>::value; + seq_to_arr, byte_seq<0x35>, typename disp16::value>>::value; // xor ANY [I] [] 35 template constexpr auto asm_xor> = - seq_to_arr::value, byte_seq<0x35>, typename disp32::value>>::value; + seq_to_arr, typename disp32::value>>::value; // xor X64 [I] [] 35 template @@ -23921,7 +24175,7 @@ struct parse_instr_name, h static constexpr auto value = asm_xresldtrk; }; template <> -constexpr auto asm_xresldtrk<> = seq_to_arr, byte_seq<0x0F, 0x01>, typename REX<0, 0, 0, 0>::value, byte_seq<0xE9>>>::value; +constexpr auto asm_xresldtrk<> = seq_to_arr, byte_seq<0x0F, 0x01>, byte_seq<0xE9>>>::value; // xrstor ANY [M] 5 [] AE template static constexpr std::array asm_xrstor = {}; template @@ -24049,7 +24303,7 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_xsetbv; }; template <> -constexpr auto asm_xsetbv<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xD1>>>::value; +constexpr auto asm_xsetbv<> = seq_to_arr, byte_seq<0xD1>>>::value; // xsusldtrk ANY [NONE] [F2] E8 template static constexpr std::array asm_xsusldtrk = {}; template @@ -24057,7 +24311,7 @@ struct parse_instr_name, h static constexpr auto value = asm_xsusldtrk; }; template <> -constexpr auto asm_xsusldtrk<> = seq_to_arr, byte_seq<0x0F, 0x01>, typename REX<0, 0, 0, 0>::value, byte_seq<0xE8>>>::value; +constexpr auto asm_xsusldtrk<> = seq_to_arr, byte_seq<0x0F, 0x01>, byte_seq<0xE8>>>::value; // xtest ANY [NONE] [] D6 template static constexpr std::array asm_xtest = {}; template @@ -24065,4 +24319,4 @@ struct parse_instr_name, hold> { static constexpr auto value = asm_xtest; }; template <> -constexpr auto asm_xtest<> = seq_to_arr, typename REX<0, 0, 0, 0>::value, byte_seq<0xD6>>>::value; +constexpr auto asm_xtest<> = seq_to_arr, byte_seq<0xD6>>>::value;