8template <
typename TContext>
class MnemonicBuilderVariadicLoadStoreInstr {
10 using It =
typename TContext::It;
11 using Reg =
typename TContext::Reg;
12 using SReg =
typename TContext::SReg;
14 template <
typename TArg0>
15 static void Build(
const char *instr_spec, TContext &mctx,
const MnemonicBuilderFlagsSet &bflags,
16 const InstrFlagsSet &iflags,
const TArg0 &rn,
const u32 ®isters,
17 bool suppress_dest_register) {
18 static_cast<void>(bflags);
19 const bool is_wback = (iflags &
static_cast<InstrFlagsSet
>(InstrFlags::kWBack)) != 0U;
20 mctx.builder.AddString(instr_spec).AddString(It::GetConditionAsStr(mctx.cpua)).AddChar(
' ');
22 if (!suppress_dest_register) {
23 mctx.builder.AddString(Reg::GetRegisterName(rn.Get()));
26 mctx.builder.AddChar(
'!');
28 if (!suppress_dest_register) {
29 mctx.builder.AddString(
", ");
31 mctx.builder.AddChar(
'{');
33 for (u32 cpua = 0U; cpua <= 15U; ++cpua) {
34 u32 bm = 0b1U << cpua;
35 if ((registers & bm) != 0U) {
36 auto r_spec = Reg::GetRegisterName(
static_cast<RegisterId>(cpua));
38 mctx.builder.AddString(r_spec);
41 mctx.builder.AddString(
", ");
45 mctx.builder.AddChar(
'}');
46 mctx.builder.Terminate();
53 MnemonicBuilderVariadicLoadStoreInstr() =
delete;
58 ~MnemonicBuilderVariadicLoadStoreInstr() =
delete;
64 MnemonicBuilderVariadicLoadStoreInstr(
const MnemonicBuilderVariadicLoadStoreInstr &r_src) =
71 MnemonicBuilderVariadicLoadStoreInstr &
72 operator=(
const MnemonicBuilderVariadicLoadStoreInstr &r_src) =
delete;
78 MnemonicBuilderVariadicLoadStoreInstr(MnemonicBuilderVariadicLoadStoreInstr &&r_src) =
delete;
84 MnemonicBuilderVariadicLoadStoreInstr &
85 operator=(MnemonicBuilderVariadicLoadStoreInstr &&r_src) =
delete;