libmicroemu 0.2.0
ARM Microcontroller Emulator Library
Loading...
Searching...
No Matches
store_mem.h
1#pragma once
2
4#include "libmicroemu/types.h"
5
6namespace libmicroemu::internal {
7
13template <typename TInstrContext> class StoreMemU8 {
14public:
15 static inline Result<void> Write(const TInstrContext &ictx, const u32 &address, const u32 &rt) {
16 const auto &rt8 = static_cast<u8>(rt & 0xFFU);
17 TRY(void, ictx.bus.template WriteOrRaise<u8>(ictx.cpua, address, rt8,
18 BusExceptionType::kRaisePreciseDataBusError));
19 return Ok();
20 }
21};
22
28template <typename TInstrContext> class StoreMemU16 {
29public:
30 static inline Result<void> Write(const TInstrContext &ictx, const u32 &address, const u32 &rt) {
31 const auto &rt16 = static_cast<u16>(rt & 0xFFFFU);
32 TRY(void, ictx.bus.template WriteOrRaise<u16>(ictx.cpua, address, rt16,
33 BusExceptionType::kRaisePreciseDataBusError));
34 return Ok();
35 }
36};
37
43template <typename TInstrContext> class StoreMemU32 {
44public:
45 static inline Result<void> Write(const TInstrContext &ictx, const u32 &address, const u32 &rt) {
46 TRY(void, ictx.bus.template WriteOrRaise<u32>(ictx.cpua, address, rt,
47 BusExceptionType::kRaisePreciseDataBusError));
48 return Ok();
49 }
50};
51
57template <typename TInstrContext> class StoreMemExU32 {
58public:
59 static inline Result<void> Write(const TInstrContext &ictx, const u32 &address, const u32 &rt,
60 u32 &rd) {
61 TRY(void, ictx.bus.template WriteOrRaise<u32>(ictx.cpua, address, rt,
62 BusExceptionType::kRaisePreciseDataBusError));
63 rd = 0x0U; // operation always succeeds ... updates memory
64 return Ok();
65 }
66};
67
68} // namespace libmicroemu::internal
Store (exclusive) u32 to memory.
Definition store_mem.h:57
Store u16 to memory.
Definition store_mem.h:28
Store u32 to memory.
Definition store_mem.h:43
Store u8 to memory.
Definition store_mem.h:13
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.
#define TRY(OUT_TYPE, CALL)
Try to call a function and return an error if the call fails.
Definition result.h:138
Definition result.h:15