16template <
typename TLoadOp,
typename TInstrContext>
class UnaryLoadInstrImm {
18 using It =
typename TInstrContext::It;
19 using Pc =
typename TInstrContext::Pc;
20 using ExcTrig =
typename TInstrContext::ExcTrig;
22 template <
typename TTgt>
24 const u32 &imm32,
const TTgt &rt) {
27 if (!condition_passed) {
28 PostExecAdvancePcAndIt::Call(ictx, iflags);
31 const bool is_add = (iflags &
static_cast<InstrFlagsSet
>(InstrFlags::kAdd)) != 0U;
34 const me_adr_t pc =
static_cast<me_adr_t
>(ictx.cpua.template ReadRegister<RegisterId::kPc>());
36 const me_adr_t address = is_add ==
true ? base + imm32 : base - imm32;
40 const bool is_aligned = (address & 0x3U) == 0U;
41 TRY(
InstrExecResult, PostExecWriteRegPcIncluded::Call(ictx, iflags, rt, data, is_aligned));
49 UnaryLoadInstrImm() =
delete;
54 ~UnaryLoadInstrImm() =
delete;
60 UnaryLoadInstrImm(
const UnaryLoadInstrImm &r_src) =
delete;
66 UnaryLoadInstrImm &operator=(
const UnaryLoadInstrImm &r_src) =
delete;
72 UnaryLoadInstrImm(UnaryLoadInstrImm &&r_src) =
delete;
78 UnaryLoadInstrImm &operator=(UnaryLoadInstrImm &&r_src) =
delete;
#define TRY_ASSIGN(NAME, OUT_TYPE, CALL)
Try to assign a value to a variable and return an error if the assignment fails.
Definition result.h:123
#define TRY(OUT_TYPE, CALL)
Try to call a function and return an error if the call fails.
Definition result.h:138