11template <
typename TContext>
class MnemonicBuilderTernaryInstr {
13 using It =
typename TContext::It;
14 using Reg =
typename TContext::Reg;
15 using SReg =
typename TContext::SReg;
17 template <
typename TDest,
typename TArg0,
typename TArg1,
typename TArg3>
18 static void Build(
const char *instr_spec, TContext &mctx,
const MnemonicBuilderFlagsSet &bflags,
19 const InstrFlagsSet &iflags,
const TDest &rd,
const TArg0 &rn,
const TArg1 &rm,
22 const bool is_setflags = (iflags &
static_cast<InstrFlagsSet
>(InstrFlags::kSetFlags)) != 0U;
23 const bool is_reduced_rd =
24 (bflags &
static_cast<MnemonicBuilderFlagsSet
>(MnemonicBuilderFlags::kReduceRd)) != 0U;
25 mctx.builder.AddString(instr_spec)
26 .AddString(is_setflags ==
true ?
"S" :
"")
27 .AddString(It::GetConditionAsStr(mctx.cpua))
30 if ((rd != rn) || (!is_reduced_rd)) {
31 mctx.builder.AddString(Reg::GetRegisterName(rd.Get())).AddString(
", ");
34 mctx.builder.AddString(Reg::GetRegisterName(rn.Get()))
36 .AddString(Reg::GetRegisterName(rm.Get()))
38 .AddString(Reg::GetRegisterName(a.Get()));
39 mctx.builder.Terminate();
46 MnemonicBuilderTernaryInstr() =
delete;
51 ~MnemonicBuilderTernaryInstr() =
delete;
57 MnemonicBuilderTernaryInstr(
const MnemonicBuilderTernaryInstr &r_src) =
default;
63 MnemonicBuilderTernaryInstr &operator=(
const MnemonicBuilderTernaryInstr &r_src) =
delete;
69 MnemonicBuilderTernaryInstr(MnemonicBuilderTernaryInstr &&r_src) =
delete;
75 MnemonicBuilderTernaryInstr &operator=(MnemonicBuilderTernaryInstr &&r_src) =
delete;