libmicroemu 0.2.0
ARM Microcontroller Emulator Library
Loading...
Searching...
No Matches
mnemonic_builder_binary_instr_with_shift.h
1#pragma once
2
3#include "libmicroemu/internal/trace/mnemonic_builder_flags.h"
4
6#include "libmicroemu/types.h"
7
8namespace libmicroemu::internal {
9
13template <typename TContext> class MnemonicBuilderBinaryInstrWithShift {
14public:
15 using It = typename TContext::It;
16 using Reg = typename TContext::Reg;
17 using SReg = typename TContext::SReg;
18
19 template <typename TDest, typename TArg0>
20 static void Build(const char *instr_spec, TContext &mctx, const MnemonicBuilderFlagsSet &bflags,
21 const InstrFlagsSet &iflags, const TDest &rd, const TArg0 &rm,
22 const ImmShiftResults &shift_res) {
23
24 const bool is_setflags = (iflags & static_cast<InstrFlagsSet>(InstrFlags::kSetFlags)) != 0U;
25 const bool is_supress_shift_type =
26 (bflags & static_cast<MnemonicBuilderFlagsSet>(MnemonicBuilderFlags::kSupressShiftType)) !=
27 0;
28 mctx.builder.AddString(instr_spec)
29 .AddString(is_setflags == true ? "S" : "")
30 .AddString(It::GetConditionAsStr(mctx.cpua))
31 .AddChar(' ')
32 .AddString(Reg::GetRegisterName(rd.Get()))
33 .AddString(", ")
34 .AddString(Reg::GetRegisterName(rm.Get()))
35 .AddString(", ");
36
37 if (!is_supress_shift_type) {
38 mctx.builder.AddString(shift_res.GetShiftTypeAsStr()).AddChar(' ');
39 }
40
41 mctx.builder.AddString("#").AddUInt(shift_res.value).Terminate();
42 }
43
44private:
48 MnemonicBuilderBinaryInstrWithShift() = delete;
49
53 ~MnemonicBuilderBinaryInstrWithShift() = delete;
54
59 MnemonicBuilderBinaryInstrWithShift(const MnemonicBuilderBinaryInstrWithShift &r_src) = default;
60
65 MnemonicBuilderBinaryInstrWithShift &
66 operator=(const MnemonicBuilderBinaryInstrWithShift &r_src) = delete;
67
72 MnemonicBuilderBinaryInstrWithShift(MnemonicBuilderBinaryInstrWithShift &&r_src) = delete;
73
78 MnemonicBuilderBinaryInstrWithShift &
79 operator=(MnemonicBuilderBinaryInstrWithShift &&r_src) = delete;
80};
81
82} // 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.
Definition imm_shift_results.h:15