xref: /aosp_15_r20/art/test/712-varhandle-invocations/src/VarHandleUnitTestHelpers.java (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
1*795d594fSAndroid Build Coastguard Worker /*
2*795d594fSAndroid Build Coastguard Worker  * Copyright (C) 2018 The Android Open Source Project
3*795d594fSAndroid Build Coastguard Worker  *
4*795d594fSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*795d594fSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*795d594fSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*795d594fSAndroid Build Coastguard Worker  *
8*795d594fSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*795d594fSAndroid Build Coastguard Worker  *
10*795d594fSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*795d594fSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*795d594fSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*795d594fSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*795d594fSAndroid Build Coastguard Worker  * limitations under the License.
15*795d594fSAndroid Build Coastguard Worker  */
16*795d594fSAndroid Build Coastguard Worker 
17*795d594fSAndroid Build Coastguard Worker import java.lang.invoke.MethodHandle;
18*795d594fSAndroid Build Coastguard Worker import java.lang.invoke.MethodHandles;
19*795d594fSAndroid Build Coastguard Worker import java.lang.invoke.MethodType;
20*795d594fSAndroid Build Coastguard Worker import java.lang.invoke.VarHandle;
21*795d594fSAndroid Build Coastguard Worker import java.nio.ByteBuffer;
22*795d594fSAndroid Build Coastguard Worker import java.nio.ByteOrder;
23*795d594fSAndroid Build Coastguard Worker 
24*795d594fSAndroid Build Coastguard Worker public class VarHandleUnitTestHelpers {
isRunningOnAndroid()25*795d594fSAndroid Build Coastguard Worker     public static boolean isRunningOnAndroid() {
26*795d594fSAndroid Build Coastguard Worker         return System.getProperty("java.vm.vendor").contains("Android");
27*795d594fSAndroid Build Coastguard Worker     }
28*795d594fSAndroid Build Coastguard Worker 
is64Bit()29*795d594fSAndroid Build Coastguard Worker     public static boolean is64Bit() {
30*795d594fSAndroid Build Coastguard Worker         // The behaviour of certain accessors depends on the ISA word size.
31*795d594fSAndroid Build Coastguard Worker         if (isRunningOnAndroid()) {
32*795d594fSAndroid Build Coastguard Worker             try {
33*795d594fSAndroid Build Coastguard Worker                 Class<?> runtimeClass = Class.forName("dalvik.system.VMRuntime");
34*795d594fSAndroid Build Coastguard Worker                 MethodHandle getRuntimeMH =
35*795d594fSAndroid Build Coastguard Worker                         MethodHandles.lookup()
36*795d594fSAndroid Build Coastguard Worker                                 .findStatic(
37*795d594fSAndroid Build Coastguard Worker                                         runtimeClass,
38*795d594fSAndroid Build Coastguard Worker                                         "getRuntime",
39*795d594fSAndroid Build Coastguard Worker                                         MethodType.methodType(runtimeClass));
40*795d594fSAndroid Build Coastguard Worker                 Object runtime = getRuntimeMH.invoke();
41*795d594fSAndroid Build Coastguard Worker                 MethodHandle is64BitMH =
42*795d594fSAndroid Build Coastguard Worker                         MethodHandles.lookup()
43*795d594fSAndroid Build Coastguard Worker                                 .findVirtual(
44*795d594fSAndroid Build Coastguard Worker                                         runtimeClass,
45*795d594fSAndroid Build Coastguard Worker                                         "is64Bit",
46*795d594fSAndroid Build Coastguard Worker                                         MethodType.methodType(boolean.class));
47*795d594fSAndroid Build Coastguard Worker                 return (boolean) is64BitMH.invoke(runtime);
48*795d594fSAndroid Build Coastguard Worker             } catch (Throwable t) {
49*795d594fSAndroid Build Coastguard Worker                 throw new RuntimeException(t);
50*795d594fSAndroid Build Coastguard Worker             }
51*795d594fSAndroid Build Coastguard Worker         } else {
52*795d594fSAndroid Build Coastguard Worker             return System.getProperty("sun.arch.data.model").equals("64");
53*795d594fSAndroid Build Coastguard Worker         }
54*795d594fSAndroid Build Coastguard Worker     }
55*795d594fSAndroid Build Coastguard Worker 
createFilledByteArray(int size)56*795d594fSAndroid Build Coastguard Worker     public static byte[] createFilledByteArray(int size) {
57*795d594fSAndroid Build Coastguard Worker         byte[] array = new byte[size];
58*795d594fSAndroid Build Coastguard Worker         for (int i = 0; i != size; ++i) {
59*795d594fSAndroid Build Coastguard Worker             array[i] = (byte) (i * 47 + 11);
60*795d594fSAndroid Build Coastguard Worker         }
61*795d594fSAndroid Build Coastguard Worker         return array;
62*795d594fSAndroid Build Coastguard Worker     }
63*795d594fSAndroid Build Coastguard Worker 
getBytesAs_boolean(byte[] array, int index, ByteOrder order)64*795d594fSAndroid Build Coastguard Worker     public static boolean getBytesAs_boolean(byte[] array, int index, ByteOrder order) {
65*795d594fSAndroid Build Coastguard Worker         return getBytesAs_boolean(ByteBuffer.wrap(array), index, order);
66*795d594fSAndroid Build Coastguard Worker     }
67*795d594fSAndroid Build Coastguard Worker 
getBytesAs_byte(byte[] array, int index, ByteOrder order)68*795d594fSAndroid Build Coastguard Worker     public static byte getBytesAs_byte(byte[] array, int index, ByteOrder order) {
69*795d594fSAndroid Build Coastguard Worker         return getBytesAs_byte(ByteBuffer.wrap(array), index, order);
70*795d594fSAndroid Build Coastguard Worker     }
71*795d594fSAndroid Build Coastguard Worker 
getBytesAs_char(byte[] array, int index, ByteOrder order)72*795d594fSAndroid Build Coastguard Worker     public static char getBytesAs_char(byte[] array, int index, ByteOrder order) {
73*795d594fSAndroid Build Coastguard Worker         return getBytesAs_char(ByteBuffer.wrap(array), index, order);
74*795d594fSAndroid Build Coastguard Worker     }
75*795d594fSAndroid Build Coastguard Worker 
getBytesAs_short(byte[] array, int index, ByteOrder order)76*795d594fSAndroid Build Coastguard Worker     public static short getBytesAs_short(byte[] array, int index, ByteOrder order) {
77*795d594fSAndroid Build Coastguard Worker         return getBytesAs_short(ByteBuffer.wrap(array), index, order);
78*795d594fSAndroid Build Coastguard Worker     }
79*795d594fSAndroid Build Coastguard Worker 
getBytesAs_int(byte[] array, int index, ByteOrder order)80*795d594fSAndroid Build Coastguard Worker     public static int getBytesAs_int(byte[] array, int index, ByteOrder order) {
81*795d594fSAndroid Build Coastguard Worker         return getBytesAs_int(ByteBuffer.wrap(array), index, order);
82*795d594fSAndroid Build Coastguard Worker     }
83*795d594fSAndroid Build Coastguard Worker 
getBytesAs_long(byte[] array, int index, ByteOrder order)84*795d594fSAndroid Build Coastguard Worker     public static long getBytesAs_long(byte[] array, int index, ByteOrder order) {
85*795d594fSAndroid Build Coastguard Worker         return getBytesAs_long(ByteBuffer.wrap(array), index, order);
86*795d594fSAndroid Build Coastguard Worker     }
87*795d594fSAndroid Build Coastguard Worker 
getBytesAs_float(byte[] array, int index, ByteOrder order)88*795d594fSAndroid Build Coastguard Worker     public static float getBytesAs_float(byte[] array, int index, ByteOrder order) {
89*795d594fSAndroid Build Coastguard Worker         return getBytesAs_float(ByteBuffer.wrap(array), index, order);
90*795d594fSAndroid Build Coastguard Worker     }
91*795d594fSAndroid Build Coastguard Worker 
getBytesAs_double(byte[] array, int index, ByteOrder order)92*795d594fSAndroid Build Coastguard Worker     public static double getBytesAs_double(byte[] array, int index, ByteOrder order) {
93*795d594fSAndroid Build Coastguard Worker         return getBytesAs_double(ByteBuffer.wrap(array), index, order);
94*795d594fSAndroid Build Coastguard Worker     }
95*795d594fSAndroid Build Coastguard Worker 
getBytesAs_boolean(ByteBuffer buffer, int index, ByteOrder order)96*795d594fSAndroid Build Coastguard Worker     public static boolean getBytesAs_boolean(ByteBuffer buffer, int index, ByteOrder order) {
97*795d594fSAndroid Build Coastguard Worker         return buffer.order(order).get(index) != 0;
98*795d594fSAndroid Build Coastguard Worker     }
99*795d594fSAndroid Build Coastguard Worker 
getBytesAs_byte(ByteBuffer buffer, int index, ByteOrder order)100*795d594fSAndroid Build Coastguard Worker     public static byte getBytesAs_byte(ByteBuffer buffer, int index, ByteOrder order) {
101*795d594fSAndroid Build Coastguard Worker         return buffer.order(order).get(index);
102*795d594fSAndroid Build Coastguard Worker     }
103*795d594fSAndroid Build Coastguard Worker 
getBytesAs_char(ByteBuffer buffer, int index, ByteOrder order)104*795d594fSAndroid Build Coastguard Worker     public static char getBytesAs_char(ByteBuffer buffer, int index, ByteOrder order) {
105*795d594fSAndroid Build Coastguard Worker         return buffer.order(order).getChar(index);
106*795d594fSAndroid Build Coastguard Worker     }
107*795d594fSAndroid Build Coastguard Worker 
getBytesAs_short(ByteBuffer buffer, int index, ByteOrder order)108*795d594fSAndroid Build Coastguard Worker     public static short getBytesAs_short(ByteBuffer buffer, int index, ByteOrder order) {
109*795d594fSAndroid Build Coastguard Worker         return buffer.order(order).getShort(index);
110*795d594fSAndroid Build Coastguard Worker     }
111*795d594fSAndroid Build Coastguard Worker 
getBytesAs_int(ByteBuffer buffer, int index, ByteOrder order)112*795d594fSAndroid Build Coastguard Worker     public static int getBytesAs_int(ByteBuffer buffer, int index, ByteOrder order) {
113*795d594fSAndroid Build Coastguard Worker         return buffer.order(order).getInt(index);
114*795d594fSAndroid Build Coastguard Worker     }
115*795d594fSAndroid Build Coastguard Worker 
getBytesAs_long(ByteBuffer buffer, int index, ByteOrder order)116*795d594fSAndroid Build Coastguard Worker     public static long getBytesAs_long(ByteBuffer buffer, int index, ByteOrder order) {
117*795d594fSAndroid Build Coastguard Worker         return buffer.order(order).getLong(index);
118*795d594fSAndroid Build Coastguard Worker     }
119*795d594fSAndroid Build Coastguard Worker 
getBytesAs_float(ByteBuffer buffer, int index, ByteOrder order)120*795d594fSAndroid Build Coastguard Worker     public static float getBytesAs_float(ByteBuffer buffer, int index, ByteOrder order) {
121*795d594fSAndroid Build Coastguard Worker         return buffer.order(order).getFloat(index);
122*795d594fSAndroid Build Coastguard Worker     }
123*795d594fSAndroid Build Coastguard Worker 
getBytesAs_double(ByteBuffer buffer, int index, ByteOrder order)124*795d594fSAndroid Build Coastguard Worker     public static double getBytesAs_double(ByteBuffer buffer, int index, ByteOrder order) {
125*795d594fSAndroid Build Coastguard Worker         return buffer.order(order).getDouble(index);
126*795d594fSAndroid Build Coastguard Worker     }
127*795d594fSAndroid Build Coastguard Worker 
setBytesAs_boolean(byte[] array, int index, boolean value, ByteOrder order)128*795d594fSAndroid Build Coastguard Worker     public static void setBytesAs_boolean(byte[] array, int index, boolean value, ByteOrder order) {
129*795d594fSAndroid Build Coastguard Worker         setBytesAs_boolean(ByteBuffer.wrap(array), index, value, order);
130*795d594fSAndroid Build Coastguard Worker     }
131*795d594fSAndroid Build Coastguard Worker 
setBytesAs_byte(byte[] array, int index, byte value, ByteOrder order)132*795d594fSAndroid Build Coastguard Worker     public static void setBytesAs_byte(byte[] array, int index, byte value, ByteOrder order) {
133*795d594fSAndroid Build Coastguard Worker         setBytesAs_byte(ByteBuffer.wrap(array), index, value, order);
134*795d594fSAndroid Build Coastguard Worker     }
135*795d594fSAndroid Build Coastguard Worker 
setBytesAs_char(byte[] array, int index, char value, ByteOrder order)136*795d594fSAndroid Build Coastguard Worker     public static void setBytesAs_char(byte[] array, int index, char value, ByteOrder order) {
137*795d594fSAndroid Build Coastguard Worker         setBytesAs_char(ByteBuffer.wrap(array), index, value, order);
138*795d594fSAndroid Build Coastguard Worker     }
139*795d594fSAndroid Build Coastguard Worker 
setBytesAs_short(byte[] array, int index, short value, ByteOrder order)140*795d594fSAndroid Build Coastguard Worker     public static void setBytesAs_short(byte[] array, int index, short value, ByteOrder order) {
141*795d594fSAndroid Build Coastguard Worker         setBytesAs_short(ByteBuffer.wrap(array), index, value, order);
142*795d594fSAndroid Build Coastguard Worker     }
143*795d594fSAndroid Build Coastguard Worker 
setBytesAs_int(byte[] array, int index, int value, ByteOrder order)144*795d594fSAndroid Build Coastguard Worker     public static void setBytesAs_int(byte[] array, int index, int value, ByteOrder order) {
145*795d594fSAndroid Build Coastguard Worker         setBytesAs_int(ByteBuffer.wrap(array), index, value, order);
146*795d594fSAndroid Build Coastguard Worker     }
147*795d594fSAndroid Build Coastguard Worker 
setBytesAs_long(byte[] array, int index, long value, ByteOrder order)148*795d594fSAndroid Build Coastguard Worker     public static void setBytesAs_long(byte[] array, int index, long value, ByteOrder order) {
149*795d594fSAndroid Build Coastguard Worker         setBytesAs_long(ByteBuffer.wrap(array), index, value, order);
150*795d594fSAndroid Build Coastguard Worker     }
151*795d594fSAndroid Build Coastguard Worker 
setBytesAs_float(byte[] array, int index, float value, ByteOrder order)152*795d594fSAndroid Build Coastguard Worker     public static void setBytesAs_float(byte[] array, int index, float value, ByteOrder order) {
153*795d594fSAndroid Build Coastguard Worker         setBytesAs_float(ByteBuffer.wrap(array), index, value, order);
154*795d594fSAndroid Build Coastguard Worker     }
155*795d594fSAndroid Build Coastguard Worker 
setBytesAs_double(byte[] array, int index, double value, ByteOrder order)156*795d594fSAndroid Build Coastguard Worker     public static void setBytesAs_double(byte[] array, int index, double value, ByteOrder order) {
157*795d594fSAndroid Build Coastguard Worker         setBytesAs_double(ByteBuffer.wrap(array), index, value, order);
158*795d594fSAndroid Build Coastguard Worker     }
159*795d594fSAndroid Build Coastguard Worker 
setBytesAs_boolean( ByteBuffer buffer, int index, boolean value, ByteOrder order)160*795d594fSAndroid Build Coastguard Worker     public static void setBytesAs_boolean(
161*795d594fSAndroid Build Coastguard Worker             ByteBuffer buffer, int index, boolean value, ByteOrder order) {
162*795d594fSAndroid Build Coastguard Worker         buffer.order(order).put(index, value ? (byte) 1 : (byte) 0);
163*795d594fSAndroid Build Coastguard Worker     }
164*795d594fSAndroid Build Coastguard Worker 
setBytesAs_byte(ByteBuffer buffer, int index, byte value, ByteOrder order)165*795d594fSAndroid Build Coastguard Worker     public static void setBytesAs_byte(ByteBuffer buffer, int index, byte value, ByteOrder order) {
166*795d594fSAndroid Build Coastguard Worker         buffer.order(order).put(index, value);
167*795d594fSAndroid Build Coastguard Worker     }
168*795d594fSAndroid Build Coastguard Worker 
setBytesAs_char(ByteBuffer buffer, int index, char value, ByteOrder order)169*795d594fSAndroid Build Coastguard Worker     public static void setBytesAs_char(ByteBuffer buffer, int index, char value, ByteOrder order) {
170*795d594fSAndroid Build Coastguard Worker         buffer.order(order).putChar(index, value);
171*795d594fSAndroid Build Coastguard Worker     }
172*795d594fSAndroid Build Coastguard Worker 
setBytesAs_short( ByteBuffer buffer, int index, short value, ByteOrder order)173*795d594fSAndroid Build Coastguard Worker     public static void setBytesAs_short(
174*795d594fSAndroid Build Coastguard Worker             ByteBuffer buffer, int index, short value, ByteOrder order) {
175*795d594fSAndroid Build Coastguard Worker         buffer.order(order).putShort(index, value);
176*795d594fSAndroid Build Coastguard Worker     }
177*795d594fSAndroid Build Coastguard Worker 
setBytesAs_int(ByteBuffer buffer, int index, int value, ByteOrder order)178*795d594fSAndroid Build Coastguard Worker     public static void setBytesAs_int(ByteBuffer buffer, int index, int value, ByteOrder order) {
179*795d594fSAndroid Build Coastguard Worker         buffer.order(order).putInt(index, value);
180*795d594fSAndroid Build Coastguard Worker     }
181*795d594fSAndroid Build Coastguard Worker 
setBytesAs_long(ByteBuffer buffer, int index, long value, ByteOrder order)182*795d594fSAndroid Build Coastguard Worker     public static void setBytesAs_long(ByteBuffer buffer, int index, long value, ByteOrder order) {
183*795d594fSAndroid Build Coastguard Worker         buffer.order(order).putLong(index, value);
184*795d594fSAndroid Build Coastguard Worker     }
185*795d594fSAndroid Build Coastguard Worker 
setBytesAs_float( ByteBuffer buffer, int index, float value, ByteOrder order)186*795d594fSAndroid Build Coastguard Worker     public static void setBytesAs_float(
187*795d594fSAndroid Build Coastguard Worker             ByteBuffer buffer, int index, float value, ByteOrder order) {
188*795d594fSAndroid Build Coastguard Worker         buffer.order(order).putFloat(index, value);
189*795d594fSAndroid Build Coastguard Worker     }
190*795d594fSAndroid Build Coastguard Worker 
setBytesAs_double( ByteBuffer buffer, int index, double value, ByteOrder order)191*795d594fSAndroid Build Coastguard Worker     public static void setBytesAs_double(
192*795d594fSAndroid Build Coastguard Worker             ByteBuffer buffer, int index, double value, ByteOrder order) {
193*795d594fSAndroid Build Coastguard Worker         buffer.order(order).putDouble(index, value);
194*795d594fSAndroid Build Coastguard Worker     }
195*795d594fSAndroid Build Coastguard Worker 
196*795d594fSAndroid Build Coastguard Worker     // Until ART is running on an OpenJDK9 based runtime, there are no
197*795d594fSAndroid Build Coastguard Worker     // calls to help with alignment. OpenJDK9 introduces
198*795d594fSAndroid Build Coastguard Worker     // ByteBuffer.alignedSlice() and ByteBuffer.alignmentOffset(). RI
199*795d594fSAndroid Build Coastguard Worker     // and ART have different data structure alignments which may make
200*795d594fSAndroid Build Coastguard Worker     // porting code interesting.
201*795d594fSAndroid Build Coastguard Worker 
alignedOffset_char(ByteBuffer buffer, int start)202*795d594fSAndroid Build Coastguard Worker     public static int alignedOffset_char(ByteBuffer buffer, int start) {
203*795d594fSAndroid Build Coastguard Worker         return alignedOffset_short(buffer, start);
204*795d594fSAndroid Build Coastguard Worker     }
205*795d594fSAndroid Build Coastguard Worker 
alignedOffset_short(ByteBuffer buffer, int start)206*795d594fSAndroid Build Coastguard Worker     public static int alignedOffset_short(ByteBuffer buffer, int start) {
207*795d594fSAndroid Build Coastguard Worker         for (int i = 0; i < Short.SIZE; ++i) {
208*795d594fSAndroid Build Coastguard Worker             try {
209*795d594fSAndroid Build Coastguard Worker                 vh_probe_short.getVolatile(buffer, start + i);
210*795d594fSAndroid Build Coastguard Worker                 return start + i;
211*795d594fSAndroid Build Coastguard Worker             } catch (IllegalStateException e) {
212*795d594fSAndroid Build Coastguard Worker                 // Unaligned access.
213*795d594fSAndroid Build Coastguard Worker             }
214*795d594fSAndroid Build Coastguard Worker         }
215*795d594fSAndroid Build Coastguard Worker         return start;
216*795d594fSAndroid Build Coastguard Worker     }
217*795d594fSAndroid Build Coastguard Worker 
alignedOffset_int(ByteBuffer buffer, int start)218*795d594fSAndroid Build Coastguard Worker     public static int alignedOffset_int(ByteBuffer buffer, int start) {
219*795d594fSAndroid Build Coastguard Worker         for (int i = 0; i < Integer.SIZE; ++i) {
220*795d594fSAndroid Build Coastguard Worker             try {
221*795d594fSAndroid Build Coastguard Worker                 vh_probe_int.getVolatile(buffer, start + i);
222*795d594fSAndroid Build Coastguard Worker                 return start + i;
223*795d594fSAndroid Build Coastguard Worker             } catch (IllegalStateException e) {
224*795d594fSAndroid Build Coastguard Worker                 // Unaligned access.
225*795d594fSAndroid Build Coastguard Worker             } catch (Exception e) {
226*795d594fSAndroid Build Coastguard Worker                 break;
227*795d594fSAndroid Build Coastguard Worker             }
228*795d594fSAndroid Build Coastguard Worker         }
229*795d594fSAndroid Build Coastguard Worker         return start;
230*795d594fSAndroid Build Coastguard Worker     }
231*795d594fSAndroid Build Coastguard Worker 
alignedOffset_long(ByteBuffer buffer, int start)232*795d594fSAndroid Build Coastguard Worker     public static int alignedOffset_long(ByteBuffer buffer, int start) {
233*795d594fSAndroid Build Coastguard Worker         for (int i = 0; i < Long.SIZE; ++i) {
234*795d594fSAndroid Build Coastguard Worker             try {
235*795d594fSAndroid Build Coastguard Worker                 vh_probe_long.getVolatile(buffer, start + i);
236*795d594fSAndroid Build Coastguard Worker                 return start + i;
237*795d594fSAndroid Build Coastguard Worker             } catch (IllegalStateException e) {
238*795d594fSAndroid Build Coastguard Worker                 // Unaligned access.
239*795d594fSAndroid Build Coastguard Worker             } catch (UnsupportedOperationException e) {
240*795d594fSAndroid Build Coastguard Worker                 // 64-bit operation is not supported irrespective of alignment.
241*795d594fSAndroid Build Coastguard Worker                 break;
242*795d594fSAndroid Build Coastguard Worker             }
243*795d594fSAndroid Build Coastguard Worker         }
244*795d594fSAndroid Build Coastguard Worker         return start;
245*795d594fSAndroid Build Coastguard Worker     }
246*795d594fSAndroid Build Coastguard Worker 
alignedOffset_float(ByteBuffer buffer, int start)247*795d594fSAndroid Build Coastguard Worker     public static int alignedOffset_float(ByteBuffer buffer, int start) {
248*795d594fSAndroid Build Coastguard Worker         return alignedOffset_int(buffer, start);
249*795d594fSAndroid Build Coastguard Worker     }
250*795d594fSAndroid Build Coastguard Worker 
alignedOffset_double(ByteBuffer buffer, int start)251*795d594fSAndroid Build Coastguard Worker     public static int alignedOffset_double(ByteBuffer buffer, int start) {
252*795d594fSAndroid Build Coastguard Worker         return alignedOffset_long(buffer, start);
253*795d594fSAndroid Build Coastguard Worker     }
254*795d594fSAndroid Build Coastguard Worker 
alignedOffset_char(byte[] array, int start)255*795d594fSAndroid Build Coastguard Worker     public static int alignedOffset_char(byte[] array, int start) {
256*795d594fSAndroid Build Coastguard Worker         return alignedOffset_char(ByteBuffer.wrap(array), start);
257*795d594fSAndroid Build Coastguard Worker     }
258*795d594fSAndroid Build Coastguard Worker 
alignedOffset_short(byte[] array, int start)259*795d594fSAndroid Build Coastguard Worker     public static int alignedOffset_short(byte[] array, int start) {
260*795d594fSAndroid Build Coastguard Worker         return alignedOffset_short(ByteBuffer.wrap(array), start);
261*795d594fSAndroid Build Coastguard Worker     }
262*795d594fSAndroid Build Coastguard Worker 
alignedOffset_int(byte[] array, int start)263*795d594fSAndroid Build Coastguard Worker     public static int alignedOffset_int(byte[] array, int start) {
264*795d594fSAndroid Build Coastguard Worker         return alignedOffset_int(ByteBuffer.wrap(array), start);
265*795d594fSAndroid Build Coastguard Worker     }
266*795d594fSAndroid Build Coastguard Worker 
alignedOffset_long(byte[] array, int start)267*795d594fSAndroid Build Coastguard Worker     public static int alignedOffset_long(byte[] array, int start) {
268*795d594fSAndroid Build Coastguard Worker         return alignedOffset_long(ByteBuffer.wrap(array), start);
269*795d594fSAndroid Build Coastguard Worker     }
270*795d594fSAndroid Build Coastguard Worker 
alignedOffset_float(byte[] array, int start)271*795d594fSAndroid Build Coastguard Worker     public static int alignedOffset_float(byte[] array, int start) {
272*795d594fSAndroid Build Coastguard Worker         return alignedOffset_float(ByteBuffer.wrap(array), start);
273*795d594fSAndroid Build Coastguard Worker     }
274*795d594fSAndroid Build Coastguard Worker 
alignedOffset_double(byte[] array, int start)275*795d594fSAndroid Build Coastguard Worker     public static int alignedOffset_double(byte[] array, int start) {
276*795d594fSAndroid Build Coastguard Worker         return alignedOffset_double(ByteBuffer.wrap(array), start);
277*795d594fSAndroid Build Coastguard Worker     }
278*795d594fSAndroid Build Coastguard Worker 
279*795d594fSAndroid Build Coastguard Worker     static {
280*795d594fSAndroid Build Coastguard Worker         ByteOrder order = ByteOrder.LITTLE_ENDIAN;
281*795d594fSAndroid Build Coastguard Worker         vh_probe_short = MethodHandles.byteBufferViewVarHandle(short[].class, order);
282*795d594fSAndroid Build Coastguard Worker         vh_probe_int = MethodHandles.byteBufferViewVarHandle(int[].class, order);
283*795d594fSAndroid Build Coastguard Worker         vh_probe_long = MethodHandles.byteBufferViewVarHandle(long[].class, order);
284*795d594fSAndroid Build Coastguard Worker     }
285*795d594fSAndroid Build Coastguard Worker 
286*795d594fSAndroid Build Coastguard Worker     private static final VarHandle vh_probe_short;
287*795d594fSAndroid Build Coastguard Worker     private static final VarHandle vh_probe_int;
288*795d594fSAndroid Build Coastguard Worker     private static final VarHandle vh_probe_long;
289*795d594fSAndroid Build Coastguard Worker }
290