Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/hotspot/jtreg/compiler/intrinsics/TestRotate.java
41149 views
1
/*
2
* Copyright (c) 2019, 2021, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
/**
25
* @test
26
* @bug 8248830 8256823
27
* @summary Support for scalar rotates ([Integer/Long].rotate[Left/Right]).
28
* @library /test/lib
29
* @run main/othervm/timeout=600 -XX:-TieredCompilation -XX:CompileThreshold=1000 -Xbatch
30
* -XX:+UnlockDiagnosticVMOptions -XX:+AbortVMOnCompilationFailure
31
* compiler.intrinsics.TestRotate
32
*/
33
package compiler.intrinsics;
34
35
public class TestRotate {
36
37
static final int ITERS = 50000;
38
static final int[] INT_VALUES = {Integer.MIN_VALUE, Integer.MAX_VALUE, 0, 1, 2, 3, 5, 8, 13};
39
static final long[] LONG_VALUES = {Long.MIN_VALUE, Long.MAX_VALUE, 0L, 1L, 2L, 3L, 5L, 8L, 13L};
40
41
// expected resules
42
static final int[] TEST_ROR_OR_INT_1_EXPECTED = {1073741824, -1073741825, 0, -2147483648, 1, -2147483647, -2147483646, 4, -2147483642};
43
44
static final int[] TEST_ROR_OR_INT_16_EXPECTED = {32768, -32769, 0, 65536, 131072, 196608, 327680, 524288, 851968};
45
46
static final int[] TEST_ROR_OR_INT_31_EXPECTED = {1, -2, 0, 2, 4, 6, 10, 16, 26};
47
48
static final int[] TEST_ROR_OR_INT_32_EXPECTED = {-2147483648, 2147483647, 0, 1, 2, 3, 5, 8, 13};
49
50
static final long[] TEST_ROR_OR_LONG_1_EXPECTED = {4611686018427387904L, -4611686018427387905L, 0L, -9223372036854775808L, 1L, -9223372036854775807L, -9223372036854775806L, 4L, -9223372036854775802L};
51
52
static final long[] TEST_ROR_OR_LONG_16_EXPECTED = {140737488355328L, -140737488355329L, 0L, 281474976710656L, 562949953421312L, 844424930131968L, 1407374883553280L, 2251799813685248L, 3659174697238528L};
53
54
static final long[] TEST_ROR_OR_LONG_63_EXPECTED = {1L, -2L, 0L, 2L, 4L, 6L, 10L, 16L, 26L};
55
56
static final long[] TEST_ROR_OR_LONG_64_EXPECTED = {-9223372036854775808L, 9223372036854775807L, 0L, 1L, 2L, 3L, 5L, 8L, 13L};
57
58
static final int[] TEST_ROR_ADD_INT_1_EXPECTED = TEST_ROR_OR_INT_1_EXPECTED;
59
60
static final int[] TEST_ROR_ADD_INT_16_EXPECTED = TEST_ROR_OR_INT_16_EXPECTED;
61
62
static final int[] TEST_ROR_ADD_INT_31_EXPECTED = TEST_ROR_OR_INT_31_EXPECTED;
63
64
static final int[] TEST_ROR_ADD_INT_32_EXPECTED = {0, -2, 0, 2, 4, 6, 10, 16, 26};
65
66
static final long[] TEST_ROR_ADD_LONG_1_EXPECTED = TEST_ROR_OR_LONG_1_EXPECTED;
67
68
static final long[] TEST_ROR_ADD_LONG_16_EXPECTED = TEST_ROR_OR_LONG_16_EXPECTED;
69
70
static final long[] TEST_ROR_ADD_LONG_63_EXPECTED = TEST_ROR_OR_LONG_63_EXPECTED;
71
72
static final long[] TEST_ROR_ADD_LONG_64_EXPECTED = {0L, -2L, 0L, 2L, 4L, 6L, 10L, 16L, 26L};
73
74
// eor shift expected
75
static final int[] TEST_EOR_ROR_SHIFT_1_INT_EXPECTED = {-1073741824, -1073741824, 0, -2147483647, 3, -2147483646, -2147483641, 12, -2147483637};
76
77
static final int[] TEST_EOR_ROR_SHIFT_16_INT_EXPECTED = {-2147450880, -2147450880, 0, 65537, 131074, 196611, 327685, 524296, 851981};
78
79
static final int[] TEST_EOR_ROR_SHIFT_31_INT_EXPECTED = {-2147483647, -2147483647, 0, 3, 6, 5, 15, 24, 23};
80
81
static final int[] TEST_EOR_ROR_SHIFT_32_INT_EXPECTED = {0, 0, 0, 0, 0, 0, 0, 0, 0};
82
83
static final long[] TEST_EOR_ROR_SHIFT_1_LONG_EXPECTED = {-4611686018427387904L, -4611686018427387904L, 0L, -9223372036854775807L, 3L, -9223372036854775806L, -9223372036854775801L, 12L, -9223372036854775797L};
84
85
static final long[] TEST_EOR_ROR_SHIFT_16_LONG_EXPECTED = {-9223231299366420480L, -9223231299366420480L, 0L, 281474976710657L, 562949953421314L, 844424930131971L, 1407374883553285L, 2251799813685256L, 3659174697238541L};
86
87
static final long[] TEST_EOR_ROR_SHIFT_63_LONG_EXPECTED = {-9223372036854775807L, -9223372036854775807L, 0L, 3L, 6L, 5L, 15L, 24L, 23L};
88
89
static final long[] TEST_EOR_ROR_SHIFT_64_LONG_EXPECTED = {0, 0, 0, 0, 0, 0, 0, 0, 0};
90
91
// and shift expected
92
static final int[] TEST_AND_ROR_SHIFT_1_INT_EXPECTED = {0, 1073741823, 0, 0, 0, 1, 0, 0, 4};
93
94
static final int[] TEST_AND_ROR_SHIFT_16_INT_EXPECTED = {0, 2147450879, 0, 0, 0, 0, 0, 0, 0};
95
96
static final int[] TEST_AND_ROR_SHIFT_31_INT_EXPECTED = {0, 2147483646, 0, 0, 0, 2, 0, 0, 8};
97
98
static final int[] TEST_AND_ROR_SHIFT_32_INT_EXPECTED = {-2147483648, 2147483647, 0, 1, 2, 3, 5, 8, 13};
99
100
static final long[] TEST_AND_ROR_SHIFT_1_LONG_EXPECTED = {0L, 4611686018427387903L, 0L, 0L, 0L, 1L, 0L, 0L, 4L};
101
102
static final long[] TEST_AND_ROR_SHIFT_16_LONG_EXPECTED = {0L, 9223231299366420479L, 0L, 0L, 0L, 0L, 0L, 0L, 0L};
103
104
static final long[] TEST_AND_ROR_SHIFT_63_LONG_EXPECTED = {0L, 9223372036854775806L, 0L, 0L, 0L, 2L, 0L, 0L, 8L};
105
106
static final long[] TEST_AND_ROR_SHIFT_64_LONG_EXPECTED = {-9223372036854775808L, 9223372036854775807L, 0L, 1L, 2L, 3L, 5L, 8L, 13L};
107
108
// or shift expected
109
static final int[] TEST_OR_ROR_SHIFT_1_INT_EXPECTED = {-1073741824, -1, 0, -2147483647, 3, -2147483645, -2147483641, 12, -2147483633};
110
111
static final int[] TEST_OR_ROR_SHIFT_16_INT_EXPECTED = {-2147450880, -1, 0, 65537, 131074, 196611, 327685, 524296, 851981};
112
113
static final int[] TEST_OR_ROR_SHIFT_31_INT_EXPECTED = {-2147483647, -1, 0, 3, 6, 7, 15, 24, 31};
114
115
static final int[] TEST_OR_ROR_SHIFT_32_INT_EXPECTED = {-2147483648, 2147483647, 0, 1, 2, 3, 5, 8, 13};
116
117
static final long[] TEST_OR_ROR_SHIFT_1_LONG_EXPECTED = {-4611686018427387904L, -1L, 0L, -9223372036854775807L, 3L, -9223372036854775805L, -9223372036854775801L, 12L, -9223372036854775793L};
118
119
static final long[] TEST_OR_ROR_SHIFT_16_LONG_EXPECTED = {-9223231299366420480L, -1L, 0L, 281474976710657L, 562949953421314L, 844424930131971L, 1407374883553285L, 2251799813685256L, 3659174697238541L};
120
121
static final long[] TEST_OR_ROR_SHIFT_63_LONG_EXPECTED = {-9223372036854775807L, -1L, 0L, 3L, 6L, 7L, 15L, 24L, 31L};
122
123
static final long[] TEST_OR_ROR_SHIFT_64_LONG_EXPECTED = {-9223372036854775808L, 9223372036854775807L, 0L, 1L, 2L, 3L, 5L, 8L, 13L};
124
125
// eon shift expected
126
static final int[] TEST_EON_ROR_SHIFT_1_INT_EXPECTED = {1073741823, 1073741823, -1, 2147483646, -4, 2147483645, 2147483640, -13, 2147483636};
127
128
static final int[] TEST_EON_ROR_SHIFT_16_INT_EXPECTED = {2147450879, 2147450879, -1, -65538, -131075, -196612, -327686, -524297, -851982};
129
130
static final int[] TEST_EON_ROR_SHIFT_31_INT_EXPECTED = {2147483646, 2147483646, -1, -4, -7, -6, -16, -25, -24};
131
132
static final int[] TEST_EON_ROR_SHIFT_32_INT_EXPECTED = {-1, -1, -1, -1, -1, -1, -1, -1, -1};
133
134
static final long[] TEST_EON_ROR_SHIFT_1_LONG_EXPECTED = {4611686018427387903L, 4611686018427387903L, -1L, 9223372036854775806L, -4L, 9223372036854775805L, 9223372036854775800L, -13L, 9223372036854775796L};
135
136
static final long[] TEST_EON_ROR_SHIFT_16_LONG_EXPECTED = {9223231299366420479L, 9223231299366420479L, -1L, -281474976710658L, -562949953421315L, -844424930131972L, -1407374883553286L, -2251799813685257L, -3659174697238542L};
137
138
static final long[] TEST_EON_ROR_SHIFT_63_LONG_EXPECTED = {9223372036854775806L, 9223372036854775806L, -1L, -4L, -7L, -6L, -16L, -25L, -24L};
139
140
static final long[] TEST_EON_ROR_SHIFT_64_LONG_EXPECTED = {-1L, -1L, -1L, -1L, -1L, -1L, -1L, -1L, -1L};
141
142
// bic shift expected
143
static final int[] TEST_BIC_ROR_SHIFT_1_INT_EXPECTED = {-2147483648, 1073741824, 0, 1, 2, 2, 5, 8, 9};
144
145
static final int[] TEST_BIC_ROR_SHIFT_16_INT_EXPECTED = {-2147483648, 32768, 0, 1, 2, 3, 5, 8, 13};
146
147
static final int[] TEST_BIC_ROR_SHIFT_31_INT_EXPECTED = {-2147483648, 1, 0, 1, 2, 1, 5, 8, 5};
148
149
static final int[] TEST_BIC_ROR_SHIFT_32_INT_EXPECTED = {0, 0, 0, 0, 0, 0, 0, 0, 0};
150
151
static final long[] TEST_BIC_ROR_SHIFT_1_LONG_EXPECTED = {-9223372036854775808L, 4611686018427387904L, 0L, 1L, 2L, 2L, 5L, 8L, 9L};
152
153
static final long[] TEST_BIC_ROR_SHIFT_16_LONG_EXPECTED = {-9223372036854775808L, 140737488355328L, 0L, 1L, 2L, 3L, 5L, 8L, 13L};
154
155
static final long[] TEST_BIC_ROR_SHIFT_63_LONG_EXPECTED = {-9223372036854775808L, 1L, 0L, 1L, 2L, 1L, 5L, 8L, 5L};
156
157
static final long[] TEST_BIC_ROR_SHIFT_64_LONG_EXPECTED = {0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L};
158
159
// orn shift expected
160
static final int[] TEST_ORN_ROR_SHIFT_1_INT_EXPECTED = {-1073741825, 2147483647, -1, 2147483647, -2, 2147483647, 2147483645, -5, 2147483645};
161
162
static final int[] TEST_ORN_ROR_SHIFT_16_INT_EXPECTED = {-32769, 2147483647, -1, -65537, -131073, -196609, -327681, -524289, -851969};
163
164
static final int[] TEST_ORN_ROR_SHIFT_31_INT_EXPECTED = {-2, 2147483647, -1, -3, -5, -5, -11, -17, -19};
165
166
static final int[] TEST_ORN_ROR_SHIFT_32_INT_EXPECTED = {-1, -1, -1, -1, -1, -1, -1, -1, -1};
167
168
static final long[] TEST_ORN_ROR_SHIFT_1_LONG_EXPECTED = {-4611686018427387905L, 9223372036854775807L, -1L, 9223372036854775807L, -2L, 9223372036854775807L, 9223372036854775805L, -5L, 9223372036854775805L};
169
170
static final long[] TEST_ORN_ROR_SHIFT_16_LONG_EXPECTED = {-140737488355329L, 9223372036854775807L, -1L, -281474976710657L, -562949953421313L, -844424930131969L, -1407374883553281L, -2251799813685249L, -3659174697238529L};
171
172
static final long[] TEST_ORN_ROR_SHIFT_63_LONG_EXPECTED = {-2L, 9223372036854775807L, -1L, -3L, -5L, -5L, -11L, -17L, -19L};
173
174
static final long[] TEST_ORN_ROR_SHIFT_64_LONG_EXPECTED = {-1L, -1L, -1L, -1L, -1L, -1L, -1L, -1L, -1L};
175
176
static final int[] TEST_ROR_INT_API_1_EXPECTED = TEST_ROR_OR_INT_1_EXPECTED;
177
178
static final int[] TEST_ROR_INT_API_16_EXPECTED = TEST_ROR_OR_INT_16_EXPECTED;
179
180
static final int[] TEST_ROR_INT_API_31_EXPECTED = TEST_ROR_OR_INT_31_EXPECTED;
181
182
static final int[] TEST_ROR_INT_API_32_EXPECTED = TEST_ROR_OR_INT_32_EXPECTED;
183
184
static final long[] TEST_ROR_LONG_API_1_EXPECTED = TEST_ROR_OR_LONG_1_EXPECTED;
185
186
static final long[] TEST_ROR_LONG_API_16_EXPECTED = TEST_ROR_OR_LONG_16_EXPECTED;
187
188
static final long[] TEST_ROR_LONG_API_63_EXPECTED = TEST_ROR_OR_LONG_63_EXPECTED;
189
190
static final long[] TEST_ROR_LONG_API_64_EXPECTED = TEST_ROR_OR_LONG_64_EXPECTED;
191
192
static final int[] TEST_ROL_INT_API_1_EXPECTED = {1, -2, 0, 2, 4, 6, 10, 16, 26};
193
194
static final int[] TEST_ROL_INT_API_16_EXPECTED = {32768, -32769, 0, 65536, 131072, 196608, 327680, 524288, 851968};
195
196
static final int[] TEST_ROL_INT_API_31_EXPECTED = {1073741824, -1073741825, 0, -2147483648, 1, -2147483647, -2147483646, 4, -2147483642};
197
198
static final int[] TEST_ROL_INT_API_32_EXPECTED = {-2147483648, 2147483647, 0, 1, 2, 3, 5, 8, 13};
199
200
static final long[] TEST_ROL_LONG_API_1_EXPECTED = {1L, -2L, 0L, 2L, 4L, 6L, 10L, 16L, 26L};
201
202
static final long[] TEST_ROL_LONG_API_16_EXPECTED = {32768L, -32769L, 0L, 65536L, 131072L, 196608L, 327680L, 524288L, 851968L};
203
204
static final long[] TEST_ROL_LONG_API_63_EXPECTED = {4611686018427387904L, -4611686018427387905L, 0L, -9223372036854775808L, 1L, -9223372036854775807L, -9223372036854775806L, 4L, -9223372036854775802L};
205
206
static final long[] TEST_ROL_LONG_API_64_EXPECTED = {-9223372036854775808L, 9223372036854775807L, 0L, 1L, 2L, 3L, 5L, 8L, 13L};
207
208
// verify
209
static void verify(String text, long ref, long actual) {
210
if (ref != actual) {
211
System.err.println(text + " " + ref + " != " + actual);
212
throw new Error("Fail");
213
}
214
}
215
216
static void verify(String text, int ref, int actual) {
217
if (ref != actual) {
218
System.err.println(text + " " + ref + " != " + actual);
219
throw new Error("Fail");
220
}
221
}
222
223
// ror test constant
224
public static int testRorOrInt1(int val) {
225
return (val >>> 1) | (val << (32 - 1));
226
}
227
228
public static int testRorOrInt16(int val) {
229
return (val >>> 16) | (val << (32 - 16));
230
}
231
232
public static int testRorOrInt31(int val) {
233
return (val >>> 31) | (val << (32 - 31));
234
}
235
236
public static int testRorOrInt32(int val) {
237
return (val >>> 32) | (val << (32 - 32));
238
}
239
240
public static long testRorOrLong1(long val) {
241
return (val >>> 1) | (val << (64 - 1));
242
}
243
244
public static long testRorOrLong16(long val) {
245
return (val >>> 16) | (val << (64 - 16));
246
}
247
248
public static long testRorOrLong63(long val) {
249
return (val >>> 63) | (val << (64 - 63));
250
}
251
252
public static long testRorOrLong64(long val) {
253
return (val >>> 64) | (val << (64 - 64));
254
}
255
256
public static int testRorAddInt1(int val) {
257
return (val >>> 1) + (val << (32 - 1));
258
}
259
260
public static int testRorAddInt16(int val) {
261
return (val >>> 16) + (val << (32 - 16));
262
}
263
264
public static int testRorAddInt31(int val) {
265
return (val >>> 31) + (val << (32 - 31));
266
}
267
268
public static int testRorAddInt32(int val) {
269
return (val >>> 32) + (val << (32 - 32));
270
}
271
272
public static long testRorAddLong1(long val) {
273
return (val >>> 1) + (val << (64 - 1));
274
}
275
276
public static long testRorAddLong16(long val) {
277
return (val >>> 16) + (val << (64 - 16));
278
}
279
280
public static long testRorAddLong63(long val) {
281
return (val >>> 63) + (val << (64 - 63));
282
}
283
284
public static long testRorAddLong64(long val) {
285
return (val >>> 64) + (val << (64 - 64));
286
}
287
288
// eor(ROR shift)
289
public static int testRorOrInt1Eor(int val) {
290
return val ^ ((val >>> 1) | (val << (32 - 1)));
291
}
292
293
public static int testRorOrInt16Eor(int val) {
294
return val ^ ((val >>> 16) | (val << (32 - 16)));
295
}
296
297
public static int testRorOrInt31Eor(int val) {
298
return val ^ ((val >>> 31) | (val << (32 - 31)));
299
}
300
301
public static int testRorOrInt32Eor(int val) {
302
return val ^ ((val >>> 32) | (val << (32 - 32)));
303
}
304
305
public static long testRorOrLong1Eor(long val) {
306
return val ^ ((val >>> 1) | (val << (64 - 1)));
307
}
308
309
public static long testRorOrLong16Eor(long val) {
310
return val ^ ((val >>> 16) | (val << (64 - 16)));
311
}
312
313
public static long testRorOrLong63Eor(long val) {
314
return val ^ ((val >>> 63) | (val << (64 - 63)));
315
}
316
317
public static long testRorOrLong64Eor(long val) {
318
return val ^ ((val >>> 64) | (val << (64 - 64)));
319
}
320
321
// and(ROR shift)
322
public static int testRorOrInt1And(int val) {
323
return val & ((val >>> 1) | (val << (32 - 1)));
324
}
325
326
public static int testRorOrInt16And(int val) {
327
return val & ((val >>> 16) | (val << (32 - 16)));
328
}
329
330
public static int testRorOrInt31And(int val) {
331
return val & ((val >>> 31) | (val << (32 - 31)));
332
}
333
334
public static int testRorOrInt32And(int val) {
335
return val & ((val >>> 32) | (val << (32 - 32)));
336
}
337
338
public static long testRorOrLong1And(long val) {
339
return val & ((val >>> 1) | (val << (64 - 1)));
340
}
341
342
public static long testRorOrLong16And(long val) {
343
return val & ((val >>> 16) | (val << (64 - 16)));
344
}
345
346
public static long testRorOrLong63And(long val) {
347
return val & ((val >>> 63) | (val << (64 - 63)));
348
}
349
350
public static long testRorOrLong64And(long val) {
351
return val & ((val >>> 64) | (val << (64 - 64)));
352
}
353
354
// or(ROR shift)
355
public static int testRorOrInt1Or(int val) {
356
return val | ((val >>> 1) | (val << (32 - 1)));
357
}
358
359
public static int testRorOrInt16Or(int val) {
360
return val | ((val >>> 16) | (val << (32 - 16)));
361
}
362
363
public static int testRorOrInt31Or(int val) {
364
return val | ((val >>> 31) | (val << (32 - 31)));
365
}
366
367
public static int testRorOrInt32Or(int val) {
368
return val | ((val >>> 32) | (val << (32 - 32)));
369
}
370
371
public static long testRorOrLong1Or(long val) {
372
return val | ((val >>> 1) | (val << (64 - 1)));
373
}
374
375
public static long testRorOrLong16Or(long val) {
376
return val | ((val >>> 16) | (val << (64 - 16)));
377
}
378
379
public static long testRorOrLong63Or(long val) {
380
return val | ((val >>> 63) | (val << (64 - 63)));
381
}
382
383
public static long testRorOrLong64Or(long val) {
384
return val | ((val >>> 64) | (val << (64 - 64)));
385
}
386
387
// eon (ROR shift)
388
public static int testRorOrInt1Eon(int val) {
389
return val ^ (-1 ^ ((val >>> 1) | (val << (32 - 1))));
390
}
391
392
public static int testRorOrInt16Eon(int val) {
393
return val ^ (-1 ^ ((val >>> 16) | (val << (32 - 16))));
394
}
395
396
public static int testRorOrInt31Eon(int val) {
397
return val ^ (-1 ^ ((val >>> 31) | (val << (32 - 31))));
398
}
399
400
public static int testRorOrInt32Eon(int val) {
401
return val ^ (-1 ^ ((val >>> 32) | (val << (32 - 32))));
402
}
403
404
public static long testRorOrLong1Eon(long val) {
405
return val ^ (-1 ^ ((val >>> 1) | (val << (64 - 1))));
406
}
407
408
public static long testRorOrLong16Eon(long val) {
409
return val ^ (-1 ^ ((val >>> 16) | (val << (64 - 16))));
410
}
411
412
public static long testRorOrLong63Eon(long val) {
413
return val ^ (-1 ^ ((val >>> 63) | (val << (64 - 63))));
414
}
415
416
public static long testRorOrLong64Eon(long val) {
417
return val ^ (-1 ^ ((val >>> 64) | (val << (64 - 64))));
418
}
419
420
// and (ROR shift)
421
public static int testRorOrInt1Bic(int val) {
422
return val & (-1 ^ ((val >>> 1) | (val << (32 - 1))));
423
}
424
425
public static int testRorOrInt16Bic(int val) {
426
return val & (-1 ^ ((val >>> 16) | (val << (32 - 16))));
427
}
428
429
public static int testRorOrInt31Bic(int val) {
430
return val & (-1 ^ ((val >>> 31) | (val << (32 - 31))));
431
}
432
433
public static int testRorOrInt32Bic(int val) {
434
return val & (-1 ^ ((val >>> 32) | (val << (32 - 32))));
435
}
436
437
public static long testRorOrLong1Bic(long val) {
438
return val & (-1 ^ ((val >>> 1) | (val << (64 - 1))));
439
}
440
441
public static long testRorOrLong16Bic(long val) {
442
return val & (-1 ^ ((val >>> 16) | (val << (64 - 16))));
443
}
444
445
public static long testRorOrLong63Bic(long val) {
446
return val & (-1 ^ ((val >>> 63) | (val << (64 - 63))));
447
}
448
449
public static long testRorOrLong64Bic(long val) {
450
return val & (-1 ^ ((val >>> 64) | (val << (64 - 64))));
451
}
452
453
// or (ROR shift)
454
public static int testRorOrInt1Orn(int val) {
455
return val | (-1 ^ ((val >>> 1) | (val << (32 - 1))));
456
}
457
458
public static int testRorOrInt16Orn(int val) {
459
return val | (-1 ^ ((val >>> 16) | (val << (32 - 16))));
460
}
461
462
public static int testRorOrInt31Orn(int val) {
463
return val | (-1 ^ ((val >>> 31) | (val << (32 - 31))));
464
}
465
466
public static int testRorOrInt32Orn(int val) {
467
return val | (-1 ^ ((val >>> 32) | (val << (32 - 32))));
468
}
469
470
public static long testRorOrLong1Orn(long val) {
471
return val | (-1 ^ ((val >>> 1) | (val << (64 - 1))));
472
}
473
474
public static long testRorOrLong16Orn(long val) {
475
return val | (-1 ^ ((val >>> 16) | (val << (64 - 16))));
476
}
477
478
public static long testRorOrLong63Orn(long val) {
479
return val | (-1 ^ ((val >>> 63) | (val << (64 - 63))));
480
}
481
482
public static long testRorOrLong64Orn(long val) {
483
return val | (-1 ^ ((val >>> 64) | (val << (64 - 64))));
484
}
485
486
// test rotate API
487
public static int testRorIntApi(int val, int distance) {
488
return Integer.rotateRight(val, distance);
489
}
490
491
public static long testRorLongApi(long val, int distance) {
492
return Long.rotateRight(val, distance);
493
}
494
495
public static int testRolIntApi(int val, int distance) {
496
return Integer.rotateLeft(val, distance);
497
}
498
499
public static long testRolLongApi(long val, int distance) {
500
return Long.rotateLeft(val, distance);
501
}
502
503
public static void testRolIntZero(int val) {
504
// Count is known to be zero only after loop opts
505
int count = 42;
506
for (int i = 0; i < 4; i++) {
507
if ((i % 2) == 0) {
508
count = 0;
509
}
510
}
511
int res = Integer.rotateLeft(val, count);
512
if (res != val) {
513
throw new RuntimeException("test_rol_int_zero failed: " + res + " != " + val);
514
}
515
}
516
517
public static void testRolLongZero(long val) {
518
// Count is known to be zero only after loop opts
519
int count = 42;
520
for (int i = 0; i < 4; i++) {
521
if ((i % 2) == 0) {
522
count = 0;
523
}
524
}
525
long res = Long.rotateLeft(val, count);
526
if (res != val) {
527
throw new RuntimeException("test_rol_long_zero failed: " + res + " != " + val);
528
}
529
}
530
531
public static void testRorIntZero(int val) {
532
// Count is known to be zero only after loop opts
533
int count = 42;
534
for (int i = 0; i < 4; i++) {
535
if ((i % 2) == 0) {
536
count = 0;
537
}
538
}
539
int res = Integer.rotateRight(val, count);
540
if (res != val) {
541
throw new RuntimeException("test_ror_int_zero failed: " + res + " != " + val);
542
}
543
}
544
545
public static void testRorLongZero(long val) {
546
// Count is known to be zero only after loop opts
547
int count = 42;
548
for (int i = 0; i < 4; i++) {
549
if ((i % 2) == 0) {
550
count = 0;
551
}
552
}
553
long res = Long.rotateRight(val, count);
554
if (res != val) {
555
throw new RuntimeException("test_ror_long_zero failed: " + res + " != " + val);
556
}
557
}
558
559
public static void testRorOrInts() {
560
for (int count = 0; count < ITERS; count++) {
561
for (int i = 0; i < INT_VALUES.length; i++) {
562
int val = INT_VALUES[i];
563
verify("testRorOrInt1(" + val + ")", testRorOrInt1(val), TEST_ROR_OR_INT_1_EXPECTED[i]);
564
verify("testRorOrInt16(" + val + ")", testRorOrInt16(val), TEST_ROR_OR_INT_16_EXPECTED[i]);
565
verify("testRorOrInt31(" + val + ")", testRorOrInt31(val), TEST_ROR_OR_INT_31_EXPECTED[i]);
566
verify("testRorOrInt32(" + val + ")", testRorOrInt32(val), TEST_ROR_OR_INT_32_EXPECTED[i]);
567
}
568
}
569
}
570
571
public static void testRorAddInts() {
572
for (int count = 0; count < ITERS; count++) {
573
for (int i = 0; i < INT_VALUES.length; i++) {
574
int val = INT_VALUES[i];
575
verify("testRorAddInt1(" + val + ")", testRorAddInt1(val), TEST_ROR_ADD_INT_1_EXPECTED[i]);
576
verify("testRorAddInt16(" + val + ")", testRorAddInt16(val), TEST_ROR_ADD_INT_16_EXPECTED[i]);
577
verify("testRorAddInt31(" + val + ")", testRorAddInt31(val), TEST_ROR_ADD_INT_31_EXPECTED[i]);
578
verify("testRorAddInt32(" + val + ")", testRorAddInt32(val), TEST_ROR_ADD_INT_32_EXPECTED[i]);
579
}
580
}
581
}
582
583
public static void testRorOrIntEors() {
584
for (int count = 0; count < ITERS; count++) {
585
for (int i = 0; i < INT_VALUES.length; i++) {
586
int val = INT_VALUES[i];
587
verify("testRorOrInt1Eor(" + val + ")", testRorOrInt1Eor(val), TEST_EOR_ROR_SHIFT_1_INT_EXPECTED[i]);
588
verify("testRorOrInt16Eor(" + val + ")", testRorOrInt16Eor(val), TEST_EOR_ROR_SHIFT_16_INT_EXPECTED[i]);
589
verify("testRorOrInt31Eor(" + val + ")", testRorOrInt31Eor(val), TEST_EOR_ROR_SHIFT_31_INT_EXPECTED[i]);
590
verify("testRorOrInt32Eor(" + val + ")", testRorOrInt32Eor(val), TEST_EOR_ROR_SHIFT_32_INT_EXPECTED[i]);
591
}
592
}
593
}
594
595
public static void testRorOrIntAnds() {
596
for (int count = 0; count < ITERS; count++) {
597
for (int i = 0; i < INT_VALUES.length; i++) {
598
int val = INT_VALUES[i];
599
verify("testRorOrInt1And(" + val + ")", testRorOrInt1And(val), TEST_AND_ROR_SHIFT_1_INT_EXPECTED[i]);
600
verify("testRorOrInt16And(" + val + ")", testRorOrInt16And(val), TEST_AND_ROR_SHIFT_16_INT_EXPECTED[i]);
601
verify("testRorOrInt31And(" + val + ")", testRorOrInt31And(val), TEST_AND_ROR_SHIFT_31_INT_EXPECTED[i]);
602
verify("testRorOrInt32And(" + val + ")", testRorOrInt32And(val), TEST_AND_ROR_SHIFT_32_INT_EXPECTED[i]);
603
}
604
}
605
}
606
607
public static void testRorOrIntOrs() {
608
for (int count = 0; count < ITERS; count++) {
609
for (int i = 0; i < INT_VALUES.length; i++) {
610
int val = INT_VALUES[i];
611
verify("testRorOrInt1Or(" + val + ")", testRorOrInt1Or(val), TEST_OR_ROR_SHIFT_1_INT_EXPECTED[i]);
612
verify("testRorOrInt16Or(" + val + ")", testRorOrInt16Or(val), TEST_OR_ROR_SHIFT_16_INT_EXPECTED[i]);
613
verify("testRorOrInt31Or(" + val + ")", testRorOrInt31Or(val), TEST_OR_ROR_SHIFT_31_INT_EXPECTED[i]);
614
verify("testRorOrInt32Or(" + val + ")", testRorOrInt32Or(val), TEST_OR_ROR_SHIFT_32_INT_EXPECTED[i]);
615
}
616
}
617
}
618
619
public static void testRorOrIntEons() {
620
for (int count = 0; count < ITERS; count++) {
621
for (int i = 0; i < INT_VALUES.length; i++) {
622
int val = INT_VALUES[i];
623
verify("testRorOrInt1Eon(" + val + ")", testRorOrInt1Eon(val), TEST_EON_ROR_SHIFT_1_INT_EXPECTED[i]);
624
verify("testRorOrInt16Eon(" + val + ")", testRorOrInt16Eon(val), TEST_EON_ROR_SHIFT_16_INT_EXPECTED[i]);
625
verify("testRorOrInt31Eon(" + val + ")", testRorOrInt31Eon(val), TEST_EON_ROR_SHIFT_31_INT_EXPECTED[i]);
626
verify("testRorOrInt32Eon(" + val + ")", testRorOrInt32Eon(val), TEST_EON_ROR_SHIFT_32_INT_EXPECTED[i]);
627
}
628
}
629
}
630
631
public static void testRorOrIntBics() {
632
for (int count = 0; count < ITERS; count++) {
633
for (int i = 0; i < INT_VALUES.length; i++) {
634
int val = INT_VALUES[i];
635
verify("testRorOrInt1Bic(" + val + ")", testRorOrInt1Bic(val), TEST_BIC_ROR_SHIFT_1_INT_EXPECTED[i]);
636
verify("testRorOrInt16Bic(" + val + ")", testRorOrInt16Bic(val), TEST_BIC_ROR_SHIFT_16_INT_EXPECTED[i]);
637
verify("testRorOrInt31Bic(" + val + ")", testRorOrInt31Bic(val), TEST_BIC_ROR_SHIFT_31_INT_EXPECTED[i]);
638
verify("testRorOrInt32Bic(" + val + ")", testRorOrInt32Bic(val), TEST_BIC_ROR_SHIFT_32_INT_EXPECTED[i]);
639
}
640
}
641
}
642
643
public static void testRorOrIntOrns() {
644
for (int count = 0; count < ITERS; count++) {
645
for (int i = 0; i < INT_VALUES.length; i++) {
646
int val = INT_VALUES[i];
647
verify("testRorOrInt1Orn(" + val + ")", testRorOrInt1Orn(val), TEST_ORN_ROR_SHIFT_1_INT_EXPECTED[i]);
648
verify("testRorOrInt16Orn(" + val + ")", testRorOrInt16Orn(val), TEST_ORN_ROR_SHIFT_16_INT_EXPECTED[i]);
649
verify("testRorOrInt31Orn(" + val + ")", testRorOrInt31Orn(val), TEST_ORN_ROR_SHIFT_31_INT_EXPECTED[i]);
650
verify("testRorOrInt32Orn(" + val + ")", testRorOrInt32Orn(val), TEST_ORN_ROR_SHIFT_32_INT_EXPECTED[i]);
651
}
652
}
653
}
654
655
public static void testRorIntApis() {
656
for (int count = 0; count < ITERS; count++) {
657
for (int i = 0; i < INT_VALUES.length; i++) {
658
int val = INT_VALUES[i];
659
verify("testRorIntApi(" + val + ", 1)", testRorIntApi(val, 1), TEST_ROR_INT_API_1_EXPECTED[i]);
660
verify("testRorIntApi(" + val + ", 16)", testRorIntApi(val, 16), TEST_ROR_INT_API_16_EXPECTED[i]);
661
verify("testRorIntApi(" + val + ", 31)", testRorIntApi(val, 31), TEST_ROR_INT_API_31_EXPECTED[i]);
662
verify("testRorIntApi(" + val + ", 32)", testRorIntApi(val, 32), TEST_ROR_INT_API_32_EXPECTED[i]);
663
}
664
}
665
}
666
667
public static void testRolIntApis() {
668
for (int count = 0; count < ITERS; count++) {
669
for (int i = 0; i < INT_VALUES.length; i++) {
670
int val = INT_VALUES[i];
671
verify("testRolIntApi(" + val + ", 1)", testRolIntApi(val, 1), TEST_ROL_INT_API_1_EXPECTED[i]);
672
verify("testRolIntApi(" + val + ", 16)", testRolIntApi(val, 16), TEST_ROL_INT_API_16_EXPECTED[i]);
673
verify("testRolIntApi(" + val + ", 31)", testRolIntApi(val, 31), TEST_ROL_INT_API_31_EXPECTED[i]);
674
verify("testRolIntApi(" + val + ", 32)", testRolIntApi(val, 32), TEST_ROL_INT_API_32_EXPECTED[i]);
675
}
676
}
677
}
678
679
public static void testRolrIntZeros() {
680
for (int count = 0; count < ITERS; count++) {
681
for (int i = 0; i < INT_VALUES.length; i++) {
682
int val = INT_VALUES[i];
683
testRolIntZero(val);
684
testRorIntZero(val);
685
}
686
}
687
}
688
689
public static void testRorOrLongs() {
690
for (int count = 0; count < ITERS; count++) {
691
for (int i = 0; i < LONG_VALUES.length; i++) {
692
long val = LONG_VALUES[i];
693
verify("testRorOrLong1(" + val + ")", testRorOrLong1(val), TEST_ROR_OR_LONG_1_EXPECTED[i]);
694
verify("testRorOrLong16(" + val + ")", testRorOrLong16(val), TEST_ROR_OR_LONG_16_EXPECTED[i]);
695
verify("testRorOrLong63(" + val + ")", testRorOrLong63(val), TEST_ROR_OR_LONG_63_EXPECTED[i]);
696
verify("testRorOrLong64(" + val + ")", testRorOrLong64(val), TEST_ROR_OR_LONG_64_EXPECTED[i]);
697
}
698
}
699
}
700
701
public static void testRorAddLongs() {
702
for (int count = 0; count < ITERS; count++) {
703
for (int i = 0; i < LONG_VALUES.length; i++) {
704
long val = LONG_VALUES[i];
705
verify("testRorAddLong1(" + val + ")", testRorAddLong1(val), TEST_ROR_ADD_LONG_1_EXPECTED[i]);
706
verify("testRorAddLong16(" + val + ")", testRorAddLong16(val), TEST_ROR_ADD_LONG_16_EXPECTED[i]);
707
verify("testRorAddLong63(" + val + ")", testRorAddLong63(val), TEST_ROR_ADD_LONG_63_EXPECTED[i]);
708
verify("testRorAddLong64(" + val + ")", testRorAddLong64(val), TEST_ROR_ADD_LONG_64_EXPECTED[i]);
709
}
710
}
711
}
712
713
public static void testRorOrLongEors() {
714
for (int count = 0; count < ITERS; count++) {
715
for (int i = 0; i < LONG_VALUES.length; i++) {
716
long val = LONG_VALUES[i];
717
verify("testRorOrLong1Eor(" + val + ")", testRorOrLong1Eor(val), TEST_EOR_ROR_SHIFT_1_LONG_EXPECTED[i]);
718
verify("testRorOrLong16Eor(" + val + ")", testRorOrLong16Eor(val), TEST_EOR_ROR_SHIFT_16_LONG_EXPECTED[i]);
719
verify("testRorOrLong63Eor(" + val + ")", testRorOrLong63Eor(val), TEST_EOR_ROR_SHIFT_63_LONG_EXPECTED[i]);
720
verify("testRorOrLong64Eor(" + val + ")", testRorOrLong64Eor(val), TEST_EOR_ROR_SHIFT_64_LONG_EXPECTED[i]);
721
}
722
}
723
}
724
725
public static void testRorOrLongAnds() {
726
for (int count = 0; count < ITERS; count++) {
727
for (int i = 0; i < LONG_VALUES.length; i++) {
728
long val = LONG_VALUES[i];
729
verify("testRorOrLong1And(" + val + ")", testRorOrLong1And(val), TEST_AND_ROR_SHIFT_1_LONG_EXPECTED[i]);
730
verify("testRorOrLong16And(" + val + ")", testRorOrLong16And(val), TEST_AND_ROR_SHIFT_16_LONG_EXPECTED[i]);
731
verify("testRorOrLong63And(" + val + ")", testRorOrLong63And(val), TEST_AND_ROR_SHIFT_63_LONG_EXPECTED[i]);
732
verify("testRorOrLong64And(" + val + ")", testRorOrLong64And(val), TEST_AND_ROR_SHIFT_64_LONG_EXPECTED[i]);
733
}
734
}
735
}
736
737
public static void testRorOrLongOrs() {
738
for (int count = 0; count < ITERS; count++) {
739
for (int i = 0; i < LONG_VALUES.length; i++) {
740
long val = LONG_VALUES[i];
741
verify("testRorOrLong1Or(" + val + ")", testRorOrLong1Or(val), TEST_OR_ROR_SHIFT_1_LONG_EXPECTED[i]);
742
verify("testRorOrLong16Or(" + val + ")", testRorOrLong16Or(val), TEST_OR_ROR_SHIFT_16_LONG_EXPECTED[i]);
743
verify("testRorOrLong63Or(" + val + ")", testRorOrLong63Or(val), TEST_OR_ROR_SHIFT_63_LONG_EXPECTED[i]);
744
verify("testRorOrLong64Or(" + val + ")", testRorOrLong64Or(val), TEST_OR_ROR_SHIFT_64_LONG_EXPECTED[i]);
745
}
746
}
747
}
748
749
public static void testRorOrLongEons() {
750
for (int count = 0; count < ITERS; count++) {
751
for (int i = 0; i < LONG_VALUES.length; i++) {
752
long val = LONG_VALUES[i];
753
verify("testRorOrLong1Eon(" + val + ")", testRorOrLong1Eon(val), TEST_EON_ROR_SHIFT_1_LONG_EXPECTED[i]);
754
verify("testRorOrLong16Eon(" + val + ")", testRorOrLong16Eon(val), TEST_EON_ROR_SHIFT_16_LONG_EXPECTED[i]);
755
verify("testRorOrLong63Eon(" + val + ")", testRorOrLong63Eon(val), TEST_EON_ROR_SHIFT_63_LONG_EXPECTED[i]);
756
verify("testRorOrLong64Eon(" + val + ")", testRorOrLong64Eon(val), TEST_EON_ROR_SHIFT_64_LONG_EXPECTED[i]);
757
}
758
}
759
}
760
761
public static void testRorOrLongBics() {
762
for (int count = 0; count < ITERS; count++) {
763
for (int i = 0; i < LONG_VALUES.length; i++) {
764
long val = LONG_VALUES[i];
765
verify("testRorOrLong1Bic(" + val + ")", testRorOrLong1Bic(val), TEST_BIC_ROR_SHIFT_1_LONG_EXPECTED[i]);
766
verify("testRorOrLong16Bic(" + val + ")", testRorOrLong16Bic(val), TEST_BIC_ROR_SHIFT_16_LONG_EXPECTED[i]);
767
verify("testRorOrLong63Bic(" + val + ")", testRorOrLong63Bic(val), TEST_BIC_ROR_SHIFT_63_LONG_EXPECTED[i]);
768
verify("testRorOrLong64Bic(" + val + ")", testRorOrLong64Bic(val), TEST_BIC_ROR_SHIFT_64_LONG_EXPECTED[i]);
769
}
770
}
771
}
772
773
public static void testRorOrLongOrns() {
774
for (int count = 0; count < ITERS; count++) {
775
for (int i = 0; i < LONG_VALUES.length; i++) {
776
long val = LONG_VALUES[i];
777
verify("testRorOrLong1Orn(" + val + ")", testRorOrLong1Orn(val), TEST_ORN_ROR_SHIFT_1_LONG_EXPECTED[i]);
778
verify("testRorOrLong16Orn(" + val + ")", testRorOrLong16Orn(val), TEST_ORN_ROR_SHIFT_16_LONG_EXPECTED[i]);
779
verify("testRorOrLong63Orn(" + val + ")", testRorOrLong63Orn(val), TEST_ORN_ROR_SHIFT_63_LONG_EXPECTED[i]);
780
verify("testRorOrLong64Orn(" + val + ")", testRorOrLong64Orn(val), TEST_ORN_ROR_SHIFT_64_LONG_EXPECTED[i]);
781
}
782
}
783
}
784
785
public static void testRorLongApis() {
786
for (int count = 0; count < ITERS; count++) {
787
for (int i = 0; i < LONG_VALUES.length; i++) {
788
long val = LONG_VALUES[i];
789
verify("testRorLongApi(" + val + ", 1)", testRorLongApi(val, 1), TEST_ROR_LONG_API_1_EXPECTED[i]);
790
verify("testRorLongApi(" + val + ", 16)", testRorLongApi(val, 16), TEST_ROR_LONG_API_16_EXPECTED[i]);
791
verify("testRorLongApi(" + val + ", 63)", testRorLongApi(val, 63), TEST_ROR_LONG_API_63_EXPECTED[i]);
792
verify("testRorLongApi(" + val + ", 64)", testRorLongApi(val, 64), TEST_ROR_LONG_API_64_EXPECTED[i]);
793
}
794
}
795
}
796
797
public static void testRolLongApis() {
798
for (int count = 0; count < ITERS; count++) {
799
for (int i = 0; i < LONG_VALUES.length; i++) {
800
long val = LONG_VALUES[i];
801
verify("testRolLongApi(" + val + ", 1)", testRolLongApi(val, 1), TEST_ROL_LONG_API_1_EXPECTED[i]);
802
verify("testRolLongApi(" + val + ", 16)", testRolLongApi(val, 16), TEST_ROL_LONG_API_16_EXPECTED[i]);
803
verify("testRolLongApi(" + val + ", 63)", testRolLongApi(val, 63), TEST_ROL_LONG_API_63_EXPECTED[i]);
804
verify("testRolLongApi(" + val + ", 64)", testRolLongApi(val, 64), TEST_ROL_LONG_API_64_EXPECTED[i]);
805
}
806
}
807
}
808
809
public static void testRolrLongZeros() {
810
for (int count = 0; count < ITERS; count++) {
811
for (int i = 0; i < LONG_VALUES.length; i++) {
812
long val = LONG_VALUES[i];
813
testRolLongZero(i);
814
testRorLongZero(i);
815
}
816
}
817
}
818
819
public static void main(String[] args) {
820
testRorOrInts();
821
testRorAddInts();
822
testRorOrIntEors();
823
testRorOrIntAnds();
824
testRorOrIntOrs();
825
testRorOrIntEons();
826
testRorOrIntBics();
827
testRorOrIntOrns();
828
testRorIntApis();
829
testRolIntApis();
830
testRolrIntZeros();
831
832
testRorOrLongs();
833
testRorAddLongs();
834
testRorOrLongEors();
835
testRorOrLongAnds();
836
testRorOrLongOrs();
837
testRorOrLongEons();
838
testRorOrLongBics();
839
testRorOrLongOrns();
840
testRorLongApis();
841
testRolLongApis();
842
testRolrLongZeros();
843
}
844
845
}
846
847