static { String[] regName = registerName; for (GPR r : GPR.values()) { regName[r.ordinal() + FIRST_INT] = r.toString(); } if (SSE2_FULL) { for (XMM r : XMM.values()) { regName[r.ordinal() + FIRST_DOUBLE] = r.toString(); } } else { for (FPR r : FPR.values()) { regName[r.ordinal() + FIRST_DOUBLE] = r.toString(); } } regName[THREAD_REGISTER.value()] = "TR"; regName[AF] = "AF"; regName[CF] = "CF"; regName[OF] = "OF"; regName[PF] = "PF"; regName[SF] = "SF"; regName[ZF] = "ZF"; regName[ST0] = "ST0"; regName[ST1] = "ST1"; }
public PhysicalRegisterSet() { // 1. Create all the physical registers in the pool. for (int i = 0; i < reg.length; i++) { Register r = new Register(i); r.setPhysical(); reg[i] = r; } // 2. Set the 'integer' attribute on each GPR for (int i = FIRST_INT; i < FIRST_DOUBLE; i++) { reg[i].setInteger(); } // 3. Set the 'double' attribute on each FPR for (int i = FIRST_DOUBLE; i < FIRST_SPECIAL; i++) { reg[i].setDouble(); } // 4. set up the volatile GPRs for (Enumeration<Register> e = enumerateVolatileGPRs(); e.hasMoreElements(); ) { Register r = e.nextElement(); r.setVolatile(); } // 5. set up the non-volatile GPRs for (Enumeration<Register> e = enumerateNonvolatileGPRs(); e.hasMoreElements(); ) { Register r = e.nextElement(); r.setNonVolatile(); } // 6. set properties on some special registers reg[AF].setSpansBasicBlock(); reg[CF].setSpansBasicBlock(); reg[OF].setSpansBasicBlock(); reg[PF].setSpansBasicBlock(); reg[SF].setSpansBasicBlock(); reg[ZF].setSpansBasicBlock(); reg[C0].setSpansBasicBlock(); reg[C1].setSpansBasicBlock(); reg[C2].setSpansBasicBlock(); reg[C3].setSpansBasicBlock(); reg[THREAD_REGISTER.value()].setSpansBasicBlock(); // For SSE2 reg[ST0].setDouble(); reg[ST1].setDouble(); // 7. set up the volatile FPRs for (Enumeration<Register> e = enumerateVolatileFPRs(); e.hasMoreElements(); ) { Register r = e.nextElement(); r.setVolatile(); } // 8. set up the non-volatile FPRs for (Enumeration<Register> e = enumerateNonvolatileFPRs(); e.hasMoreElements(); ) { Register r = e.nextElement(); r.setNonVolatile(); } // 9. Cache the volatile registers for efficiency volatileSet = new BitSet(this); for (Enumeration<Register> e = enumerateVolatiles(); e.hasMoreElements(); ) { Register r = e.nextElement(); volatileSet.add(r); } // 10. Cache the FPRs for efficiency fpSet = new BitSet(this); for (Enumeration<Register> e = enumerateFPRs(); e.hasMoreElements(); ) { Register r = e.nextElement(); fpSet.add(r); } // Note no registers are excluded from live analysis (as is done for PPC) }