blob: 0669deb4b335b038ff26483457d949b09067da47 [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
17#include "jni.h"
18
19namespace art {
20
21static inline bool VerifyManyParameters(
22 jint i1, jlong l1, jfloat f1, jdouble d1,
23 jint i2, jlong l2, jfloat f2, jdouble d2,
24 jint i3, jlong l3, jfloat f3, jdouble d3,
25 jint i4, jlong l4, jfloat f4, jdouble d4,
26 jint i5, jlong l5, jfloat f5, jdouble d5,
27 jint i6, jlong l6, jfloat f6, jdouble d6,
28 jint i7, jlong l7, jfloat f7, jdouble d7,
29 jint i8, jlong l8, jfloat f8, jdouble d8) {
30 return
31 (i1 == 11) && (l1 == 12) && (f1 == 13.0) && (d1 == 14.0) &&
32 (i2 == 21) && (l2 == 22) && (f2 == 23.0) && (d2 == 24.0) &&
33 (i3 == 31) && (l3 == 32) && (f3 == 33.0) && (d3 == 34.0) &&
34 (i4 == 41) && (l4 == 42) && (f4 == 43.0) && (d4 == 44.0) &&
35 (i5 == 51) && (l5 == 52) && (f5 == 53.0) && (d5 == 54.0) &&
36 (i6 == 61) && (l6 == 62) && (f6 == 63.0) && (d6 == 64.0) &&
37 (i7 == 71) && (l7 == 72) && (f7 == 73.0) && (d7 == 74.0) &&
38 (i8 == 81) && (l8 == 82) && (f8 == 83.0) && (d8 == 84.0);
39}
40
Vladimir Markofa458ac2020-02-12 14:08:07 +000041extern "C" JNIEXPORT jint JNICALL Java_Test_nativeMethodVoid(JNIEnv*, jclass) {
42 return 42;
43}
44
Vladimir Marko7dac8642019-11-06 17:09:30 +000045extern "C" JNIEXPORT jint JNICALL Java_Test_nativeMethod(JNIEnv*, jclass, jint i) {
46 return i;
47}
48
49extern "C" JNIEXPORT jint JNICALL Java_Test_nativeMethodWithManyParameters(
50 JNIEnv*, jclass,
51 jint i1, jlong l1, jfloat f1, jdouble d1,
52 jint i2, jlong l2, jfloat f2, jdouble d2,
53 jint i3, jlong l3, jfloat f3, jdouble d3,
54 jint i4, jlong l4, jfloat f4, jdouble d4,
55 jint i5, jlong l5, jfloat f5, jdouble d5,
56 jint i6, jlong l6, jfloat f6, jdouble d6,
57 jint i7, jlong l7, jfloat f7, jdouble d7,
58 jint i8, jlong l8, jfloat f8, jdouble d8) {
59 bool ok = VerifyManyParameters(
60 i1, l1, f1, d1,
61 i2, l2, f2, d2,
62 i3, l3, f3, d3,
63 i4, l4, f4, d4,
64 i5, l5, f5, d5,
65 i6, l6, f6, d6,
66 i7, l7, f7, d7,
67 i8, l8, f8, d8);
68 return ok ? 42 : -1;
69}
70
Vladimir Markofa458ac2020-02-12 14:08:07 +000071extern "C" JNIEXPORT jint JNICALL Java_TestFast_nativeMethodVoid(JNIEnv*, jclass) {
72 return 42;
73}
74
Vladimir Marko7dac8642019-11-06 17:09:30 +000075extern "C" JNIEXPORT jint JNICALL Java_TestFast_nativeMethod(JNIEnv*, jclass, jint i) {
76 return i;
77}
78
79extern "C" JNIEXPORT jint JNICALL Java_TestFast_nativeMethodWithManyParameters(
80 JNIEnv*, jclass,
81 jint i1, jlong l1, jfloat f1, jdouble d1,
82 jint i2, jlong l2, jfloat f2, jdouble d2,
83 jint i3, jlong l3, jfloat f3, jdouble d3,
84 jint i4, jlong l4, jfloat f4, jdouble d4,
85 jint i5, jlong l5, jfloat f5, jdouble d5,
86 jint i6, jlong l6, jfloat f6, jdouble d6,
87 jint i7, jlong l7, jfloat f7, jdouble d7,
88 jint i8, jlong l8, jfloat f8, jdouble d8) {
89 bool ok = VerifyManyParameters(
90 i1, l1, f1, d1,
91 i2, l2, f2, d2,
92 i3, l3, f3, d3,
93 i4, l4, f4, d4,
94 i5, l5, f5, d5,
95 i6, l6, f6, d6,
96 i7, l7, f7, d7,
97 i8, l8, f8, d8);
98 return ok ? 42 : -1;
99}
100
Vladimir Markofa458ac2020-02-12 14:08:07 +0000101extern "C" JNIEXPORT jint JNICALL Java_TestCritical_nativeMethodVoid() {
102 return 42;
103}
104
Vladimir Marko7dac8642019-11-06 17:09:30 +0000105extern "C" JNIEXPORT jint JNICALL Java_TestCritical_nativeMethod(jint i) {
106 return i;
107}
108
109extern "C" JNIEXPORT jint JNICALL Java_TestCritical_nativeMethodWithManyParameters(
110 jint i1, jlong l1, jfloat f1, jdouble d1,
111 jint i2, jlong l2, jfloat f2, jdouble d2,
112 jint i3, jlong l3, jfloat f3, jdouble d3,
113 jint i4, jlong l4, jfloat f4, jdouble d4,
114 jint i5, jlong l5, jfloat f5, jdouble d5,
115 jint i6, jlong l6, jfloat f6, jdouble d6,
116 jint i7, jlong l7, jfloat f7, jdouble d7,
117 jint i8, jlong l8, jfloat f8, jdouble d8) {
118 bool ok = VerifyManyParameters(
119 i1, l1, f1, d1,
120 i2, l2, f2, d2,
121 i3, l3, f3, d3,
122 i4, l4, f4, d4,
123 i5, l5, f5, d5,
124 i6, l6, f6, d6,
125 i7, l7, f7, d7,
126 i8, l8, f8, d8);
127 return ok ? 42 : -1;
128}
129
Vladimir Marko03008222020-03-06 14:04:21 +0000130extern "C" JNIEXPORT jint JNICALL Java_CriticalSignatures_nativeILFFFFD(
131 jint i,
132 jlong l,
133 jfloat f1,
134 jfloat f2,
135 jfloat f3,
136 jfloat f4,
137 jdouble d) {
138 if (i != 1) return -1;
139 if (l != INT64_C(0xf00000002)) return -2;
140 if (f1 != 3.0f) return -3;
141 if (f2 != 4.0f) return -4;
142 if (f3 != 5.0f) return -5;
143 if (f4 != 6.0f) return -6;
144 if (d != 7.0) return -7;
145 return 42;
146}
147
148extern "C" JNIEXPORT jint JNICALL Java_CriticalSignatures_nativeLIFFFFD(
149 jlong l,
150 jint i,
151 jfloat f1,
152 jfloat f2,
153 jfloat f3,
154 jfloat f4,
155 jdouble d) {
156 if (l != INT64_C(0xf00000007)) return -1;
157 if (i != 6) return -2;
158 if (f1 != 5.0f) return -3;
159 if (f2 != 4.0f) return -4;
160 if (f3 != 3.0f) return -5;
161 if (f4 != 2.0f) return -6;
162 if (d != 1.0) return -7;
163 return 42;
164}
165
166extern "C" JNIEXPORT jint JNICALL Java_CriticalSignatures_nativeFLIFFFD(
167 jfloat f1,
168 jlong l,
169 jint i,
170 jfloat f2,
171 jfloat f3,
172 jfloat f4,
173 jdouble d) {
174 if (f1 != 1.0f) return -3;
175 if (l != INT64_C(0xf00000002)) return -1;
176 if (i != 3) return -2;
177 if (f2 != 4.0f) return -4;
178 if (f3 != 5.0f) return -5;
179 if (f4 != 6.0f) return -6;
180 if (d != 7.0) return -7;
181 return 42;
182}
183
184extern "C" JNIEXPORT jint JNICALL Java_CriticalSignatures_nativeDDIIIIII(
185 jdouble d1,
186 jdouble d2,
187 jint i1,
188 jint i2,
189 jint i3,
190 jint i4,
191 jint i5,
192 jint i6) {
193 if (d1 != 8.0) return -1;
194 if (d2 != 7.0) return -2;
195 if (i1 != 6) return -3;
196 if (i2 != 5) return -4;
197 if (i3 != 4) return -5;
198 if (i4 != 3) return -6;
199 if (i5 != 2) return -7;
200 if (i6 != 1) return -8;
201 return 42;
202}
203
204extern "C" JNIEXPORT jint JNICALL Java_CriticalSignatures_nativeDFFILIII(
205 jdouble d,
206 jfloat f1,
207 jfloat f2,
208 jint i1,
209 jlong l,
210 jint i2,
211 jint i3,
212 jint i4) {
213 if (d != 1.0) return -1;
214 if (f1 != 2.0f) return -2;
215 if (f2 != 3.0f) return -3;
216 if (i1 != 4) return -4;
217 if (l != INT64_C(0xf00000005)) return -5;
218 if (i2 != 6) return -6;
219 if (i3 != 7) return -7;
220 if (i4 != 8) return -8;
221 return 42;
222}
223
224extern "C" JNIEXPORT jint JNICALL Java_CriticalSignatures_nativeDDFILIII(
225 jdouble d1,
226 jdouble d2,
227 jfloat f,
228 jint i1,
229 jlong l,
230 jint i2,
231 jint i3,
232 jint i4) {
233 if (d1 != 8.0) return -1;
234 if (d2 != 7.0) return -2;
235 if (f != 6.0f) return -3;
236 if (i1 != 5) return -4;
237 if (l != INT64_C(0xf00000004)) return -5;
238 if (i2 != 3) return -6;
239 if (i3 != 2) return -7;
240 if (i4 != 1) return -8;
241 return 42;
242}
243
244extern "C" JNIEXPORT jint JNICALL Java_CriticalSignatures_nativeDDIFII(
245 jdouble d1,
246 jdouble d2,
247 jint i1,
248 jfloat f,
249 jint i2,
250 jint i3) {
251 if (d1 != 1.0) return -1;
252 if (d2 != 2.0) return -2;
253 if (i1 != 3) return -3;
254 if (f != 4.0f) return -4;
255 if (i2 != 5) return -5;
256 if (i3 != 6) return -6;
257 return 42;
258}
259
260extern "C" JNIEXPORT jint JNICALL Java_CriticalSignatures_nativeFullArgs(
261 // Generated by script (then modified to close argument list):
262 // for i in {0..84}; do echo " jlong l$((i*3)),"; echo " jint i$((i*3+2)),"; done
263 jlong l0,
264 jint i2,
265 jlong l3,
266 jint i5,
267 jlong l6,
268 jint i8,
269 jlong l9,
270 jint i11,
271 jlong l12,
272 jint i14,
273 jlong l15,
274 jint i17,
275 jlong l18,
276 jint i20,
277 jlong l21,
278 jint i23,
279 jlong l24,
280 jint i26,
281 jlong l27,
282 jint i29,
283 jlong l30,
284 jint i32,
285 jlong l33,
286 jint i35,
287 jlong l36,
288 jint i38,
289 jlong l39,
290 jint i41,
291 jlong l42,
292 jint i44,
293 jlong l45,
294 jint i47,
295 jlong l48,
296 jint i50,
297 jlong l51,
298 jint i53,
299 jlong l54,
300 jint i56,
301 jlong l57,
302 jint i59,
303 jlong l60,
304 jint i62,
305 jlong l63,
306 jint i65,
307 jlong l66,
308 jint i68,
309 jlong l69,
310 jint i71,
311 jlong l72,
312 jint i74,
313 jlong l75,
314 jint i77,
315 jlong l78,
316 jint i80,
317 jlong l81,
318 jint i83,
319 jlong l84,
320 jint i86,
321 jlong l87,
322 jint i89,
323 jlong l90,
324 jint i92,
325 jlong l93,
326 jint i95,
327 jlong l96,
328 jint i98,
329 jlong l99,
330 jint i101,
331 jlong l102,
332 jint i104,
333 jlong l105,
334 jint i107,
335 jlong l108,
336 jint i110,
337 jlong l111,
338 jint i113,
339 jlong l114,
340 jint i116,
341 jlong l117,
342 jint i119,
343 jlong l120,
344 jint i122,
345 jlong l123,
346 jint i125,
347 jlong l126,
348 jint i128,
349 jlong l129,
350 jint i131,
351 jlong l132,
352 jint i134,
353 jlong l135,
354 jint i137,
355 jlong l138,
356 jint i140,
357 jlong l141,
358 jint i143,
359 jlong l144,
360 jint i146,
361 jlong l147,
362 jint i149,
363 jlong l150,
364 jint i152,
365 jlong l153,
366 jint i155,
367 jlong l156,
368 jint i158,
369 jlong l159,
370 jint i161,
371 jlong l162,
372 jint i164,
373 jlong l165,
374 jint i167,
375 jlong l168,
376 jint i170,
377 jlong l171,
378 jint i173,
379 jlong l174,
380 jint i176,
381 jlong l177,
382 jint i179,
383 jlong l180,
384 jint i182,
385 jlong l183,
386 jint i185,
387 jlong l186,
388 jint i188,
389 jlong l189,
390 jint i191,
391 jlong l192,
392 jint i194,
393 jlong l195,
394 jint i197,
395 jlong l198,
396 jint i200,
397 jlong l201,
398 jint i203,
399 jlong l204,
400 jint i206,
401 jlong l207,
402 jint i209,
403 jlong l210,
404 jint i212,
405 jlong l213,
406 jint i215,
407 jlong l216,
408 jint i218,
409 jlong l219,
410 jint i221,
411 jlong l222,
412 jint i224,
413 jlong l225,
414 jint i227,
415 jlong l228,
416 jint i230,
417 jlong l231,
418 jint i233,
419 jlong l234,
420 jint i236,
421 jlong l237,
422 jint i239,
423 jlong l240,
424 jint i242,
425 jlong l243,
426 jint i245,
427 jlong l246,
428 jint i248,
429 jlong l249,
430 jint i251,
431 jlong l252,
432 jint i254) {
433 jlong l = INT64_C(0xf00000000);
434 // Generated by script (then modified to close argument list):
435 // for i in {0..84}; do \
436 // echo " if (l$((i*3)) != l + $(($i*3))) return -$(($i*3));"; \
437 // echo " if (i$(($i*3+2)) != $(($i*3+2))) return -$(($i*3+2));"; \
438 // done
439 if (l0 != l + 0) return -0;
440 if (i2 != 2) return -2;
441 if (l3 != l + 3) return -3;
442 if (i5 != 5) return -5;
443 if (l6 != l + 6) return -6;
444 if (i8 != 8) return -8;
445 if (l9 != l + 9) return -9;
446 if (i11 != 11) return -11;
447 if (l12 != l + 12) return -12;
448 if (i14 != 14) return -14;
449 if (l15 != l + 15) return -15;
450 if (i17 != 17) return -17;
451 if (l18 != l + 18) return -18;
452 if (i20 != 20) return -20;
453 if (l21 != l + 21) return -21;
454 if (i23 != 23) return -23;
455 if (l24 != l + 24) return -24;
456 if (i26 != 26) return -26;
457 if (l27 != l + 27) return -27;
458 if (i29 != 29) return -29;
459 if (l30 != l + 30) return -30;
460 if (i32 != 32) return -32;
461 if (l33 != l + 33) return -33;
462 if (i35 != 35) return -35;
463 if (l36 != l + 36) return -36;
464 if (i38 != 38) return -38;
465 if (l39 != l + 39) return -39;
466 if (i41 != 41) return -41;
467 if (l42 != l + 42) return -42;
468 if (i44 != 44) return -44;
469 if (l45 != l + 45) return -45;
470 if (i47 != 47) return -47;
471 if (l48 != l + 48) return -48;
472 if (i50 != 50) return -50;
473 if (l51 != l + 51) return -51;
474 if (i53 != 53) return -53;
475 if (l54 != l + 54) return -54;
476 if (i56 != 56) return -56;
477 if (l57 != l + 57) return -57;
478 if (i59 != 59) return -59;
479 if (l60 != l + 60) return -60;
480 if (i62 != 62) return -62;
481 if (l63 != l + 63) return -63;
482 if (i65 != 65) return -65;
483 if (l66 != l + 66) return -66;
484 if (i68 != 68) return -68;
485 if (l69 != l + 69) return -69;
486 if (i71 != 71) return -71;
487 if (l72 != l + 72) return -72;
488 if (i74 != 74) return -74;
489 if (l75 != l + 75) return -75;
490 if (i77 != 77) return -77;
491 if (l78 != l + 78) return -78;
492 if (i80 != 80) return -80;
493 if (l81 != l + 81) return -81;
494 if (i83 != 83) return -83;
495 if (l84 != l + 84) return -84;
496 if (i86 != 86) return -86;
497 if (l87 != l + 87) return -87;
498 if (i89 != 89) return -89;
499 if (l90 != l + 90) return -90;
500 if (i92 != 92) return -92;
501 if (l93 != l + 93) return -93;
502 if (i95 != 95) return -95;
503 if (l96 != l + 96) return -96;
504 if (i98 != 98) return -98;
505 if (l99 != l + 99) return -99;
506 if (i101 != 101) return -101;
507 if (l102 != l + 102) return -102;
508 if (i104 != 104) return -104;
509 if (l105 != l + 105) return -105;
510 if (i107 != 107) return -107;
511 if (l108 != l + 108) return -108;
512 if (i110 != 110) return -110;
513 if (l111 != l + 111) return -111;
514 if (i113 != 113) return -113;
515 if (l114 != l + 114) return -114;
516 if (i116 != 116) return -116;
517 if (l117 != l + 117) return -117;
518 if (i119 != 119) return -119;
519 if (l120 != l + 120) return -120;
520 if (i122 != 122) return -122;
521 if (l123 != l + 123) return -123;
522 if (i125 != 125) return -125;
523 if (l126 != l + 126) return -126;
524 if (i128 != 128) return -128;
525 if (l129 != l + 129) return -129;
526 if (i131 != 131) return -131;
527 if (l132 != l + 132) return -132;
528 if (i134 != 134) return -134;
529 if (l135 != l + 135) return -135;
530 if (i137 != 137) return -137;
531 if (l138 != l + 138) return -138;
532 if (i140 != 140) return -140;
533 if (l141 != l + 141) return -141;
534 if (i143 != 143) return -143;
535 if (l144 != l + 144) return -144;
536 if (i146 != 146) return -146;
537 if (l147 != l + 147) return -147;
538 if (i149 != 149) return -149;
539 if (l150 != l + 150) return -150;
540 if (i152 != 152) return -152;
541 if (l153 != l + 153) return -153;
542 if (i155 != 155) return -155;
543 if (l156 != l + 156) return -156;
544 if (i158 != 158) return -158;
545 if (l159 != l + 159) return -159;
546 if (i161 != 161) return -161;
547 if (l162 != l + 162) return -162;
548 if (i164 != 164) return -164;
549 if (l165 != l + 165) return -165;
550 if (i167 != 167) return -167;
551 if (l168 != l + 168) return -168;
552 if (i170 != 170) return -170;
553 if (l171 != l + 171) return -171;
554 if (i173 != 173) return -173;
555 if (l174 != l + 174) return -174;
556 if (i176 != 176) return -176;
557 if (l177 != l + 177) return -177;
558 if (i179 != 179) return -179;
559 if (l180 != l + 180) return -180;
560 if (i182 != 182) return -182;
561 if (l183 != l + 183) return -183;
562 if (i185 != 185) return -185;
563 if (l186 != l + 186) return -186;
564 if (i188 != 188) return -188;
565 if (l189 != l + 189) return -189;
566 if (i191 != 191) return -191;
567 if (l192 != l + 192) return -192;
568 if (i194 != 194) return -194;
569 if (l195 != l + 195) return -195;
570 if (i197 != 197) return -197;
571 if (l198 != l + 198) return -198;
572 if (i200 != 200) return -200;
573 if (l201 != l + 201) return -201;
574 if (i203 != 203) return -203;
575 if (l204 != l + 204) return -204;
576 if (i206 != 206) return -206;
577 if (l207 != l + 207) return -207;
578 if (i209 != 209) return -209;
579 if (l210 != l + 210) return -210;
580 if (i212 != 212) return -212;
581 if (l213 != l + 213) return -213;
582 if (i215 != 215) return -215;
583 if (l216 != l + 216) return -216;
584 if (i218 != 218) return -218;
585 if (l219 != l + 219) return -219;
586 if (i221 != 221) return -221;
587 if (l222 != l + 222) return -222;
588 if (i224 != 224) return -224;
589 if (l225 != l + 225) return -225;
590 if (i227 != 227) return -227;
591 if (l228 != l + 228) return -228;
592 if (i230 != 230) return -230;
593 if (l231 != l + 231) return -231;
594 if (i233 != 233) return -233;
595 if (l234 != l + 234) return -234;
596 if (i236 != 236) return -236;
597 if (l237 != l + 237) return -237;
598 if (i239 != 239) return -239;
599 if (l240 != l + 240) return -240;
600 if (i242 != 242) return -242;
601 if (l243 != l + 243) return -243;
602 if (i245 != 245) return -245;
603 if (l246 != l + 246) return -246;
604 if (i248 != 248) return -248;
605 if (l249 != l + 249) return -249;
606 if (i251 != 251) return -251;
607 if (l252 != l + 252) return -252;
608 if (i254 != 254) return -254;
609 return 42;
610}
611
Vladimir Marko6bc480b2020-06-08 09:00:33 +0100612extern "C" JNIEXPORT jint JNICALL Java_CriticalClinitCheck_nativeMethodVoid() {
613 return 42;
614}
615
616extern "C" JNIEXPORT jint JNICALL Java_CriticalClinitCheck_nativeMethod(jint i) {
617 return i;
618}
619
620extern "C" JNIEXPORT jint JNICALL Java_CriticalClinitCheck_nativeMethodWithManyParameters(
621 jint i1, jlong l1, jfloat f1, jdouble d1,
622 jint i2, jlong l2, jfloat f2, jdouble d2,
623 jint i3, jlong l3, jfloat f3, jdouble d3,
624 jint i4, jlong l4, jfloat f4, jdouble d4,
625 jint i5, jlong l5, jfloat f5, jdouble d5,
626 jint i6, jlong l6, jfloat f6, jdouble d6,
627 jint i7, jlong l7, jfloat f7, jdouble d7,
628 jint i8, jlong l8, jfloat f8, jdouble d8) {
629 bool ok = VerifyManyParameters(
630 i1, l1, f1, d1,
631 i2, l2, f2, d2,
632 i3, l3, f3, d3,
633 i4, l4, f4, d4,
634 i5, l5, f5, d5,
635 i6, l6, f6, d6,
636 i7, l7, f7, d7,
637 i8, l8, f8, d8);
638 return ok ? 42 : -1;
639}
640
Vladimir Marko7dac8642019-11-06 17:09:30 +0000641} // namespace art