X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=procln.c;h=77b7b50f065cb7e4a4b98c7087e957376c473647;hb=7815a9c9504d879230a950318d434b411d045610;hp=86b0e6fc8755510ed11932933e9fdf3096f1df9a;hpb=2037569179a89c7ea99abf7c3e75f23448ff54ff;p=rmac diff --git a/procln.c b/procln.c index 86b0e6f..77b7b50 100644 --- a/procln.c +++ b/procln.c @@ -1,7 +1,7 @@ // -// RMAC - Reboot's Macro Assembler for all Atari computers +// RMAC - Renamed Macro Assembler for all Atari computers // PROCLN.C - Line Processing -// Copyright (C) 199x Landon Dyer, 2011-2019 Reboot and Friends +// Copyright (C) 199x Landon Dyer, 2011-2021 Reboot and Friends // RMAC derived from MADMAC v1.07 Written by Landon Dyer, 1986 // Source utilised with the kind permission of Landon Dyer // @@ -222,23 +222,9 @@ loop1: // Internal line processing loop // Skip past label (but record it) if (j == ':' || j == DCOLON) { -as68label: label = string[tok[1]]; // Get label name labtyp = tok[2]; // Get label type tok += 3; // Go to next line token - - // AS68 MODE: - // Looks like another label follows the previous one, so handle - // the previous one until there aren't any more - if (as68_flag && (*tok == SYMBOL && tok[2] == ':')) - { - if (HandleLabel(label, labtyp) != 0) - goto loop; - - label_defined = label; - - goto as68label; - } } // EOL is legal here... @@ -486,6 +472,11 @@ When checking to see if it's already been equated, issue a warning. registerbank = BANK_0; else if (*(uint64_t *)tok == 1) registerbank = BANK_1; + + // Advance half-way through the 64-bit const. + // The code below, expecting a regular token, + // will advance past the second half. + tok++; } #ifdef DEBODGE_REGBANK @@ -845,8 +836,13 @@ When checking to see if it's already been equated, issue a warning. if (amode(1) < 0) // Parse 0, 1 or 2 addr modes goto loop; - if (*tok != EOL) - error(extra_stuff); + // Check that we're at EOL + // The only exception is ptestr/ptestw instructions + // that have 3 or 4 operands and are not handled by + // amode(). (yes, we're taking a performance hit here sadly) + if (m->mnfunc != m_ptestr && m->mnfunc != m_ptestw) + if (*tok != EOL) + error(extra_stuff); amsk0 = amsktab[am0]; amsk1 = amsktab[am1];