xref: /aosp_15_r20/art/test/178-app-image-native-method/src/Main.java (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
1*795d594fSAndroid Build Coastguard Worker /*
2*795d594fSAndroid Build Coastguard Worker  * Copyright 2019 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 dalvik.annotation.optimization.FastNative;
18*795d594fSAndroid Build Coastguard Worker import dalvik.annotation.optimization.CriticalNative;
19*795d594fSAndroid Build Coastguard Worker 
20*795d594fSAndroid Build Coastguard Worker // clang-format off
21*795d594fSAndroid Build Coastguard Worker 
22*795d594fSAndroid Build Coastguard Worker public class Main {
23*795d594fSAndroid Build Coastguard Worker 
main(String[] args)24*795d594fSAndroid Build Coastguard Worker   public static void main(String[] args) throws Exception {
25*795d594fSAndroid Build Coastguard Worker     System.loadLibrary(args[0]);
26*795d594fSAndroid Build Coastguard Worker 
27*795d594fSAndroid Build Coastguard Worker     // To avoid going through resolution trampoline, make test classes visibly initialized.
28*795d594fSAndroid Build Coastguard Worker     new Test();
29*795d594fSAndroid Build Coastguard Worker     new TestFast();
30*795d594fSAndroid Build Coastguard Worker     new TestCritical();
31*795d594fSAndroid Build Coastguard Worker     new TestMissing();
32*795d594fSAndroid Build Coastguard Worker     new TestMissingFast();
33*795d594fSAndroid Build Coastguard Worker     new TestMissingCritical();
34*795d594fSAndroid Build Coastguard Worker     new CriticalSignatures();
35*795d594fSAndroid Build Coastguard Worker     makeVisiblyInitialized();  // Make sure they are visibly initialized.
36*795d594fSAndroid Build Coastguard Worker 
37*795d594fSAndroid Build Coastguard Worker     $noinline$opt$test();
38*795d594fSAndroid Build Coastguard Worker     $noinline$opt$testFast();
39*795d594fSAndroid Build Coastguard Worker     $noinline$opt$testCritical();
40*795d594fSAndroid Build Coastguard Worker     $noinline$opt$testMissing();
41*795d594fSAndroid Build Coastguard Worker     $noinline$opt$testMissingFast();
42*795d594fSAndroid Build Coastguard Worker     $noinline$opt$testMissingCritical();
43*795d594fSAndroid Build Coastguard Worker     $noinline$opt$testCriticalSignatures();
44*795d594fSAndroid Build Coastguard Worker 
45*795d594fSAndroid Build Coastguard Worker     // For calls from AOT-compiled code, the first call shall use the resolution method
46*795d594fSAndroid Build Coastguard Worker     // retrieved from the .bss and the second call should find the .bss entry populated
47*795d594fSAndroid Build Coastguard Worker     // with the target method. Re-run these tests to exercise the second path.
48*795d594fSAndroid Build Coastguard Worker     $noinline$opt$test();
49*795d594fSAndroid Build Coastguard Worker     $noinline$opt$testFast();
50*795d594fSAndroid Build Coastguard Worker     $noinline$opt$testCritical();
51*795d594fSAndroid Build Coastguard Worker     $noinline$opt$testMissing();
52*795d594fSAndroid Build Coastguard Worker     $noinline$opt$testMissingFast();
53*795d594fSAndroid Build Coastguard Worker     $noinline$opt$testMissingCritical();
54*795d594fSAndroid Build Coastguard Worker     $noinline$opt$testCriticalSignatures();
55*795d594fSAndroid Build Coastguard Worker 
56*795d594fSAndroid Build Coastguard Worker     $noinline$regressionTestB181736463();
57*795d594fSAndroid Build Coastguard Worker     $noinline$regressionTestB189235039();
58*795d594fSAndroid Build Coastguard Worker 
59*795d594fSAndroid Build Coastguard Worker     new CriticalClinitCheck();
60*795d594fSAndroid Build Coastguard Worker     sTestCriticalClinitCheckOtherThread.join();
61*795d594fSAndroid Build Coastguard Worker   }
62*795d594fSAndroid Build Coastguard Worker 
$noinline$opt$test()63*795d594fSAndroid Build Coastguard Worker   static void $noinline$opt$test() {
64*795d594fSAndroid Build Coastguard Worker     System.out.println("test");
65*795d594fSAndroid Build Coastguard Worker     assertEquals(42, Test.nativeMethodVoid());
66*795d594fSAndroid Build Coastguard Worker     assertEquals(42, Test.nativeMethod(42));
67*795d594fSAndroid Build Coastguard Worker     assertEquals(42, Test.nativeMethodWithManyParameters(
68*795d594fSAndroid Build Coastguard Worker         11, 12L, 13.0f, 14.0d,
69*795d594fSAndroid Build Coastguard Worker         21, 22L, 23.0f, 24.0d,
70*795d594fSAndroid Build Coastguard Worker         31, 32L, 33.0f, 34.0d,
71*795d594fSAndroid Build Coastguard Worker         41, 42L, 43.0f, 44.0d,
72*795d594fSAndroid Build Coastguard Worker         51, 52L, 53.0f, 54.0d,
73*795d594fSAndroid Build Coastguard Worker         61, 62L, 63.0f, 64.0d,
74*795d594fSAndroid Build Coastguard Worker         71, 72L, 73.0f, 74.0d,
75*795d594fSAndroid Build Coastguard Worker         81, 82L, 83.0f, 84.0d));
76*795d594fSAndroid Build Coastguard Worker   }
77*795d594fSAndroid Build Coastguard Worker 
$noinline$opt$testFast()78*795d594fSAndroid Build Coastguard Worker   static void $noinline$opt$testFast() {
79*795d594fSAndroid Build Coastguard Worker     System.out.println("testFast");
80*795d594fSAndroid Build Coastguard Worker     assertEquals(42, TestFast.nativeMethodVoid());
81*795d594fSAndroid Build Coastguard Worker     assertEquals(42, TestFast.nativeMethod(42));
82*795d594fSAndroid Build Coastguard Worker     assertEquals(42, TestFast.nativeMethodWithManyParameters(
83*795d594fSAndroid Build Coastguard Worker         11, 12L, 13.0f, 14.0d,
84*795d594fSAndroid Build Coastguard Worker         21, 22L, 23.0f, 24.0d,
85*795d594fSAndroid Build Coastguard Worker         31, 32L, 33.0f, 34.0d,
86*795d594fSAndroid Build Coastguard Worker         41, 42L, 43.0f, 44.0d,
87*795d594fSAndroid Build Coastguard Worker         51, 52L, 53.0f, 54.0d,
88*795d594fSAndroid Build Coastguard Worker         61, 62L, 63.0f, 64.0d,
89*795d594fSAndroid Build Coastguard Worker         71, 72L, 73.0f, 74.0d,
90*795d594fSAndroid Build Coastguard Worker         81, 82L, 83.0f, 84.0d));
91*795d594fSAndroid Build Coastguard Worker   }
92*795d594fSAndroid Build Coastguard Worker 
$noinline$opt$testCritical()93*795d594fSAndroid Build Coastguard Worker   static void $noinline$opt$testCritical() {
94*795d594fSAndroid Build Coastguard Worker     System.out.println("testCritical");
95*795d594fSAndroid Build Coastguard Worker     assertEquals(42, TestCritical.nativeMethodVoid());
96*795d594fSAndroid Build Coastguard Worker     assertEquals(42, TestCritical.nativeMethod(42));
97*795d594fSAndroid Build Coastguard Worker     assertEquals(42, TestCritical.nativeMethodWithManyParameters(
98*795d594fSAndroid Build Coastguard Worker         11, 12L, 13.0f, 14.0d,
99*795d594fSAndroid Build Coastguard Worker         21, 22L, 23.0f, 24.0d,
100*795d594fSAndroid Build Coastguard Worker         31, 32L, 33.0f, 34.0d,
101*795d594fSAndroid Build Coastguard Worker         41, 42L, 43.0f, 44.0d,
102*795d594fSAndroid Build Coastguard Worker         51, 52L, 53.0f, 54.0d,
103*795d594fSAndroid Build Coastguard Worker         61, 62L, 63.0f, 64.0d,
104*795d594fSAndroid Build Coastguard Worker         71, 72L, 73.0f, 74.0d,
105*795d594fSAndroid Build Coastguard Worker         81, 82L, 83.0f, 84.0d));
106*795d594fSAndroid Build Coastguard Worker   }
107*795d594fSAndroid Build Coastguard Worker 
$noinline$opt$testMissing()108*795d594fSAndroid Build Coastguard Worker   static void $noinline$opt$testMissing() {
109*795d594fSAndroid Build Coastguard Worker     System.out.println("testMissing");
110*795d594fSAndroid Build Coastguard Worker 
111*795d594fSAndroid Build Coastguard Worker     try {
112*795d594fSAndroid Build Coastguard Worker       TestMissing.nativeMethodVoid();
113*795d594fSAndroid Build Coastguard Worker       throw new Error("UNREACHABLE");
114*795d594fSAndroid Build Coastguard Worker     } catch (LinkageError expected) {}
115*795d594fSAndroid Build Coastguard Worker 
116*795d594fSAndroid Build Coastguard Worker     try {
117*795d594fSAndroid Build Coastguard Worker       TestMissing.nativeMethod(42);
118*795d594fSAndroid Build Coastguard Worker       throw new Error("UNREACHABLE");
119*795d594fSAndroid Build Coastguard Worker     } catch (LinkageError expected) {}
120*795d594fSAndroid Build Coastguard Worker 
121*795d594fSAndroid Build Coastguard Worker     try {
122*795d594fSAndroid Build Coastguard Worker       TestMissing.nativeMethodWithManyParameters(
123*795d594fSAndroid Build Coastguard Worker           11, 12L, 13.0f, 14.0d,
124*795d594fSAndroid Build Coastguard Worker           21, 22L, 23.0f, 24.0d,
125*795d594fSAndroid Build Coastguard Worker           31, 32L, 33.0f, 34.0d,
126*795d594fSAndroid Build Coastguard Worker           41, 42L, 43.0f, 44.0d,
127*795d594fSAndroid Build Coastguard Worker           51, 52L, 53.0f, 54.0d,
128*795d594fSAndroid Build Coastguard Worker           61, 62L, 63.0f, 64.0d,
129*795d594fSAndroid Build Coastguard Worker           71, 72L, 73.0f, 74.0d,
130*795d594fSAndroid Build Coastguard Worker           81, 82L, 83.0f, 84.0d);
131*795d594fSAndroid Build Coastguard Worker       throw new Error("UNREACHABLE");
132*795d594fSAndroid Build Coastguard Worker     } catch (LinkageError expected) {}
133*795d594fSAndroid Build Coastguard Worker   }
134*795d594fSAndroid Build Coastguard Worker 
$noinline$opt$testMissingFast()135*795d594fSAndroid Build Coastguard Worker   static void $noinline$opt$testMissingFast() {
136*795d594fSAndroid Build Coastguard Worker     System.out.println("testMissingFast");
137*795d594fSAndroid Build Coastguard Worker 
138*795d594fSAndroid Build Coastguard Worker     try {
139*795d594fSAndroid Build Coastguard Worker       TestMissingFast.nativeMethodVoid();
140*795d594fSAndroid Build Coastguard Worker       throw new Error("UNREACHABLE");
141*795d594fSAndroid Build Coastguard Worker     } catch (LinkageError expected) {}
142*795d594fSAndroid Build Coastguard Worker 
143*795d594fSAndroid Build Coastguard Worker     try {
144*795d594fSAndroid Build Coastguard Worker       TestMissingFast.nativeMethod(42);
145*795d594fSAndroid Build Coastguard Worker       throw new Error("UNREACHABLE");
146*795d594fSAndroid Build Coastguard Worker     } catch (LinkageError expected) {}
147*795d594fSAndroid Build Coastguard Worker 
148*795d594fSAndroid Build Coastguard Worker     try {
149*795d594fSAndroid Build Coastguard Worker       TestMissingFast.nativeMethodWithManyParameters(
150*795d594fSAndroid Build Coastguard Worker           11, 12L, 13.0f, 14.0d,
151*795d594fSAndroid Build Coastguard Worker           21, 22L, 23.0f, 24.0d,
152*795d594fSAndroid Build Coastguard Worker           31, 32L, 33.0f, 34.0d,
153*795d594fSAndroid Build Coastguard Worker           41, 42L, 43.0f, 44.0d,
154*795d594fSAndroid Build Coastguard Worker           51, 52L, 53.0f, 54.0d,
155*795d594fSAndroid Build Coastguard Worker           61, 62L, 63.0f, 64.0d,
156*795d594fSAndroid Build Coastguard Worker           71, 72L, 73.0f, 74.0d,
157*795d594fSAndroid Build Coastguard Worker           81, 82L, 83.0f, 84.0d);
158*795d594fSAndroid Build Coastguard Worker       throw new Error("UNREACHABLE");
159*795d594fSAndroid Build Coastguard Worker     } catch (LinkageError expected) {}
160*795d594fSAndroid Build Coastguard Worker   }
161*795d594fSAndroid Build Coastguard Worker 
$noinline$opt$testMissingCritical()162*795d594fSAndroid Build Coastguard Worker   static void $noinline$opt$testMissingCritical() {
163*795d594fSAndroid Build Coastguard Worker     System.out.println("testMissingCritical");
164*795d594fSAndroid Build Coastguard Worker 
165*795d594fSAndroid Build Coastguard Worker     try {
166*795d594fSAndroid Build Coastguard Worker       TestMissingCritical.nativeMethodVoid();
167*795d594fSAndroid Build Coastguard Worker       throw new Error("UNREACHABLE");
168*795d594fSAndroid Build Coastguard Worker     } catch (LinkageError expected) {}
169*795d594fSAndroid Build Coastguard Worker 
170*795d594fSAndroid Build Coastguard Worker     try {
171*795d594fSAndroid Build Coastguard Worker       TestMissingCritical.nativeMethod(42);
172*795d594fSAndroid Build Coastguard Worker       throw new Error("UNREACHABLE");
173*795d594fSAndroid Build Coastguard Worker     } catch (LinkageError expected) {}
174*795d594fSAndroid Build Coastguard Worker 
175*795d594fSAndroid Build Coastguard Worker     try {
176*795d594fSAndroid Build Coastguard Worker       TestMissingCritical.nativeMethodWithManyParameters(
177*795d594fSAndroid Build Coastguard Worker           11, 12L, 13.0f, 14.0d,
178*795d594fSAndroid Build Coastguard Worker           21, 22L, 23.0f, 24.0d,
179*795d594fSAndroid Build Coastguard Worker           31, 32L, 33.0f, 34.0d,
180*795d594fSAndroid Build Coastguard Worker           41, 42L, 43.0f, 44.0d,
181*795d594fSAndroid Build Coastguard Worker           51, 52L, 53.0f, 54.0d,
182*795d594fSAndroid Build Coastguard Worker           61, 62L, 63.0f, 64.0d,
183*795d594fSAndroid Build Coastguard Worker           71, 72L, 73.0f, 74.0d,
184*795d594fSAndroid Build Coastguard Worker           81, 82L, 83.0f, 84.0d);
185*795d594fSAndroid Build Coastguard Worker       throw new Error("UNREACHABLE");
186*795d594fSAndroid Build Coastguard Worker     } catch (LinkageError expected) {}
187*795d594fSAndroid Build Coastguard Worker   }
188*795d594fSAndroid Build Coastguard Worker 
$noinline$opt$testCriticalSignatures()189*795d594fSAndroid Build Coastguard Worker   static void $noinline$opt$testCriticalSignatures() {
190*795d594fSAndroid Build Coastguard Worker     System.out.println("testCriticalSignatures");
191*795d594fSAndroid Build Coastguard Worker     long l = 0xf00000000L;
192*795d594fSAndroid Build Coastguard Worker     assertEquals(42, CriticalSignatures.nativeILFFFFD(1, l + 2L, 3.0f, 4.0f, 5.0f, 6.0f, 7.0));
193*795d594fSAndroid Build Coastguard Worker     assertEquals(42, CriticalSignatures.nativeLIFFFFD(l + 7L, 6, 5.0f, 4.0f, 3.0f, 2.0f, 1.0));
194*795d594fSAndroid Build Coastguard Worker     assertEquals(42, CriticalSignatures.nativeFLIFFFD(1.0f, l + 2L, 3, 4.0f, 5.0f, 6.0f, 7.0));
195*795d594fSAndroid Build Coastguard Worker     assertEquals(42, CriticalSignatures.nativeDDIIIIII(8.0, 7.0, 6, 5, 4, 3, 2, 1));
196*795d594fSAndroid Build Coastguard Worker     assertEquals(42, CriticalSignatures.nativeDFFILIII(1.0, 2.0f, 3.0f, 4, l + 5L, 6, 7, 8));
197*795d594fSAndroid Build Coastguard Worker     assertEquals(42, CriticalSignatures.nativeDDFILIII(8.0, 7.0, 6.0f, 5, l + 4L, 3, 2, 1));
198*795d594fSAndroid Build Coastguard Worker     assertEquals(42, CriticalSignatures.nativeDDIFII(1.0, 2.0, 3, 4.0f, 5, 6));
199*795d594fSAndroid Build Coastguard Worker     assertEquals(42, CriticalSignatures.nativeFullArgs(
200*795d594fSAndroid Build Coastguard Worker         // Generated by script (then modified to close argument list):
201*795d594fSAndroid Build Coastguard Worker         //   for i in {0..84}; \
202*795d594fSAndroid Build Coastguard Worker         //     do echo "        0xf00000000L + $((i*3))L,"; \
203*795d594fSAndroid Build Coastguard Worker         //     echo "        $((i*3+2)),"; \
204*795d594fSAndroid Build Coastguard Worker         //   done
205*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 0L,
206*795d594fSAndroid Build Coastguard Worker         2,
207*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 3L,
208*795d594fSAndroid Build Coastguard Worker         5,
209*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 6L,
210*795d594fSAndroid Build Coastguard Worker         8,
211*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 9L,
212*795d594fSAndroid Build Coastguard Worker         11,
213*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 12L,
214*795d594fSAndroid Build Coastguard Worker         14,
215*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 15L,
216*795d594fSAndroid Build Coastguard Worker         17,
217*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 18L,
218*795d594fSAndroid Build Coastguard Worker         20,
219*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 21L,
220*795d594fSAndroid Build Coastguard Worker         23,
221*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 24L,
222*795d594fSAndroid Build Coastguard Worker         26,
223*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 27L,
224*795d594fSAndroid Build Coastguard Worker         29,
225*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 30L,
226*795d594fSAndroid Build Coastguard Worker         32,
227*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 33L,
228*795d594fSAndroid Build Coastguard Worker         35,
229*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 36L,
230*795d594fSAndroid Build Coastguard Worker         38,
231*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 39L,
232*795d594fSAndroid Build Coastguard Worker         41,
233*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 42L,
234*795d594fSAndroid Build Coastguard Worker         44,
235*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 45L,
236*795d594fSAndroid Build Coastguard Worker         47,
237*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 48L,
238*795d594fSAndroid Build Coastguard Worker         50,
239*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 51L,
240*795d594fSAndroid Build Coastguard Worker         53,
241*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 54L,
242*795d594fSAndroid Build Coastguard Worker         56,
243*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 57L,
244*795d594fSAndroid Build Coastguard Worker         59,
245*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 60L,
246*795d594fSAndroid Build Coastguard Worker         62,
247*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 63L,
248*795d594fSAndroid Build Coastguard Worker         65,
249*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 66L,
250*795d594fSAndroid Build Coastguard Worker         68,
251*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 69L,
252*795d594fSAndroid Build Coastguard Worker         71,
253*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 72L,
254*795d594fSAndroid Build Coastguard Worker         74,
255*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 75L,
256*795d594fSAndroid Build Coastguard Worker         77,
257*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 78L,
258*795d594fSAndroid Build Coastguard Worker         80,
259*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 81L,
260*795d594fSAndroid Build Coastguard Worker         83,
261*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 84L,
262*795d594fSAndroid Build Coastguard Worker         86,
263*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 87L,
264*795d594fSAndroid Build Coastguard Worker         89,
265*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 90L,
266*795d594fSAndroid Build Coastguard Worker         92,
267*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 93L,
268*795d594fSAndroid Build Coastguard Worker         95,
269*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 96L,
270*795d594fSAndroid Build Coastguard Worker         98,
271*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 99L,
272*795d594fSAndroid Build Coastguard Worker         101,
273*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 102L,
274*795d594fSAndroid Build Coastguard Worker         104,
275*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 105L,
276*795d594fSAndroid Build Coastguard Worker         107,
277*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 108L,
278*795d594fSAndroid Build Coastguard Worker         110,
279*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 111L,
280*795d594fSAndroid Build Coastguard Worker         113,
281*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 114L,
282*795d594fSAndroid Build Coastguard Worker         116,
283*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 117L,
284*795d594fSAndroid Build Coastguard Worker         119,
285*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 120L,
286*795d594fSAndroid Build Coastguard Worker         122,
287*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 123L,
288*795d594fSAndroid Build Coastguard Worker         125,
289*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 126L,
290*795d594fSAndroid Build Coastguard Worker         128,
291*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 129L,
292*795d594fSAndroid Build Coastguard Worker         131,
293*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 132L,
294*795d594fSAndroid Build Coastguard Worker         134,
295*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 135L,
296*795d594fSAndroid Build Coastguard Worker         137,
297*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 138L,
298*795d594fSAndroid Build Coastguard Worker         140,
299*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 141L,
300*795d594fSAndroid Build Coastguard Worker         143,
301*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 144L,
302*795d594fSAndroid Build Coastguard Worker         146,
303*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 147L,
304*795d594fSAndroid Build Coastguard Worker         149,
305*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 150L,
306*795d594fSAndroid Build Coastguard Worker         152,
307*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 153L,
308*795d594fSAndroid Build Coastguard Worker         155,
309*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 156L,
310*795d594fSAndroid Build Coastguard Worker         158,
311*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 159L,
312*795d594fSAndroid Build Coastguard Worker         161,
313*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 162L,
314*795d594fSAndroid Build Coastguard Worker         164,
315*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 165L,
316*795d594fSAndroid Build Coastguard Worker         167,
317*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 168L,
318*795d594fSAndroid Build Coastguard Worker         170,
319*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 171L,
320*795d594fSAndroid Build Coastguard Worker         173,
321*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 174L,
322*795d594fSAndroid Build Coastguard Worker         176,
323*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 177L,
324*795d594fSAndroid Build Coastguard Worker         179,
325*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 180L,
326*795d594fSAndroid Build Coastguard Worker         182,
327*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 183L,
328*795d594fSAndroid Build Coastguard Worker         185,
329*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 186L,
330*795d594fSAndroid Build Coastguard Worker         188,
331*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 189L,
332*795d594fSAndroid Build Coastguard Worker         191,
333*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 192L,
334*795d594fSAndroid Build Coastguard Worker         194,
335*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 195L,
336*795d594fSAndroid Build Coastguard Worker         197,
337*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 198L,
338*795d594fSAndroid Build Coastguard Worker         200,
339*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 201L,
340*795d594fSAndroid Build Coastguard Worker         203,
341*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 204L,
342*795d594fSAndroid Build Coastguard Worker         206,
343*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 207L,
344*795d594fSAndroid Build Coastguard Worker         209,
345*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 210L,
346*795d594fSAndroid Build Coastguard Worker         212,
347*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 213L,
348*795d594fSAndroid Build Coastguard Worker         215,
349*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 216L,
350*795d594fSAndroid Build Coastguard Worker         218,
351*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 219L,
352*795d594fSAndroid Build Coastguard Worker         221,
353*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 222L,
354*795d594fSAndroid Build Coastguard Worker         224,
355*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 225L,
356*795d594fSAndroid Build Coastguard Worker         227,
357*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 228L,
358*795d594fSAndroid Build Coastguard Worker         230,
359*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 231L,
360*795d594fSAndroid Build Coastguard Worker         233,
361*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 234L,
362*795d594fSAndroid Build Coastguard Worker         236,
363*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 237L,
364*795d594fSAndroid Build Coastguard Worker         239,
365*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 240L,
366*795d594fSAndroid Build Coastguard Worker         242,
367*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 243L,
368*795d594fSAndroid Build Coastguard Worker         245,
369*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 246L,
370*795d594fSAndroid Build Coastguard Worker         248,
371*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 249L,
372*795d594fSAndroid Build Coastguard Worker         251,
373*795d594fSAndroid Build Coastguard Worker         0xf00000000L + 252L,
374*795d594fSAndroid Build Coastguard Worker         254));
375*795d594fSAndroid Build Coastguard Worker     assertEquals(42, CriticalSignatures.nativeDFDFDFDFDFIJ(
376*795d594fSAndroid Build Coastguard Worker         1.0, 2.0f, 3.0, 4.0f, 5.0, 6.0f, 7.0, 8.0f, 9.0, 10.0f, 11, 12L));
377*795d594fSAndroid Build Coastguard Worker     // Exercise spilling args from registers on riscv64.
378*795d594fSAndroid Build Coastguard Worker     double double9_0 = $noinline$returnDoubleArg(9.0);
379*795d594fSAndroid Build Coastguard Worker     float float10_0 = $noinline$returnFloatArg(10.0f);
380*795d594fSAndroid Build Coastguard Worker     int int11 = $noinline$returnIntArg(11);
381*795d594fSAndroid Build Coastguard Worker     long long12 = $noinline$returnLongArg(12);
382*795d594fSAndroid Build Coastguard Worker     assertEquals(42, CriticalSignatures.nativeDFDFDFDFDFIJ(
383*795d594fSAndroid Build Coastguard Worker         1.0, 2.0f, 3.0, 4.0f, 5.0, 6.0f, 7.0, 8.0f, double9_0, float10_0, int11, long12));
384*795d594fSAndroid Build Coastguard Worker     // Split out the last test to keep this method under the large method threshold.
385*795d594fSAndroid Build Coastguard Worker     $noinline$opt$testCriticalSignaturesStackMoves();
386*795d594fSAndroid Build Coastguard Worker   }
387*795d594fSAndroid Build Coastguard Worker 
$noinline$opt$testCriticalSignaturesStackMoves()388*795d594fSAndroid Build Coastguard Worker   public static void $noinline$opt$testCriticalSignaturesStackMoves() {
389*795d594fSAndroid Build Coastguard Worker     // Exercise moving non-const args to stack by having more non-const args than registers.
390*795d594fSAndroid Build Coastguard Worker     // At least on riscv64, where we need to properly sign-extend narrow (int) arguments
391*795d594fSAndroid Build Coastguard Worker     // passed on stack, this covers both register and stack source locations.
392*795d594fSAndroid Build Coastguard Worker     assertEquals(42, CriticalSignatures.nativeFullArgs(
393*795d594fSAndroid Build Coastguard Worker         // Generated by script (then modified to close argument list):
394*795d594fSAndroid Build Coastguard Worker         //   for i in {0..84}; \
395*795d594fSAndroid Build Coastguard Worker         //     do echo "        \$noinline\$returnLongArg(0xf00000000L + $((i*3))L),"; \
396*795d594fSAndroid Build Coastguard Worker         //     echo "        \$noinline\$returnIntArg($((i*3+2))),"; \
397*795d594fSAndroid Build Coastguard Worker         //   done
398*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 0L),
399*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(2),
400*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 3L),
401*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(5),
402*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 6L),
403*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(8),
404*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 9L),
405*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(11),
406*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 12L),
407*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(14),
408*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 15L),
409*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(17),
410*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 18L),
411*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(20),
412*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 21L),
413*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(23),
414*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 24L),
415*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(26),
416*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 27L),
417*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(29),
418*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 30L),
419*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(32),
420*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 33L),
421*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(35),
422*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 36L),
423*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(38),
424*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 39L),
425*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(41),
426*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 42L),
427*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(44),
428*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 45L),
429*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(47),
430*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 48L),
431*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(50),
432*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 51L),
433*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(53),
434*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 54L),
435*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(56),
436*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 57L),
437*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(59),
438*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 60L),
439*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(62),
440*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 63L),
441*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(65),
442*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 66L),
443*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(68),
444*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 69L),
445*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(71),
446*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 72L),
447*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(74),
448*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 75L),
449*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(77),
450*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 78L),
451*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(80),
452*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 81L),
453*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(83),
454*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 84L),
455*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(86),
456*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 87L),
457*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(89),
458*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 90L),
459*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(92),
460*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 93L),
461*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(95),
462*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 96L),
463*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(98),
464*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 99L),
465*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(101),
466*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 102L),
467*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(104),
468*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 105L),
469*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(107),
470*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 108L),
471*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(110),
472*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 111L),
473*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(113),
474*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 114L),
475*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(116),
476*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 117L),
477*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(119),
478*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 120L),
479*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(122),
480*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 123L),
481*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(125),
482*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 126L),
483*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(128),
484*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 129L),
485*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(131),
486*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 132L),
487*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(134),
488*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 135L),
489*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(137),
490*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 138L),
491*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(140),
492*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 141L),
493*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(143),
494*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 144L),
495*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(146),
496*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 147L),
497*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(149),
498*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 150L),
499*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(152),
500*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 153L),
501*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(155),
502*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 156L),
503*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(158),
504*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 159L),
505*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(161),
506*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 162L),
507*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(164),
508*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 165L),
509*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(167),
510*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 168L),
511*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(170),
512*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 171L),
513*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(173),
514*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 174L),
515*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(176),
516*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 177L),
517*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(179),
518*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 180L),
519*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(182),
520*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 183L),
521*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(185),
522*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 186L),
523*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(188),
524*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 189L),
525*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(191),
526*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 192L),
527*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(194),
528*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 195L),
529*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(197),
530*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 198L),
531*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(200),
532*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 201L),
533*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(203),
534*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 204L),
535*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(206),
536*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 207L),
537*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(209),
538*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 210L),
539*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(212),
540*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 213L),
541*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(215),
542*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 216L),
543*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(218),
544*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 219L),
545*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(221),
546*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 222L),
547*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(224),
548*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 225L),
549*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(227),
550*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 228L),
551*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(230),
552*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 231L),
553*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(233),
554*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 234L),
555*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(236),
556*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 237L),
557*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(239),
558*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 240L),
559*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(242),
560*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 243L),
561*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(245),
562*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 246L),
563*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(248),
564*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 249L),
565*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(251),
566*795d594fSAndroid Build Coastguard Worker         $noinline$returnLongArg(0xf00000000L + 252L),
567*795d594fSAndroid Build Coastguard Worker         $noinline$returnIntArg(254)));
568*795d594fSAndroid Build Coastguard Worker   }
569*795d594fSAndroid Build Coastguard Worker 
$noinline$returnDoubleArg(double d)570*795d594fSAndroid Build Coastguard Worker   static double $noinline$returnDoubleArg(double d) { return d; }
$noinline$returnFloatArg(float f)571*795d594fSAndroid Build Coastguard Worker   static float $noinline$returnFloatArg(float f) { return f; }
$noinline$returnIntArg(int i)572*795d594fSAndroid Build Coastguard Worker   static int $noinline$returnIntArg(int i) { return i; }
$noinline$returnLongArg(long l)573*795d594fSAndroid Build Coastguard Worker   static long $noinline$returnLongArg(long l) { return l; }
574*795d594fSAndroid Build Coastguard Worker 
$noinline$regressionTestB181736463()575*795d594fSAndroid Build Coastguard Worker   static void $noinline$regressionTestB181736463() {
576*795d594fSAndroid Build Coastguard Worker     // Regression test for bug 181736463 (GenericJNI crashing when class initializer throws).
577*795d594fSAndroid Build Coastguard Worker     try {
578*795d594fSAndroid Build Coastguard Worker       BadClassB181736463.nativeMethodVoid();
579*795d594fSAndroid Build Coastguard Worker       throw new Error("Unreachable");
580*795d594fSAndroid Build Coastguard Worker     } catch (B181736463Error expected) {
581*795d594fSAndroid Build Coastguard Worker     }
582*795d594fSAndroid Build Coastguard Worker   }
583*795d594fSAndroid Build Coastguard Worker 
$noinline$regressionTestB189235039()584*795d594fSAndroid Build Coastguard Worker   static void $noinline$regressionTestB189235039() {
585*795d594fSAndroid Build Coastguard Worker     assertEquals(42, new Main().b189235039CallThrough());
586*795d594fSAndroid Build Coastguard Worker   }
587*795d594fSAndroid Build Coastguard Worker 
initializingCriticalClinitCheck()588*795d594fSAndroid Build Coastguard Worker   static void initializingCriticalClinitCheck() {
589*795d594fSAndroid Build Coastguard Worker     // Called from CriticalClinitCheck.<clinit>().
590*795d594fSAndroid Build Coastguard Worker     // Test @CriticalNative calls on the initializing thread.
591*795d594fSAndroid Build Coastguard Worker     $noinline$opt$testCriticalClinitCheck();
592*795d594fSAndroid Build Coastguard Worker     sTestCriticalClinitCheckOtherThread = new Thread() {
593*795d594fSAndroid Build Coastguard Worker       public void run() {
594*795d594fSAndroid Build Coastguard Worker         $noinline$opt$testCriticalClinitCheck();
595*795d594fSAndroid Build Coastguard Worker       }
596*795d594fSAndroid Build Coastguard Worker     };
597*795d594fSAndroid Build Coastguard Worker     sTestCriticalClinitCheckOtherThread.start();
598*795d594fSAndroid Build Coastguard Worker     // Sleep for a second to give the other thread an opportunity to run.
599*795d594fSAndroid Build Coastguard Worker     // We're testing that it performs a clinit check and blocks until we
600*795d594fSAndroid Build Coastguard Worker     // exit the class initializer after writing the output below.
601*795d594fSAndroid Build Coastguard Worker     try {
602*795d594fSAndroid Build Coastguard Worker       Thread.sleep(1000);
603*795d594fSAndroid Build Coastguard Worker     } catch (InterruptedException ie) {
604*795d594fSAndroid Build Coastguard Worker       throw new Error(ie);
605*795d594fSAndroid Build Coastguard Worker     }
606*795d594fSAndroid Build Coastguard Worker     System.out.println("initializingCriticalClinitCheck finished");
607*795d594fSAndroid Build Coastguard Worker   }
608*795d594fSAndroid Build Coastguard Worker 
$noinline$opt$testCriticalClinitCheck()609*795d594fSAndroid Build Coastguard Worker   static void $noinline$opt$testCriticalClinitCheck() {
610*795d594fSAndroid Build Coastguard Worker     assertEquals(42, CriticalClinitCheck.nativeMethodVoid());
611*795d594fSAndroid Build Coastguard Worker     assertEquals(42, CriticalClinitCheck.nativeMethod(42));
612*795d594fSAndroid Build Coastguard Worker     assertEquals(42, CriticalClinitCheck.nativeMethodWithManyParameters(
613*795d594fSAndroid Build Coastguard Worker         11, 12L, 13.0f, 14.0d,
614*795d594fSAndroid Build Coastguard Worker         21, 22L, 23.0f, 24.0d,
615*795d594fSAndroid Build Coastguard Worker         31, 32L, 33.0f, 34.0d,
616*795d594fSAndroid Build Coastguard Worker         41, 42L, 43.0f, 44.0d,
617*795d594fSAndroid Build Coastguard Worker         51, 52L, 53.0f, 54.0d,
618*795d594fSAndroid Build Coastguard Worker         61, 62L, 63.0f, 64.0d,
619*795d594fSAndroid Build Coastguard Worker         71, 72L, 73.0f, 74.0d,
620*795d594fSAndroid Build Coastguard Worker         81, 82L, 83.0f, 84.0d));
621*795d594fSAndroid Build Coastguard Worker     System.out.println("testCriticalClinitCheck passed");
622*795d594fSAndroid Build Coastguard Worker   }
623*795d594fSAndroid Build Coastguard Worker 
624*795d594fSAndroid Build Coastguard Worker   static Thread sTestCriticalClinitCheckOtherThread = null;
625*795d594fSAndroid Build Coastguard Worker 
assertEquals(int expected, int actual)626*795d594fSAndroid Build Coastguard Worker   static void assertEquals(int expected, int actual) {
627*795d594fSAndroid Build Coastguard Worker     if (expected != actual) {
628*795d594fSAndroid Build Coastguard Worker       throw new AssertionError("Expected " + expected + " got " + actual);
629*795d594fSAndroid Build Coastguard Worker     }
630*795d594fSAndroid Build Coastguard Worker   }
631*795d594fSAndroid Build Coastguard Worker 
makeVisiblyInitialized()632*795d594fSAndroid Build Coastguard Worker   public static native void makeVisiblyInitialized();
633*795d594fSAndroid Build Coastguard Worker 
b189235039CallThrough()634*795d594fSAndroid Build Coastguard Worker   public native synchronized int b189235039CallThrough();
b189235039CheckLocks(int placeholder, Main m)635*795d594fSAndroid Build Coastguard Worker   public static native int b189235039CheckLocks(int placeholder, Main m);
636*795d594fSAndroid Build Coastguard Worker }
637*795d594fSAndroid Build Coastguard Worker 
638*795d594fSAndroid Build Coastguard Worker class Test {
nativeMethodVoid()639*795d594fSAndroid Build Coastguard Worker   public static native int nativeMethodVoid();
640*795d594fSAndroid Build Coastguard Worker 
nativeMethod(int i)641*795d594fSAndroid Build Coastguard Worker   public static native int nativeMethod(int i);
642*795d594fSAndroid Build Coastguard Worker 
nativeMethodWithManyParameters( int i1, long l1, float f1, double d1, int i2, long l2, float f2, double d2, int i3, long l3, float f3, double d3, int i4, long l4, float f4, double d4, int i5, long l5, float f5, double d5, int i6, long l6, float f6, double d6, int i7, long l7, float f7, double d7, int i8, long l8, float f8, double d8)643*795d594fSAndroid Build Coastguard Worker   public static native int nativeMethodWithManyParameters(
644*795d594fSAndroid Build Coastguard Worker       int i1, long l1, float f1, double d1,
645*795d594fSAndroid Build Coastguard Worker       int i2, long l2, float f2, double d2,
646*795d594fSAndroid Build Coastguard Worker       int i3, long l3, float f3, double d3,
647*795d594fSAndroid Build Coastguard Worker       int i4, long l4, float f4, double d4,
648*795d594fSAndroid Build Coastguard Worker       int i5, long l5, float f5, double d5,
649*795d594fSAndroid Build Coastguard Worker       int i6, long l6, float f6, double d6,
650*795d594fSAndroid Build Coastguard Worker       int i7, long l7, float f7, double d7,
651*795d594fSAndroid Build Coastguard Worker       int i8, long l8, float f8, double d8);
652*795d594fSAndroid Build Coastguard Worker }
653*795d594fSAndroid Build Coastguard Worker 
654*795d594fSAndroid Build Coastguard Worker class TestFast {
655*795d594fSAndroid Build Coastguard Worker   @FastNative
nativeMethodVoid()656*795d594fSAndroid Build Coastguard Worker   public static native int nativeMethodVoid();
657*795d594fSAndroid Build Coastguard Worker 
658*795d594fSAndroid Build Coastguard Worker   @FastNative
nativeMethod(int i)659*795d594fSAndroid Build Coastguard Worker   public static native int nativeMethod(int i);
660*795d594fSAndroid Build Coastguard Worker 
661*795d594fSAndroid Build Coastguard Worker   @FastNative
nativeMethodWithManyParameters( int i1, long l1, float f1, double d1, int i2, long l2, float f2, double d2, int i3, long l3, float f3, double d3, int i4, long l4, float f4, double d4, int i5, long l5, float f5, double d5, int i6, long l6, float f6, double d6, int i7, long l7, float f7, double d7, int i8, long l8, float f8, double d8)662*795d594fSAndroid Build Coastguard Worker   public static native int nativeMethodWithManyParameters(
663*795d594fSAndroid Build Coastguard Worker       int i1, long l1, float f1, double d1,
664*795d594fSAndroid Build Coastguard Worker       int i2, long l2, float f2, double d2,
665*795d594fSAndroid Build Coastguard Worker       int i3, long l3, float f3, double d3,
666*795d594fSAndroid Build Coastguard Worker       int i4, long l4, float f4, double d4,
667*795d594fSAndroid Build Coastguard Worker       int i5, long l5, float f5, double d5,
668*795d594fSAndroid Build Coastguard Worker       int i6, long l6, float f6, double d6,
669*795d594fSAndroid Build Coastguard Worker       int i7, long l7, float f7, double d7,
670*795d594fSAndroid Build Coastguard Worker       int i8, long l8, float f8, double d8);
671*795d594fSAndroid Build Coastguard Worker }
672*795d594fSAndroid Build Coastguard Worker 
673*795d594fSAndroid Build Coastguard Worker class TestCritical {
674*795d594fSAndroid Build Coastguard Worker   @CriticalNative
nativeMethodVoid()675*795d594fSAndroid Build Coastguard Worker   public static native int nativeMethodVoid();
676*795d594fSAndroid Build Coastguard Worker 
677*795d594fSAndroid Build Coastguard Worker   @CriticalNative
nativeMethod(int i)678*795d594fSAndroid Build Coastguard Worker   public static native int nativeMethod(int i);
679*795d594fSAndroid Build Coastguard Worker 
680*795d594fSAndroid Build Coastguard Worker   @CriticalNative
nativeMethodWithManyParameters( int i1, long l1, float f1, double d1, int i2, long l2, float f2, double d2, int i3, long l3, float f3, double d3, int i4, long l4, float f4, double d4, int i5, long l5, float f5, double d5, int i6, long l6, float f6, double d6, int i7, long l7, float f7, double d7, int i8, long l8, float f8, double d8)681*795d594fSAndroid Build Coastguard Worker   public static native int nativeMethodWithManyParameters(
682*795d594fSAndroid Build Coastguard Worker       int i1, long l1, float f1, double d1,
683*795d594fSAndroid Build Coastguard Worker       int i2, long l2, float f2, double d2,
684*795d594fSAndroid Build Coastguard Worker       int i3, long l3, float f3, double d3,
685*795d594fSAndroid Build Coastguard Worker       int i4, long l4, float f4, double d4,
686*795d594fSAndroid Build Coastguard Worker       int i5, long l5, float f5, double d5,
687*795d594fSAndroid Build Coastguard Worker       int i6, long l6, float f6, double d6,
688*795d594fSAndroid Build Coastguard Worker       int i7, long l7, float f7, double d7,
689*795d594fSAndroid Build Coastguard Worker       int i8, long l8, float f8, double d8);
690*795d594fSAndroid Build Coastguard Worker }
691*795d594fSAndroid Build Coastguard Worker 
692*795d594fSAndroid Build Coastguard Worker class TestMissing {
nativeMethodVoid()693*795d594fSAndroid Build Coastguard Worker   public static native int nativeMethodVoid();
694*795d594fSAndroid Build Coastguard Worker 
nativeMethod(int i)695*795d594fSAndroid Build Coastguard Worker   public static native int nativeMethod(int i);
696*795d594fSAndroid Build Coastguard Worker 
nativeMethodWithManyParameters( int i1, long l1, float f1, double d1, int i2, long l2, float f2, double d2, int i3, long l3, float f3, double d3, int i4, long l4, float f4, double d4, int i5, long l5, float f5, double d5, int i6, long l6, float f6, double d6, int i7, long l7, float f7, double d7, int i8, long l8, float f8, double d8)697*795d594fSAndroid Build Coastguard Worker   public static native int nativeMethodWithManyParameters(
698*795d594fSAndroid Build Coastguard Worker       int i1, long l1, float f1, double d1,
699*795d594fSAndroid Build Coastguard Worker       int i2, long l2, float f2, double d2,
700*795d594fSAndroid Build Coastguard Worker       int i3, long l3, float f3, double d3,
701*795d594fSAndroid Build Coastguard Worker       int i4, long l4, float f4, double d4,
702*795d594fSAndroid Build Coastguard Worker       int i5, long l5, float f5, double d5,
703*795d594fSAndroid Build Coastguard Worker       int i6, long l6, float f6, double d6,
704*795d594fSAndroid Build Coastguard Worker       int i7, long l7, float f7, double d7,
705*795d594fSAndroid Build Coastguard Worker       int i8, long l8, float f8, double d8);
706*795d594fSAndroid Build Coastguard Worker }
707*795d594fSAndroid Build Coastguard Worker 
708*795d594fSAndroid Build Coastguard Worker class TestMissingFast {
709*795d594fSAndroid Build Coastguard Worker   @FastNative
nativeMethodVoid()710*795d594fSAndroid Build Coastguard Worker   public static native int nativeMethodVoid();
711*795d594fSAndroid Build Coastguard Worker 
712*795d594fSAndroid Build Coastguard Worker   @FastNative
nativeMethod(int i)713*795d594fSAndroid Build Coastguard Worker   public static native int nativeMethod(int i);
714*795d594fSAndroid Build Coastguard Worker 
715*795d594fSAndroid Build Coastguard Worker   @FastNative
nativeMethodWithManyParameters( int i1, long l1, float f1, double d1, int i2, long l2, float f2, double d2, int i3, long l3, float f3, double d3, int i4, long l4, float f4, double d4, int i5, long l5, float f5, double d5, int i6, long l6, float f6, double d6, int i7, long l7, float f7, double d7, int i8, long l8, float f8, double d8)716*795d594fSAndroid Build Coastguard Worker   public static native int nativeMethodWithManyParameters(
717*795d594fSAndroid Build Coastguard Worker       int i1, long l1, float f1, double d1,
718*795d594fSAndroid Build Coastguard Worker       int i2, long l2, float f2, double d2,
719*795d594fSAndroid Build Coastguard Worker       int i3, long l3, float f3, double d3,
720*795d594fSAndroid Build Coastguard Worker       int i4, long l4, float f4, double d4,
721*795d594fSAndroid Build Coastguard Worker       int i5, long l5, float f5, double d5,
722*795d594fSAndroid Build Coastguard Worker       int i6, long l6, float f6, double d6,
723*795d594fSAndroid Build Coastguard Worker       int i7, long l7, float f7, double d7,
724*795d594fSAndroid Build Coastguard Worker       int i8, long l8, float f8, double d8);
725*795d594fSAndroid Build Coastguard Worker }
726*795d594fSAndroid Build Coastguard Worker 
727*795d594fSAndroid Build Coastguard Worker class TestMissingCritical {
728*795d594fSAndroid Build Coastguard Worker   @CriticalNative
nativeMethodVoid()729*795d594fSAndroid Build Coastguard Worker   public static native int nativeMethodVoid();
730*795d594fSAndroid Build Coastguard Worker 
731*795d594fSAndroid Build Coastguard Worker   @CriticalNative
nativeMethod(int i)732*795d594fSAndroid Build Coastguard Worker   public static native int nativeMethod(int i);
733*795d594fSAndroid Build Coastguard Worker 
734*795d594fSAndroid Build Coastguard Worker   @CriticalNative
nativeMethodWithManyParameters( int i1, long l1, float f1, double d1, int i2, long l2, float f2, double d2, int i3, long l3, float f3, double d3, int i4, long l4, float f4, double d4, int i5, long l5, float f5, double d5, int i6, long l6, float f6, double d6, int i7, long l7, float f7, double d7, int i8, long l8, float f8, double d8)735*795d594fSAndroid Build Coastguard Worker   public static native int nativeMethodWithManyParameters(
736*795d594fSAndroid Build Coastguard Worker       int i1, long l1, float f1, double d1,
737*795d594fSAndroid Build Coastguard Worker       int i2, long l2, float f2, double d2,
738*795d594fSAndroid Build Coastguard Worker       int i3, long l3, float f3, double d3,
739*795d594fSAndroid Build Coastguard Worker       int i4, long l4, float f4, double d4,
740*795d594fSAndroid Build Coastguard Worker       int i5, long l5, float f5, double d5,
741*795d594fSAndroid Build Coastguard Worker       int i6, long l6, float f6, double d6,
742*795d594fSAndroid Build Coastguard Worker       int i7, long l7, float f7, double d7,
743*795d594fSAndroid Build Coastguard Worker       int i8, long l8, float f8, double d8);
744*795d594fSAndroid Build Coastguard Worker }
745*795d594fSAndroid Build Coastguard Worker 
746*795d594fSAndroid Build Coastguard Worker class CriticalSignatures {
747*795d594fSAndroid Build Coastguard Worker   // The following signatures exercise ARM argument moving and serve
748*795d594fSAndroid Build Coastguard Worker   // as an example of the optimizations performed by the assembler.
749*795d594fSAndroid Build Coastguard Worker   // Moving arguments is a lot simpler for other architectures.
750*795d594fSAndroid Build Coastguard Worker 
751*795d594fSAndroid Build Coastguard Worker   // JNI compiler does not emit the CFG, so we cannot CHECK the "dissassembly (after)".
752*795d594fSAndroid Build Coastguard Worker 
753*795d594fSAndroid Build Coastguard Worker   // vstm sp, {d0-d2}         # f1, f2, f3, f4, d -- store floats as D regs together with double
754*795d594fSAndroid Build Coastguard Worker   // mov r4, r0               # hidden arg
755*795d594fSAndroid Build Coastguard Worker   // mov r0, r1               # i
756*795d594fSAndroid Build Coastguard Worker   //                          # l stays in r2-r3
757*795d594fSAndroid Build Coastguard Worker   @CriticalNative
nativeILFFFFD( int i, long l, float f1, float f2, float f3, float f4, double d)758*795d594fSAndroid Build Coastguard Worker   public static native int nativeILFFFFD(
759*795d594fSAndroid Build Coastguard Worker       int i, long l, float f1, float f2, float f3, float f4, double d);
760*795d594fSAndroid Build Coastguard Worker 
761*795d594fSAndroid Build Coastguard Worker   // vstm sp, {s1-s3}         # f2, f3, f4 -- store floats up to alignment gap
762*795d594fSAndroid Build Coastguard Worker   // vstr d2, [sp, #16]       # d
763*795d594fSAndroid Build Coastguard Worker   // mov r4, r0               # hidden arg
764*795d594fSAndroid Build Coastguard Worker   // mov r0, r2               # low(l)
765*795d594fSAndroid Build Coastguard Worker   // mov r1, r3               # high(l)
766*795d594fSAndroid Build Coastguard Worker   // ldr r2, [sp, #...]       # i
767*795d594fSAndroid Build Coastguard Worker   // vmov r3, s0              # f1
768*795d594fSAndroid Build Coastguard Worker   @CriticalNative
nativeLIFFFFD( long l, int i, float f1, float f2, float f3, float f4, double d)769*795d594fSAndroid Build Coastguard Worker   public static native int nativeLIFFFFD(
770*795d594fSAndroid Build Coastguard Worker       long l, int i, float f1, float f2, float f3, float f4, double d);
771*795d594fSAndroid Build Coastguard Worker 
772*795d594fSAndroid Build Coastguard Worker   // ldr  ip, [sp, #...]      # i
773*795d594fSAndroid Build Coastguard Worker   // str  ip, [sp]            # i
774*795d594fSAndroid Build Coastguard Worker   // add  ip, sp, #4          # Spilling multiple floats at an offset from SP
775*795d594fSAndroid Build Coastguard Worker   // vstm ip, {s1-s5}         # f2, f3, f4, d
776*795d594fSAndroid Build Coastguard Worker   // mov r4, r0               # hidden arg
777*795d594fSAndroid Build Coastguard Worker   // vmov r0, s0              # f1
778*795d594fSAndroid Build Coastguard Worker   //                          # l stays in r2-r3
779*795d594fSAndroid Build Coastguard Worker   @CriticalNative
nativeFLIFFFD( float f1, long l, int i, float f2, float f3, float f4, double d)780*795d594fSAndroid Build Coastguard Worker   public static native int nativeFLIFFFD(
781*795d594fSAndroid Build Coastguard Worker       float f1, long l, int i, float f2, float f3, float f4, double d);
782*795d594fSAndroid Build Coastguard Worker 
783*795d594fSAndroid Build Coastguard Worker   // stm sp, {r1,r2,r3}       # i1, i2, i3 -- store ints together
784*795d594fSAndroid Build Coastguard Worker   // ldrd r1, ip, [sp, #...]  # i4, i5
785*795d594fSAndroid Build Coastguard Worker   // strd r1, ip, [sp, #12]   # i4, i5
786*795d594fSAndroid Build Coastguard Worker   // ldr ip, [sp, #72]        # i6
787*795d594fSAndroid Build Coastguard Worker   // str ip, [sp, #20]        # i6
788*795d594fSAndroid Build Coastguard Worker   // mov r4, r0               # hidden arg
789*795d594fSAndroid Build Coastguard Worker   // vmov r0, r1, d0          # d1
790*795d594fSAndroid Build Coastguard Worker   // vmov r2, r3, d1          # d2
791*795d594fSAndroid Build Coastguard Worker   @CriticalNative
nativeDDIIIIII( double d1, double d2, int i1, int i2, int i3, int i4, int i5, int i6)792*795d594fSAndroid Build Coastguard Worker   public static native int nativeDDIIIIII(
793*795d594fSAndroid Build Coastguard Worker       double d1, double d2, int i1, int i2, int i3, int i4, int i5, int i6);
794*795d594fSAndroid Build Coastguard Worker 
795*795d594fSAndroid Build Coastguard Worker   // str r1, [sp]             # i1 -- cannot store with l due to alignment gap
796*795d594fSAndroid Build Coastguard Worker   // strd r2, r3, [sp, #8]    # l
797*795d594fSAndroid Build Coastguard Worker   // ldrd r1, ip, [sp, #...]  # i2, i3
798*795d594fSAndroid Build Coastguard Worker   // strd r1, ip, [sp, #16]   # i2, i3
799*795d594fSAndroid Build Coastguard Worker   // ldr ip, [sp, #...]       # i4
800*795d594fSAndroid Build Coastguard Worker   // str ip, [sp, #24]        # i4
801*795d594fSAndroid Build Coastguard Worker   // mov r4, r0               # hidden arg
802*795d594fSAndroid Build Coastguard Worker   // vmov r0, r1, d0          # d
803*795d594fSAndroid Build Coastguard Worker   // vmov r2, r3, d1          # f1, f2 -- move both floats together as double
804*795d594fSAndroid Build Coastguard Worker   @CriticalNative
nativeDFFILIII( double d, float f1, float f2, int i1, long l, int i2, int i3, int i4)805*795d594fSAndroid Build Coastguard Worker   public static native int nativeDFFILIII(
806*795d594fSAndroid Build Coastguard Worker       double d, float f1, float f2, int i1, long l, int i2, int i3, int i4);
807*795d594fSAndroid Build Coastguard Worker 
808*795d594fSAndroid Build Coastguard Worker   // vstr s4, [sp]            # f
809*795d594fSAndroid Build Coastguard Worker   // add ip, sp, #4           # Spilling multiple core registers at an offset from SP
810*795d594fSAndroid Build Coastguard Worker   // stm ip, {r1,r2,r3}       # i1, l -- store int together with long
811*795d594fSAndroid Build Coastguard Worker   // ldrd r1, ip, [sp, #...]  # i2, i3
812*795d594fSAndroid Build Coastguard Worker   // strd r1, ip, [sp, #16]   # i2, i3
813*795d594fSAndroid Build Coastguard Worker   // ldr ip, [sp, #...]       # i4
814*795d594fSAndroid Build Coastguard Worker   // str ip, [sp, #24]        # i4
815*795d594fSAndroid Build Coastguard Worker   // mov r4, r0               # hidden arg
816*795d594fSAndroid Build Coastguard Worker   // vmov r0, r1, d0          # d1
817*795d594fSAndroid Build Coastguard Worker   // vmov r2, r3, d1          # d2
818*795d594fSAndroid Build Coastguard Worker   @CriticalNative
nativeDDFILIII( double d1, double d2, float f, int i1, long l, int i2, int i3, int i4)819*795d594fSAndroid Build Coastguard Worker   public static native int nativeDDFILIII(
820*795d594fSAndroid Build Coastguard Worker       double d1, double d2, float f, int i1, long l, int i2, int i3, int i4);
821*795d594fSAndroid Build Coastguard Worker 
822*795d594fSAndroid Build Coastguard Worker   // str r1, [sp]             # i1
823*795d594fSAndroid Build Coastguard Worker   // vstr s4, [sp, #4]        # f
824*795d594fSAndroid Build Coastguard Worker   // strd r2, r3, [sp, #8]    # i2, i3 -- store ints together with STRD
825*795d594fSAndroid Build Coastguard Worker   // mov r4, r0               # hidden arg
826*795d594fSAndroid Build Coastguard Worker   // vmov r0, r1, d0          # d1
827*795d594fSAndroid Build Coastguard Worker   // vmov r2, r3, d1          # d2
828*795d594fSAndroid Build Coastguard Worker   @CriticalNative
nativeDDIFII( double d1, double d2, int i1, float f, int i2, int i3)829*795d594fSAndroid Build Coastguard Worker   public static native int nativeDDIFII(
830*795d594fSAndroid Build Coastguard Worker       double d1, double d2, int i1, float f, int i2, int i3);
831*795d594fSAndroid Build Coastguard Worker 
832*795d594fSAndroid Build Coastguard Worker   // ...
833*795d594fSAndroid Build Coastguard Worker   // ldr ip, [sp, #2112]      # int
834*795d594fSAndroid Build Coastguard Worker   // str ip, [sp, #1000]      # int
835*795d594fSAndroid Build Coastguard Worker   // add r1, sp, #2048        # Prepare to use LDRD for loading long from a large offset
836*795d594fSAndroid Build Coastguard Worker   // ldrd r1, ip, [r1, #68]   # long
837*795d594fSAndroid Build Coastguard Worker   // strd r1, ip, [sp, #1008] # long
838*795d594fSAndroid Build Coastguard Worker   // ldr ip, [sp, #2124]      # int
839*795d594fSAndroid Build Coastguard Worker   // str ip, [sp, #1016]      # int
840*795d594fSAndroid Build Coastguard Worker   // ldr ip, [sp, #2128]      # low(long) -- copy the next long as two words because the offset
841*795d594fSAndroid Build Coastguard Worker   // str ip, [sp, #1024]      # low(long) -- is too large for STRD and we only use 2 temps (r1, ip)
842*795d594fSAndroid Build Coastguard Worker   // ldr ip, [sp, #2132]      # high(long)
843*795d594fSAndroid Build Coastguard Worker   // str ip, [sp, #1028]      # high(long)
844*795d594fSAndroid Build Coastguard Worker   // ...
845*795d594fSAndroid Build Coastguard Worker   @CriticalNative
nativeFullArgs( long l0, int i2, long l3, int i5, long l6, int i8, long l9, int i11, long l12, int i14, long l15, int i17, long l18, int i20, long l21, int i23, long l24, int i26, long l27, int i29, long l30, int i32, long l33, int i35, long l36, int i38, long l39, int i41, long l42, int i44, long l45, int i47, long l48, int i50, long l51, int i53, long l54, int i56, long l57, int i59, long l60, int i62, long l63, int i65, long l66, int i68, long l69, int i71, long l72, int i74, long l75, int i77, long l78, int i80, long l81, int i83, long l84, int i86, long l87, int i89, long l90, int i92, long l93, int i95, long l96, int i98, long l99, int i101, long l102, int i104, long l105, int i107, long l108, int i110, long l111, int i113, long l114, int i116, long l117, int i119, long l120, int i122, long l123, int i125, long l126, int i128, long l129, int i131, long l132, int i134, long l135, int i137, long l138, int i140, long l141, int i143, long l144, int i146, long l147, int i149, long l150, int i152, long l153, int i155, long l156, int i158, long l159, int i161, long l162, int i164, long l165, int i167, long l168, int i170, long l171, int i173, long l174, int i176, long l177, int i179, long l180, int i182, long l183, int i185, long l186, int i188, long l189, int i191, long l192, int i194, long l195, int i197, long l198, int i200, long l201, int i203, long l204, int i206, long l207, int i209, long l210, int i212, long l213, int i215, long l216, int i218, long l219, int i221, long l222, int i224, long l225, int i227, long l228, int i230, long l231, int i233, long l234, int i236, long l237, int i239, long l240, int i242, long l243, int i245, long l246, int i248, long l249, int i251, long l252, int i254)846*795d594fSAndroid Build Coastguard Worker   public static native int nativeFullArgs(
847*795d594fSAndroid Build Coastguard Worker       // Note: Numbered by dalvik registers, 0-254 (max 255 regs for invoke-*-range)
848*795d594fSAndroid Build Coastguard Worker       //
849*795d594fSAndroid Build Coastguard Worker       // Generated by script (then modified to close the argument list):
850*795d594fSAndroid Build Coastguard Worker       //   for i in {0..84}; do echo "      long l$((i*3)),"; echo "      int i$(($i*3+2)),"; done
851*795d594fSAndroid Build Coastguard Worker       long l0,
852*795d594fSAndroid Build Coastguard Worker       int i2,
853*795d594fSAndroid Build Coastguard Worker       long l3,
854*795d594fSAndroid Build Coastguard Worker       int i5,
855*795d594fSAndroid Build Coastguard Worker       long l6,
856*795d594fSAndroid Build Coastguard Worker       int i8,
857*795d594fSAndroid Build Coastguard Worker       long l9,
858*795d594fSAndroid Build Coastguard Worker       int i11,
859*795d594fSAndroid Build Coastguard Worker       long l12,
860*795d594fSAndroid Build Coastguard Worker       int i14,
861*795d594fSAndroid Build Coastguard Worker       long l15,
862*795d594fSAndroid Build Coastguard Worker       int i17,
863*795d594fSAndroid Build Coastguard Worker       long l18,
864*795d594fSAndroid Build Coastguard Worker       int i20,
865*795d594fSAndroid Build Coastguard Worker       long l21,
866*795d594fSAndroid Build Coastguard Worker       int i23,
867*795d594fSAndroid Build Coastguard Worker       long l24,
868*795d594fSAndroid Build Coastguard Worker       int i26,
869*795d594fSAndroid Build Coastguard Worker       long l27,
870*795d594fSAndroid Build Coastguard Worker       int i29,
871*795d594fSAndroid Build Coastguard Worker       long l30,
872*795d594fSAndroid Build Coastguard Worker       int i32,
873*795d594fSAndroid Build Coastguard Worker       long l33,
874*795d594fSAndroid Build Coastguard Worker       int i35,
875*795d594fSAndroid Build Coastguard Worker       long l36,
876*795d594fSAndroid Build Coastguard Worker       int i38,
877*795d594fSAndroid Build Coastguard Worker       long l39,
878*795d594fSAndroid Build Coastguard Worker       int i41,
879*795d594fSAndroid Build Coastguard Worker       long l42,
880*795d594fSAndroid Build Coastguard Worker       int i44,
881*795d594fSAndroid Build Coastguard Worker       long l45,
882*795d594fSAndroid Build Coastguard Worker       int i47,
883*795d594fSAndroid Build Coastguard Worker       long l48,
884*795d594fSAndroid Build Coastguard Worker       int i50,
885*795d594fSAndroid Build Coastguard Worker       long l51,
886*795d594fSAndroid Build Coastguard Worker       int i53,
887*795d594fSAndroid Build Coastguard Worker       long l54,
888*795d594fSAndroid Build Coastguard Worker       int i56,
889*795d594fSAndroid Build Coastguard Worker       long l57,
890*795d594fSAndroid Build Coastguard Worker       int i59,
891*795d594fSAndroid Build Coastguard Worker       long l60,
892*795d594fSAndroid Build Coastguard Worker       int i62,
893*795d594fSAndroid Build Coastguard Worker       long l63,
894*795d594fSAndroid Build Coastguard Worker       int i65,
895*795d594fSAndroid Build Coastguard Worker       long l66,
896*795d594fSAndroid Build Coastguard Worker       int i68,
897*795d594fSAndroid Build Coastguard Worker       long l69,
898*795d594fSAndroid Build Coastguard Worker       int i71,
899*795d594fSAndroid Build Coastguard Worker       long l72,
900*795d594fSAndroid Build Coastguard Worker       int i74,
901*795d594fSAndroid Build Coastguard Worker       long l75,
902*795d594fSAndroid Build Coastguard Worker       int i77,
903*795d594fSAndroid Build Coastguard Worker       long l78,
904*795d594fSAndroid Build Coastguard Worker       int i80,
905*795d594fSAndroid Build Coastguard Worker       long l81,
906*795d594fSAndroid Build Coastguard Worker       int i83,
907*795d594fSAndroid Build Coastguard Worker       long l84,
908*795d594fSAndroid Build Coastguard Worker       int i86,
909*795d594fSAndroid Build Coastguard Worker       long l87,
910*795d594fSAndroid Build Coastguard Worker       int i89,
911*795d594fSAndroid Build Coastguard Worker       long l90,
912*795d594fSAndroid Build Coastguard Worker       int i92,
913*795d594fSAndroid Build Coastguard Worker       long l93,
914*795d594fSAndroid Build Coastguard Worker       int i95,
915*795d594fSAndroid Build Coastguard Worker       long l96,
916*795d594fSAndroid Build Coastguard Worker       int i98,
917*795d594fSAndroid Build Coastguard Worker       long l99,
918*795d594fSAndroid Build Coastguard Worker       int i101,
919*795d594fSAndroid Build Coastguard Worker       long l102,
920*795d594fSAndroid Build Coastguard Worker       int i104,
921*795d594fSAndroid Build Coastguard Worker       long l105,
922*795d594fSAndroid Build Coastguard Worker       int i107,
923*795d594fSAndroid Build Coastguard Worker       long l108,
924*795d594fSAndroid Build Coastguard Worker       int i110,
925*795d594fSAndroid Build Coastguard Worker       long l111,
926*795d594fSAndroid Build Coastguard Worker       int i113,
927*795d594fSAndroid Build Coastguard Worker       long l114,
928*795d594fSAndroid Build Coastguard Worker       int i116,
929*795d594fSAndroid Build Coastguard Worker       long l117,
930*795d594fSAndroid Build Coastguard Worker       int i119,
931*795d594fSAndroid Build Coastguard Worker       long l120,
932*795d594fSAndroid Build Coastguard Worker       int i122,
933*795d594fSAndroid Build Coastguard Worker       long l123,
934*795d594fSAndroid Build Coastguard Worker       int i125,
935*795d594fSAndroid Build Coastguard Worker       long l126,
936*795d594fSAndroid Build Coastguard Worker       int i128,
937*795d594fSAndroid Build Coastguard Worker       long l129,
938*795d594fSAndroid Build Coastguard Worker       int i131,
939*795d594fSAndroid Build Coastguard Worker       long l132,
940*795d594fSAndroid Build Coastguard Worker       int i134,
941*795d594fSAndroid Build Coastguard Worker       long l135,
942*795d594fSAndroid Build Coastguard Worker       int i137,
943*795d594fSAndroid Build Coastguard Worker       long l138,
944*795d594fSAndroid Build Coastguard Worker       int i140,
945*795d594fSAndroid Build Coastguard Worker       long l141,
946*795d594fSAndroid Build Coastguard Worker       int i143,
947*795d594fSAndroid Build Coastguard Worker       long l144,
948*795d594fSAndroid Build Coastguard Worker       int i146,
949*795d594fSAndroid Build Coastguard Worker       long l147,
950*795d594fSAndroid Build Coastguard Worker       int i149,
951*795d594fSAndroid Build Coastguard Worker       long l150,
952*795d594fSAndroid Build Coastguard Worker       int i152,
953*795d594fSAndroid Build Coastguard Worker       long l153,
954*795d594fSAndroid Build Coastguard Worker       int i155,
955*795d594fSAndroid Build Coastguard Worker       long l156,
956*795d594fSAndroid Build Coastguard Worker       int i158,
957*795d594fSAndroid Build Coastguard Worker       long l159,
958*795d594fSAndroid Build Coastguard Worker       int i161,
959*795d594fSAndroid Build Coastguard Worker       long l162,
960*795d594fSAndroid Build Coastguard Worker       int i164,
961*795d594fSAndroid Build Coastguard Worker       long l165,
962*795d594fSAndroid Build Coastguard Worker       int i167,
963*795d594fSAndroid Build Coastguard Worker       long l168,
964*795d594fSAndroid Build Coastguard Worker       int i170,
965*795d594fSAndroid Build Coastguard Worker       long l171,
966*795d594fSAndroid Build Coastguard Worker       int i173,
967*795d594fSAndroid Build Coastguard Worker       long l174,
968*795d594fSAndroid Build Coastguard Worker       int i176,
969*795d594fSAndroid Build Coastguard Worker       long l177,
970*795d594fSAndroid Build Coastguard Worker       int i179,
971*795d594fSAndroid Build Coastguard Worker       long l180,
972*795d594fSAndroid Build Coastguard Worker       int i182,
973*795d594fSAndroid Build Coastguard Worker       long l183,
974*795d594fSAndroid Build Coastguard Worker       int i185,
975*795d594fSAndroid Build Coastguard Worker       long l186,
976*795d594fSAndroid Build Coastguard Worker       int i188,
977*795d594fSAndroid Build Coastguard Worker       long l189,
978*795d594fSAndroid Build Coastguard Worker       int i191,
979*795d594fSAndroid Build Coastguard Worker       long l192,
980*795d594fSAndroid Build Coastguard Worker       int i194,
981*795d594fSAndroid Build Coastguard Worker       long l195,
982*795d594fSAndroid Build Coastguard Worker       int i197,
983*795d594fSAndroid Build Coastguard Worker       long l198,
984*795d594fSAndroid Build Coastguard Worker       int i200,
985*795d594fSAndroid Build Coastguard Worker       long l201,
986*795d594fSAndroid Build Coastguard Worker       int i203,
987*795d594fSAndroid Build Coastguard Worker       long l204,
988*795d594fSAndroid Build Coastguard Worker       int i206,
989*795d594fSAndroid Build Coastguard Worker       long l207,
990*795d594fSAndroid Build Coastguard Worker       int i209,
991*795d594fSAndroid Build Coastguard Worker       long l210,
992*795d594fSAndroid Build Coastguard Worker       int i212,
993*795d594fSAndroid Build Coastguard Worker       long l213,
994*795d594fSAndroid Build Coastguard Worker       int i215,
995*795d594fSAndroid Build Coastguard Worker       long l216,
996*795d594fSAndroid Build Coastguard Worker       int i218,
997*795d594fSAndroid Build Coastguard Worker       long l219,
998*795d594fSAndroid Build Coastguard Worker       int i221,
999*795d594fSAndroid Build Coastguard Worker       long l222,
1000*795d594fSAndroid Build Coastguard Worker       int i224,
1001*795d594fSAndroid Build Coastguard Worker       long l225,
1002*795d594fSAndroid Build Coastguard Worker       int i227,
1003*795d594fSAndroid Build Coastguard Worker       long l228,
1004*795d594fSAndroid Build Coastguard Worker       int i230,
1005*795d594fSAndroid Build Coastguard Worker       long l231,
1006*795d594fSAndroid Build Coastguard Worker       int i233,
1007*795d594fSAndroid Build Coastguard Worker       long l234,
1008*795d594fSAndroid Build Coastguard Worker       int i236,
1009*795d594fSAndroid Build Coastguard Worker       long l237,
1010*795d594fSAndroid Build Coastguard Worker       int i239,
1011*795d594fSAndroid Build Coastguard Worker       long l240,
1012*795d594fSAndroid Build Coastguard Worker       int i242,
1013*795d594fSAndroid Build Coastguard Worker       long l243,
1014*795d594fSAndroid Build Coastguard Worker       int i245,
1015*795d594fSAndroid Build Coastguard Worker       long l246,
1016*795d594fSAndroid Build Coastguard Worker       int i248,
1017*795d594fSAndroid Build Coastguard Worker       long l249,
1018*795d594fSAndroid Build Coastguard Worker       int i251,
1019*795d594fSAndroid Build Coastguard Worker       long l252,
1020*795d594fSAndroid Build Coastguard Worker       int i254);
1021*795d594fSAndroid Build Coastguard Worker 
1022*795d594fSAndroid Build Coastguard Worker   // This signature exercises passing FP args in core registers on riscv64.
1023*795d594fSAndroid Build Coastguard Worker   @CriticalNative
nativeDFDFDFDFDFIJ( double d1, float f1, double d2, float f2, double d3, float f3, double d4, float f4, double d5, float f5, int i, long j)1024*795d594fSAndroid Build Coastguard Worker   public static native int nativeDFDFDFDFDFIJ(
1025*795d594fSAndroid Build Coastguard Worker       double d1,
1026*795d594fSAndroid Build Coastguard Worker       float f1,
1027*795d594fSAndroid Build Coastguard Worker       double d2,
1028*795d594fSAndroid Build Coastguard Worker       float f2,
1029*795d594fSAndroid Build Coastguard Worker       double d3,
1030*795d594fSAndroid Build Coastguard Worker       float f3,
1031*795d594fSAndroid Build Coastguard Worker       double d4,
1032*795d594fSAndroid Build Coastguard Worker       float f4,
1033*795d594fSAndroid Build Coastguard Worker       double d5,
1034*795d594fSAndroid Build Coastguard Worker       float f5,
1035*795d594fSAndroid Build Coastguard Worker       int i,
1036*795d594fSAndroid Build Coastguard Worker       long j);
1037*795d594fSAndroid Build Coastguard Worker }
1038*795d594fSAndroid Build Coastguard Worker 
1039*795d594fSAndroid Build Coastguard Worker class CriticalClinitCheck {
1040*795d594fSAndroid Build Coastguard Worker   @CriticalNative
nativeMethodVoid()1041*795d594fSAndroid Build Coastguard Worker   public static native int nativeMethodVoid();
1042*795d594fSAndroid Build Coastguard Worker 
1043*795d594fSAndroid Build Coastguard Worker   @CriticalNative
nativeMethod(int i)1044*795d594fSAndroid Build Coastguard Worker   public static native int nativeMethod(int i);
1045*795d594fSAndroid Build Coastguard Worker 
1046*795d594fSAndroid Build Coastguard Worker   @CriticalNative
nativeMethodWithManyParameters( int i1, long l1, float f1, double d1, int i2, long l2, float f2, double d2, int i3, long l3, float f3, double d3, int i4, long l4, float f4, double d4, int i5, long l5, float f5, double d5, int i6, long l6, float f6, double d6, int i7, long l7, float f7, double d7, int i8, long l8, float f8, double d8)1047*795d594fSAndroid Build Coastguard Worker   public static native int nativeMethodWithManyParameters(
1048*795d594fSAndroid Build Coastguard Worker       int i1, long l1, float f1, double d1,
1049*795d594fSAndroid Build Coastguard Worker       int i2, long l2, float f2, double d2,
1050*795d594fSAndroid Build Coastguard Worker       int i3, long l3, float f3, double d3,
1051*795d594fSAndroid Build Coastguard Worker       int i4, long l4, float f4, double d4,
1052*795d594fSAndroid Build Coastguard Worker       int i5, long l5, float f5, double d5,
1053*795d594fSAndroid Build Coastguard Worker       int i6, long l6, float f6, double d6,
1054*795d594fSAndroid Build Coastguard Worker       int i7, long l7, float f7, double d7,
1055*795d594fSAndroid Build Coastguard Worker       int i8, long l8, float f8, double d8);
1056*795d594fSAndroid Build Coastguard Worker 
1057*795d594fSAndroid Build Coastguard Worker   static {
Main.initializingCriticalClinitCheck()1058*795d594fSAndroid Build Coastguard Worker     Main.initializingCriticalClinitCheck();
1059*795d594fSAndroid Build Coastguard Worker   }
1060*795d594fSAndroid Build Coastguard Worker }
1061*795d594fSAndroid Build Coastguard Worker 
1062*795d594fSAndroid Build Coastguard Worker class B181736463Error extends Error {
1063*795d594fSAndroid Build Coastguard Worker }
1064*795d594fSAndroid Build Coastguard Worker 
1065*795d594fSAndroid Build Coastguard Worker class BadClassB181736463 {
1066*795d594fSAndroid Build Coastguard Worker   static {
1067*795d594fSAndroid Build Coastguard Worker     // Deliberately throw from class initializer.
1068*795d594fSAndroid Build Coastguard Worker     if (true) {
B181736463Error()1069*795d594fSAndroid Build Coastguard Worker       throw new B181736463Error();
1070*795d594fSAndroid Build Coastguard Worker     }
1071*795d594fSAndroid Build Coastguard Worker   }
1072*795d594fSAndroid Build Coastguard Worker 
nativeMethodVoid()1073*795d594fSAndroid Build Coastguard Worker   public static native int nativeMethodVoid();
1074*795d594fSAndroid Build Coastguard Worker }
1075