as.h - scc - simple c99 compiler
 (HTM) git clone git://git.simple-cc.org/scc
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Submodules
 (DIR) README
 (DIR) LICENSE
       ---
       as.h (2766B)
       ---
            1 /*
            2  * First 3 bits of flags in segments and symbols are for the
            3  * type of segment
            4  */
            5 enum symflags {
            6         FREG    = 1 << 0,
            7         FSECT   = 1 << 1,
            8         FSYM    = 1 << 2,
            9         FCOMMON = 1 << 3,
           10         FEXTERN = 1 << 4,
           11         FDEF    = 1 << 5,
           12         FGLOBAL = 1 << 6,
           13         FABS    = 1 << 7,
           14 };
           15 
           16 enum common_args {
           17         AIMM = 1,
           18         ASTR,
           19         AREG,
           20         ANUMBER,
           21         AIMM2,
           22         AIMM3,
           23         AIMM5,
           24         AIMM8,
           25         AIMM16,
           26         AIMM32,
           27         AIMM64,
           28         AINDIR,
           29         AINDEX,
           30         ADIRECT,
           31         AREG_OFF,
           32         ASYM,
           33         AOPT,
           34         AREP,
           35         AMAX,
           36 };
           37 
           38 enum tokens {
           39         EOS = -1,
           40         IDEN = 1,
           41         NUMBER,
           42         REG,
           43         STRING,
           44         MINUS,
           45         SHL,
           46         SHR,
           47         GE,
           48         LE,
           49 };
           50 
           51 #define MAXSYM 63
           52 
           53 typedef struct reloc Reloc;
           54 typedef struct ins Ins;
           55 typedef struct op Op;
           56 typedef struct node Node;
           57 typedef void Format(Op *, Node **);
           58 
           59 struct line {
           60         char *label;
           61         char *op;
           62         char *args;
           63 };
           64 
           65 struct ins {
           66         int begin, end;
           67         char *str;
           68 };
           69 
           70 struct reloc {
           71         size_t offset;
           72         Symbol *sym;
           73         unsigned char flags;
           74         unsigned char size;
           75         unsigned char nbits;
           76         unsigned char shift;
           77 };
           78 
           79 struct op {
           80         unsigned char flags;
           81         unsigned char size;
           82         void (*format)(Op *, Node **);
           83         unsigned char *bytes;
           84         unsigned char *args;
           85 };
           86 
           87 struct node {
           88         unsigned char op;
           89         unsigned char addr;
           90         struct symbol *sym;
           91         struct node *left;
           92         struct node *right;
           93 };
           94 
           95 union yylval {
           96         TUINT val;
           97         Symbol *sym;
           98 };
           99 
          100 /* symbol.c */
          101 extern void cleansecs(void);
          102 extern void ibinfmt(void);
          103 extern void emit(char *, int);
          104 extern Section *defsec(char *, char *);
          105 extern Symbol *tmpsym(TUINT);
          106 extern void killtmp(void);
          107 extern int toobig(Node *, int);
          108 extern void dumpstab(char *);
          109 extern Symbol *lookup(char *);
          110 extern Symbol *deflabel(char *);
          111 extern unsigned long long getpc(void);
          112 
          113 /* parser.c */
          114 extern Node **getargs(char *);
          115 extern void error(char *, ...);
          116 /* Avoid errors in files where stdio is not included */
          117 #ifdef stdin
          118 extern int nextline(struct line *);
          119 #endif
          120 extern void unexpected(void);
          121 extern void expect(int);
          122 int next(void);
          123 #define accept(t) (yytoken == (t) ? next() : 0)
          124 extern void regctx(int mode);
          125 extern Node *getreg(void);
          126 extern Node *operand(char **);
          127 extern void addinput(char *);
          128 extern int delinput(void);
          129 extern int ahead(void);
          130 
          131 /* expr.c */
          132 extern Node *expr(void);
          133 extern void deltree(Node *);
          134 extern Node *node(int, Node *, Node *);
          135 
          136 /* proc.c */
          137 extern void iarch(void);
          138 extern int match(Op *, Node **);
          139 extern Node *moperand(void);
          140 
          141 /* ins.c */
          142 extern char *tobytes(TUINT, int, int);
          143 
          144 /* binfmt.c */
          145 extern void writeout(char *);
          146 
          147 /*
          148  * Definition of global variables
          149  */
          150 extern unsigned long M, S, K;
          151 extern short hashmap[];
          152 extern Section *cursec;
          153 extern Ins instab[];
          154 extern Op optab[];
          155 extern int pass;
          156 extern TUINT maxaddr;
          157 extern int endian;
          158 extern Symbol *linesym;
          159 extern char *infile, *outfile;
          160 extern int endpass;
          161 extern int yytoken;
          162 extern size_t yylen;
          163 extern union yylval yylval;
          164 extern char yytext[];