mirror of http://shamusworld.gotdns.org/git/rmac
.equr overhaul part 1: remove gpu/dsp only restriction, make sure things still work (they do, but exported equrs do not match, which is weird considering they shouldn't be exported in the first place)
This commit is contained in:
parent
0de5c6860b
commit
c77f5e305e
5
expr.c
5
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;
|
||||
}
|
||||
|
|
29
procln.c
29
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)
|
||||
riscreg = (*tok);
|
||||
|
||||
#define DEBODGE_REGBANK
|
||||
#ifdef DEBODGE_REGBANK
|
||||
// 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++;
|
||||
|
|
12
riscasm.c
12
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++;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue