// Count the # of tokens in the expression
for(len=0; fexpr[len]!=ENDEXPR; len++)
{
- // Add one to len for 2X tokens
- if (fexpr[len] == CONST || fexpr[len] == SYMBOL)
+ // Add one to len for 2X tokens, two for 3X tokens
+ if (fexpr[len] == SYMBOL)
len++;
+ else if (fexpr[len] == CONST)
+ len += 2;
}
// Add 1 for ENDEXPR
int ResolveFixups(int sno)
{
PTR fup; // Current fixup
- VALUE eval; // Expression value
+ uint64_t eval; // Expression value
SYM * sy; // (Temp) pointer to a symbol
uint16_t i; // (Temp) word
int reg2;
if (eattr & DEFINED)
{
if (tdb == sno)
- eval -= (VALUE)loc;
+ eval -= (uint32_t)loc;
else if (tdb)
{
error("PC-relative expr across sections");
warn("unoptimized short branch");
}
else if (obj_format == MWC)
- eval -= (VALUE)loc;
+ eval -= (uint32_t)loc;
tdb = 0;
eattr &= ~TDB;