--- old/src/jdk.vm.ci/share/classes/jdk.vm.ci.code/src/jdk/vm/ci/code/RegisterAttributes.java 2016-06-21 23:03:43.000000000 +0200 +++ new/src/jdk.vm.ci/share/classes/jdk.vm.ci.code/src/jdk/vm/ci/code/RegisterAttributes.java 2016-06-21 23:03:43.000000000 +0200 @@ -23,6 +23,8 @@ package jdk.vm.ci.code; import java.util.Arrays; +import java.util.Collections; +import java.util.List; /** * A collection of register attributes. The specific attribute values for a register may be local to @@ -53,13 +55,14 @@ * @return an array whose length is the max register number in {@code registers} plus 1. An * element at index i holds the attributes of the register whose number is i. */ - public static RegisterAttributes[] createMap(RegisterConfig registerConfig, Register[] registers) { - RegisterAttributes[] map = new RegisterAttributes[registers.length]; + public static RegisterAttributes[] createMap(RegisterConfig registerConfig, RegisterArray registers) { + RegisterAttributes[] map = new RegisterAttributes[registers.size()]; + List callerSaveRegisters = registerConfig.getCallerSaveRegisters().asList(); + List calleeSaveRegisters = registerConfig.getCalleeSaveRegisters() == null ? Collections.emptyList() : registerConfig.getCalleeSaveRegisters().asList(); + List allocatableRegisters = registerConfig.getAllocatableRegisters().asList(); for (Register reg : registers) { if (reg != null) { - Register[] csr = registerConfig.getCalleeSaveRegisters(); - RegisterAttributes attr = new RegisterAttributes(Arrays.asList(registerConfig.getCallerSaveRegisters()).contains(reg), csr == null ? false : Arrays.asList(csr).contains(reg), - Arrays.asList(registerConfig.getAllocatableRegisters()).contains(reg)); + RegisterAttributes attr = new RegisterAttributes(callerSaveRegisters.contains(reg), calleeSaveRegisters.contains(reg), allocatableRegisters.contains(reg)); if (map.length <= reg.number) { map = Arrays.copyOf(map, reg.number + 1); } @@ -75,23 +78,24 @@ } /** - * @return Denotes a register that is available for use by a register allocator. + * @return {@code true} if a register is available for use by a register allocator otherwise + * {@code false} */ public boolean isAllocatable() { return allocatable; } /** - * @return Denotes a register whose value preservation (if required) across a call is the - * responsibility of the callee. + * @return {@code true} if a register whose value preservation (if required) across a call is + * the responsibility of the callee otherwise {@code false} */ public boolean isCalleeSave() { return calleeSave; } /** - * @return Denotes a register whose value preservation (if required) across a call is the - * responsibility of the caller. + * @return {@code true} if a register whose value preservation (if required) across a call is + * the responsibility of the caller otherwise {@code false} */ public boolean isCallerSave() { return callerSave;