//
-// RMAC - Reboot's Macro Assembler for the Atari Jaguar Console System
+// RMAC - Reboot's Macro Assembler for all Atari computers
// SECT.C - Code Generation, Fixups and Section Management
-// Copyright (C) 199x Landon Dyer, 2017 Reboot and Friends
+// Copyright (C) 199x Landon Dyer, 2011-2017 Reboot and Friends
// RMAC derived from MADMAC v1.07 Written by Landon Dyer, 1986
// Source utilised with the kind permission of Landon Dyer
//
// 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;