Fix 32-bit types in preproc.c and eval.c

Fix 32-bit types in preproc.c and eval.c that should have been 64-bit
types.  This allows %assign to work correctly with 64-bit integers.
This commit is contained in:
Keith Kanios 2007-10-13 07:09:22 -07:00 committed by H. Peter Anvin
parent b263b504bc
commit a5fc6467ab
2 changed files with 19 additions and 19 deletions

32
eval.c
View File

@ -120,7 +120,7 @@ static expr *add_vectors(expr * p, expr * q)
addtotemp(p->type, p->value);
lasttype = p++->type;
} else { /* *p and *q have same type */
int32_t sum = p->value + q->value;
int64_t sum = p->value + q->value;
if (sum)
addtotemp(p->type, sum);
lasttype = p->type;
@ -154,7 +154,7 @@ static expr *add_vectors(expr * p, expr * q)
* multiplied. This allows [eax*1+ebx] to hint EBX rather than EAX
* as the base register.
*/
static expr *scalar_mult(expr * vect, int32_t scalar, int affect_hints)
static expr *scalar_mult(expr * vect, int64_t scalar, int affect_hints)
{
expr *p = vect;
@ -170,7 +170,7 @@ static expr *scalar_mult(expr * vect, int32_t scalar, int affect_hints)
return vect;
}
static expr *scalarvect(int32_t scalar)
static expr *scalarvect(int64_t scalar)
{
begintemp();
addtotemp(EXPR_SIMPLE, scalar);
@ -283,7 +283,7 @@ static expr *rexp0(int critical)
if (is_just_unknown(e) || is_just_unknown(f))
e = unknown_expr();
else
e = scalarvect((int32_t)(reloc_value(e) || reloc_value(f)));
e = scalarvect((int64_t)(reloc_value(e) || reloc_value(f)));
}
return e;
}
@ -310,7 +310,7 @@ static expr *rexp1(int critical)
if (is_just_unknown(e) || is_just_unknown(f))
e = unknown_expr();
else
e = scalarvect((int32_t)(!reloc_value(e) ^ !reloc_value(f)));
e = scalarvect((int64_t)(!reloc_value(e) ^ !reloc_value(f)));
}
return e;
}
@ -335,7 +335,7 @@ static expr *rexp2(int critical)
if (is_just_unknown(e) || is_just_unknown(f))
e = unknown_expr();
else
e = scalarvect((int32_t)(reloc_value(e) && reloc_value(f)));
e = scalarvect((int64_t)(reloc_value(e) && reloc_value(f)));
}
return e;
}
@ -343,7 +343,7 @@ static expr *rexp2(int critical)
static expr *rexp3(int critical)
{
expr *e, *f;
int32_t v;
int64_t v;
e = expr0(critical);
if (!e)
@ -502,7 +502,7 @@ static expr *expr3(int critical)
e = scalarvect(reloc_value(e) << reloc_value(f));
break;
case TOKEN_SHR:
e = scalarvect(((uint32_t)reloc_value(e)) >>
e = scalarvect(((uint64_t)reloc_value(e)) >>
reloc_value(f));
break;
}
@ -577,29 +577,29 @@ static expr *expr5(int critical)
if (is_just_unknown(e) || is_just_unknown(f))
e = unknown_expr();
else
e = scalarvect(((uint32_t)reloc_value(e)) /
((uint32_t)reloc_value(f)));
e = scalarvect(((uint64_t)reloc_value(e)) /
((uint64_t)reloc_value(f)));
break;
case '%':
if (is_just_unknown(e) || is_just_unknown(f))
e = unknown_expr();
else
e = scalarvect(((uint32_t)reloc_value(e)) %
((uint32_t)reloc_value(f)));
e = scalarvect(((uint64_t)reloc_value(e)) %
((uint64_t)reloc_value(f)));
break;
case TOKEN_SDIV:
if (is_just_unknown(e) || is_just_unknown(f))
e = unknown_expr();
else
e = scalarvect(((int32_t)reloc_value(e)) /
((int32_t)reloc_value(f)));
e = scalarvect(((int64_t)reloc_value(e)) /
((int64_t)reloc_value(f)));
break;
case TOKEN_SMOD:
if (is_just_unknown(e) || is_just_unknown(f))
e = unknown_expr();
else
e = scalarvect(((int32_t)reloc_value(e)) %
((int32_t)reloc_value(f)));
e = scalarvect(((int64_t)reloc_value(e)) %
((int64_t)reloc_value(f)));
break;
}
}

View File

@ -386,7 +386,7 @@ static Token *expand_mmac_params(Token * tline);
static Token *expand_smacro(Token * tline);
static Token *expand_id(Token * tline);
static Context *get_ctx(char *name, bool all_contexts);
static void make_tok_num(Token * tok, int32_t val);
static void make_tok_num(Token * tok, int64_t val);
static void error(int severity, const char *fmt, ...);
static void *new_Block(size_t size);
static void delete_Blocks(void);
@ -4005,10 +4005,10 @@ void pp_extra_stdmac(const char **macros)
extrastdmac = macros;
}
static void make_tok_num(Token * tok, int32_t val)
static void make_tok_num(Token * tok, int64_t val)
{
char numbuf[20];
snprintf(numbuf, sizeof(numbuf), "%"PRId32"", val);
snprintf(numbuf, sizeof(numbuf), "%"PRId64"", val);
tok->text = nasm_strdup(numbuf);
tok->type = TOK_NUMBER;
}