summaryrefslogtreecommitdiff
path: root/assembler.c
diff options
context:
space:
mode:
Diffstat (limited to 'assembler.c')
-rw-r--r--assembler.c55
1 files changed, 6 insertions, 49 deletions
diff --git a/assembler.c b/assembler.c
index eaf4d38..142870f 100644
--- a/assembler.c
+++ b/assembler.c
@@ -4,55 +4,7 @@
#include "lex.h"
#include "parse.h"
#include "instruction.h"
-
-#if 0
-/**
- * Types for intermediate storage of instructions
- */
-struct r_type {
- enum OPER operation;
- enum REG dest;
- enum REG left;
- enum REG right;
-};
-
-struct i_type { /* covers WI and NI */
- enum OPER operation;
- enum REG dest;
- enum REG left;
- int16_t immediate;
-};
-
-struct jr_type {
- enum JCOND condition;
- enum REG reg;
-};
-
-struct ji_type {
- enum JCOND condition;
- uint16_t immediate;
-};
-
-struct b_type { /* FIXME merge with ji_type? */
- enum JCOND condition;
- uint16_t immediate; /* capped to 10 bits by IS */
-};
-
-/* Union for bringing above together */
-union instruction_union {
- struct r_type r;
- struct i_type i;
- struct jr_type jr;
- struct ji_type ji;
- struct b_type b;
-};
-
-struct instruction {
- enum INST_TYPE type;
- union instruction_union i;
-};
-/**/
-#endif
+#include "output.h"
int main(int argc, char **argv)
{
@@ -83,6 +35,7 @@ int main(int argc, char **argv)
if ((tokens = lex(argv[1], fin, &tok_count)) == NULL)
return 2;
+ /* FIXME package these things into `tok_result`, `parse_result` etc */
struct instruction *insts;
size_t insts_count;
struct label *labels;
@@ -90,6 +43,10 @@ int main(int argc, char **argv)
if (ret = parse(argv[1], fin, &labels, &labels_count, tokens, tok_count, &insts, &insts_count))
return ret;
+ /* FIXME insert pass for sanity checking identifiers, sizes of values */
+
+ /* FIXME insert optional pass for optimisation */
+
if (ret = output(fout, labels, labels_count, insts, insts_count))
return ret;