/** * Maps all local-associated registers that are not parameters. * Tries to find an unreserved range that's wide enough for all of * the SSA registers, and then tries to map them all to that * range. If not all fit, a new range is tried until all registers * have been fit. */ private void handleLocalAssociatedOther() { for (ArrayList<RegisterSpec> specs : localVariables.values()) { int ropReg = 0; boolean done; do { int maxCategory = 1; // Compute max category for remaining unmapped registers. int sz = specs.size(); for (int i = 0; i < sz; i++) { RegisterSpec ssaSpec = specs.get(i); int category = ssaSpec.getCategory(); if (!ssaRegsMapped.get(ssaSpec.getReg()) && category > maxCategory) { maxCategory = category; } } ropReg = findRopRegForLocal(ropReg, maxCategory); done = tryMapRegs(specs, ropReg, maxCategory, true); // Increment for next call to findNext. ropReg++; } while (!done); } }
ropReg = findRopRegForLocal(ropReg, maxCategory); if (canMapRegs(specs, ropReg)) { done = tryMapRegs(specs, ropReg, maxCategory, true);
ropReg = findRopRegForLocal(ropReg, maxCategory); if (canMapRegs(specs, ropReg)) { done = tryMapRegs(specs, ropReg, maxCategory, true);
ropReg = findRopRegForLocal(ropReg, maxCategory); if (canMapRegs(specs, ropReg)) { done = tryMapRegs(specs, ropReg, maxCategory, true);
ropReg = findRopRegForLocal(ropReg, maxCategory); if (canMapRegs(specs, ropReg)) { done = tryMapRegs(specs, ropReg, maxCategory, true);
ropReg = findRopRegForLocal(ropReg, maxCategory); if (canMapRegs(specs, ropReg)) { done = tryMapRegs(specs, ropReg, maxCategory, true);
ropReg = findRopRegForLocal(ropReg, maxCategory); if (canMapRegs(specs, ropReg)) { done = tryMapRegs(specs, ropReg, maxCategory, true);
ropReg = findRopRegForLocal(ropReg, maxCategory); if (canMapRegs(specs, ropReg)) { done = tryMapRegs(specs, ropReg, maxCategory, true);