- else if(branch_regs[i].regmap[hr]>=0) f_regmap[hr]=branch_regs[i].regmap[hr];
- // make sure mapping hasn't changed
- int hr2;
- for(hr2=0;hr2<HOST_REGS;hr2++)
- if(hr2!=hr&&f_regmap[hr]==branch_regs[i].regmap[hr2]) {
- f_regmap[hr]=-1;
- break;
+ else if(branch_regs[i].regmap[hr]>=0) {
+ if(f_regmap[hr]!=branch_regs[i].regmap[hr]) {
+ // dealloc old register
+ int n;
+ for(n=0;n<HOST_REGS;n++)
+ {
+ if(f_regmap[n]==branch_regs[i].regmap[hr]) {f_regmap[n]=-1;}
+ }
+ // and alloc new one
+ f_regmap[hr]=branch_regs[i].regmap[hr];