]> Shamusworld >> Repos - rmac/blobdiff - procln.c
Version bump for latest commits.
[rmac] / procln.c
index 9c207bfdefe8481ca71195ad1ad7c3aaaf7c3471..77b7b50f065cb7e4a4b98c7087e957376c473647 100644 (file)
--- 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-2020 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];