mirror of
https://github.com/netwide-assembler/nasm.git
synced 2025-07-24 10:25:42 -04:00
Avoid magic values; we have more than 124 registers now
There was a magic hard-coded constant that register numbers were between 1 and 124. Well, we have about 150 registers now, and that broke.
This commit is contained in:
parent
34539fb1ed
commit
a1abb32004
17
nasm.h
17
nasm.h
@ -284,17 +284,14 @@ typedef expr *(*evalfunc) (scanner sc, void *scprivate,
|
|||||||
efunc error, struct eval_hints * hints);
|
efunc error, struct eval_hints * hints);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Special values for expr->type. ASSUMPTION MADE HERE: the number
|
* Special values for expr->type. These come after EXPR_REG_END
|
||||||
* of distinct register names (i.e. possible "type" fields for an
|
* as defined in regs.h.
|
||||||
* expr structure) does not exceed 124 (EXPR_REG_START through
|
|
||||||
* EXPR_REG_END).
|
|
||||||
*/
|
*/
|
||||||
#define EXPR_REG_START 1
|
|
||||||
#define EXPR_REG_END 124
|
#define EXPR_UNKNOWN (EXPR_REG_END+1) /* forward references */
|
||||||
#define EXPR_UNKNOWN 125L /* for forward references */
|
#define EXPR_SIMPLE (EXPR_REG_END+2)
|
||||||
#define EXPR_SIMPLE 126L
|
#define EXPR_WRT (EXPR_REG_END+3)
|
||||||
#define EXPR_WRT 127L
|
#define EXPR_SEGBASE (EXPR_REG_END+4)
|
||||||
#define EXPR_SEGBASE 128L
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Preprocessors ought to look like this:
|
* Preprocessors ought to look like this:
|
||||||
|
4
regs.pl
4
regs.pl
@ -72,14 +72,18 @@ close(REGS);
|
|||||||
if ( $fmt eq 'h' ) {
|
if ( $fmt eq 'h' ) {
|
||||||
# Output regs.h
|
# Output regs.h
|
||||||
print "/* automatically generated from $file - do not edit */\n";
|
print "/* automatically generated from $file - do not edit */\n";
|
||||||
|
$expr_regs = 1;
|
||||||
|
printf "#define EXPR_REG_START %d\n", $expr_regs;
|
||||||
print "enum reg_enum {\n";
|
print "enum reg_enum {\n";
|
||||||
$attach = ' = EXPR_REG_START'; # EXPR_REG_START == 1
|
$attach = ' = EXPR_REG_START'; # EXPR_REG_START == 1
|
||||||
foreach $reg ( sort(keys(%regs)) ) {
|
foreach $reg ( sort(keys(%regs)) ) {
|
||||||
print " R_\U${reg}\E${attach},\n";
|
print " R_\U${reg}\E${attach},\n";
|
||||||
$attach = ''; $ch = ',';
|
$attach = ''; $ch = ',';
|
||||||
|
$expr_regs++;
|
||||||
}
|
}
|
||||||
print " REG_ENUM_LIMIT\n";
|
print " REG_ENUM_LIMIT\n";
|
||||||
print "};\n\n";
|
print "};\n\n";
|
||||||
|
printf "#define EXPR_REG_END %d\n", $expr_regs-1;
|
||||||
foreach $reg ( sort(keys(%regs)) ) {
|
foreach $reg ( sort(keys(%regs)) ) {
|
||||||
printf "#define %-15s %2d\n", "REG_NUM_\U${reg}", $regvals{$reg};
|
printf "#define %-15s %2d\n", "REG_NUM_\U${reg}", $regvals{$reg};
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user