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