11template <
typename TContext>
class MnemonicBuilderTernaryNullInstrWithShift {
13 using It =
typename TContext::It;
14 using Reg =
typename TContext::Reg;
15 using SReg =
typename TContext::SReg;
17 template <
typename TArg0,
typename TArg1>
18 static void Build(
const char *instr_spec, TContext &mctx,
const MnemonicBuilderFlagsSet &bflags,
19 const InstrFlagsSet &iflags,
const TArg0 &rn,
const TArg1 &rm,
22 static_cast<void>(bflags);
23 const bool is_setflags = (iflags &
static_cast<InstrFlagsSet
>(InstrFlags::kSetFlags)) != 0U;
24 mctx.builder.AddString(instr_spec)
25 .AddString(is_setflags ==
true ?
"S" :
"")
26 .AddString(It::GetConditionAsStr(mctx.cpua))
28 .AddString(Reg::GetRegisterName(rn.Get()))
30 .AddString(Reg::GetRegisterName(rm.Get()));
32 if (shift_res.value != 0) {
33 mctx.builder.AddString(
", ");
36 mctx.builder.AddString(shift_res.GetShiftTypeAsStr()).AddChar(
' ');
38 mctx.builder.AddString(
"#").AddUInt(shift_res.value);
40 mctx.builder.Terminate();
47 MnemonicBuilderTernaryNullInstrWithShift() =
delete;
52 ~MnemonicBuilderTernaryNullInstrWithShift() =
delete;
58 MnemonicBuilderTernaryNullInstrWithShift(
const MnemonicBuilderTernaryNullInstrWithShift &r_src) =
65 MnemonicBuilderTernaryNullInstrWithShift &
66 operator=(
const MnemonicBuilderTernaryNullInstrWithShift &r_src) =
delete;
72 MnemonicBuilderTernaryNullInstrWithShift(MnemonicBuilderTernaryNullInstrWithShift &&r_src) =
79 MnemonicBuilderTernaryNullInstrWithShift &
80 operator=(MnemonicBuilderTernaryNullInstrWithShift &&r_src) =
delete;