eva_asm/instruction/
memory.rs

1//! Memory Operations.
2
3use derive_more::Display;
4
5use crate::{
6    instruction::Instruction,
7    opcode::{Mnemonic, OpCode},
8};
9
10/// Load word from memory.
11#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Display)]
12#[display("{}", self.opcode())]
13pub struct MLoad;
14
15impl Instruction for MLoad {
16    fn opcode(&self) -> OpCode {
17        OpCode::Known(Mnemonic::MLOAD)
18    }
19}
20
21/// Save word to memory.
22#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Display)]
23#[display("{}", self.opcode())]
24pub struct MStore;
25
26impl Instruction for MStore {
27    fn opcode(&self) -> OpCode {
28        OpCode::Known(Mnemonic::MSTORE)
29    }
30}
31
32/// Save byte to memory.
33#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Display)]
34#[display("{}", self.opcode())]
35pub struct MStore8;
36
37impl Instruction for MStore8 {
38    fn opcode(&self) -> OpCode {
39        OpCode::Known(Mnemonic::MSTORE8)
40    }
41}
42
43/// Get the size of active memory in bytes.
44#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Display)]
45#[display("{}", self.opcode())]
46pub struct MSize;
47
48impl Instruction for MSize {
49    fn opcode(&self) -> OpCode {
50        OpCode::Known(Mnemonic::MSIZE)
51    }
52}
53
54/// Copy memory areas.
55#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Display)]
56#[display("{}", self.opcode())]
57pub struct MCopy;
58
59impl Instruction for MCopy {
60    fn opcode(&self) -> OpCode {
61        OpCode::Known(Mnemonic::MCOPY)
62    }
63}