]> Shamusworld >> Repos - rmac/blobdiff - procln.c
Fix a small buglet in the last patch. :-)
[rmac] / procln.c
index 9c207bfdefe8481ca71195ad1ad7c3aaaf7c3471..8cdcc6af2501cd5e8b1886cbe76e3813a63a46d9 100644 (file)
--- a/procln.c
+++ b/procln.c
@@ -486,6 +486,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 +850,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];