# HG changeset patch # User Josef Eisl # Date 1428929425 -7200 # Node ID 9b6ea36013c4ef5dbe23e0752a30afc8fe19473c # Parent b14a235f06ebc4a35e08af298ea9f378f81b6c6f RegisterConfig: pass registers array to getAllocatableRegisters(PlatformKind). diff -r b14a235f06eb -r 9b6ea36013c4 graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/RegisterConfig.java --- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/RegisterConfig.java Mon Apr 13 14:31:43 2015 +0200 +++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/RegisterConfig.java Mon Apr 13 14:50:25 2015 +0200 @@ -79,7 +79,7 @@ * Gets the set of registers that can be used by the register allocator for a value of a * particular kind. */ - Register[] getAllocatableRegisters(PlatformKind kind); + Register[] getAllocatableRegisters(PlatformKind kind, Register[] registers); /** * Gets the registers whose values must be preserved by a method across any call it makes. diff -r b14a235f06eb -r 9b6ea36013c4 graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java Mon Apr 13 14:31:43 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java Mon Apr 13 14:50:25 2015 +0200 @@ -192,7 +192,7 @@ private Register findPollOnReturnScratchRegister() { RegisterConfig regConfig = getProviders().getCodeCache().getRegisterConfig(); - for (Register r : regConfig.getAllocatableRegisters(Kind.Long)) { + for (Register r : regConfig.getAllocatableRegisters()) { if (!r.equals(regConfig.getReturnRegister(Kind.Long)) && !r.equals(AMD64.rbp)) { return r; } diff -r b14a235f06eb -r 9b6ea36013c4 graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRegisterConfig.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRegisterConfig.java Mon Apr 13 14:31:43 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRegisterConfig.java Mon Apr 13 14:50:25 2015 +0200 @@ -65,7 +65,7 @@ return allocatable.clone(); } - public Register[] getAllocatableRegisters(PlatformKind kind) { + public Register[] getAllocatableRegisters(PlatformKind kind, Register[] registers) { PlatformKind.Key key = kind.getKey(); if (categorized.containsKey(key)) { Register[] val = categorized.get(key); @@ -73,7 +73,7 @@ } ArrayList list = new ArrayList<>(); - for (Register reg : getAllocatableRegisters()) { + for (Register reg : registers) { if (architecture.canStoreValue(reg.getRegisterCategory(), kind)) { list.add(reg); } diff -r b14a235f06eb -r 9b6ea36013c4 graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotRegisterConfig.java --- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotRegisterConfig.java Mon Apr 13 14:31:43 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotRegisterConfig.java Mon Apr 13 14:50:25 2015 +0200 @@ -52,13 +52,13 @@ return allocatable.clone(); } - public Register[] getAllocatableRegisters(PlatformKind kind) { + public Register[] getAllocatableRegisters(PlatformKind kind, Register[] registers) { if (categorized.containsKey(kind)) { return categorized.get(kind); } ArrayList list = new ArrayList<>(); - for (Register reg : getAllocatableRegisters()) { + for (Register reg : registers) { if (architecture.canStoreValue(reg.getRegisterCategory(), kind)) { // Special treatment for double precision // TODO: This is wasteful it uses only half of the registers as float. diff -r b14a235f06eb -r 9b6ea36013c4 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanWalker.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanWalker.java Mon Apr 13 14:31:43 2015 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanWalker.java Mon Apr 13 14:50:25 2015 +0200 @@ -766,7 +766,8 @@ } void initVarsForAlloc(Interval interval) { - availableRegs = allocator.frameMapBuilder.getRegisterConfig().getAllocatableRegisters(interval.kind().getPlatformKind()); + RegisterConfig registerConfig = allocator.frameMapBuilder.getRegisterConfig(); + availableRegs = registerConfig.getAllocatableRegisters(interval.kind().getPlatformKind(), registerConfig.getAllocatableRegisters()); } static boolean isMove(LIRInstruction op, Interval from, Interval to) {