aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAryadev Chavali <aryadev@aryadevchavali.com>2023-10-15 21:19:49 +0100
committerAryadev Chavali <aryadev@aryadevchavali.com>2023-10-15 21:19:49 +0100
commit54760d446cd5f2e41b59d61c38dbd5f913f1bf9e (patch)
tree8ffbfb30ea3180c07278ac0a1394f4bc8acd453e /src
parentf0e48a186d76623017758a96e60174412de78933 (diff)
downloadovm-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.h32
1 files changed, 23 insertions, 9 deletions
diff --git a/src/inst.h b/src/inst.h
index d27f7d3..07944ff 100644
--- a/src/inst.h
+++ b/src/inst.h
@@ -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