X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?p=rmac;a=blobdiff_plain;f=procln.c;fp=procln.c;h=3b674c50a8a50f5e09c70ca59585d949bc04da99;hp=ae2b2b857dceeb144879a8e86f1b759fc1f7e18f;hb=216bfb25e0ce4afb65bb37347cc46b4c52c2220d;hpb=c77f5e305ec19e7d445bdd138187ca7458ba5a16 diff --git a/procln.c b/procln.c index ae2b2b8..3b674c5 100644 --- a/procln.c +++ b/procln.c @@ -435,62 +435,72 @@ 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 for register to equate to - if ((*tok >= KW_R0) && (*tok <= KW_R31)) + if (rgpu || rdsp) { -// sy->sattre = EQUATEDREG | RISCSYM; // Mark as equated register - sy->sattre = EQUATEDREG; // Mark as equated register - riscreg = (*tok); - - // Default is current state of "regbank" - registerbank = regbank; - - // Check for "," override notation - if ((tok[1] == ',') && (tok[2] == CONST)) + // GPU/DSP architectures need some special TLC for now + // Check for register to equate to + if ((*tok >= KW_R0) && (*tok <= KW_R31)) { - // Advance token pointer to the constant - tok += 3; - - // Anything other than a 0 or a 1 will result in "No Bank" - if (*(uint64_t *)tok == 0) - 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. + // sy->sattre = EQUATEDREG | RISCSYM; // Mark as equated register + sy->sattre = EQUATEDREG; // Mark as equated register + riscreg = *tok; + + // Default is current state of "regbank" + registerbank = regbank; + + // Check for "," override notation + if ((tok[1] == ',') && (tok[2] == CONST)) + { + // Advance token pointer to the constant + tok += 3; + + // Anything other than a 0 or a 1 will result in "No Bank" + if (*(uint64_t*)tok == 0) + 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++; + } + + sy->sattre |= registerbank; // Store register bank + eattr = ABS | DEFINED | GLOBAL; + eval = riscreg; tok++; } - - sy->sattre |= registerbank; // Store register bank - eattr = ABS | DEFINED | GLOBAL; - eval = riscreg; - 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)) + // Checking for a register symbol + else if (tok[0] == SYMBOL) { - error("invalid GPU/DSP .equr/.regequ definition"); - goto loop; + 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; + } } else { - eattr = ABS | DEFINED | GLOBAL; // Copy symbols attributes - sy->sattre = sy2->sattre; - eval = (sy2->svalue & 0xFFFFF0FF); - tok += 2; + error("invalid GPU/DSP .equr/.regequ definition"); + goto loop; } } else { - error("invalid GPU/DSP .equr/.regequ definition"); - goto loop; + sy->sattre = EQUATEDREG; // Mark as equated register + riscreg = *tok; + tok++; } } else if (equtyp == REG)