# HG changeset patch # User Christian Wimmer # Date 1385150379 28800 # Node ID f42f1f5d5ce0b5e64a3866b8871824d5ed899f66 # Parent c07055d2c66e2be38f72bd4685781fe9545776d5 Allow custom field offset providers diff -r c07055d2c66e -r f42f1f5d5ce0 graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java --- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java Fri Nov 22 11:58:04 2013 -0800 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java Fri Nov 22 11:59:39 2013 -0800 @@ -158,13 +158,17 @@ */ private final boolean isSimplifiable; - private NodeClass(Class clazz) { + public NodeClass(Class clazz) { + this(clazz, new DefaultCalcOffset(), null, 0); + } + + public NodeClass(Class clazz, CalcOffset calcOffset, int[] presetIterableIds, int presetIterableId) { super(clazz); assert NODE_CLASS.isAssignableFrom(clazz); this.isCanonicalizable = Canonicalizable.class.isAssignableFrom(clazz); this.isSimplifiable = Simplifiable.class.isAssignableFrom(clazz); - FieldScanner scanner = new FieldScanner(new DefaultCalcOffset()); + FieldScanner scanner = new FieldScanner(calcOffset); scanner.scan(clazz); directInputCount = scanner.inputOffsets.size(); @@ -200,7 +204,10 @@ } this.nameTemplate = newNameTemplate == null ? newShortName : newNameTemplate; this.shortName = newShortName; - if (IterableNodeType.class.isAssignableFrom(clazz)) { + if (presetIterableIds != null) { + this.iterableIds = presetIterableIds; + this.iterableId = presetIterableId; + } else if (IterableNodeType.class.isAssignableFrom(clazz)) { ITERABLE_NODE_TYPES.increment(); this.iterableId = nextIterableId++; List existingClasses = new LinkedList<>(); diff -r c07055d2c66e -r f42f1f5d5ce0 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/CompositeValueClass.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/CompositeValueClass.java Fri Nov 22 11:58:04 2013 -0800 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/CompositeValueClass.java Fri Nov 22 11:59:39 2013 -0800 @@ -61,11 +61,15 @@ private final long[] componentOffsets; private final EnumSet[] componentFlags; + public CompositeValueClass(Class clazz) { + this(clazz, new DefaultCalcOffset()); + } + @SuppressWarnings("unchecked") - public CompositeValueClass(Class clazz) { + public CompositeValueClass(Class clazz, CalcOffset calcOffset) { super(clazz); - ValueFieldScanner scanner = new ValueFieldScanner(new DefaultCalcOffset()); + ValueFieldScanner scanner = new ValueFieldScanner(calcOffset); scanner.scan(clazz); OperandModeAnnotation mode = scanner.valueAnnotations.get(CompositeValue.Component.class); diff -r c07055d2c66e -r f42f1f5d5ce0 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIRInstructionClass.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIRInstructionClass.java Fri Nov 22 11:58:04 2013 -0800 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIRInstructionClass.java Fri Nov 22 11:59:39 2013 -0800 @@ -73,12 +73,16 @@ private String opcodeConstant; private long opcodeOffset; + public LIRInstructionClass(Class clazz) { + this(clazz, new DefaultCalcOffset()); + } + @SuppressWarnings("unchecked") - public LIRInstructionClass(Class clazz) { + public LIRInstructionClass(Class clazz, CalcOffset calcOffset) { super(clazz); assert INSTRUCTION_CLASS.isAssignableFrom(clazz); - InstructionFieldScanner scanner = new InstructionFieldScanner(new DefaultCalcOffset()); + InstructionFieldScanner scanner = new InstructionFieldScanner(calcOffset); scanner.scan(clazz); OperandModeAnnotation mode = scanner.valueAnnotations.get(LIRInstruction.Use.class);