X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?p=rmac;a=blobdiff_plain;f=parmode.h;h=955fade88621de27095dad9fba6f613c8498f76f;hp=e0de0376e29ee217f33a7941d3834db253a9d0cd;hb=ace0b549a94110b69ec61442f825fb421b79799a;hpb=81c752326a21408c84f98a18aed065491a88b779 diff --git a/parmode.h b/parmode.h index e0de037..955fade 100644 --- a/parmode.h +++ b/parmode.h @@ -1,7 +1,7 @@ // // RMAC - Reboot's Macro Assembler for all Atari computers // PARMODE.C - Addressing Modes Parser Include -// Copyright (C) 199x Landon Dyer, 2011-2017 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 // @@ -81,7 +81,7 @@ } 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 == ')') @@ -1169,24 +1169,34 @@ CHK_FOR_DISPn: // expr[.L] AMn = ABSL; - // 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)) - { - AMn = ABSW; - - if (sbra_flag) - warn("absolute value from $FFFF8000..$00007FFF optimised to absolute short"); - } + // 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"); - // Is .L forced here? + // .L is forced here if (*tok == DOTL) { tok++; AMn = ABSL; } + else + { + // 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)) + { + AMn = ABSW; + + if (sbra_flag) + warn("absolute value from $FFFF8000..$00007FFF optimised to absolute short"); + } + } goto AnOK; }