package elw.dp.mips; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.TreeMap; public enum Reg { zero, at, v0, v1, a0, a1, a2, a3, t0, t1, t2, t3, t4, t5, t6, t7, s0, s1, s2, s3, s4, s5, s6, s7, t8, t9, k0, k1, gp, sp, fp, ra, pc, hi, lo; // those are extended, usages should be cut off by validations public final static List<Reg> publicRegs = Arrays.asList(zero, v0, v1, a0, a1, a2, a3, t0, t1, t2, t3, t4, t5, t6, t7, s0, s1, s2, s3, s4, s5, s6, s7, t8, t9, sp, ra, pc); public final static List<Reg> roRegs = Arrays.asList(zero); public final static List<Reg> autoRegs = Arrays.asList(pc, sp, ra); public final static List<Reg> tempRegs = Arrays.asList(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, pc, hi, lo); private static final Map<String, Reg> byName = new TreeMap<String, Reg>(); private static TreeMap<String, Reg> createByNameMap() { final TreeMap<String, Reg> byNameMap = new TreeMap<String, Reg>(); for (Reg reg : values()) { byName.put(reg.toString().toLowerCase(), reg); } return byNameMap; } public synchronized static Map<String, Reg> getByName() { if (byName.isEmpty()) { byName.putAll(createByNameMap()); } return byName; } public static Reg[] values(int[] regOrdinals) { final Reg[] regs = new Reg[regOrdinals.length]; for (int i = 0; i < regOrdinals.length; i++) { regs[i] = values()[regOrdinals[i]]; } return regs; } }