libmicroemu 0.2.0
ARM Microcontroller Emulator Library
Loading...
Searching...
No Matches
mnemonic_builder_ternary_instr.h
1#pragma once
2
4#include "libmicroemu/types.h"
5
6namespace libmicroemu::internal {
7
11template <typename TContext> class MnemonicBuilderTernaryInstr {
12public:
13 using It = typename TContext::It;
14 using Reg = typename TContext::Reg;
15 using SReg = typename TContext::SReg;
16
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,
20 const TArg3 &a) {
21
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))
28 .AddChar(' ');
29
30 if ((rd != rn) || (!is_reduced_rd)) {
31 mctx.builder.AddString(Reg::GetRegisterName(rd.Get())).AddString(", ");
32 }
33
34 mctx.builder.AddString(Reg::GetRegisterName(rn.Get()))
35 .AddString(", ")
36 .AddString(Reg::GetRegisterName(rm.Get()))
37 .AddString(", ")
38 .AddString(Reg::GetRegisterName(a.Get()));
39 mctx.builder.Terminate();
40 }
41
42private:
46 MnemonicBuilderTernaryInstr() = delete;
47
51 ~MnemonicBuilderTernaryInstr() = delete;
52
57 MnemonicBuilderTernaryInstr(const MnemonicBuilderTernaryInstr &r_src) = default;
58
63 MnemonicBuilderTernaryInstr &operator=(const MnemonicBuilderTernaryInstr &r_src) = delete;
64
69 MnemonicBuilderTernaryInstr(MnemonicBuilderTernaryInstr &&r_src) = delete;
70
75 MnemonicBuilderTernaryInstr &operator=(MnemonicBuilderTernaryInstr &&r_src) = delete;
76};
77
78} // namespace libmicroemu::internal
The libmicroemu::internal namespace contains all classes and functions of libmicroemu which are priva...
Definition bkpt_flags.h:6
Contains the Result class which is used to return the result of a function.