libmicroemu 0.2.0
ARM Microcontroller Emulator Library
Loading...
Searching...
No Matches
mnemonic_builder_binary_instr_with_imm_carry.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 MnemonicBuilderBinaryInstrWithImmCarry {
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 &rn,
22 const ThumbImmediateResult &imm_carry) {
23
24 const bool is_setflags = (iflags & static_cast<InstrFlagsSet>(InstrFlags::kSetFlags)) != 0U;
25 const bool is_reduced_rd =
26 (bflags & static_cast<MnemonicBuilderFlagsSet>(MnemonicBuilderFlags::kReduceRd)) != 0U;
27 mctx.builder.AddString(instr_spec)
28 .AddString(is_setflags == true ? "S" : "")
29 .AddString(It::GetConditionAsStr(mctx.cpua))
30 .AddChar(' ');
31
32 if ((rd != rn) || (!is_reduced_rd)) {
33 mctx.builder.AddString(Reg::GetRegisterName(rd.Get())).AddString(", ");
34 }
35
36 mctx.builder.AddString(Reg::GetRegisterName(rn.Get()))
37 .AddString(", #")
38 .AddUInt(imm_carry.out)
39 .Terminate();
40 }
41
42private:
46 MnemonicBuilderBinaryInstrWithImmCarry() = delete;
47
51 ~MnemonicBuilderBinaryInstrWithImmCarry() = delete;
52
57 MnemonicBuilderBinaryInstrWithImmCarry(const MnemonicBuilderBinaryInstrWithImmCarry &r_src) =
58 default;
59
64 MnemonicBuilderBinaryInstrWithImmCarry &
65 operator=(const MnemonicBuilderBinaryInstrWithImmCarry &r_src) = delete;
66
71 MnemonicBuilderBinaryInstrWithImmCarry(MnemonicBuilderBinaryInstrWithImmCarry &&r_src) = delete;
72
77 MnemonicBuilderBinaryInstrWithImmCarry &
78 operator=(MnemonicBuilderBinaryInstrWithImmCarry &&r_src) = delete;
79};
80
81} // 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 thumb_immediate_result.h:6