summaryrefslogtreecommitdiff
path: root/asm/asm.h
diff options
context:
space:
mode:
Diffstat (limited to 'asm/asm.h')
-rw-r--r--asm/asm.h149
1 files changed, 149 insertions, 0 deletions
diff --git a/asm/asm.h b/asm/asm.h
new file mode 100644
index 00000000..15150664
--- /dev/null
+++ b/asm/asm.h
@@ -0,0 +1,149 @@
+#include "lib9.h"
+#include <bio.h>
+#include <ctype.h>
+#include "../include/isa.h"
+
+enum
+{
+ Eof = -1,
+ False = 0,
+ True = 1,
+ Strsize = 1024,
+ Hashsize = 128
+};
+
+typedef struct Addr Addr;
+typedef struct Inst Inst;
+typedef struct String String;
+typedef struct Sym Sym;
+typedef struct Keywd Keywd;
+typedef struct Desc Desc;
+typedef struct Array Array;
+typedef struct List List;
+typedef struct Link Link;
+
+struct Addr
+{
+ uchar mode;
+ ushort off;
+ long val;
+ Sym* sym;
+};
+
+struct List
+{
+ List* link;
+ int addr;
+ int type;
+ union {
+ vlong ival;
+ double fval;
+ String* str;
+ Array* a;
+ }u;
+};
+
+struct Inst
+{
+ uchar op;
+ uchar type;
+ int size;
+ Addr* reg;
+ Addr* src;
+ Addr* dst;
+ ulong pc;
+ Sym* sym;
+ Inst* link;
+};
+
+struct String
+{
+ int len;
+ String* next;
+ char* string;
+};
+
+struct Sym
+{
+ char* name;
+ int lexval;
+ Sym* hash;
+ int value;
+ int ds;
+};
+
+struct Desc
+{
+ int id;
+ int size;
+ int np;
+ uchar* map;
+ Desc* link;
+};
+
+struct Array
+{
+ int i;
+ int size;
+};
+
+struct Link
+{
+ int desc;
+ int addr;
+ int type;
+ char* name;
+ Link* link;
+};
+
+Sym* enter(char*, int);
+Sym* lookup(char*);
+void yyerror(char*, ...);
+void fatal(char*, ...);
+void diag(char*, ...);
+int numsym(char);
+int mpatof(char*, double*);
+void kinit(void);
+Inst* ai(int);
+Addr* aa(int);
+void assem(Inst*);
+int iconv(Fmt*);
+int aconv(Fmt*);
+int opcode(Inst*);
+void heap(int, int, String*);
+List* newa(int, int);
+List* newi(vlong, List*);
+List* news(String*, List*);
+void data(int, int, List*);
+void dout(void);
+void ext(int, int, String*);
+void mklink(int, int, int, String*);
+vlong dtocanon(double);
+void ldts(int);
+void excs(int);
+void exc(int, int, int, int, int, int);
+void etab(String*, int);
+void source(String*);
+
+int yyparse(void);
+int yylex(void);
+
+extern Biobuf* bout;
+extern int nerr;
+extern int heapid;
+extern Desc* dlist;
+extern int dcount;
+extern int dseg;
+extern List* mdata;
+extern Sym* module;
+extern Link* links;
+extern Link* linkt;
+extern int nlink;
+extern int listing;
+extern int dontcompile;
+extern int mustcompile;
+extern int dentry;
+extern int pcentry;
+
+#pragma varargck type "i" Inst*
+#pragma varargck type "a" Addr*