diff options
author | Aryadev Chavali <aryadev@aryadevchavali.com> | 2023-10-15 21:19:49 +0100 |
---|---|---|
committer | Aryadev Chavali <aryadev@aryadevchavali.com> | 2023-10-15 21:19:49 +0100 |
commit | 54760d446cd5f2e41b59d61c38dbd5f913f1bf9e (patch) | |
tree | 8ffbfb30ea3180c07278ac0a1394f4bc8acd453e /src | |
parent | f0e48a186d76623017758a96e60174412de78933 (diff) | |
download | ovm-54760d446cd5f2e41b59d61c38dbd5f913f1bf9e.tar.gz ovm-54760d446cd5f2e41b59d61c38dbd5f913f1bf9e.tar.bz2 ovm-54760d446cd5f2e41b59d61c38dbd5f913f1bf9e.zip |
Added instructions to push register values onto the stack
Diffstat (limited to 'src')
-rw-r--r-- | src/inst.h | 32 |
1 files changed, 23 insertions, 9 deletions
@@ -19,22 +19,30 @@ typedef enum { OP_NOOP = 0, + // 0b0001 OP_PUSH_BYTE = 0b00000001, OP_PUSH_WORD = 0b00000101, OP_PUSH_FLOAT = 0b00001001, - OP_MOV_BYTE = 0b00000010, - OP_MOV_WORD = 0b00000110, - OP_MOV_FLOAT = 0b00001010, - OP_POP_BYTE = 0b00000100, - OP_POP_WORD = 0b00001100, - OP_POP_FLOAT = 0b00010100, + // 0b0010 + OP_MOV_BYTE = 0b00000010, + OP_MOV_WORD = 0b00000110, + OP_MOV_FLOAT = 0b00001010, + // 0b0100 + OP_POP_BYTE = 0b00000100, + OP_POP_WORD = 0b00001100, + OP_POP_FLOAT = 0b00010100, + // 0b1000 + OP_PUSH_BREG = 0b00001000, + OP_PUSH_WREG = 0b00011000, + OP_PUSH_FREG = 0b00101000, OP_HALT, } opcode_t; -#define OPCODE_IS_PUSH(OPCODE) (((OPCODE)&0b1) == 0b1) -#define OPCODE_IS_MOV(OPCODE) (((OPCODE)&0b10) == 0b10) -#define OPCODE_IS_POP(OPCODE) (((OPCODE)&0b100) == 0b100) +#define OPCODE_IS_PUSH(OPCODE) (((OPCODE)&0b1) == 0b1) +#define OPCODE_IS_MOV(OPCODE) (((OPCODE)&0b10) == 0b10) +#define OPCODE_IS_POP(OPCODE) (((OPCODE)&0b100) == 0b100) +#define OPCODE_IS_PUSH_REG(OPCODE) (((OPCODE)&0b1000) == 0b1000) typedef struct { @@ -70,4 +78,10 @@ typedef struct #define INST_FPOP(FLOAT) \ ((inst_t){.opcode = OP_POP_FLOAT, .operand = DFLOAT(FLOAT)}) +#define INST_BPUSH_REG(REG) ((inst_t){.opcode = OP_PUSH_BREG, .reg = (REG)}) + +#define INST_WPUSH_REG(REG) ((inst_t){.opcode = OP_PUSH_WREG, .reg = (REG)}) + +#define INST_FPUSH_REG(REG) ((inst_t){.opcode = OP_PUSH_FREG, .reg = (REG)}) + #endif |