Modified how registers and opcodes are represented. This commit is a bit buggy but doesn't crash and burn at least. I just wanted the new structs push out before making a bigger mess of things as I try to organize this all.

This commit is contained in:
2022-02-17 21:35:57 -06:00
parent 3d4ab57f05
commit 19021ff782
6 changed files with 106 additions and 59 deletions
+32 -21
View File
@@ -1,41 +1,52 @@
#include "../includes/opcodes.h"
#include <stdlib.h>
#include <string.h>
char *opcodes[OPCODECOUNT] = {
"copy",
"add",
"sub",
"jz",
"int",
"yld",
"ret"
OpCode opcodes[OPCODECOUNT] = {
{ "copy", COPY, Reg, Reg | Imm8 | Imm16 },
{ "add", ADD, Reg, Reg | Imm8 | Imm16 },
{ "sub", SUB, Reg, Reg | Imm8 | Imm16 },
{ "jz", JZ, Imm8 | Imm16, None },
{ "int", INT, Imm8, None },
{ "yld", YLD, None, None },
{ "ret", RET, None, None },
{ "cmp", CMP, Reg | Imm8 | Imm16, Reg | Imm8 | Imm16 },
{ "in", IN, None, None},
{ "out", OUT, None, None}
};
char *registers[REGISTERCOUNT] = {
"r1",
"r2",
"r3",
"r4",
"r5",
"r6",
"r7",
"r8"
Register registers[REGISTERCOUNT] = {
{ "r1", R1 },
{ "r2", R2 },
{ "r3", R3 },
{ "r4", R4 },
{ "r5", R5 },
{ "r6", R6 },
{ "r7", R7 },
{ "r8", R8 }
};
int IsOpcode(const char* text) {
int IsOpcode(const char* text, TokenType* opcode) {
if (!text) return 0;
for(int i = 0; i < OPCODECOUNT; i++) {
if (strcmp(opcodes[i], text) == 0) return 1;
if (strcmp(opcodes[i].lexeme, text) == 0) {
opcode = &opcodes[i].op;
return 1;
}
}
return 0;
}
int IsRegister(const char* text) {
int IsRegister(const char* text, TokenType* reg) {
if (!text) return 0;
for(int i = 0; i < REGISTERCOUNT; i++) {
if (strcmp(registers[i], text) == 0) return 1;
if (strcmp(registers[i].lexeme, text) == 0) {
reg = &registers[i].type;
return 1;
}
}
return 0;