commit f118bda209b47d84d74d5e5fe50b1f97d9a368d4
parent 738ceb3db836a394105b82b4bf57ee37b90cb05f
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date: Sat, 3 Feb 2018 21:31:54 +0100
[as] Remove FNTYPE and FMASK
We can use only one bit for every type of symbol.
Diffstat:
4 files changed, 12 insertions(+), 19 deletions(-)
diff --git a/as/as.h b/as/as.h
@@ -3,16 +3,13 @@
* type of segment
*/
enum symflags {
- FTMASK = 0x3,
- FNTYPE = 0,
- FREG = 1,
- FSECT = 2,
- FSYM = 3,
-
- FCOMMON = 1 << 2,
- FEXTERN = 1 << 3,
- FDEF = 1 << 4,
- FGLOBAL = 1 << 5,
+ FREG = 1 << 0,
+ FSECT = 1 << 1,
+ FSYM = 1 << 2,
+ FCOMMON = 1 << 3,
+ FEXTERN = 1 << 4,
+ FDEF = 1 << 5,
+ FGLOBAL = 1 << 6,
FABS = 1 << 7,
};
diff --git a/as/myro.c b/as/myro.c
@@ -27,7 +27,7 @@ writestrings(FILE *fp)
off = sizeof(FORMAT);
for (sym = symlist; sym; sym = sym->next) {
- if ((sym->flags & FTMASK) == FREG)
+ if (sym->flags & FREG)
continue;
str = &sym->name;
len = strlen(str->buf) + 1;
@@ -100,14 +100,12 @@ getsymflags(Symbol *sym)
static size_t
writesymbols(FILE *fp)
{
- int type;
Symbol *sym;
size_t off = 0;
struct myrosym symbol;
for (sym = symlist; sym; sym = sym->next) {
- type = sym->flags & FTMASK;
- if (type == FREG || type == FSECT)
+ if (sym->flags & (FREG|FSECT))
continue;
symbol.name = sym->name.offset;
symbol.type = -1;
diff --git a/as/parser.c b/as/parser.c
@@ -84,7 +84,7 @@ out_loop:
tok2str();
yylval.sym = lookup(yytext);
- return ((yylval.sym->flags & FTMASK) == FREG) ? REG : IDEN;
+ return (yylval.sym->flags & FREG) ? REG : IDEN;
}
static int
diff --git a/as/symbol.c b/as/symbol.c
@@ -64,7 +64,7 @@ lookup(char *name)
sym = xmalloc(sizeof(*sym));
sym->name = newstring(name);
- sym->flags = FNTYPE;
+ sym->flags = 0;
sym->size = sym->value = 0;
sym->section = cursec;
sym->hash = *list;
@@ -190,12 +190,10 @@ setsec(char *name, char *attr)
{
Section *sec;
Symbol *sym;
- int flags, type;
cursec = NULL;
sym = lookup(name);
- type = sym->flags & FTMASK;
- if (type != FNTYPE && type != FSECT)
+ if (sym->flags & ~FSECT)
error("invalid section name '%s'", name);
if ((sec = sym->section) == NULL) {