]> Shamusworld >> Repos - rmac/commitdiff
.equr overhaul part 1: remove gpu/dsp only restriction, make sure things still work...
authorggn <ggn@atari.org>
Sun, 6 Mar 2022 18:07:19 +0000 (20:07 +0200)
committerShamus Hammons <jlhamm@acm.org>
Mon, 30 May 2022 19:17:59 +0000 (14:17 -0500)
expr.c
procln.c
riscasm.c

diff --git a/expr.c b/expr.c
index 527cb2a29c9a23fc1726a131ff2ddff302d99137..4525754efe1f5296278dd670ea1d918e6995c0de 100644 (file)
--- a/expr.c
+++ b/expr.c
@@ -494,13 +494,8 @@ be converted from a linked list into an array).
                        *a_value = (symbol->sattr & DEFINED ? symbol->svalue : 0);
                        *a_attr = (WORD)(symbol->sattr & ~GLOBAL);
 
-/*
-All that extra crap that was put into the svalue when doing the equr stuff is
-thrown away right here. What the hell is it for?
-*/
                        if (symbol->sattre & EQUATEDREG)
                        {
-                               *a_value &= 0x1F;
                                *a_attr |= RISCREG; // Mark it as a register, 'cause it is
                                *a_esym = symbol;
                        }
index 77b7b50f065cb7e4a4b98c7087e957376c473647..ae2b2b857dceeb144879a8e86f1b759fc1f7e18f 100644 (file)
--- a/procln.c
+++ b/procln.c
@@ -434,32 +434,16 @@ have an array of bools with 64 entries. Whenever a register is equated, set the
 corresponding register bool to true. Whenever it's undef'ed, set it to false.
 When checking to see if it's already been equated, issue a warning.
 */
-                       // Check that we are in a RISC section
-                       if (!rgpu && !rdsp)
-                       {
-                               error(".equr/.regequ must be defined in .gpu/.dsp section");
-                               goto loop;
-                       }
 
                        // Check for register to equate to
                        if ((*tok >= KW_R0) && (*tok <= KW_R31))
                        {
 //                             sy->sattre  = EQUATEDREG | RISCSYM;     // Mark as equated register
                                sy->sattre  = EQUATEDREG;       // Mark as equated register
-                               riscreg = (*tok - KW_R0);
-//is there any reason to do this, since we're putting this in svalue?
-//i'm thinking, no. Let's test that out! :-D
-//                             sy->sattre |= (riscreg << 8);           // Store register number
-//everything seems to build fine without it... We'll leave it here Just In Case(tm)
-
-#define DEBODGE_REGBANK
-#ifdef DEBODGE_REGBANK
+                               riscreg = (*tok);
+
                                // Default is current state of "regbank"
                                registerbank = regbank;
-#else
-                               // Default is no register bank specified
-                               registerbank = BANK_N;
-#endif
 
                                // Check for ",<bank #>" override notation
                                if ((tok[1] == ',') && (tok[2] == CONST))
@@ -479,18 +463,7 @@ When checking to see if it's already been equated, issue a warning.
                                        tok++;
                                }
 
-#ifdef DEBODGE_REGBANK
                                sy->sattre |= registerbank;     // Store register bank
-#else
-// What needs to happen here is to prime registerbank with regbank, then use
-// registerbank down below for the bank marking.
-#warning "!!! regbank <-> registerbank confusion here !!!"
-// The question here is why, if we're allowed to override the ".regbankN" rules
-// above, then why is it using the one set by the directive in the extended
-// attributes and not in what ends up in symbol->svalue?
-// ".regbankN" is not an original Madmac directive, so it's suspect
-                               sy->sattre |= regbank;          // Store register bank
-#endif
                                eattr = ABS | DEFINED | GLOBAL;
                                eval = riscreg;
                                tok++;
index 5681f354e5a1d480d7a97783a9f9f138e663d058..fb6c5ce18781e6ec5cb1ccc9ba90b88473244a3b 100644 (file)
--- a/riscasm.c
+++ b/riscasm.c
@@ -231,8 +231,8 @@ static int EvaluateRegisterFromTokenStream(uint32_t fixup)
        }
 
        // If we got a register in range (0-31), return it
-       if (eval <= 31)
-               return (int)eval;
+       if (eattr & RISCREG)
+               return (int)eval - KW_R0;
 
        // Otherwise, it's out of range & we flag an error
        return error(reg_err);
@@ -474,8 +474,8 @@ int GenerateRISCCode(int state)
                        {
                                if ((tok[2] == '+') || (tok[2] == '-'))
                                {
-                                       if ((sy->svalue & 0x1F) == 14 || (sy->svalue & 0x1F) == 15) {
-                                               indexed = (sy->svalue & 0x1F);
+                                       if ((sy->svalue - KW_R0) == 14 || (sy->svalue - KW_R0) == 15) {
+                                               indexed = (sy->svalue - KW_R0);
                                                tok++;
                                        }
                                        else
@@ -590,10 +590,10 @@ int GenerateRISCCode(int state)
 
                        if (sy->sattre & EQUATEDREG)
                        {
-                               if (((sy->svalue & 0x1F) == 14 || (sy->svalue & 0x1F) == 15)
+                               if (((sy->svalue - KW_R0) == 14 || (sy->svalue - KW_R0) == 15)
                                        && (tok[2] != ')'))
                                {
-                                       indexed = (sy->svalue & 0x1F);
+                                       indexed = (sy->svalue - KW_R0);
                                        tok++;
                                }
                        }