diff options
Diffstat (limited to 'asm/asm.h')
| -rw-r--r-- | asm/asm.h | 149 |
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* |
