//
// RMAC - Reboot's Macro Assembler for all Atari computers
// PARMODE.C - Addressing Modes Parser Include
-// Copyright (C) 199x Landon Dyer, 2011-2018 Reboot and Friends
+// Copyright (C) 199x Landon Dyer, 2011-2020 Reboot and Friends
// RMAC derived from MADMAC v1.07 Written by Landon Dyer, 1986
// Source utilised with the kind permission of Landon Dyer
//
}
else if ((*tok >= KW_D0) && (*tok <= KW_D7))
{
- //Since index register isn't used here, store register number in this field
+ // Since index register isn't used here, store register number in this field
AnIXREG = *tok++ & 7; // (Dn)
if (*tok == ')')
// expr[.L]
AMn = ABSL;
- // Is .L forced here?
+ // When PC relative is enforced, check for any symbols that aren't
+ // EQU'd, in this case it's an illegal mode
+ if (optim_pc)
+ if (AnEXATTR & REFERENCED)
+ if (AnEXATTR & DEFINED)
+ if (!(AnEXATTR & EQUATED))
+ return error("relocation not allowed");
+
+ // .L is forced here
if (*tok == DOTL)
{
tok++;
}
else
{
- // Defined, absolute values from $FFFF8000..$00007FFF get optimized
- // to absolute short
+ // Defined, absolute values from $FFFF8000..$00007FFF get
+ // optimized to absolute short
if (CHECK_OPTS(OPT_ABS_SHORT)
&& ((AnEXATTR & (TDB | DEFINED)) == DEFINED)
&& (((uint32_t)AnEXVAL + 0x8000) < 0x10000))