41package com.jogamp.common.os;
43import jogamp.common.os.PlatformPropsImpl;
59 private final static int[] size_arm_mips_32 = { 4, 4, 4, 8, 8, 4, 4096 };
60 private final static int[] size_x86_32_unix = { 4, 4, 4, 8, 12, 4, 4096 };
61 private final static int[] size_x86_32_android = { 4, 4, 4, 8, 8, 4, 4096 };
62 private final static int[] size_x86_32_macos = { 4, 4, 4, 8, 16, 4, 4096 };
63 private final static int[] size_ppc_32_unix = { 4, 4, 4, 8, 16, 4, 4096 };
64 private final static int[] size_sparc_32_sunos = { 4, 4, 4, 8, 16, 4, 8192 };
65 private final static int[] size_x86_32_windows = { 4, 4, 4, 8, 12, 4, 4096 };
66 private final static int[] size_lp64_unix = { 4, 8, 4, 8, 16, 8, 4096 };
67 private final static int[] size_x86_64_windows = { 4, 4, 4, 8, 16, 8, 4096 };
68 private final static int[] size_arm64_ios = { 4, 8, 4, 8, 8, 8, 8192 };
71 private final static int[] align_arm_mips_32 = { 1, 2, 4, 8, 4, 4, 4, 8, 8, 4 };
72 private final static int[] align_x86_32_unix = { 1, 2, 4, 4, 4, 4, 4, 4, 4, 4 };
73 private final static int[] align_x86_32_macos = { 1, 2, 4, 4, 4, 4, 4, 4, 16, 4 };
74 private final static int[] align_ppc_32_unix = { 1, 2, 4, 8, 4, 4, 4, 8, 16, 4 };
75 private final static int[] align_sparc_32_sunos = { 1, 2, 4, 8, 4, 4, 4, 8, 8, 4 };
76 private final static int[] align_x86_32_windows = { 1, 2, 4, 8, 4, 4, 4, 8, 4, 4 };
77 private final static int[] align_lp64_unix = { 1, 2, 4, 8, 4, 8, 4, 8, 16, 8 };
78 private final static int[] align_x86_64_windows = { 1, 2, 4, 8, 4, 4, 4, 8, 16, 8 };
79 private final static int[] align_arm64_ios = { 1, 2, 4, 8, 4, 8, 4, 8, 8, 8 };
146 public final StringBuilder
toString(StringBuilder sb) {
148 sb =
new StringBuilder();
150 sb.append(
"MachineDataInfoStatic: ").append(this.name()).append(
"(").append(this.ordinal()).append(
"): ");
155 return this.name()+
"("+this.ordinal()+
")";
168 for(
int i=scs.length-1; i>=0; i--) {
170 for(
int j=scs.length-1; j>=0; j--) {
175 final String msg =
"Duplicate/Compatible MachineDataInfo in StaticConfigs: Elements ["+i+
": "+a.
toShortString()+
"] and ["+j+
": "+b.
toShortString()+
"]";
176 System.err.println(msg);
177 System.err.println(a);
178 System.err.println(b);
179 throw new InternalError(msg);
187 for(
int i=scs.length-1; i>=0; i--) {
197 final private boolean runtimeValidated;
199 final private int int8SizeInBytes = 1;
200 final private int int16SizeInBytes = 2;
201 final private int int32SizeInBytes = 4;
202 final private int int64SizeInBytes = 8;
204 final private int intSizeInBytes;
205 final private int longSizeInBytes;
206 final private int floatSizeInBytes;
207 final private int doubleSizeInBytes;
208 final private int ldoubleSizeInBytes;
209 final private int pointerSizeInBytes;
210 final private int pageSizeInBytes;
212 final private int int8AlignmentInBytes;
213 final private int int16AlignmentInBytes;
214 final private int int32AlignmentInBytes;
215 final private int int64AlignmentInBytes;
216 final private int intAlignmentInBytes;
217 final private int longAlignmentInBytes;
218 final private int floatAlignmentInBytes;
219 final private int doubleAlignmentInBytes;
220 final private int ldoubleAlignmentInBytes;
221 final private int pointerAlignmentInBytes;
225 final int intSizeInBytes,
226 final int longSizeInBytes,
227 final int floatSizeInBytes,
228 final int doubleSizeInBytes,
229 final int ldoubleSizeInBytes,
230 final int pointerSizeInBytes,
231 final int pageSizeInBytes,
233 final int int8AlignmentInBytes,
234 final int int16AlignmentInBytes,
235 final int int32AlignmentInBytes,
236 final int int64AlignmentInBytes,
237 final int intAlignmentInBytes,
238 final int longAlignmentInBytes,
239 final int floatAlignmentInBytes,
240 final int doubleAlignmentInBytes,
241 final int ldoubleAlignmentInBytes,
242 final int pointerAlignmentInBytes) {
243 this.runtimeValidated = runtimeValidated;
245 this.intSizeInBytes = intSizeInBytes;
246 this.longSizeInBytes = longSizeInBytes;
247 this.floatSizeInBytes = floatSizeInBytes;
248 this.doubleSizeInBytes = doubleSizeInBytes;
249 this.ldoubleSizeInBytes = ldoubleSizeInBytes;
250 this.pointerSizeInBytes = pointerSizeInBytes;
251 this.pageSizeInBytes = pageSizeInBytes;
253 this.int8AlignmentInBytes = int8AlignmentInBytes;
254 this.int16AlignmentInBytes = int16AlignmentInBytes;
255 this.int32AlignmentInBytes = int32AlignmentInBytes;
256 this.int64AlignmentInBytes = int64AlignmentInBytes;
257 this.intAlignmentInBytes = intAlignmentInBytes;
258 this.longAlignmentInBytes = longAlignmentInBytes;
259 this.floatAlignmentInBytes = floatAlignmentInBytes;
260 this.doubleAlignmentInBytes = doubleAlignmentInBytes;
261 this.ldoubleAlignmentInBytes = ldoubleAlignmentInBytes;
262 this.pointerAlignmentInBytes = pointerAlignmentInBytes;
269 return runtimeValidated;
299 return ( size + ( pageSizeInBytes - 1) ) / pageSizeInBytes ;
306 return pageCount(size) * pageSizeInBytes;
317 public final boolean equals(
final Object obj) {
318 if (
this == obj) {
return true; }
322 return pageSizeInBytes == md.pageSizeInBytes &&
336 return intSizeInBytes == md.intSizeInBytes &&
337 longSizeInBytes == md.longSizeInBytes &&
338 floatSizeInBytes == md.floatSizeInBytes &&
339 doubleSizeInBytes == md.doubleSizeInBytes &&
340 ldoubleSizeInBytes == md.ldoubleSizeInBytes &&
341 pointerSizeInBytes == md.pointerSizeInBytes &&
343 int8AlignmentInBytes == md.int8AlignmentInBytes &&
344 int16AlignmentInBytes == md.int16AlignmentInBytes &&
345 int32AlignmentInBytes == md.int32AlignmentInBytes &&
346 int64AlignmentInBytes == md.int64AlignmentInBytes &&
347 intAlignmentInBytes == md.intAlignmentInBytes &&
348 longAlignmentInBytes == md.longAlignmentInBytes &&
349 floatAlignmentInBytes == md.floatAlignmentInBytes &&
350 doubleAlignmentInBytes == md.doubleAlignmentInBytes &&
351 ldoubleAlignmentInBytes == md.ldoubleAlignmentInBytes &&
352 pointerAlignmentInBytes == md.pointerAlignmentInBytes ;
357 sb =
new StringBuilder();
359 sb.append(
"MachineDataInfo: runtimeValidated ").append(
isRuntimeValidated()).append(
", 32Bit ").append(4 == pointerAlignmentInBytes).append(
", primitive size / alignment:").append(PlatformPropsImpl.NEWLINE);
360 sb.append(
" int8 ").append(int8SizeInBytes) .append(
" / ").append(int8AlignmentInBytes);
361 sb.append(
", int16 ").append(int16SizeInBytes) .append(
" / ").append(int16AlignmentInBytes).append(
Platform.
getNewline());
362 sb.append(
" int ").append(intSizeInBytes) .append(
" / ").append(intAlignmentInBytes);
363 sb.append(
", long ").append(longSizeInBytes) .append(
" / ").append(longAlignmentInBytes).append(
Platform.
getNewline());
364 sb.append(
" int32 ").append(int32SizeInBytes) .append(
" / ").append(int32AlignmentInBytes);
365 sb.append(
", int64 ").append(int64SizeInBytes) .append(
" / ").append(int64AlignmentInBytes).append(
Platform.
getNewline());
366 sb.append(
" float ").append(floatSizeInBytes) .append(
" / ").append(floatAlignmentInBytes);
367 sb.append(
", double ").append(doubleSizeInBytes) .append(
" / ").append(doubleAlignmentInBytes);
368 sb.append(
", ldouble ").append(ldoubleSizeInBytes).append(
" / ").append(ldoubleAlignmentInBytes).append(
Platform.
getNewline());
369 sb.append(
" pointer ").append(pointerSizeInBytes).append(
" / ").append(pointerAlignmentInBytes);
370 sb.append(
", page ").append(pageSizeInBytes);
Machine data description for alignment and size onle, see com.jogamp.gluegen.
final int int32SizeInBytes()
final int int64SizeInBytes()
final int doubleSizeInBytes()
final int int16AlignmentInBytes()
final int intAlignmentInBytes()
final boolean compatible(final MachineDataInfo md)
Checks whether two MachineDataInfo objects are equal.
final int floatSizeInBytes()
final int pointerSizeInBytes()
final int int16SizeInBytes()
final int int32AlignmentInBytes()
final boolean equals(final Object obj)
Checks whether two size objects are equal.
StringBuilder toString(StringBuilder sb)
final int ldoubleAlignmentInBytes()
final int ldoubleSizeInBytes()
int pageAlignedSize(final int size)
int pageCount(final int size)
final boolean isRuntimeValidated()
final int doubleAlignmentInBytes()
final int pageSizeInBytes()
MachineDataInfo(final boolean runtimeValidated, final int intSizeInBytes, final int longSizeInBytes, final int floatSizeInBytes, final int doubleSizeInBytes, final int ldoubleSizeInBytes, final int pointerSizeInBytes, final int pageSizeInBytes, final int int8AlignmentInBytes, final int int16AlignmentInBytes, final int int32AlignmentInBytes, final int int64AlignmentInBytes, final int intAlignmentInBytes, final int longAlignmentInBytes, final int floatAlignmentInBytes, final int doubleAlignmentInBytes, final int ldoubleAlignmentInBytes, final int pointerAlignmentInBytes)
final int longAlignmentInBytes()
final int pointerAlignmentInBytes()
final int int64AlignmentInBytes()
final int longSizeInBytes()
final int floatAlignmentInBytes()
final int int8SizeInBytes()
final int intSizeInBytes()
final int int8AlignmentInBytes()
Static enumeration of MachineDataInfo instances used for high performance data size and alignment loo...
X86_32_UNIX
Platform.CPUType#X86_32 Unix
StaticConfig(final int[] sizes, final int[] alignments)
ARM64_IOS
Platform.CPUType#ARM64 iOS
X86_32_MACOS
Platform.CPUType#X86_32 MacOS (Special case gcc4/OSX)
static final void validateUniqueMachineDataInfo()
Static's MachineDataInfo shall be unique by the compatible criteria.
X86_32_WINDOWS
Platform.CPUType#X86_32 Windows
X86_64_WINDOWS
Platform.CPUType#X86_64 Windows
X86_32_ANDROID
Platform.CPUType#X86_32 Android/Bionic
ARM_MIPS_32
Platform.CPUType#ARM or Platform.CPUType#MIPS_32
SPARC_32_SUNOS
Platform.CPUType#SPARC_32 Solaris
final StringBuilder toString(StringBuilder sb)
PPC_32_UNIX
Platform.CPUType#PPC Unix
static final StaticConfig findCompatible(final MachineDataInfo md)
final String toShortString()