blob: 90430815684f7e384a6c12c941d8139eba186271 [file] [log] [blame]
Vladimir Marko7dac8642019-11-06 17:09:30 +00001/*
2 * Copyright 2019 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17import dalvik.annotation.optimization.FastNative;
18import dalvik.annotation.optimization.CriticalNative;
19
20public class Main {
21
22 public static void main(String[] args) throws Exception {
23 System.loadLibrary(args[0]);
24
Vladimir Marko7dac8642019-11-06 17:09:30 +000025 // To avoid going through resolution trampoline, make test classes visibly initialized.
26 new Test();
27 new TestFast();
28 new TestCritical();
29 new TestMissing();
30 new TestMissingFast();
31 new TestMissingCritical();
Vladimir Marko03008222020-03-06 14:04:21 +000032 new CriticalSignatures();
Vladimir Marko7dac8642019-11-06 17:09:30 +000033 makeVisiblyInitialized(); // Make sure they are visibly initialized.
34
Vladimir Marko7dac8642019-11-06 17:09:30 +000035 test();
Vladimir Marko08d09842019-12-02 12:38:49 +000036 testFast();
Vladimir Markofa458ac2020-02-12 14:08:07 +000037 testCritical();
Vladimir Marko7dac8642019-11-06 17:09:30 +000038 testMissing();
Vladimir Marko08d09842019-12-02 12:38:49 +000039 testMissingFast();
Vladimir Markofa458ac2020-02-12 14:08:07 +000040 testMissingCritical();
Vladimir Marko03008222020-03-06 14:04:21 +000041
42 testCriticalSignatures();
Vladimir Marko7dac8642019-11-06 17:09:30 +000043 }
44
45 static void test() {
46 System.out.println("test");
Vladimir Markofa458ac2020-02-12 14:08:07 +000047 assertEquals(42, Test.nativeMethodVoid());
Vladimir Marko7dac8642019-11-06 17:09:30 +000048 assertEquals(42, Test.nativeMethod(42));
49 assertEquals(42, Test.nativeMethodWithManyParameters(
50 11, 12L, 13.0f, 14.0d,
51 21, 22L, 23.0f, 24.0d,
52 31, 32L, 33.0f, 34.0d,
53 41, 42L, 43.0f, 44.0d,
54 51, 52L, 53.0f, 54.0d,
55 61, 62L, 63.0f, 64.0d,
56 71, 72L, 73.0f, 74.0d,
57 81, 82L, 83.0f, 84.0d));
58 }
59
60 static void testFast() {
61 System.out.println("testFast");
Vladimir Markofa458ac2020-02-12 14:08:07 +000062 assertEquals(42, TestFast.nativeMethodVoid());
Vladimir Marko7dac8642019-11-06 17:09:30 +000063 assertEquals(42, TestFast.nativeMethod(42));
64 assertEquals(42, TestFast.nativeMethodWithManyParameters(
65 11, 12L, 13.0f, 14.0d,
66 21, 22L, 23.0f, 24.0d,
67 31, 32L, 33.0f, 34.0d,
68 41, 42L, 43.0f, 44.0d,
69 51, 52L, 53.0f, 54.0d,
70 61, 62L, 63.0f, 64.0d,
71 71, 72L, 73.0f, 74.0d,
72 81, 82L, 83.0f, 84.0d));
73 }
74
75 static void testCritical() {
76 System.out.println("testCritical");
Vladimir Markofa458ac2020-02-12 14:08:07 +000077 assertEquals(42, TestCritical.nativeMethodVoid());
Vladimir Marko7dac8642019-11-06 17:09:30 +000078 assertEquals(42, TestCritical.nativeMethod(42));
79 assertEquals(42, TestCritical.nativeMethodWithManyParameters(
80 11, 12L, 13.0f, 14.0d,
81 21, 22L, 23.0f, 24.0d,
82 31, 32L, 33.0f, 34.0d,
83 41, 42L, 43.0f, 44.0d,
84 51, 52L, 53.0f, 54.0d,
85 61, 62L, 63.0f, 64.0d,
86 71, 72L, 73.0f, 74.0d,
87 81, 82L, 83.0f, 84.0d));
88 }
89
90 static void testMissing() {
91 System.out.println("testMissing");
92
93 try {
Vladimir Markofa458ac2020-02-12 14:08:07 +000094 TestMissing.nativeMethodVoid();
95 throw new Error("UNREACHABLE");
96 } catch (LinkageError expected) {}
97
98 try {
Vladimir Marko7dac8642019-11-06 17:09:30 +000099 TestMissing.nativeMethod(42);
100 throw new Error("UNREACHABLE");
101 } catch (LinkageError expected) {}
102
103 try {
104 TestMissing.nativeMethodWithManyParameters(
105 11, 12L, 13.0f, 14.0d,
106 21, 22L, 23.0f, 24.0d,
107 31, 32L, 33.0f, 34.0d,
108 41, 42L, 43.0f, 44.0d,
109 51, 52L, 53.0f, 54.0d,
110 61, 62L, 63.0f, 64.0d,
111 71, 72L, 73.0f, 74.0d,
112 81, 82L, 83.0f, 84.0d);
113 throw new Error("UNREACHABLE");
114 } catch (LinkageError expected) {}
115 }
116
117 static void testMissingFast() {
118 System.out.println("testMissingFast");
119
120 try {
Vladimir Markofa458ac2020-02-12 14:08:07 +0000121 TestMissingFast.nativeMethodVoid();
122 throw new Error("UNREACHABLE");
123 } catch (LinkageError expected) {}
124
125 try {
Vladimir Marko7dac8642019-11-06 17:09:30 +0000126 TestMissingFast.nativeMethod(42);
127 throw new Error("UNREACHABLE");
128 } catch (LinkageError expected) {}
129
130 try {
131 TestMissingFast.nativeMethodWithManyParameters(
132 11, 12L, 13.0f, 14.0d,
133 21, 22L, 23.0f, 24.0d,
134 31, 32L, 33.0f, 34.0d,
135 41, 42L, 43.0f, 44.0d,
136 51, 52L, 53.0f, 54.0d,
137 61, 62L, 63.0f, 64.0d,
138 71, 72L, 73.0f, 74.0d,
139 81, 82L, 83.0f, 84.0d);
140 throw new Error("UNREACHABLE");
141 } catch (LinkageError expected) {}
142 }
143
144 static void testMissingCritical() {
145 System.out.println("testMissingCritical");
146
147 try {
Vladimir Markofa458ac2020-02-12 14:08:07 +0000148 TestMissingCritical.nativeMethodVoid();
149 throw new Error("UNREACHABLE");
150 } catch (LinkageError expected) {}
151
152 try {
Vladimir Marko7dac8642019-11-06 17:09:30 +0000153 TestMissingCritical.nativeMethod(42);
154 throw new Error("UNREACHABLE");
155 } catch (LinkageError expected) {}
156
157 try {
158 TestMissingCritical.nativeMethodWithManyParameters(
159 11, 12L, 13.0f, 14.0d,
160 21, 22L, 23.0f, 24.0d,
161 31, 32L, 33.0f, 34.0d,
162 41, 42L, 43.0f, 44.0d,
163 51, 52L, 53.0f, 54.0d,
164 61, 62L, 63.0f, 64.0d,
165 71, 72L, 73.0f, 74.0d,
166 81, 82L, 83.0f, 84.0d);
167 throw new Error("UNREACHABLE");
168 } catch (LinkageError expected) {}
169 }
170
Vladimir Marko03008222020-03-06 14:04:21 +0000171 static void testCriticalSignatures() {
172 System.out.println("testCriticalSignatures");
173 long l = 0xf00000000L;
174 assertEquals(42, CriticalSignatures.nativeILFFFFD(1, l + 2L, 3.0f, 4.0f, 5.0f, 6.0f, 7.0));
175 assertEquals(42, CriticalSignatures.nativeLIFFFFD(l + 7L, 6, 5.0f, 4.0f, 3.0f, 2.0f, 1.0));
176 assertEquals(42, CriticalSignatures.nativeFLIFFFD(1.0f, l + 2L, 3, 4.0f, 5.0f, 6.0f, 7.0));
177 assertEquals(42, CriticalSignatures.nativeDDIIIIII(8.0, 7.0, 6, 5, 4, 3, 2, 1));
178 assertEquals(42, CriticalSignatures.nativeDFFILIII(1.0, 2.0f, 3.0f, 4, l + 5L, 6, 7, 8));
179 assertEquals(42, CriticalSignatures.nativeDDFILIII(8.0, 7.0, 6.0f, 5, l + 4L, 3, 2, 1));
180 assertEquals(42, CriticalSignatures.nativeDDIFII(1.0, 2.0, 3, 4.0f, 5, 6));
181 assertEquals(42, CriticalSignatures.nativeFullArgs(
182 // Generated by script (then modified to close argument list):
183 // for i in {0..84}; \
184 // do echo " 0xf00000000L + $((i*3))L,"; \
185 // echo " $((i*3+2)),"; \
186 // done
187 0xf00000000L + 0L,
188 2,
189 0xf00000000L + 3L,
190 5,
191 0xf00000000L + 6L,
192 8,
193 0xf00000000L + 9L,
194 11,
195 0xf00000000L + 12L,
196 14,
197 0xf00000000L + 15L,
198 17,
199 0xf00000000L + 18L,
200 20,
201 0xf00000000L + 21L,
202 23,
203 0xf00000000L + 24L,
204 26,
205 0xf00000000L + 27L,
206 29,
207 0xf00000000L + 30L,
208 32,
209 0xf00000000L + 33L,
210 35,
211 0xf00000000L + 36L,
212 38,
213 0xf00000000L + 39L,
214 41,
215 0xf00000000L + 42L,
216 44,
217 0xf00000000L + 45L,
218 47,
219 0xf00000000L + 48L,
220 50,
221 0xf00000000L + 51L,
222 53,
223 0xf00000000L + 54L,
224 56,
225 0xf00000000L + 57L,
226 59,
227 0xf00000000L + 60L,
228 62,
229 0xf00000000L + 63L,
230 65,
231 0xf00000000L + 66L,
232 68,
233 0xf00000000L + 69L,
234 71,
235 0xf00000000L + 72L,
236 74,
237 0xf00000000L + 75L,
238 77,
239 0xf00000000L + 78L,
240 80,
241 0xf00000000L + 81L,
242 83,
243 0xf00000000L + 84L,
244 86,
245 0xf00000000L + 87L,
246 89,
247 0xf00000000L + 90L,
248 92,
249 0xf00000000L + 93L,
250 95,
251 0xf00000000L + 96L,
252 98,
253 0xf00000000L + 99L,
254 101,
255 0xf00000000L + 102L,
256 104,
257 0xf00000000L + 105L,
258 107,
259 0xf00000000L + 108L,
260 110,
261 0xf00000000L + 111L,
262 113,
263 0xf00000000L + 114L,
264 116,
265 0xf00000000L + 117L,
266 119,
267 0xf00000000L + 120L,
268 122,
269 0xf00000000L + 123L,
270 125,
271 0xf00000000L + 126L,
272 128,
273 0xf00000000L + 129L,
274 131,
275 0xf00000000L + 132L,
276 134,
277 0xf00000000L + 135L,
278 137,
279 0xf00000000L + 138L,
280 140,
281 0xf00000000L + 141L,
282 143,
283 0xf00000000L + 144L,
284 146,
285 0xf00000000L + 147L,
286 149,
287 0xf00000000L + 150L,
288 152,
289 0xf00000000L + 153L,
290 155,
291 0xf00000000L + 156L,
292 158,
293 0xf00000000L + 159L,
294 161,
295 0xf00000000L + 162L,
296 164,
297 0xf00000000L + 165L,
298 167,
299 0xf00000000L + 168L,
300 170,
301 0xf00000000L + 171L,
302 173,
303 0xf00000000L + 174L,
304 176,
305 0xf00000000L + 177L,
306 179,
307 0xf00000000L + 180L,
308 182,
309 0xf00000000L + 183L,
310 185,
311 0xf00000000L + 186L,
312 188,
313 0xf00000000L + 189L,
314 191,
315 0xf00000000L + 192L,
316 194,
317 0xf00000000L + 195L,
318 197,
319 0xf00000000L + 198L,
320 200,
321 0xf00000000L + 201L,
322 203,
323 0xf00000000L + 204L,
324 206,
325 0xf00000000L + 207L,
326 209,
327 0xf00000000L + 210L,
328 212,
329 0xf00000000L + 213L,
330 215,
331 0xf00000000L + 216L,
332 218,
333 0xf00000000L + 219L,
334 221,
335 0xf00000000L + 222L,
336 224,
337 0xf00000000L + 225L,
338 227,
339 0xf00000000L + 228L,
340 230,
341 0xf00000000L + 231L,
342 233,
343 0xf00000000L + 234L,
344 236,
345 0xf00000000L + 237L,
346 239,
347 0xf00000000L + 240L,
348 242,
349 0xf00000000L + 243L,
350 245,
351 0xf00000000L + 246L,
352 248,
353 0xf00000000L + 249L,
354 251,
355 0xf00000000L + 252L,
356 254));
357 }
358
Vladimir Marko7dac8642019-11-06 17:09:30 +0000359 static void assertEquals(int expected, int actual) {
360 if (expected != actual) {
361 throw new AssertionError("Expected " + expected + " got " + actual);
362 }
363 }
364
Vladimir Marko7dac8642019-11-06 17:09:30 +0000365 public static native void makeVisiblyInitialized();
366}
367
368class Test {
Vladimir Markofa458ac2020-02-12 14:08:07 +0000369 public static native int nativeMethodVoid();
370
Vladimir Marko7dac8642019-11-06 17:09:30 +0000371 public static native int nativeMethod(int i);
372
373 public static native int nativeMethodWithManyParameters(
374 int i1, long l1, float f1, double d1,
375 int i2, long l2, float f2, double d2,
376 int i3, long l3, float f3, double d3,
377 int i4, long l4, float f4, double d4,
378 int i5, long l5, float f5, double d5,
379 int i6, long l6, float f6, double d6,
380 int i7, long l7, float f7, double d7,
381 int i8, long l8, float f8, double d8);
382}
383
384class TestFast {
385 @FastNative
Vladimir Markofa458ac2020-02-12 14:08:07 +0000386 public static native int nativeMethodVoid();
387
388 @FastNative
Vladimir Marko7dac8642019-11-06 17:09:30 +0000389 public static native int nativeMethod(int i);
390
391 @FastNative
392 public static native int nativeMethodWithManyParameters(
393 int i1, long l1, float f1, double d1,
394 int i2, long l2, float f2, double d2,
395 int i3, long l3, float f3, double d3,
396 int i4, long l4, float f4, double d4,
397 int i5, long l5, float f5, double d5,
398 int i6, long l6, float f6, double d6,
399 int i7, long l7, float f7, double d7,
400 int i8, long l8, float f8, double d8);
401}
402
403class TestCritical {
404 @CriticalNative
Vladimir Markofa458ac2020-02-12 14:08:07 +0000405 public static native int nativeMethodVoid();
406
407 @CriticalNative
Vladimir Marko7dac8642019-11-06 17:09:30 +0000408 public static native int nativeMethod(int i);
409
410 @CriticalNative
411 public static native int nativeMethodWithManyParameters(
412 int i1, long l1, float f1, double d1,
413 int i2, long l2, float f2, double d2,
414 int i3, long l3, float f3, double d3,
415 int i4, long l4, float f4, double d4,
416 int i5, long l5, float f5, double d5,
417 int i6, long l6, float f6, double d6,
418 int i7, long l7, float f7, double d7,
419 int i8, long l8, float f8, double d8);
420}
421
422class TestMissing {
Vladimir Markofa458ac2020-02-12 14:08:07 +0000423 public static native int nativeMethodVoid();
424
Vladimir Marko7dac8642019-11-06 17:09:30 +0000425 public static native int nativeMethod(int i);
426
427 public static native int nativeMethodWithManyParameters(
428 int i1, long l1, float f1, double d1,
429 int i2, long l2, float f2, double d2,
430 int i3, long l3, float f3, double d3,
431 int i4, long l4, float f4, double d4,
432 int i5, long l5, float f5, double d5,
433 int i6, long l6, float f6, double d6,
434 int i7, long l7, float f7, double d7,
435 int i8, long l8, float f8, double d8);
436}
437
438class TestMissingFast {
439 @FastNative
Vladimir Markofa458ac2020-02-12 14:08:07 +0000440 public static native int nativeMethodVoid();
441
442 @FastNative
Vladimir Marko7dac8642019-11-06 17:09:30 +0000443 public static native int nativeMethod(int i);
444
445 @FastNative
446 public static native int nativeMethodWithManyParameters(
447 int i1, long l1, float f1, double d1,
448 int i2, long l2, float f2, double d2,
449 int i3, long l3, float f3, double d3,
450 int i4, long l4, float f4, double d4,
451 int i5, long l5, float f5, double d5,
452 int i6, long l6, float f6, double d6,
453 int i7, long l7, float f7, double d7,
454 int i8, long l8, float f8, double d8);
455}
456
457class TestMissingCritical {
458 @CriticalNative
Vladimir Markofa458ac2020-02-12 14:08:07 +0000459 public static native int nativeMethodVoid();
460
461 @CriticalNative
Vladimir Marko7dac8642019-11-06 17:09:30 +0000462 public static native int nativeMethod(int i);
463
464 @CriticalNative
465 public static native int nativeMethodWithManyParameters(
466 int i1, long l1, float f1, double d1,
467 int i2, long l2, float f2, double d2,
468 int i3, long l3, float f3, double d3,
469 int i4, long l4, float f4, double d4,
470 int i5, long l5, float f5, double d5,
471 int i6, long l6, float f6, double d6,
472 int i7, long l7, float f7, double d7,
473 int i8, long l8, float f8, double d8);
474}
Vladimir Marko03008222020-03-06 14:04:21 +0000475
476class CriticalSignatures {
477 // The following signatures exercise ARM argument moving and serve
478 // as an example of the optimizations performed by the assembler.
479 // Moving arguments is a lot simpler for other architectures.
480
481 // JNI compiler does not emit the CFG, so we cannot CHECK the "dissassembly (after)".
482
483 // vstm sp, {d0-d2} # f1, f2, f3, f4, d -- store floats as D regs together with double
484 // mov r4, r0 # hidden arg
485 // mov r0, r1 # i
486 // # l stays in r2-r3
487 @CriticalNative
488 public static native int nativeILFFFFD(
489 int i, long l, float f1, float f2, float f3, float f4, double d);
490
491 // vstm sp, {s1-s3} # f2, f3, f4 -- store floats up to alignment gap
492 // vstr d2, [sp, #16] # d
493 // mov r4, r0 # hidden arg
494 // mov r0, r2 # low(l)
495 // mov r1, r3 # high(l)
496 // ldr r2, [sp, #...] # i
497 // vmov r3, s0 # f1
498 @CriticalNative
499 public static native int nativeLIFFFFD(
500 long l, int i, float f1, float f2, float f3, float f4, double d);
501
502 // ldr ip, [sp, #...] # i
503 // str ip, [sp] # i
504 // add ip, sp, #4 # Spilling multiple floats at an offset from SP
505 // vstm ip, {s1-s5} # f2, f3, f4, d
506 // mov r4, r0 # hidden arg
507 // vmov r0, s0 # f1
508 // # l stays in r2-r3
509 @CriticalNative
510 public static native int nativeFLIFFFD(
511 float f1, long l, int i, float f2, float f3, float f4, double d);
512
513 // stm sp, {r1,r2,r3} # i1, i2, i3 -- store ints together
514 // ldrd r1, ip, [sp, #...] # i4, i5
515 // strd r1, ip, [sp, #12] # i4, i5
516 // ldr ip, [sp, #72] # i6
517 // str ip, [sp, #20] # i6
518 // mov r4, r0 # hidden arg
519 // vmov r0, r1, d0 # d1
520 // vmov r2, r3, d1 # d2
521 @CriticalNative
522 public static native int nativeDDIIIIII(
523 double d1, double d2, int i1, int i2, int i3, int i4, int i5, int i6);
524
525 // str r1, [sp] # i1 -- cannot store with l due to alignment gap
526 // strd r2, r3, [sp, #8] # l
527 // ldrd r1, ip, [sp, #...] # i2, i3
528 // strd r1, ip, [sp, #16] # i2, i3
529 // ldr ip, [sp, #...] # i4
530 // str ip, [sp, #24] # i4
531 // mov r4, r0 # hidden arg
532 // vmov r0, r1, d0 # d
533 // vmov r2, r3, d1 # f1, f2 -- move both floats together as double
534 @CriticalNative
535 public static native int nativeDFFILIII(
536 double d, float f1, float f2, int i1, long l, int i2, int i3, int i4);
537
538 // vstr s4, [sp] # f
539 // add ip, sp, #4 # Spilling multiple core registers at an offset from SP
540 // stm ip, {r1,r2,r3} # i1, l -- store int together with long
541 // ldrd r1, ip, [sp, #...] # i2, i3
542 // strd r1, ip, [sp, #16] # i2, i3
543 // ldr ip, [sp, #...] # i4
544 // str ip, [sp, #24] # i4
545 // mov r4, r0 # hidden arg
546 // vmov r0, r1, d0 # d1
547 // vmov r2, r3, d1 # d2
548 @CriticalNative
549 public static native int nativeDDFILIII(
550 double d1, double d2, float f, int i1, long l, int i2, int i3, int i4);
551
552 // str r1, [sp] # i1
553 // vstr s4, [sp, #4] # f
554 // strd r2, r3, [sp, #8] # i2, i3 -- store ints together with STRD
555 // mov r4, r0 # hidden arg
556 // vmov r0, r1, d0 # d1
557 // vmov r2, r3, d1 # d2
558 @CriticalNative
559 public static native int nativeDDIFII(
560 double d1, double d2, int i1, float f, int i2, int i3);
561
562 // ...
563 // ldr ip, [sp, #2112] # int
564 // str ip, [sp, #1000] # int
565 // add r1, sp, #2048 # Prepare to use LDRD for loading long from a large offset
566 // ldrd r1, ip, [r1, #68] # long
567 // strd r1, ip, [sp, #1008] # long
568 // ldr ip, [sp, #2124] # int
569 // str ip, [sp, #1016] # int
570 // ldr ip, [sp, #2128] # low(long) -- copy the next long as two words because the offset
571 // str ip, [sp, #1024] # low(long) -- is too large for STRD and we only use 2 temps (r1, ip)
572 // ldr ip, [sp, #2132] # high(long)
573 // str ip, [sp, #1028] # high(long)
574 // ...
575 @CriticalNative
576 public static native int nativeFullArgs(
577 // Note: Numbered by dalvik registers, 0-254 (max 255 regs for invoke-*-range)
578 //
579 // Generated by script (then modified to close the argument list):
580 // for i in {0..84}; do echo " long l$((i*3)),"; echo " int i$(($i*3+2)),"; done
581 long l0,
582 int i2,
583 long l3,
584 int i5,
585 long l6,
586 int i8,
587 long l9,
588 int i11,
589 long l12,
590 int i14,
591 long l15,
592 int i17,
593 long l18,
594 int i20,
595 long l21,
596 int i23,
597 long l24,
598 int i26,
599 long l27,
600 int i29,
601 long l30,
602 int i32,
603 long l33,
604 int i35,
605 long l36,
606 int i38,
607 long l39,
608 int i41,
609 long l42,
610 int i44,
611 long l45,
612 int i47,
613 long l48,
614 int i50,
615 long l51,
616 int i53,
617 long l54,
618 int i56,
619 long l57,
620 int i59,
621 long l60,
622 int i62,
623 long l63,
624 int i65,
625 long l66,
626 int i68,
627 long l69,
628 int i71,
629 long l72,
630 int i74,
631 long l75,
632 int i77,
633 long l78,
634 int i80,
635 long l81,
636 int i83,
637 long l84,
638 int i86,
639 long l87,
640 int i89,
641 long l90,
642 int i92,
643 long l93,
644 int i95,
645 long l96,
646 int i98,
647 long l99,
648 int i101,
649 long l102,
650 int i104,
651 long l105,
652 int i107,
653 long l108,
654 int i110,
655 long l111,
656 int i113,
657 long l114,
658 int i116,
659 long l117,
660 int i119,
661 long l120,
662 int i122,
663 long l123,
664 int i125,
665 long l126,
666 int i128,
667 long l129,
668 int i131,
669 long l132,
670 int i134,
671 long l135,
672 int i137,
673 long l138,
674 int i140,
675 long l141,
676 int i143,
677 long l144,
678 int i146,
679 long l147,
680 int i149,
681 long l150,
682 int i152,
683 long l153,
684 int i155,
685 long l156,
686 int i158,
687 long l159,
688 int i161,
689 long l162,
690 int i164,
691 long l165,
692 int i167,
693 long l168,
694 int i170,
695 long l171,
696 int i173,
697 long l174,
698 int i176,
699 long l177,
700 int i179,
701 long l180,
702 int i182,
703 long l183,
704 int i185,
705 long l186,
706 int i188,
707 long l189,
708 int i191,
709 long l192,
710 int i194,
711 long l195,
712 int i197,
713 long l198,
714 int i200,
715 long l201,
716 int i203,
717 long l204,
718 int i206,
719 long l207,
720 int i209,
721 long l210,
722 int i212,
723 long l213,
724 int i215,
725 long l216,
726 int i218,
727 long l219,
728 int i221,
729 long l222,
730 int i224,
731 long l225,
732 int i227,
733 long l228,
734 int i230,
735 long l231,
736 int i233,
737 long l234,
738 int i236,
739 long l237,
740 int i239,
741 long l240,
742 int i242,
743 long l243,
744 int i245,
745 long l246,
746 int i248,
747 long l249,
748 int i251,
749 long l252,
750 int i254);
751}