diff options
Diffstat (limited to 'src/java/com/jogamp/gluegen/cgram')
4 files changed, 63 insertions, 48 deletions
diff --git a/src/java/com/jogamp/gluegen/cgram/types/Field.java b/src/java/com/jogamp/gluegen/cgram/types/Field.java index afaeade..858d81a 100644 --- a/src/java/com/jogamp/gluegen/cgram/types/Field.java +++ b/src/java/com/jogamp/gluegen/cgram/types/Field.java @@ -39,7 +39,7 @@ package com.jogamp.gluegen.cgram.types; -import com.jogamp.common.os.MachineDescription; +import com.jogamp.common.os.MachineDataInfo; /** Represents a field in a struct or union. */ @@ -83,8 +83,8 @@ public class Field { public SizeThunk getOffset() { return offset; } /** Offset, in bytes, of this field in the containing data structure - given the specified MachineDescription. */ - public long getOffset(final MachineDescription machDesc) { return offset.computeSize(machDesc); } + given the specified MachineDataInfo. */ + public long getOffset(final MachineDataInfo machDesc) { return offset.computeSize(machDesc); } /** Sets the offset of this field in the containing data structure. */ public void setOffset(final SizeThunk offset) { this.offset = offset; } diff --git a/src/java/com/jogamp/gluegen/cgram/types/SizeThunk.java b/src/java/com/jogamp/gluegen/cgram/types/SizeThunk.java index c13e5d5..9843d6b 100644 --- a/src/java/com/jogamp/gluegen/cgram/types/SizeThunk.java +++ b/src/java/com/jogamp/gluegen/cgram/types/SizeThunk.java @@ -40,7 +40,7 @@ package com.jogamp.gluegen.cgram.types; -import com.jogamp.common.os.MachineDescription; +import com.jogamp.common.os.MachineDataInfo; /** Provides a level of indirection between the definition of a type's size and the absolute value of this size. Necessary when @@ -64,104 +64,104 @@ public abstract class SizeThunk implements Cloneable { public final boolean hasFixedNativeSize() { return fixedNativeSize; } - public abstract long computeSize(MachineDescription machDesc); - public abstract long computeAlignment(MachineDescription machDesc); + public abstract long computeSize(MachineDataInfo machDesc); + public abstract long computeAlignment(MachineDataInfo machDesc); public static final SizeThunk INT8 = new SizeThunk(true) { @Override - public long computeSize(final MachineDescription machDesc) { + public long computeSize(final MachineDataInfo machDesc) { return machDesc.int8SizeInBytes(); } @Override - public long computeAlignment(final MachineDescription machDesc) { + public long computeAlignment(final MachineDataInfo machDesc) { return machDesc.int8AlignmentInBytes(); } }; public static final SizeThunk INT16 = new SizeThunk(true) { @Override - public long computeSize(final MachineDescription machDesc) { + public long computeSize(final MachineDataInfo machDesc) { return machDesc.int16SizeInBytes(); } @Override - public long computeAlignment(final MachineDescription machDesc) { + public long computeAlignment(final MachineDataInfo machDesc) { return machDesc.int16AlignmentInBytes(); } }; public static final SizeThunk INT32 = new SizeThunk(true) { @Override - public long computeSize(final MachineDescription machDesc) { + public long computeSize(final MachineDataInfo machDesc) { return machDesc.int32SizeInBytes(); } @Override - public long computeAlignment(final MachineDescription machDesc) { + public long computeAlignment(final MachineDataInfo machDesc) { return machDesc.int32AlignmentInBytes(); } }; public static final SizeThunk INTxx = new SizeThunk(false) { @Override - public long computeSize(final MachineDescription machDesc) { + public long computeSize(final MachineDataInfo machDesc) { return machDesc.intSizeInBytes(); } @Override - public long computeAlignment(final MachineDescription machDesc) { + public long computeAlignment(final MachineDataInfo machDesc) { return machDesc.intAlignmentInBytes(); } }; public static final SizeThunk LONG = new SizeThunk(false) { @Override - public long computeSize(final MachineDescription machDesc) { + public long computeSize(final MachineDataInfo machDesc) { return machDesc.longSizeInBytes(); } @Override - public long computeAlignment(final MachineDescription machDesc) { + public long computeAlignment(final MachineDataInfo machDesc) { return machDesc.longAlignmentInBytes(); } }; public static final SizeThunk INT64 = new SizeThunk(true) { @Override - public long computeSize(final MachineDescription machDesc) { + public long computeSize(final MachineDataInfo machDesc) { return machDesc.int64SizeInBytes(); } @Override - public long computeAlignment(final MachineDescription machDesc) { + public long computeAlignment(final MachineDataInfo machDesc) { return machDesc.int64AlignmentInBytes(); } }; public static final SizeThunk FLOAT = new SizeThunk(true) { @Override - public long computeSize(final MachineDescription machDesc) { + public long computeSize(final MachineDataInfo machDesc) { return machDesc.floatSizeInBytes(); } @Override - public long computeAlignment(final MachineDescription machDesc) { + public long computeAlignment(final MachineDataInfo machDesc) { return machDesc.floatAlignmentInBytes(); } }; public static final SizeThunk DOUBLE = new SizeThunk(true) { @Override - public long computeSize(final MachineDescription machDesc) { + public long computeSize(final MachineDataInfo machDesc) { return machDesc.doubleSizeInBytes(); } @Override - public long computeAlignment(final MachineDescription machDesc) { + public long computeAlignment(final MachineDataInfo machDesc) { return machDesc.doubleAlignmentInBytes(); } }; public static final SizeThunk POINTER = new SizeThunk(false) { @Override - public long computeSize(final MachineDescription machDesc) { + public long computeSize(final MachineDataInfo machDesc) { return machDesc.pointerSizeInBytes(); } @Override - public long computeAlignment(final MachineDescription machDesc) { + public long computeAlignment(final MachineDataInfo machDesc) { return machDesc.pointerAlignmentInBytes(); } }; @@ -172,11 +172,11 @@ public abstract class SizeThunk implements Cloneable { final SizeThunk thunk2) { return new SizeThunk(false) { @Override - public long computeSize(final MachineDescription machDesc) { + public long computeSize(final MachineDataInfo machDesc) { return thunk1.computeSize(machDesc) + thunk2.computeSize(machDesc); } @Override - public long computeAlignment(final MachineDescription machDesc) { + public long computeAlignment(final MachineDataInfo machDesc) { final long thunk1A = thunk1.computeAlignment(machDesc); final long thunk2A = thunk2.computeAlignment(machDesc); return ( thunk1A > thunk2A ) ? thunk1A : thunk2A ; @@ -188,11 +188,11 @@ public abstract class SizeThunk implements Cloneable { final SizeThunk thunk2) { return new SizeThunk(false) { @Override - public long computeSize(final MachineDescription machDesc) { + public long computeSize(final MachineDataInfo machDesc) { return thunk1.computeSize(machDesc) * thunk2.computeSize(machDesc); } @Override - public long computeAlignment(final MachineDescription machDesc) { + public long computeAlignment(final MachineDataInfo machDesc) { final long thunk1A = thunk1.computeAlignment(machDesc); final long thunk2A = thunk2.computeAlignment(machDesc); return ( thunk1A > thunk2A ) ? thunk1A : thunk2A ; @@ -204,22 +204,37 @@ public abstract class SizeThunk implements Cloneable { final SizeThunk alignmentThunk) { return new SizeThunk(false) { @Override - public long computeSize(final MachineDescription machDesc) { - // x % 2n == x & (2n - 1) - // remainder = net_size & ( alignment - 1 ) - // padding = alignment - remainder ; - // aligned_size = net_size + padding ; + public long computeSize(final MachineDataInfo machDesc) { + /** + * padding = ( alignment - ( net_size % alignment ) ) % alignment ; + * aligned_size = net_size + padding ; + * + * With x % 2n == x & (2n - 1) + * + * Either: + * remainder = net_size & ( alignment - 1 ) + * padding = ( remainder > 0 ) ? alignment - remainder ; + * aligned_size = net_size + padding ; + * + * Or: + * padding = ( alignment - ( net_size & ( alignment - 1 ) ) ) & ( alignment - 1 ); + * aligned_size = net_size + padding ; + * + */ - final long size = offsetThunk.computeSize(machDesc); + final long net_size = offsetThunk.computeSize(machDesc); final long alignment = alignmentThunk.computeAlignment(machDesc); - final long remainder = size & ( alignment - 1 ) ; + /** + final long remainder = net_size & ( alignment - 1 ) ; final long padding = (remainder > 0) ? alignment - remainder : 0; - return size + padding; + */ + final long padding = ( alignment - ( net_size & ( alignment - 1 ) ) ) & ( alignment - 1 ); + return net_size + padding; } @Override - public long computeAlignment(final MachineDescription machDesc) { + public long computeAlignment(final MachineDataInfo machDesc) { final long thunk1A = offsetThunk.computeAlignment(machDesc); final long thunk2A = alignmentThunk.computeAlignment(machDesc); return ( thunk1A > thunk2A ) ? thunk1A : thunk2A ; @@ -231,11 +246,11 @@ public abstract class SizeThunk implements Cloneable { final SizeThunk thunk2) { return new SizeThunk(false) { @Override - public long computeSize(final MachineDescription machDesc) { + public long computeSize(final MachineDataInfo machDesc) { return Math.max(thunk1.computeSize(machDesc), thunk2.computeSize(machDesc)); } @Override - public long computeAlignment(final MachineDescription machDesc) { + public long computeAlignment(final MachineDataInfo machDesc) { final long thunk1A = thunk1.computeAlignment(machDesc); final long thunk2A = thunk2.computeAlignment(machDesc); return ( thunk1A > thunk2A ) ? thunk1A : thunk2A ; @@ -246,11 +261,11 @@ public abstract class SizeThunk implements Cloneable { public static SizeThunk constant(final int constant) { return new SizeThunk(false) { @Override - public long computeSize(final MachineDescription machDesc) { + public long computeSize(final MachineDataInfo machDesc) { return constant; } @Override - public long computeAlignment(final MachineDescription machDesc) { + public long computeAlignment(final MachineDataInfo machDesc) { return 1; // no alignment for constants } }; diff --git a/src/java/com/jogamp/gluegen/cgram/types/StructLayout.java b/src/java/com/jogamp/gluegen/cgram/types/StructLayout.java index 9d1a293..86f1ae1 100644 --- a/src/java/com/jogamp/gluegen/cgram/types/StructLayout.java +++ b/src/java/com/jogamp/gluegen/cgram/types/StructLayout.java @@ -40,7 +40,7 @@ package com.jogamp.gluegen.cgram.types; -import com.jogamp.common.os.MachineDescription; +import com.jogamp.common.os.MachineDataInfo; import com.jogamp.gluegen.GlueGen; /** Encapsulates algorithm for laying out data structures. Note that @@ -67,9 +67,9 @@ public class StructLayout { SizeThunk curOffset = SizeThunk.constant(baseOffset); SizeThunk maxSize = SizeThunk.constant(0); - final MachineDescription dbgMD; + final MachineDataInfo dbgMD; if( GlueGen.debug() ) { - dbgMD = MachineDescription.StaticConfig.LP64_UNIX.md; + dbgMD = MachineDataInfo.StaticConfig.LP64_UNIX.md; System.err.printf("SL.__: o %03d, s %03d, t %s{%d}%n", curOffset.computeSize(dbgMD), 0, t, t.getNumFields()); } else { dbgMD = null; diff --git a/src/java/com/jogamp/gluegen/cgram/types/Type.java b/src/java/com/jogamp/gluegen/cgram/types/Type.java index 63890a1..28ba6b4 100644 --- a/src/java/com/jogamp/gluegen/cgram/types/Type.java +++ b/src/java/com/jogamp/gluegen/cgram/types/Type.java @@ -42,7 +42,7 @@ package com.jogamp.gluegen.cgram.types; import java.util.List; -import com.jogamp.common.os.MachineDescription; +import com.jogamp.common.os.MachineDataInfo; /** Models a C type. Primitive types include int, float, and double. All types have an associated name. Structs and unions are @@ -112,7 +112,7 @@ public abstract class Type implements Cloneable { { long _mdSize = -1; try { - _mdSize = size.computeSize(MachineDescription.StaticConfig.LP64_UNIX.md); + _mdSize = size.computeSize(MachineDataInfo.StaticConfig.LP64_UNIX.md); } catch (final Exception e) {} mdSize = _mdSize; } @@ -180,8 +180,8 @@ public abstract class Type implements Cloneable { /** SizeThunk which computes size of this type in bytes. */ public SizeThunk getSize() { return size; } - /** Size of this type in bytes according to the given MachineDescription. */ - public long getSize(final MachineDescription machDesc) { + /** Size of this type in bytes according to the given MachineDataInfo. */ + public long getSize(final MachineDataInfo machDesc) { final SizeThunk thunk = getSize(); if (thunk == null) { throw new RuntimeException("No size set for type \"" + getName() + "\""); |