}
+static regs *regWithIdx (set *dRegs, int idx, int fixed);
/*-----------------------------------------------------------------*/
/* newReg - allocate and init memory for a new register */
/*-----------------------------------------------------------------*/
{
regs *dReg;
+
+ /* check whether a matching register already exists */
+ dReg = dirregWithName( name );
+ if (dReg) {
+ //printf( "%s: already present: %s\n", __FUNCTION__, name );
+ return (dReg);
+ }
+ dReg = regWithIdx( dynDirectRegs, rIdx, 0 );
+ if (!dReg) dReg = regWithIdx( dynDirectRegs, rIdx, 1 );
+ if (dReg)
+ {
+ //printf( "%s: already present %s (idx:%d/%x)", __FUNCTION__, name, rIdx, rIdx );
+ return (dReg);
+ }
dReg = Safe_calloc(1,sizeof(regs));
dReg->type = type;
for(i = 0; i<size; i++) {
char buffer[16];
- regs *r;
+ regs *r;
SNPRINTF(&buffer[0], 16, "STK%02d", i);
r = newReg(REG_STK, PO_GPR_TEMP,base_address,buffer,1,0);
r->address = base_address; // Pseudo stack needs a fixed location that can be known by all modules