Added instructions to push register values onto the stack

This commit is contained in:
2023-10-15 21:19:49 +01:00
parent f0e48a186d
commit 54760d446c

View File

@@ -19,22 +19,30 @@ typedef enum
{ {
OP_NOOP = 0, OP_NOOP = 0,
// 0b0001
OP_PUSH_BYTE = 0b00000001, OP_PUSH_BYTE = 0b00000001,
OP_PUSH_WORD = 0b00000101, OP_PUSH_WORD = 0b00000101,
OP_PUSH_FLOAT = 0b00001001, OP_PUSH_FLOAT = 0b00001001,
OP_MOV_BYTE = 0b00000010, // 0b0010
OP_MOV_WORD = 0b00000110, OP_MOV_BYTE = 0b00000010,
OP_MOV_FLOAT = 0b00001010, OP_MOV_WORD = 0b00000110,
OP_POP_BYTE = 0b00000100, OP_MOV_FLOAT = 0b00001010,
OP_POP_WORD = 0b00001100, // 0b0100
OP_POP_FLOAT = 0b00010100, 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, OP_HALT,
} opcode_t; } opcode_t;
#define OPCODE_IS_PUSH(OPCODE) (((OPCODE)&0b1) == 0b1) #define OPCODE_IS_PUSH(OPCODE) (((OPCODE)&0b1) == 0b1)
#define OPCODE_IS_MOV(OPCODE) (((OPCODE)&0b10) == 0b10) #define OPCODE_IS_MOV(OPCODE) (((OPCODE)&0b10) == 0b10)
#define OPCODE_IS_POP(OPCODE) (((OPCODE)&0b100) == 0b100) #define OPCODE_IS_POP(OPCODE) (((OPCODE)&0b100) == 0b100)
#define OPCODE_IS_PUSH_REG(OPCODE) (((OPCODE)&0b1000) == 0b1000)
typedef struct typedef struct
{ {
@@ -70,4 +78,10 @@ typedef struct
#define INST_FPOP(FLOAT) \ #define INST_FPOP(FLOAT) \
((inst_t){.opcode = OP_POP_FLOAT, .operand = DFLOAT(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 #endif