# HG changeset patch # User Christian Wimmer # Date 1392229368 28800 # Node ID e79579c921ff0db41ce516b8ef825a954960dc32 # Parent f4dedec9b2258a9494dc36abd06d09751bd3b23c Make reference map data accessible from Java code diff -r f4dedec9b225 -r e79579c921ff graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/CompilationResult.java --- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/CompilationResult.java Tue Feb 11 15:07:50 2014 -0800 +++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/CompilationResult.java Wed Feb 12 10:22:48 2014 -0800 @@ -288,6 +288,14 @@ } } + public int getAlignment() { + if (externalData instanceof ConstantData) { + return ((ConstantData) externalData).getAlignment(); + } else { + return 0; + } + } + public String getDataString() { if (inlineData != null) { return inlineData.toString(); diff -r f4dedec9b225 -r e79579c921ff graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/ReferenceMap.java --- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/ReferenceMap.java Tue Feb 11 15:07:50 2014 -0800 +++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/ReferenceMap.java Wed Feb 12 10:22:48 2014 -0800 @@ -86,6 +86,29 @@ return frameRefMap != null && frameRefMap.size() > 0; } + public interface Iterator { + void register(int idx, boolean narrow); + + void stackSlot(int idx, boolean narrow1, boolean narrow2); + } + + public void iterate(Iterator iterator) { + if (hasRegisterRefMap()) { + for (int i = 0; i < registerRefMap.size() / 2; i++) { + if (registerRefMap.get(2 * i)) { + iterator.register(i, registerRefMap.get(2 * i + 1)); + } + } + } + if (hasFrameRefMap()) { + for (int i = 0; i < frameRefMap.size() / 3; i++) { + if (frameRefMap.get(3 * i)) { + iterator.stackSlot(i, frameRefMap.get(3 * i + 1), frameRefMap.get(3 * i + 2)); + } + } + } + } + private static class NumberedRefMapFormatter implements RefMapFormatter { public String formatStackSlot(int frameRefMapIndex) {