From 38e3922cf7f521d1e119cbeff8722f0d8ca4c66a Mon Sep 17 00:00:00 2001 From: David Phillips Date: Sun, 14 Apr 2019 16:14:02 +1200 Subject: Tidy assembler.c --- assembler.c | 55 ++++++------------------------------------------------- 1 file changed, 6 insertions(+), 49 deletions(-) (limited to 'assembler.c') 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; -- cgit v1.1