2020-02-03 17:56:32 -05:00
|
|
|
macro_rules! instructions {
|
|
|
|
|
{
|
|
|
|
|
$($variant:ident = $value:expr),* $(,)?
|
|
|
|
|
} => {
|
|
|
|
|
pub type InstOp = u16;
|
2020-01-25 19:17:39 -05:00
|
|
|
|
2020-02-03 17:56:32 -05:00
|
|
|
$(
|
|
|
|
|
pub const $variant: InstOp = $value;
|
|
|
|
|
)*
|
|
|
|
|
};
|
2020-01-25 19:17:39 -05:00
|
|
|
}
|
|
|
|
|
|
2020-02-03 17:56:32 -05:00
|
|
|
instructions! {
|
|
|
|
|
ADD = 0x0000,
|
|
|
|
|
MUL = 0x0001,
|
|
|
|
|
DIV = 0x0002,
|
|
|
|
|
MOD = 0x0003,
|
|
|
|
|
INEG = 0x0004,
|
|
|
|
|
AND = 0x0005,
|
|
|
|
|
OR = 0x0006,
|
|
|
|
|
INV = 0x0007,
|
|
|
|
|
NOT = 0x0008,
|
|
|
|
|
XOR = 0x0009,
|
|
|
|
|
SHL = 0x000a,
|
|
|
|
|
SHR = 0x000b,
|
|
|
|
|
CMPEQ = 0x1000,
|
|
|
|
|
CMPLT = 0x1001,
|
|
|
|
|
JMP = 0x1100,
|
|
|
|
|
JZ = 0x1101,
|
|
|
|
|
JNZ = 0x1102,
|
|
|
|
|
LOAD = 0x2000,
|
|
|
|
|
REGCOPY = 0x2001,
|
|
|
|
|
STOREIMM64 = 0x2100,
|
|
|
|
|
STOREIMM32 = 0x2101,
|
|
|
|
|
MEMCOPY = 0x2200,
|
|
|
|
|
STORE = 0x2201,
|
|
|
|
|
HALT = 0xF000,
|
|
|
|
|
NOP = 0xF001,
|
|
|
|
|
}
|