In ([bd,An/PC],Xn,od) parsing check for forced .w first and fall back to .l otherwise...
authorggn <ggn.dbug@gmail.com>
Sat, 18 Jul 2020 15:13:49 +0000 (18:13 +0300)
committerShamus Hammons <jlhamm@acm.org>
Mon, 3 Aug 2020 16:42:36 +0000 (11:42 -0500)
parmode.h

index cd01a4b90c054479baec2f1b1c8b645a8a145a4f..549f131ea42630df7869042f42bcb3fbd72f8df8 100644 (file)
--- a/parmode.h
+++ b/parmode.h
@@ -616,9 +616,21 @@ CHECKODn:
                                }
 
                                // ([bd,An/PC],Xn,od)
                                }
 
                                // ([bd,An/PC],Xn,od)
-                               if (*tok == DOTL)
+                                       // Is .W forced here?
+                               if (*tok == DOTW)
                                {
                                {
-                                       // expr.L
+                                       tok++;
+                                       // od[.W]
+                                       AnEXTEN |= EXT_IISPOSW; // Word outer displacement
+                                       AMn = MEMPOST;
+                               }
+                               else
+                               {
+                                       // Is .L forced here?
+                                       if (*tok == DOTL)
+                                               tok++;                          // Doesn't matter, we're going for .L anyway
+
+                                       // od.L
                                        if (!(AnEXTEN & EXT_BS))
                                                AnEXTEN |= EXT_IISPOSL; // Long outer displacement
                                        else
                                        if (!(AnEXTEN & EXT_BS))
                                                AnEXTEN |= EXT_IISPOSL; // Long outer displacement
                                        else
@@ -633,14 +645,12 @@ CHECKODn:
                                                {
                                                        AnBEXPR[i] = AnEXPR[i];
                                                        i++;
                                                {
                                                        AnBEXPR[i] = AnEXPR[i];
                                                        i++;
-                                               }
-                                               while (AnEXPR[i] != 'E');
+                                               } while (AnEXPR[i] != 'E');
 
                                                AnBEXPR[i] = 'E';
                                        }
 
                                        AMn = MEMPOST;
 
                                                AnBEXPR[i] = 'E';
                                        }
 
                                        AMn = MEMPOST;
-                                       tok++;
 
                                        // Defined, absolute values from $FFFF8000..$00007FFF get
                                        // optimized to absolute short
 
                                        // Defined, absolute values from $FFFF8000..$00007FFF get
                                        // optimized to absolute short
@@ -653,17 +663,6 @@ CHECKODn:
                                                if (optim_warn_flag)
                                                        warn("absolute value in outer displacement ranging $FFFF8000..$00007FFF optimised to absolute short");
                                        }
                                                if (optim_warn_flag)
                                                        warn("absolute value in outer displacement ranging $FFFF8000..$00007FFF optimised to absolute short");
                                        }
-
-                               }
-                               else
-                               {
-                                       // expr[.W]
-                                       AnEXTEN |= EXT_IISPOSW; // Word outer displacement
-                                       AMn = MEMPOST;
-
-                                       // Is .W forced here?
-                                       if (*tok == DOTW)
-                                               tok++;
                                }
 
                                // Check for final closing parenthesis
                                }
 
                                // Check for final closing parenthesis