X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?p=rmac;a=blobdiff_plain;f=procln.c;fp=procln.c;h=ef7bf1cc7be760b2bc52468670a2cd4056a3098b;hp=85721e878bf1b1258c6640d55d4044ed4167a5ca;hb=09135712da4550a1d5d014051e8ef3cc6dd47d99;hpb=d21544da607af148b96a9d926d4564800892aa4e diff --git a/procln.c b/procln.c index 85721e8..ef7bf1c 100644 --- a/procln.c +++ b/procln.c @@ -154,7 +154,7 @@ void Assemble(void) char * opname = NULL; // Name of dirctve/mnemonic/macro int listflag; // 0: Don't call listeol() WORD rmask; // Register list, for REG - int riscreg; // RISC register + int equreg; // RISC register listflag = 0; // Initialise listing flag loop: // Line processing loop label @@ -434,57 +434,48 @@ 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. */ - if (rgpu || rdsp) + // Check for register to equate to + // This check will change once we split the registers per architecture into their own tables + // and out of kw.tab. But for now it'll do... + if ((*tok >= KW_D0) && (*tok <= KW_BA)) { - // GPU/DSP architectures need some special TLC for now - // Check for register to equate to - if ((*tok >= KW_R0) && (*tok <= KW_R31)) + sy->sattre = EQUATEDREG; // Mark as equated register + equreg = *tok; + // Check for "," override notation and skip past it. + // It is ignored now. Was that ever useful anyway? + if ((rgpu ||rdsp) && (tok[1] == ',') && (tok[2] == CONST)) { - sy->sattre = EQUATEDREG; // Mark as equated register - riscreg = *tok; - // Check for "," override notation and skip past it. - // It is ignored now. Was that ever useful anyway? - if ((tok[1] == ',') && (tok[2] == CONST)) - { - // Advance token pointer and skip everything - tok += 4; - } - - eattr = ABS | DEFINED | GLOBAL; - eval = riscreg; - tok++; + // Advance token pointer and skip everything + tok += 4; } - // Checking for a register symbol - else if (tok[0] == SYMBOL) - { - sy2 = lookup(string[tok[1]], LABEL, j); - // Make sure symbol is a valid equreg - if (!sy2 || !(sy2->sattre & EQUATEDREG)) - { - error("invalid GPU/DSP .equr/.regequ definition"); - goto loop; - } - else - { - eattr = ABS | DEFINED | GLOBAL; // Copy symbol's attributes - sy->sattre = sy2->sattre; - eval = (sy2->svalue & 0xFFFFF0FF); - tok += 2; - } + eattr = ABS | DEFINED | GLOBAL; + eval = equreg; + tok++; + } + // Checking for a register symbol + else if (tok[0] == SYMBOL) + { + sy2 = lookup(string[tok[1]], LABEL, j); + + // Make sure symbol is a valid equreg + if (!sy2 || !(sy2->sattre & EQUATEDREG)) + { + error("invalid .equr/.regequ definition"); + goto loop; } else { - error("invalid GPU/DSP .equr/.regequ definition"); - goto loop; + eattr = ABS | DEFINED | GLOBAL; // Copy symbol's attributes + sy->sattre = sy2->sattre; + eval = (sy2->svalue & 0xFFFFF0FF); + tok += 2; } } else { - sy->sattre = EQUATEDREG; // Mark as equated register - eattr = ABS | DEFINED | GLOBAL; - eval = *tok; - tok++; + error("invalid .equr/.regequ definition"); + goto loop; } } else if (equtyp == REG)