Mercurial > hg > graal-compiler
changeset 20913:9b6ea36013c4
RegisterConfig: pass registers array to getAllocatableRegisters(PlatformKind).
author | Josef Eisl <josef.eisl@jku.at> |
---|---|
date | Mon, 13 Apr 2015 14:50:25 +0200 |
parents | b14a235f06eb |
children | 4278c6500f2a |
files | graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/RegisterConfig.java graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRegisterConfig.java graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotRegisterConfig.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanWalker.java |
diffstat | 5 files changed, 8 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- 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.
--- 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; }
--- 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<Register> list = new ArrayList<>(); - for (Register reg : getAllocatableRegisters()) { + for (Register reg : registers) { if (architecture.canStoreValue(reg.getRegisterCategory(), kind)) { list.add(reg); }
--- 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<Register> 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.
--- 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) {