1*795d594fSAndroid Build Coastguard Worker /* 2*795d594fSAndroid Build Coastguard Worker * Copyright (C) 2011 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 // clang-format off 18*795d594fSAndroid Build Coastguard Worker 19*795d594fSAndroid Build Coastguard Worker class Main extends IntMathBase { 20*795d594fSAndroid Build Coastguard Worker 21*795d594fSAndroid Build Coastguard Worker public static boolean mBoolean1, mBoolean2; 22*795d594fSAndroid Build Coastguard Worker public static byte mByte1, mByte2; 23*795d594fSAndroid Build Coastguard Worker public static char mChar1, mChar2; 24*795d594fSAndroid Build Coastguard Worker public static short mShort1, mShort2; 25*795d594fSAndroid Build Coastguard Worker public static int mInt1, mInt2; 26*795d594fSAndroid Build Coastguard Worker public static float mFloat1, mFloat2; 27*795d594fSAndroid Build Coastguard Worker public static long mLong1, mLong2; 28*795d594fSAndroid Build Coastguard Worker public static double mDouble1, mDouble2; 29*795d594fSAndroid Build Coastguard Worker public static volatile long mVolatileLong1, mVolatileLong2; 30*795d594fSAndroid Build Coastguard Worker 31*795d594fSAndroid Build Coastguard Worker 32*795d594fSAndroid Build Coastguard Worker private int foo_; 33*795d594fSAndroid Build Coastguard Worker Main(int stuff)34*795d594fSAndroid Build Coastguard Worker public Main(int stuff) { 35*795d594fSAndroid Build Coastguard Worker super(); 36*795d594fSAndroid Build Coastguard Worker foo_ = stuff; 37*795d594fSAndroid Build Coastguard Worker } 38*795d594fSAndroid Build Coastguard Worker Main()39*795d594fSAndroid Build Coastguard Worker public Main() { 40*795d594fSAndroid Build Coastguard Worker super(); 41*795d594fSAndroid Build Coastguard Worker foo_ = 123; 42*795d594fSAndroid Build Coastguard Worker } 43*795d594fSAndroid Build Coastguard Worker 44*795d594fSAndroid Build Coastguard Worker /* Regression test: triggered an SSA renaming bug. */ divideLongByBillion(long a)45*795d594fSAndroid Build Coastguard Worker static long divideLongByBillion(long a) { 46*795d594fSAndroid Build Coastguard Worker long quot; 47*795d594fSAndroid Build Coastguard Worker long rem; 48*795d594fSAndroid Build Coastguard Worker 49*795d594fSAndroid Build Coastguard Worker if (a >= 0) { 50*795d594fSAndroid Build Coastguard Worker long bLong = 1000000000L; 51*795d594fSAndroid Build Coastguard Worker quot = (a / bLong); 52*795d594fSAndroid Build Coastguard Worker rem = (a % bLong); 53*795d594fSAndroid Build Coastguard Worker } else { 54*795d594fSAndroid Build Coastguard Worker /* 55*795d594fSAndroid Build Coastguard Worker * Make the dividend positive shifting it right by 1 bit then get 56*795d594fSAndroid Build Coastguard Worker * the quotient an remainder and correct them properly 57*795d594fSAndroid Build Coastguard Worker */ 58*795d594fSAndroid Build Coastguard Worker long aPos = a >>> 1; 59*795d594fSAndroid Build Coastguard Worker long bPos = 1000000000L >>> 1; 60*795d594fSAndroid Build Coastguard Worker quot = aPos / bPos; 61*795d594fSAndroid Build Coastguard Worker rem = aPos % bPos; 62*795d594fSAndroid Build Coastguard Worker // double the remainder and add 1 if 'a' is odd 63*795d594fSAndroid Build Coastguard Worker rem = (rem << 1) + (a & 1); 64*795d594fSAndroid Build Coastguard Worker } 65*795d594fSAndroid Build Coastguard Worker return ((rem << 32) | (quot & 0xFFFFFFFFL)); 66*795d594fSAndroid Build Coastguard Worker } 67*795d594fSAndroid Build Coastguard Worker 68*795d594fSAndroid Build Coastguard Worker instanceTest(int x)69*795d594fSAndroid Build Coastguard Worker static int instanceTest(int x) { 70*795d594fSAndroid Build Coastguard Worker IntMathBase a = new IntMathBase(); 71*795d594fSAndroid Build Coastguard Worker Main b = new Main(); 72*795d594fSAndroid Build Coastguard Worker 73*795d594fSAndroid Build Coastguard Worker if (!(null instanceof IntMathBase)) { 74*795d594fSAndroid Build Coastguard Worker x = x + 42; 75*795d594fSAndroid Build Coastguard Worker } 76*795d594fSAndroid Build Coastguard Worker 77*795d594fSAndroid Build Coastguard Worker if (a instanceof IntMathBase) { 78*795d594fSAndroid Build Coastguard Worker x = x * 2; 79*795d594fSAndroid Build Coastguard Worker } 80*795d594fSAndroid Build Coastguard Worker 81*795d594fSAndroid Build Coastguard Worker if (a instanceof Main) { 82*795d594fSAndroid Build Coastguard Worker x = x + 13; 83*795d594fSAndroid Build Coastguard Worker } 84*795d594fSAndroid Build Coastguard Worker 85*795d594fSAndroid Build Coastguard Worker if (b instanceof IntMathBase) { 86*795d594fSAndroid Build Coastguard Worker x = x -1; 87*795d594fSAndroid Build Coastguard Worker } 88*795d594fSAndroid Build Coastguard Worker 89*795d594fSAndroid Build Coastguard Worker if (b instanceof Main) { 90*795d594fSAndroid Build Coastguard Worker x = x + 1333; 91*795d594fSAndroid Build Coastguard Worker } 92*795d594fSAndroid Build Coastguard Worker return x; 93*795d594fSAndroid Build Coastguard Worker } 94*795d594fSAndroid Build Coastguard Worker tryThing()95*795d594fSAndroid Build Coastguard Worker int tryThing() { 96*795d594fSAndroid Build Coastguard Worker int val = super.tryThing(); 97*795d594fSAndroid Build Coastguard Worker return val + 10; 98*795d594fSAndroid Build Coastguard Worker } 99*795d594fSAndroid Build Coastguard Worker superTest(int x)100*795d594fSAndroid Build Coastguard Worker static int superTest(int x) { 101*795d594fSAndroid Build Coastguard Worker Main instance = new Main(); 102*795d594fSAndroid Build Coastguard Worker Main base = instance; 103*795d594fSAndroid Build Coastguard Worker int val1 = instance.tryThing(); 104*795d594fSAndroid Build Coastguard Worker int val2 = base.tryThing(); 105*795d594fSAndroid Build Coastguard Worker return val1 + val2 + x; 106*795d594fSAndroid Build Coastguard Worker } 107*795d594fSAndroid Build Coastguard Worker constClassTest(int x)108*795d594fSAndroid Build Coastguard Worker static int constClassTest(int x) { 109*795d594fSAndroid Build Coastguard Worker Class<?> c = String.class; 110*795d594fSAndroid Build Coastguard Worker if (c != null) { 111*795d594fSAndroid Build Coastguard Worker return x * 2; 112*795d594fSAndroid Build Coastguard Worker } else { 113*795d594fSAndroid Build Coastguard Worker return x; 114*795d594fSAndroid Build Coastguard Worker } 115*795d594fSAndroid Build Coastguard Worker } 116*795d594fSAndroid Build Coastguard Worker constStringTest(int x)117*795d594fSAndroid Build Coastguard Worker static int constStringTest(int x) { 118*795d594fSAndroid Build Coastguard Worker String str = "Hello World!"; 119*795d594fSAndroid Build Coastguard Worker return x + str.length(); 120*795d594fSAndroid Build Coastguard Worker } 121*795d594fSAndroid Build Coastguard Worker throwNullPointerException()122*795d594fSAndroid Build Coastguard Worker static void throwNullPointerException() { 123*795d594fSAndroid Build Coastguard Worker throw new NullPointerException(); 124*795d594fSAndroid Build Coastguard Worker } 125*795d594fSAndroid Build Coastguard Worker throwImplicitNullPointerException()126*795d594fSAndroid Build Coastguard Worker static void throwImplicitNullPointerException() { 127*795d594fSAndroid Build Coastguard Worker throw null; 128*795d594fSAndroid Build Coastguard Worker } 129*795d594fSAndroid Build Coastguard Worker catchBlock(int x)130*795d594fSAndroid Build Coastguard Worker static int catchBlock(int x) { 131*795d594fSAndroid Build Coastguard Worker try { 132*795d594fSAndroid Build Coastguard Worker if (x == 1000) { 133*795d594fSAndroid Build Coastguard Worker x += 123; 134*795d594fSAndroid Build Coastguard Worker throwNullPointerException(); 135*795d594fSAndroid Build Coastguard Worker } else { 136*795d594fSAndroid Build Coastguard Worker x += 321; 137*795d594fSAndroid Build Coastguard Worker throwImplicitNullPointerException(); 138*795d594fSAndroid Build Coastguard Worker } 139*795d594fSAndroid Build Coastguard Worker } catch (NullPointerException npe) { 140*795d594fSAndroid Build Coastguard Worker x += 456; 141*795d594fSAndroid Build Coastguard Worker } 142*795d594fSAndroid Build Coastguard Worker return x; 143*795d594fSAndroid Build Coastguard Worker } 144*795d594fSAndroid Build Coastguard Worker catchBlockNoThrow(int x)145*795d594fSAndroid Build Coastguard Worker static int catchBlockNoThrow(int x) { 146*795d594fSAndroid Build Coastguard Worker try { 147*795d594fSAndroid Build Coastguard Worker x += 123; 148*795d594fSAndroid Build Coastguard Worker } catch (NullPointerException npe) { 149*795d594fSAndroid Build Coastguard Worker x += 456; 150*795d594fSAndroid Build Coastguard Worker } 151*795d594fSAndroid Build Coastguard Worker return x; 152*795d594fSAndroid Build Coastguard Worker } 153*795d594fSAndroid Build Coastguard Worker staticFieldTest(int x)154*795d594fSAndroid Build Coastguard Worker static int staticFieldTest(int x) { 155*795d594fSAndroid Build Coastguard Worker mBoolean1 = true; 156*795d594fSAndroid Build Coastguard Worker mBoolean2 = false; 157*795d594fSAndroid Build Coastguard Worker mByte1 = 127; 158*795d594fSAndroid Build Coastguard Worker mByte2 = -128; 159*795d594fSAndroid Build Coastguard Worker mChar1 = 32767; 160*795d594fSAndroid Build Coastguard Worker mChar2 = 65535; 161*795d594fSAndroid Build Coastguard Worker mShort1 = 32767; 162*795d594fSAndroid Build Coastguard Worker mShort2 = -32768; 163*795d594fSAndroid Build Coastguard Worker mInt1 = 65537; 164*795d594fSAndroid Build Coastguard Worker mInt2 = -65537; 165*795d594fSAndroid Build Coastguard Worker mFloat1 = 3.1415f; 166*795d594fSAndroid Build Coastguard Worker mFloat2 = -1.0f / 0.0f; // -inf 167*795d594fSAndroid Build Coastguard Worker mLong1 = 1234605616436508552L; // 0x1122334455667788 168*795d594fSAndroid Build Coastguard Worker mLong2 = -1234605616436508552L; 169*795d594fSAndroid Build Coastguard Worker mDouble1 = 3.1415926535; 170*795d594fSAndroid Build Coastguard Worker mDouble2 = 1.0 / 0.0; // +inf 171*795d594fSAndroid Build Coastguard Worker mVolatileLong1 = mLong1 - 1; 172*795d594fSAndroid Build Coastguard Worker mVolatileLong2 = mLong2 + 1; 173*795d594fSAndroid Build Coastguard Worker 174*795d594fSAndroid Build Coastguard Worker if (!mBoolean1) { return 10; } 175*795d594fSAndroid Build Coastguard Worker if (mBoolean2) { return 11; } 176*795d594fSAndroid Build Coastguard Worker if (mByte1 != 127) { return 12; } 177*795d594fSAndroid Build Coastguard Worker if (mByte2 != -128) { return 13; } 178*795d594fSAndroid Build Coastguard Worker if (mChar1 != 32767) { return 14; } 179*795d594fSAndroid Build Coastguard Worker if (mChar2 != 65535) { return 15; } 180*795d594fSAndroid Build Coastguard Worker if (mShort1 != 32767) { return 16; } 181*795d594fSAndroid Build Coastguard Worker if (mShort2 != -32768) { return 17; } 182*795d594fSAndroid Build Coastguard Worker if (mInt1 != 65537) { return 18; } 183*795d594fSAndroid Build Coastguard Worker if (mInt2 != -65537) { return 19; } 184*795d594fSAndroid Build Coastguard Worker if (!(mFloat1 > 3.141f && mFloat1 < 3.142f)) { return 20; } 185*795d594fSAndroid Build Coastguard Worker if (mFloat2 >= mFloat1) { return 21; } 186*795d594fSAndroid Build Coastguard Worker if (mLong1 != 1234605616436508552L) { return 22; } 187*795d594fSAndroid Build Coastguard Worker if (mLong2 != -1234605616436508552L) { return 23; } 188*795d594fSAndroid Build Coastguard Worker if (!(mDouble1 > 3.141592653 && mDouble1 < 3.141592654)) { return 24; } 189*795d594fSAndroid Build Coastguard Worker if (mDouble2 <= mDouble1) { return 25; } 190*795d594fSAndroid Build Coastguard Worker if (mVolatileLong1 != 1234605616436508551L) { return 26; } 191*795d594fSAndroid Build Coastguard Worker if (mVolatileLong2 != -1234605616436508551L) { return 27; } 192*795d594fSAndroid Build Coastguard Worker 193*795d594fSAndroid Build Coastguard Worker return 1000 + x; 194*795d594fSAndroid Build Coastguard Worker } 195*795d594fSAndroid Build Coastguard Worker 196*795d594fSAndroid Build Coastguard Worker /* 197*795d594fSAndroid Build Coastguard Worker * Try to cause some unary operations. 198*795d594fSAndroid Build Coastguard Worker */ unopTest(int x)199*795d594fSAndroid Build Coastguard Worker static int unopTest(int x) { 200*795d594fSAndroid Build Coastguard Worker x = -x; 201*795d594fSAndroid Build Coastguard Worker x ^= 0xffffffff; 202*795d594fSAndroid Build Coastguard Worker return x; 203*795d594fSAndroid Build Coastguard Worker } 204*795d594fSAndroid Build Coastguard Worker shiftTest1()205*795d594fSAndroid Build Coastguard Worker static int shiftTest1() { 206*795d594fSAndroid Build Coastguard Worker final int[] mBytes = { 207*795d594fSAndroid Build Coastguard Worker 0x11, 0x22, 0x33, 0x44, 0x88, 0x99, 0xaa, 0xbb 208*795d594fSAndroid Build Coastguard Worker }; 209*795d594fSAndroid Build Coastguard Worker long l; 210*795d594fSAndroid Build Coastguard Worker int i1, i2; 211*795d594fSAndroid Build Coastguard Worker 212*795d594fSAndroid Build Coastguard Worker if (mBytes[0] != 0x11) return 20; 213*795d594fSAndroid Build Coastguard Worker if (mBytes[1] != 0x22) return 21; 214*795d594fSAndroid Build Coastguard Worker if (mBytes[2] != 0x33) return 22; 215*795d594fSAndroid Build Coastguard Worker if (mBytes[3] != 0x44) return 23; 216*795d594fSAndroid Build Coastguard Worker if (mBytes[4] != 0x88) return 24; 217*795d594fSAndroid Build Coastguard Worker if (mBytes[5] != 0x99) return 25; 218*795d594fSAndroid Build Coastguard Worker if (mBytes[6] != 0xaa) return 26; 219*795d594fSAndroid Build Coastguard Worker if (mBytes[7] != 0xbb) return 27; 220*795d594fSAndroid Build Coastguard Worker 221*795d594fSAndroid Build Coastguard Worker i1 = mBytes[0] | mBytes[1] << 8 | mBytes[2] << 16 | mBytes[3] << 24; 222*795d594fSAndroid Build Coastguard Worker i2 = mBytes[4] | mBytes[5] << 8 | mBytes[6] << 16 | mBytes[7] << 24; 223*795d594fSAndroid Build Coastguard Worker l = i1 | ((long)i2 << 32); 224*795d594fSAndroid Build Coastguard Worker 225*795d594fSAndroid Build Coastguard Worker if (i1 != 0x44332211) { return 0x80000000 | i1; } 226*795d594fSAndroid Build Coastguard Worker if (i2 != 0xbbaa9988) { return 2; } 227*795d594fSAndroid Build Coastguard Worker if (l != 0xbbaa998844332211L) { return 3; } 228*795d594fSAndroid Build Coastguard Worker 229*795d594fSAndroid Build Coastguard Worker l = (long)mBytes[0] 230*795d594fSAndroid Build Coastguard Worker | (long)mBytes[1] << 8 231*795d594fSAndroid Build Coastguard Worker | (long)mBytes[2] << 16 232*795d594fSAndroid Build Coastguard Worker | (long)mBytes[3] << 24 233*795d594fSAndroid Build Coastguard Worker | (long)mBytes[4] << 32 234*795d594fSAndroid Build Coastguard Worker | (long)mBytes[5] << 40 235*795d594fSAndroid Build Coastguard Worker | (long)mBytes[6] << 48 236*795d594fSAndroid Build Coastguard Worker | (long)mBytes[7] << 56; 237*795d594fSAndroid Build Coastguard Worker 238*795d594fSAndroid Build Coastguard Worker if (l != 0xbbaa998844332211L) { return 4; } 239*795d594fSAndroid Build Coastguard Worker return 0; 240*795d594fSAndroid Build Coastguard Worker } 241*795d594fSAndroid Build Coastguard Worker shiftTest2()242*795d594fSAndroid Build Coastguard Worker static int shiftTest2() { 243*795d594fSAndroid Build Coastguard Worker 244*795d594fSAndroid Build Coastguard Worker long a = 0x11; 245*795d594fSAndroid Build Coastguard Worker long b = 0x22; 246*795d594fSAndroid Build Coastguard Worker long c = 0x33; 247*795d594fSAndroid Build Coastguard Worker long d = 0x44; 248*795d594fSAndroid Build Coastguard Worker long e = 0x55; 249*795d594fSAndroid Build Coastguard Worker long f = 0x66; 250*795d594fSAndroid Build Coastguard Worker long g = 0x77; 251*795d594fSAndroid Build Coastguard Worker long h = 0x88; 252*795d594fSAndroid Build Coastguard Worker 253*795d594fSAndroid Build Coastguard Worker long result = ((a << 56) | (b << 48) | (c << 40) | (d << 32) | 254*795d594fSAndroid Build Coastguard Worker (e << 24) | (f << 16) | (g << 8) | h); 255*795d594fSAndroid Build Coastguard Worker 256*795d594fSAndroid Build Coastguard Worker if (result != 0x1122334455667788L) { return 1; } 257*795d594fSAndroid Build Coastguard Worker return 0; 258*795d594fSAndroid Build Coastguard Worker } 259*795d594fSAndroid Build Coastguard Worker unsignedShiftTest()260*795d594fSAndroid Build Coastguard Worker static int unsignedShiftTest() { 261*795d594fSAndroid Build Coastguard Worker byte b = -4; 262*795d594fSAndroid Build Coastguard Worker short s = -4; 263*795d594fSAndroid Build Coastguard Worker char c = 0xfffc; 264*795d594fSAndroid Build Coastguard Worker int i = -4; 265*795d594fSAndroid Build Coastguard Worker 266*795d594fSAndroid Build Coastguard Worker b >>>= 4; 267*795d594fSAndroid Build Coastguard Worker s >>>= 4; 268*795d594fSAndroid Build Coastguard Worker c >>>= 4; 269*795d594fSAndroid Build Coastguard Worker i >>>= 4; 270*795d594fSAndroid Build Coastguard Worker 271*795d594fSAndroid Build Coastguard Worker if ((int) b != -1) { return 1; } 272*795d594fSAndroid Build Coastguard Worker if ((int) s != -1) { return 2; } 273*795d594fSAndroid Build Coastguard Worker if ((int) c != 0x0fff) { return 3; } 274*795d594fSAndroid Build Coastguard Worker if (i != 268435455) { return 4; } 275*795d594fSAndroid Build Coastguard Worker return 0; 276*795d594fSAndroid Build Coastguard Worker } 277*795d594fSAndroid Build Coastguard Worker convTest()278*795d594fSAndroid Build Coastguard Worker static int convTest() { 279*795d594fSAndroid Build Coastguard Worker 280*795d594fSAndroid Build Coastguard Worker float f; 281*795d594fSAndroid Build Coastguard Worker double d; 282*795d594fSAndroid Build Coastguard Worker int i; 283*795d594fSAndroid Build Coastguard Worker long l; 284*795d594fSAndroid Build Coastguard Worker 285*795d594fSAndroid Build Coastguard Worker /* int --> long */ 286*795d594fSAndroid Build Coastguard Worker i = 7654; 287*795d594fSAndroid Build Coastguard Worker l = (long) i; 288*795d594fSAndroid Build Coastguard Worker if (l != 7654L) { return 1; } 289*795d594fSAndroid Build Coastguard Worker 290*795d594fSAndroid Build Coastguard Worker i = -7654; 291*795d594fSAndroid Build Coastguard Worker l = (long) i; 292*795d594fSAndroid Build Coastguard Worker if (l != -7654L) { return 2; } 293*795d594fSAndroid Build Coastguard Worker 294*795d594fSAndroid Build Coastguard Worker /* long --> int (with truncation) */ 295*795d594fSAndroid Build Coastguard Worker l = 5678956789L; 296*795d594fSAndroid Build Coastguard Worker i = (int) l; 297*795d594fSAndroid Build Coastguard Worker if (i != 1383989493) { return 3; } 298*795d594fSAndroid Build Coastguard Worker 299*795d594fSAndroid Build Coastguard Worker l = -5678956789L; 300*795d594fSAndroid Build Coastguard Worker i = (int) l; 301*795d594fSAndroid Build Coastguard Worker if (i != -1383989493) { return 4; } 302*795d594fSAndroid Build Coastguard Worker 303*795d594fSAndroid Build Coastguard Worker /* long --> double */ 304*795d594fSAndroid Build Coastguard Worker l = 0x7FFFFFFFL; 305*795d594fSAndroid Build Coastguard Worker d = (double) l; 306*795d594fSAndroid Build Coastguard Worker if (Double.doubleToRawLongBits(d) != 0x41dfffffffc00000L) { return 5; } 307*795d594fSAndroid Build Coastguard Worker 308*795d594fSAndroid Build Coastguard Worker l = 0xFFFFFFFFL; 309*795d594fSAndroid Build Coastguard Worker d = (double) l; 310*795d594fSAndroid Build Coastguard Worker if (Double.doubleToRawLongBits(d) != 0x41efffffffe00000L) { return 6; } 311*795d594fSAndroid Build Coastguard Worker 312*795d594fSAndroid Build Coastguard Worker l = 0x7FFFFFFFFFFFFFFFL; 313*795d594fSAndroid Build Coastguard Worker d = (double) l; 314*795d594fSAndroid Build Coastguard Worker if (Double.doubleToRawLongBits(d) != 0x43e0000000000000L) { return 7; } 315*795d594fSAndroid Build Coastguard Worker 316*795d594fSAndroid Build Coastguard Worker l = 0xFFFFFFFFFFFFFFFFL; 317*795d594fSAndroid Build Coastguard Worker d = (double) l; 318*795d594fSAndroid Build Coastguard Worker if (Double.doubleToRawLongBits(d) != 0xbff0000000000000L) { return 8; } 319*795d594fSAndroid Build Coastguard Worker 320*795d594fSAndroid Build Coastguard Worker return 0; 321*795d594fSAndroid Build Coastguard Worker } 322*795d594fSAndroid Build Coastguard Worker charSubTest()323*795d594fSAndroid Build Coastguard Worker static int charSubTest() { 324*795d594fSAndroid Build Coastguard Worker 325*795d594fSAndroid Build Coastguard Worker char char1 = 0x00e9; 326*795d594fSAndroid Build Coastguard Worker char char2 = 0xffff; 327*795d594fSAndroid Build Coastguard Worker int i; 328*795d594fSAndroid Build Coastguard Worker 329*795d594fSAndroid Build Coastguard Worker /* chars are unsigned-expanded to ints before subtraction */ 330*795d594fSAndroid Build Coastguard Worker i = char1 - char2; 331*795d594fSAndroid Build Coastguard Worker if (i != 0xffff00ea) { return 1; } 332*795d594fSAndroid Build Coastguard Worker return 0; 333*795d594fSAndroid Build Coastguard Worker } 334*795d594fSAndroid Build Coastguard Worker 335*795d594fSAndroid Build Coastguard Worker /* 336*795d594fSAndroid Build Coastguard Worker * We pass in the arguments and return the results so the compiler 337*795d594fSAndroid Build Coastguard Worker * doesn't do the math for us. (x=70000, y=-3) 338*795d594fSAndroid Build Coastguard Worker */ intOperTest(int x, int y)339*795d594fSAndroid Build Coastguard Worker static int intOperTest(int x, int y) { 340*795d594fSAndroid Build Coastguard Worker int[] results = new int[10]; 341*795d594fSAndroid Build Coastguard Worker 342*795d594fSAndroid Build Coastguard Worker /* this seems to generate "op-int" instructions */ 343*795d594fSAndroid Build Coastguard Worker results[0] = x + y; 344*795d594fSAndroid Build Coastguard Worker results[1] = x - y; 345*795d594fSAndroid Build Coastguard Worker results[2] = x * y; 346*795d594fSAndroid Build Coastguard Worker results[3] = x * x; 347*795d594fSAndroid Build Coastguard Worker results[4] = x / y; 348*795d594fSAndroid Build Coastguard Worker results[5] = x % -y; 349*795d594fSAndroid Build Coastguard Worker results[6] = x & y; 350*795d594fSAndroid Build Coastguard Worker results[7] = x | y; 351*795d594fSAndroid Build Coastguard Worker results[8] = x ^ y; 352*795d594fSAndroid Build Coastguard Worker 353*795d594fSAndroid Build Coastguard Worker /* this seems to generate "op-int/2addr" instructions */ 354*795d594fSAndroid Build Coastguard Worker results[9] = x + ((((((((x + y) - y) * y) / y) % y) & y) | y) ^ y); 355*795d594fSAndroid Build Coastguard Worker 356*795d594fSAndroid Build Coastguard Worker /* check this edge case while we're here (div-int/2addr) */ 357*795d594fSAndroid Build Coastguard Worker int minInt = -2147483648; 358*795d594fSAndroid Build Coastguard Worker int negOne = -results[5]; 359*795d594fSAndroid Build Coastguard Worker int plusOne = 1; 360*795d594fSAndroid Build Coastguard Worker int result = (((minInt + plusOne) - plusOne) / negOne) / negOne; 361*795d594fSAndroid Build Coastguard Worker int shouldBeZero = minInt % negOne; 362*795d594fSAndroid Build Coastguard Worker 363*795d594fSAndroid Build Coastguard Worker if (result != minInt) { return 1;}; 364*795d594fSAndroid Build Coastguard Worker if (results[0] != 69997) { return 2;}; 365*795d594fSAndroid Build Coastguard Worker if (results[1] != 70003) { return 3;}; 366*795d594fSAndroid Build Coastguard Worker if (results[2] != -210000) { return 4;}; 367*795d594fSAndroid Build Coastguard Worker if (results[3] != 605032704) { return 5;}; 368*795d594fSAndroid Build Coastguard Worker if (results[4] != -23333) { return 6;}; 369*795d594fSAndroid Build Coastguard Worker if (results[5] != 1) { return 7;}; 370*795d594fSAndroid Build Coastguard Worker if (results[6] != 70000) { return 8;}; 371*795d594fSAndroid Build Coastguard Worker if (results[7] != -3) { return 9;}; 372*795d594fSAndroid Build Coastguard Worker if (results[8] != -70003) { return 10;}; 373*795d594fSAndroid Build Coastguard Worker if (results[9] != 70000) { return 11;}; 374*795d594fSAndroid Build Coastguard Worker if (shouldBeZero != 0) { return 12;}; 375*795d594fSAndroid Build Coastguard Worker 376*795d594fSAndroid Build Coastguard Worker return 0; 377*795d594fSAndroid Build Coastguard Worker } 378*795d594fSAndroid Build Coastguard Worker 379*795d594fSAndroid Build Coastguard Worker /* 380*795d594fSAndroid Build Coastguard Worker * More operations, this time with 16-bit constants. (x=77777) 381*795d594fSAndroid Build Coastguard Worker */ lit16Test(int x)382*795d594fSAndroid Build Coastguard Worker static int lit16Test(int x) { 383*795d594fSAndroid Build Coastguard Worker 384*795d594fSAndroid Build Coastguard Worker int[] results = new int[10]; 385*795d594fSAndroid Build Coastguard Worker 386*795d594fSAndroid Build Coastguard Worker /* try to generate op-int/lit16" instructions */ 387*795d594fSAndroid Build Coastguard Worker results[0] = x + 1000; 388*795d594fSAndroid Build Coastguard Worker results[1] = 1000 - x; 389*795d594fSAndroid Build Coastguard Worker results[2] = x * 1000; 390*795d594fSAndroid Build Coastguard Worker results[3] = x / 1000; 391*795d594fSAndroid Build Coastguard Worker results[4] = x % 1000; 392*795d594fSAndroid Build Coastguard Worker results[5] = x & 1000; 393*795d594fSAndroid Build Coastguard Worker results[6] = x | -1000; 394*795d594fSAndroid Build Coastguard Worker results[7] = x ^ -1000; 395*795d594fSAndroid Build Coastguard Worker /* use an 16-bit constant that has its MSB (bit-15) set */ 396*795d594fSAndroid Build Coastguard Worker results[8] = x / 32769; 397*795d594fSAndroid Build Coastguard Worker results[9] = x / -32769; 398*795d594fSAndroid Build Coastguard Worker 399*795d594fSAndroid Build Coastguard Worker if (results[0] != 78777) { return 1; } 400*795d594fSAndroid Build Coastguard Worker if (results[1] != -76777) { return 2; } 401*795d594fSAndroid Build Coastguard Worker if (results[2] != 77777000) { return 3; } 402*795d594fSAndroid Build Coastguard Worker if (results[3] != 77) { return 4; } 403*795d594fSAndroid Build Coastguard Worker if (results[4] != 777) { return 5; } 404*795d594fSAndroid Build Coastguard Worker if (results[5] != 960) { return 6; } 405*795d594fSAndroid Build Coastguard Worker if (results[6] != -39) { return 7; } 406*795d594fSAndroid Build Coastguard Worker if (results[7] != -76855) { return 8; } 407*795d594fSAndroid Build Coastguard Worker if (results[8] != 2) { return 9; } 408*795d594fSAndroid Build Coastguard Worker if (results[9] != -2) { return 10; } 409*795d594fSAndroid Build Coastguard Worker return 0; 410*795d594fSAndroid Build Coastguard Worker } 411*795d594fSAndroid Build Coastguard Worker 412*795d594fSAndroid Build Coastguard Worker /* 413*795d594fSAndroid Build Coastguard Worker * More operations, this time with 8-bit constants. (x=-55555) 414*795d594fSAndroid Build Coastguard Worker */ lit8Test(int x)415*795d594fSAndroid Build Coastguard Worker static int lit8Test(int x) { 416*795d594fSAndroid Build Coastguard Worker 417*795d594fSAndroid Build Coastguard Worker int[] results = new int[9]; 418*795d594fSAndroid Build Coastguard Worker 419*795d594fSAndroid Build Coastguard Worker /* try to generate op-int/lit8" instructions */ 420*795d594fSAndroid Build Coastguard Worker results[0] = x + 10; 421*795d594fSAndroid Build Coastguard Worker results[1] = 10 - x; 422*795d594fSAndroid Build Coastguard Worker results[2] = x * 10; 423*795d594fSAndroid Build Coastguard Worker results[3] = x / 10; 424*795d594fSAndroid Build Coastguard Worker results[4] = x % 10; 425*795d594fSAndroid Build Coastguard Worker results[5] = x & 10; 426*795d594fSAndroid Build Coastguard Worker results[6] = x | -10; 427*795d594fSAndroid Build Coastguard Worker results[7] = x ^ -10; 428*795d594fSAndroid Build Coastguard Worker results[8] = x * -256; 429*795d594fSAndroid Build Coastguard Worker int minInt = -2147483648; 430*795d594fSAndroid Build Coastguard Worker int result = minInt / -1; 431*795d594fSAndroid Build Coastguard Worker if (result != minInt) {return 1; } 432*795d594fSAndroid Build Coastguard Worker if (results[0] != -55545) {return 2; } 433*795d594fSAndroid Build Coastguard Worker if (results[1] != 55565) {return 3; } 434*795d594fSAndroid Build Coastguard Worker if (results[2] != -555550) {return 4; } 435*795d594fSAndroid Build Coastguard Worker if (results[3] != -5555) {return 5; } 436*795d594fSAndroid Build Coastguard Worker if (results[4] != -5) {return 6; } 437*795d594fSAndroid Build Coastguard Worker if (results[5] != 8) {return 7; } 438*795d594fSAndroid Build Coastguard Worker if (results[6] != -1) {return 8; } 439*795d594fSAndroid Build Coastguard Worker if (results[7] != 55563) {return 9; } 440*795d594fSAndroid Build Coastguard Worker if (results[8] != 14222080) {return 10; } 441*795d594fSAndroid Build Coastguard Worker return 0; 442*795d594fSAndroid Build Coastguard Worker } 443*795d594fSAndroid Build Coastguard Worker 444*795d594fSAndroid Build Coastguard Worker 445*795d594fSAndroid Build Coastguard Worker /* 446*795d594fSAndroid Build Coastguard Worker * Shift some data. (value=0xff00aa01, dist=8) 447*795d594fSAndroid Build Coastguard Worker */ intShiftTest(int value, int dist)448*795d594fSAndroid Build Coastguard Worker static int intShiftTest(int value, int dist) { 449*795d594fSAndroid Build Coastguard Worker int results[] = new int[4]; 450*795d594fSAndroid Build Coastguard Worker results[0] = value << dist; 451*795d594fSAndroid Build Coastguard Worker results[1] = value >> dist; 452*795d594fSAndroid Build Coastguard Worker results[2] = value >>> dist; 453*795d594fSAndroid Build Coastguard Worker results[3] = (((value << dist) >> dist) >>> dist) << dist; 454*795d594fSAndroid Build Coastguard Worker if (results[0] != 0x00aa0100) {return 1; } 455*795d594fSAndroid Build Coastguard Worker if (results[1] != 0xffff00aa) {return 2; } 456*795d594fSAndroid Build Coastguard Worker if (results[2] != 0x00ff00aa) {return 3; } 457*795d594fSAndroid Build Coastguard Worker if (results[3] != 0xaa00) {return 4; } 458*795d594fSAndroid Build Coastguard Worker return 0; 459*795d594fSAndroid Build Coastguard Worker } 460*795d594fSAndroid Build Coastguard Worker 461*795d594fSAndroid Build Coastguard Worker /* 462*795d594fSAndroid Build Coastguard Worker * We pass in the arguments and return the results so the compiler 463*795d594fSAndroid Build Coastguard Worker * doesn't do the math for us. (x=70000000000, y=-3) 464*795d594fSAndroid Build Coastguard Worker */ longOperTest(long x, long y)465*795d594fSAndroid Build Coastguard Worker static int longOperTest(long x, long y) { 466*795d594fSAndroid Build Coastguard Worker long[] results = new long[10]; 467*795d594fSAndroid Build Coastguard Worker 468*795d594fSAndroid Build Coastguard Worker /* this seems to generate "op-long" instructions */ 469*795d594fSAndroid Build Coastguard Worker results[0] = x + y; 470*795d594fSAndroid Build Coastguard Worker results[1] = x - y; 471*795d594fSAndroid Build Coastguard Worker results[2] = x * y; 472*795d594fSAndroid Build Coastguard Worker results[3] = x * x; 473*795d594fSAndroid Build Coastguard Worker results[4] = x / y; 474*795d594fSAndroid Build Coastguard Worker results[5] = x % -y; 475*795d594fSAndroid Build Coastguard Worker results[6] = x & y; 476*795d594fSAndroid Build Coastguard Worker results[7] = x | y; 477*795d594fSAndroid Build Coastguard Worker results[8] = x ^ y; 478*795d594fSAndroid Build Coastguard Worker /* this seems to generate "op-long/2addr" instructions */ 479*795d594fSAndroid Build Coastguard Worker results[9] = x + ((((((((x + y) - y) * y) / y) % y) & y) | y) ^ y); 480*795d594fSAndroid Build Coastguard Worker /* check this edge case while we're here (div-long/2addr) */ 481*795d594fSAndroid Build Coastguard Worker long minLong = -9223372036854775808L; 482*795d594fSAndroid Build Coastguard Worker long negOne = -results[5]; 483*795d594fSAndroid Build Coastguard Worker long plusOne = 1; 484*795d594fSAndroid Build Coastguard Worker long result = (((minLong + plusOne) - plusOne) / negOne) / negOne; 485*795d594fSAndroid Build Coastguard Worker if (result != minLong) { return 1; } 486*795d594fSAndroid Build Coastguard Worker if (results[0] != 69999999997L) { return 2; } 487*795d594fSAndroid Build Coastguard Worker if (results[1] != 70000000003L) { return 3; } 488*795d594fSAndroid Build Coastguard Worker if (results[2] != -210000000000L) { return 4; } 489*795d594fSAndroid Build Coastguard Worker if (results[3] != -6833923606740729856L) { return 5; } // overflow 490*795d594fSAndroid Build Coastguard Worker if (results[4] != -23333333333L) { return 6; } 491*795d594fSAndroid Build Coastguard Worker if (results[5] != 1) { return 7; } 492*795d594fSAndroid Build Coastguard Worker if (results[6] != 70000000000L) { return 8; } 493*795d594fSAndroid Build Coastguard Worker if (results[7] != -3) { return 9; } 494*795d594fSAndroid Build Coastguard Worker if (results[8] != -70000000003L) { return 10; } 495*795d594fSAndroid Build Coastguard Worker if (results[9] != 70000000000L) { return 11; } 496*795d594fSAndroid Build Coastguard Worker if (results.length != 10) { return 12; } 497*795d594fSAndroid Build Coastguard Worker return 0; 498*795d594fSAndroid Build Coastguard Worker } 499*795d594fSAndroid Build Coastguard Worker 500*795d594fSAndroid Build Coastguard Worker /* 501*795d594fSAndroid Build Coastguard Worker * Shift some data. (value=0xd5aa96deff00aa01, dist=16) 502*795d594fSAndroid Build Coastguard Worker */ longShiftTest(long value, int dist)503*795d594fSAndroid Build Coastguard Worker static long longShiftTest(long value, int dist) { 504*795d594fSAndroid Build Coastguard Worker long results[] = new long[4]; 505*795d594fSAndroid Build Coastguard Worker results[0] = value << dist; 506*795d594fSAndroid Build Coastguard Worker results[1] = value >> dist; 507*795d594fSAndroid Build Coastguard Worker results[2] = value >>> dist; 508*795d594fSAndroid Build Coastguard Worker results[3] = (((value << dist) >> dist) >>> dist) << dist; 509*795d594fSAndroid Build Coastguard Worker if (results[0] != 0x96deff00aa010000L) { return results[0]; } 510*795d594fSAndroid Build Coastguard Worker if (results[1] != 0xffffd5aa96deff00L) { return results[1]; } 511*795d594fSAndroid Build Coastguard Worker if (results[2] != 0x0000d5aa96deff00L) { return results[2]; } 512*795d594fSAndroid Build Coastguard Worker if (results[3] != 0xffff96deff000000L) { return results[3]; } 513*795d594fSAndroid Build Coastguard Worker if (results.length != 4) { return 5; } 514*795d594fSAndroid Build Coastguard Worker 515*795d594fSAndroid Build Coastguard Worker return results[0]; // test return-long 516*795d594fSAndroid Build Coastguard Worker } 517*795d594fSAndroid Build Coastguard Worker switchTest(int a)518*795d594fSAndroid Build Coastguard Worker static int switchTest(int a) { 519*795d594fSAndroid Build Coastguard Worker int res = 1234; 520*795d594fSAndroid Build Coastguard Worker 521*795d594fSAndroid Build Coastguard Worker switch (a) { 522*795d594fSAndroid Build Coastguard Worker case -1: res = 1; return res; 523*795d594fSAndroid Build Coastguard Worker case 0: res = 2; return res; 524*795d594fSAndroid Build Coastguard Worker case 1: /*correct*/ break; 525*795d594fSAndroid Build Coastguard Worker case 2: res = 3; return res; 526*795d594fSAndroid Build Coastguard Worker case 3: res = 4; return res; 527*795d594fSAndroid Build Coastguard Worker case 4: res = 5; return res; 528*795d594fSAndroid Build Coastguard Worker default: res = 6; return res; 529*795d594fSAndroid Build Coastguard Worker } 530*795d594fSAndroid Build Coastguard Worker switch (a) { 531*795d594fSAndroid Build Coastguard Worker case 3: res = 7; return res; 532*795d594fSAndroid Build Coastguard Worker case 4: res = 8; return res; 533*795d594fSAndroid Build Coastguard Worker default: /*correct*/ break; 534*795d594fSAndroid Build Coastguard Worker } 535*795d594fSAndroid Build Coastguard Worker 536*795d594fSAndroid Build Coastguard Worker a = 0x12345678; 537*795d594fSAndroid Build Coastguard Worker 538*795d594fSAndroid Build Coastguard Worker switch (a) { 539*795d594fSAndroid Build Coastguard Worker case 0x12345678: /*correct*/ break; 540*795d594fSAndroid Build Coastguard Worker case 0x12345679: res = 9; return res; 541*795d594fSAndroid Build Coastguard Worker default: res = 1; return res; 542*795d594fSAndroid Build Coastguard Worker } 543*795d594fSAndroid Build Coastguard Worker switch (a) { 544*795d594fSAndroid Build Coastguard Worker case 57: res = 10; return res; 545*795d594fSAndroid Build Coastguard Worker case -6: res = 11; return res; 546*795d594fSAndroid Build Coastguard Worker case 0x12345678: /*correct*/ break; 547*795d594fSAndroid Build Coastguard Worker case 22: res = 12; return res; 548*795d594fSAndroid Build Coastguard Worker case 3: res = 13; return res; 549*795d594fSAndroid Build Coastguard Worker default: res = 14; return res; 550*795d594fSAndroid Build Coastguard Worker } 551*795d594fSAndroid Build Coastguard Worker switch (a) { 552*795d594fSAndroid Build Coastguard Worker case -6: res = 15; return res; 553*795d594fSAndroid Build Coastguard Worker case 3: res = 16; return res; 554*795d594fSAndroid Build Coastguard Worker default: /*correct*/ break; 555*795d594fSAndroid Build Coastguard Worker } 556*795d594fSAndroid Build Coastguard Worker 557*795d594fSAndroid Build Coastguard Worker a = -5; 558*795d594fSAndroid Build Coastguard Worker switch (a) { 559*795d594fSAndroid Build Coastguard Worker case 12: res = 17; return res; 560*795d594fSAndroid Build Coastguard Worker case -5: /*correct*/ break; 561*795d594fSAndroid Build Coastguard Worker case 0: res = 18; return res; 562*795d594fSAndroid Build Coastguard Worker default: res = 19; return res; 563*795d594fSAndroid Build Coastguard Worker } 564*795d594fSAndroid Build Coastguard Worker 565*795d594fSAndroid Build Coastguard Worker switch (a) { 566*795d594fSAndroid Build Coastguard Worker default: /*correct*/ break; 567*795d594fSAndroid Build Coastguard Worker } 568*795d594fSAndroid Build Coastguard Worker return res; 569*795d594fSAndroid Build Coastguard Worker } 570*795d594fSAndroid Build Coastguard Worker /* 571*795d594fSAndroid Build Coastguard Worker * Test the integer comparisons in various ways. 572*795d594fSAndroid Build Coastguard Worker */ testIntCompare(int minus, int plus, int plus2, int zero)573*795d594fSAndroid Build Coastguard Worker static int testIntCompare(int minus, int plus, int plus2, int zero) { 574*795d594fSAndroid Build Coastguard Worker int res = 1111; 575*795d594fSAndroid Build Coastguard Worker 576*795d594fSAndroid Build Coastguard Worker if (minus > plus) 577*795d594fSAndroid Build Coastguard Worker return 1; 578*795d594fSAndroid Build Coastguard Worker if (minus >= plus) 579*795d594fSAndroid Build Coastguard Worker return 2; 580*795d594fSAndroid Build Coastguard Worker if (plus < minus) 581*795d594fSAndroid Build Coastguard Worker return 3; 582*795d594fSAndroid Build Coastguard Worker if (plus <= minus) 583*795d594fSAndroid Build Coastguard Worker return 4; 584*795d594fSAndroid Build Coastguard Worker if (plus == minus) 585*795d594fSAndroid Build Coastguard Worker return 5; 586*795d594fSAndroid Build Coastguard Worker if (plus != plus2) 587*795d594fSAndroid Build Coastguard Worker return 6; 588*795d594fSAndroid Build Coastguard Worker 589*795d594fSAndroid Build Coastguard Worker /* try a branch-taken */ 590*795d594fSAndroid Build Coastguard Worker if (plus != minus) { 591*795d594fSAndroid Build Coastguard Worker res = res; 592*795d594fSAndroid Build Coastguard Worker } else { 593*795d594fSAndroid Build Coastguard Worker return 7; 594*795d594fSAndroid Build Coastguard Worker } 595*795d594fSAndroid Build Coastguard Worker 596*795d594fSAndroid Build Coastguard Worker if (minus > 0) 597*795d594fSAndroid Build Coastguard Worker return 8; 598*795d594fSAndroid Build Coastguard Worker if (minus >= 0) 599*795d594fSAndroid Build Coastguard Worker return 9; 600*795d594fSAndroid Build Coastguard Worker if (plus < 0) 601*795d594fSAndroid Build Coastguard Worker return 10; 602*795d594fSAndroid Build Coastguard Worker if (plus <= 0) 603*795d594fSAndroid Build Coastguard Worker return 11; 604*795d594fSAndroid Build Coastguard Worker if (plus == 0) 605*795d594fSAndroid Build Coastguard Worker return 12; 606*795d594fSAndroid Build Coastguard Worker if (zero != 0) 607*795d594fSAndroid Build Coastguard Worker return 13; 608*795d594fSAndroid Build Coastguard Worker 609*795d594fSAndroid Build Coastguard Worker if (zero == 0) { 610*795d594fSAndroid Build Coastguard Worker res = res; 611*795d594fSAndroid Build Coastguard Worker } else { 612*795d594fSAndroid Build Coastguard Worker return 14; 613*795d594fSAndroid Build Coastguard Worker } 614*795d594fSAndroid Build Coastguard Worker return res; 615*795d594fSAndroid Build Coastguard Worker } 616*795d594fSAndroid Build Coastguard Worker 617*795d594fSAndroid Build Coastguard Worker /* 618*795d594fSAndroid Build Coastguard Worker * Test cmp-long. 619*795d594fSAndroid Build Coastguard Worker * 620*795d594fSAndroid Build Coastguard Worker * minus=-5, alsoMinus=0xFFFFFFFF00000009, plus=4, alsoPlus=8 621*795d594fSAndroid Build Coastguard Worker */ testLongCompare(long minus, long alsoMinus, long plus, long alsoPlus)622*795d594fSAndroid Build Coastguard Worker static int testLongCompare(long minus, long alsoMinus, long plus, 623*795d594fSAndroid Build Coastguard Worker long alsoPlus) { 624*795d594fSAndroid Build Coastguard Worker int res = 2222; 625*795d594fSAndroid Build Coastguard Worker 626*795d594fSAndroid Build Coastguard Worker if (minus > plus) 627*795d594fSAndroid Build Coastguard Worker return 2; 628*795d594fSAndroid Build Coastguard Worker if (plus < minus) 629*795d594fSAndroid Build Coastguard Worker return 3; 630*795d594fSAndroid Build Coastguard Worker if (plus == minus) 631*795d594fSAndroid Build Coastguard Worker return 4; 632*795d594fSAndroid Build Coastguard Worker 633*795d594fSAndroid Build Coastguard Worker if (plus >= plus+1) 634*795d594fSAndroid Build Coastguard Worker return 5; 635*795d594fSAndroid Build Coastguard Worker if (minus >= minus+1) 636*795d594fSAndroid Build Coastguard Worker return 6; 637*795d594fSAndroid Build Coastguard Worker 638*795d594fSAndroid Build Coastguard Worker /* try a branch-taken */ 639*795d594fSAndroid Build Coastguard Worker if (plus != minus) { 640*795d594fSAndroid Build Coastguard Worker res = res; 641*795d594fSAndroid Build Coastguard Worker } else { 642*795d594fSAndroid Build Coastguard Worker return 7; 643*795d594fSAndroid Build Coastguard Worker } 644*795d594fSAndroid Build Coastguard Worker 645*795d594fSAndroid Build Coastguard Worker /* compare when high words are equal but low words differ */ 646*795d594fSAndroid Build Coastguard Worker if (plus > alsoPlus) 647*795d594fSAndroid Build Coastguard Worker return 8; 648*795d594fSAndroid Build Coastguard Worker if (alsoPlus < plus) 649*795d594fSAndroid Build Coastguard Worker return 9; 650*795d594fSAndroid Build Coastguard Worker if (alsoPlus == plus) 651*795d594fSAndroid Build Coastguard Worker return 10; 652*795d594fSAndroid Build Coastguard Worker 653*795d594fSAndroid Build Coastguard Worker /* high words are equal, low words have apparently different signs */ 654*795d594fSAndroid Build Coastguard Worker if (minus < alsoMinus) // bug! 655*795d594fSAndroid Build Coastguard Worker return 11; 656*795d594fSAndroid Build Coastguard Worker if (alsoMinus > minus) 657*795d594fSAndroid Build Coastguard Worker return 12; 658*795d594fSAndroid Build Coastguard Worker if (alsoMinus == minus) 659*795d594fSAndroid Build Coastguard Worker return 13; 660*795d594fSAndroid Build Coastguard Worker 661*795d594fSAndroid Build Coastguard Worker return res; 662*795d594fSAndroid Build Coastguard Worker } 663*795d594fSAndroid Build Coastguard Worker 664*795d594fSAndroid Build Coastguard Worker /* 665*795d594fSAndroid Build Coastguard Worker * Test cmpl-float and cmpg-float. 666*795d594fSAndroid Build Coastguard Worker */ testFloatCompare(float minus, float plus, float plus2, float nan)667*795d594fSAndroid Build Coastguard Worker static int testFloatCompare(float minus, float plus, float plus2, 668*795d594fSAndroid Build Coastguard Worker float nan) { 669*795d594fSAndroid Build Coastguard Worker if (minus > plus) 670*795d594fSAndroid Build Coastguard Worker return 1; 671*795d594fSAndroid Build Coastguard Worker if (plus < minus) 672*795d594fSAndroid Build Coastguard Worker return 2; 673*795d594fSAndroid Build Coastguard Worker if (plus == minus) 674*795d594fSAndroid Build Coastguard Worker return 3; 675*795d594fSAndroid Build Coastguard Worker if (plus != plus2) 676*795d594fSAndroid Build Coastguard Worker return 4; 677*795d594fSAndroid Build Coastguard Worker 678*795d594fSAndroid Build Coastguard Worker if (plus <= nan) 679*795d594fSAndroid Build Coastguard Worker return 5; 680*795d594fSAndroid Build Coastguard Worker if (plus >= nan) 681*795d594fSAndroid Build Coastguard Worker return 6; 682*795d594fSAndroid Build Coastguard Worker if (minus <= nan) 683*795d594fSAndroid Build Coastguard Worker return 7; 684*795d594fSAndroid Build Coastguard Worker if (minus >= nan) 685*795d594fSAndroid Build Coastguard Worker return 8; 686*795d594fSAndroid Build Coastguard Worker if (nan >= plus) 687*795d594fSAndroid Build Coastguard Worker return 9; 688*795d594fSAndroid Build Coastguard Worker if (nan <= plus) 689*795d594fSAndroid Build Coastguard Worker return 10; 690*795d594fSAndroid Build Coastguard Worker 691*795d594fSAndroid Build Coastguard Worker if (nan == nan) 692*795d594fSAndroid Build Coastguard Worker return 11; 693*795d594fSAndroid Build Coastguard Worker 694*795d594fSAndroid Build Coastguard Worker return 3333; 695*795d594fSAndroid Build Coastguard Worker } 696*795d594fSAndroid Build Coastguard Worker testDoubleCompare(double minus, double plus, double plus2, double nan)697*795d594fSAndroid Build Coastguard Worker static int testDoubleCompare(double minus, double plus, double plus2, 698*795d594fSAndroid Build Coastguard Worker double nan) { 699*795d594fSAndroid Build Coastguard Worker 700*795d594fSAndroid Build Coastguard Worker int res = 4444; 701*795d594fSAndroid Build Coastguard Worker 702*795d594fSAndroid Build Coastguard Worker if (minus > plus) 703*795d594fSAndroid Build Coastguard Worker return 1; 704*795d594fSAndroid Build Coastguard Worker if (plus < minus) 705*795d594fSAndroid Build Coastguard Worker return 2; 706*795d594fSAndroid Build Coastguard Worker if (plus == minus) 707*795d594fSAndroid Build Coastguard Worker return 3; 708*795d594fSAndroid Build Coastguard Worker if (plus != plus2) 709*795d594fSAndroid Build Coastguard Worker return 4; 710*795d594fSAndroid Build Coastguard Worker 711*795d594fSAndroid Build Coastguard Worker if (plus <= nan) 712*795d594fSAndroid Build Coastguard Worker return 5; 713*795d594fSAndroid Build Coastguard Worker if (plus >= nan) 714*795d594fSAndroid Build Coastguard Worker return 6; 715*795d594fSAndroid Build Coastguard Worker if (minus <= nan) 716*795d594fSAndroid Build Coastguard Worker return 7; 717*795d594fSAndroid Build Coastguard Worker if (minus >= nan) 718*795d594fSAndroid Build Coastguard Worker return 8; 719*795d594fSAndroid Build Coastguard Worker if (nan >= plus) 720*795d594fSAndroid Build Coastguard Worker return 9; 721*795d594fSAndroid Build Coastguard Worker if (nan <= plus) 722*795d594fSAndroid Build Coastguard Worker return 10; 723*795d594fSAndroid Build Coastguard Worker 724*795d594fSAndroid Build Coastguard Worker if (nan == nan) 725*795d594fSAndroid Build Coastguard Worker return 11; 726*795d594fSAndroid Build Coastguard Worker return res; 727*795d594fSAndroid Build Coastguard Worker } 728*795d594fSAndroid Build Coastguard Worker fibonacci(int n)729*795d594fSAndroid Build Coastguard Worker static int fibonacci(int n) { 730*795d594fSAndroid Build Coastguard Worker if (n == 0) { 731*795d594fSAndroid Build Coastguard Worker return 0; 732*795d594fSAndroid Build Coastguard Worker } else if (n == 1) { 733*795d594fSAndroid Build Coastguard Worker return 1; 734*795d594fSAndroid Build Coastguard Worker } else { 735*795d594fSAndroid Build Coastguard Worker return fibonacci(n - 1) + fibonacci(n - 2); 736*795d594fSAndroid Build Coastguard Worker } 737*795d594fSAndroid Build Coastguard Worker } 738*795d594fSAndroid Build Coastguard Worker throwAndCatch()739*795d594fSAndroid Build Coastguard Worker static int throwAndCatch() { 740*795d594fSAndroid Build Coastguard Worker try { 741*795d594fSAndroid Build Coastguard Worker throwNullPointerException(); 742*795d594fSAndroid Build Coastguard Worker return 1; 743*795d594fSAndroid Build Coastguard Worker } catch (NullPointerException npe) { 744*795d594fSAndroid Build Coastguard Worker return 0; 745*795d594fSAndroid Build Coastguard Worker } 746*795d594fSAndroid Build Coastguard Worker } 747*795d594fSAndroid Build Coastguard Worker manyArgs(int a0, long a1, int a2, long a3, int a4, long a5, int a6, int a7, double a8, float a9, double a10, short a11, int a12, char a13, int a14, int a15, byte a16, boolean a17, int a18, int a19, long a20, long a21, int a22, int a23, int a24, int a25, int a26)748*795d594fSAndroid Build Coastguard Worker static int manyArgs(int a0, long a1, int a2, long a3, int a4, long a5, 749*795d594fSAndroid Build Coastguard Worker int a6, int a7, double a8, float a9, double a10, short a11, int a12, 750*795d594fSAndroid Build Coastguard Worker char a13, int a14, int a15, byte a16, boolean a17, int a18, int a19, 751*795d594fSAndroid Build Coastguard Worker long a20, long a21, int a22, int a23, int a24, int a25, int a26) 752*795d594fSAndroid Build Coastguard Worker { 753*795d594fSAndroid Build Coastguard Worker if (a0 != 0) return 0; 754*795d594fSAndroid Build Coastguard Worker if (a1 != 1L) return 1; 755*795d594fSAndroid Build Coastguard Worker if (a2 != 2) return 2; 756*795d594fSAndroid Build Coastguard Worker if (a3 != 3L) return 3; 757*795d594fSAndroid Build Coastguard Worker if (a4 != 4) return 4; 758*795d594fSAndroid Build Coastguard Worker if (a5 != 5L) return 5; 759*795d594fSAndroid Build Coastguard Worker if (a6 != 6) return 6; 760*795d594fSAndroid Build Coastguard Worker if (a7 != 7) return 7; 761*795d594fSAndroid Build Coastguard Worker if (a8 != 8.0) return 8; 762*795d594fSAndroid Build Coastguard Worker if (a9 != 9.0f) return 9; 763*795d594fSAndroid Build Coastguard Worker if (a10 != 10.0) return 10; 764*795d594fSAndroid Build Coastguard Worker if (a11 != (short)11) return 11; 765*795d594fSAndroid Build Coastguard Worker if (a12 != 12) return 12; 766*795d594fSAndroid Build Coastguard Worker if (a13 != (char)13) return 13; 767*795d594fSAndroid Build Coastguard Worker if (a14 != 14) return 14; 768*795d594fSAndroid Build Coastguard Worker if (a15 != 15) return 15; 769*795d594fSAndroid Build Coastguard Worker if (a16 != (byte)-16) return 16; 770*795d594fSAndroid Build Coastguard Worker if (a17 != true) return 17; 771*795d594fSAndroid Build Coastguard Worker if (a18 != 18) return 18; 772*795d594fSAndroid Build Coastguard Worker if (a19 != 19) return 19; 773*795d594fSAndroid Build Coastguard Worker if (a20 != 20L) return 20; 774*795d594fSAndroid Build Coastguard Worker if (a21 != 21L) return 21; 775*795d594fSAndroid Build Coastguard Worker if (a22 != 22) return 22; 776*795d594fSAndroid Build Coastguard Worker if (a23 != 23) return 23; 777*795d594fSAndroid Build Coastguard Worker if (a24 != 24) return 24; 778*795d594fSAndroid Build Coastguard Worker if (a25 != 25) return 25; 779*795d594fSAndroid Build Coastguard Worker if (a26 != 26) return 26; 780*795d594fSAndroid Build Coastguard Worker return -1; 781*795d594fSAndroid Build Coastguard Worker } 782*795d594fSAndroid Build Coastguard Worker virtualCall(int a)783*795d594fSAndroid Build Coastguard Worker int virtualCall(int a) 784*795d594fSAndroid Build Coastguard Worker { 785*795d594fSAndroid Build Coastguard Worker return a * 2; 786*795d594fSAndroid Build Coastguard Worker } 787*795d594fSAndroid Build Coastguard Worker setFoo(int a)788*795d594fSAndroid Build Coastguard Worker void setFoo(int a) 789*795d594fSAndroid Build Coastguard Worker { 790*795d594fSAndroid Build Coastguard Worker foo_ = a; 791*795d594fSAndroid Build Coastguard Worker } 792*795d594fSAndroid Build Coastguard Worker getFoo()793*795d594fSAndroid Build Coastguard Worker int getFoo() 794*795d594fSAndroid Build Coastguard Worker { 795*795d594fSAndroid Build Coastguard Worker return foo_; 796*795d594fSAndroid Build Coastguard Worker } 797*795d594fSAndroid Build Coastguard Worker staticCall(int a)798*795d594fSAndroid Build Coastguard Worker static int staticCall(int a) 799*795d594fSAndroid Build Coastguard Worker { 800*795d594fSAndroid Build Coastguard Worker Main foo = new Main(); 801*795d594fSAndroid Build Coastguard Worker return foo.virtualCall(a); 802*795d594fSAndroid Build Coastguard Worker } 803*795d594fSAndroid Build Coastguard Worker testIGetPut(int a)804*795d594fSAndroid Build Coastguard Worker static int testIGetPut(int a) 805*795d594fSAndroid Build Coastguard Worker { 806*795d594fSAndroid Build Coastguard Worker Main foo = new Main(99); 807*795d594fSAndroid Build Coastguard Worker Main foo123 = new Main(); 808*795d594fSAndroid Build Coastguard Worker int z = foo.getFoo(); 809*795d594fSAndroid Build Coastguard Worker z += a; 810*795d594fSAndroid Build Coastguard Worker z += foo123.getFoo(); 811*795d594fSAndroid Build Coastguard Worker foo.setFoo(z); 812*795d594fSAndroid Build Coastguard Worker return foo.getFoo(); 813*795d594fSAndroid Build Coastguard Worker } 814*795d594fSAndroid Build Coastguard Worker throwClassCast(Object o)815*795d594fSAndroid Build Coastguard Worker static int throwClassCast(Object o) { 816*795d594fSAndroid Build Coastguard Worker return ((Integer)o).intValue(); 817*795d594fSAndroid Build Coastguard Worker } 818*795d594fSAndroid Build Coastguard Worker testClassCast()819*795d594fSAndroid Build Coastguard Worker static int testClassCast() { 820*795d594fSAndroid Build Coastguard Worker int res = 0; 821*795d594fSAndroid Build Coastguard Worker try { 822*795d594fSAndroid Build Coastguard Worker res += throwClassCast(Integer.valueOf(123)); 823*795d594fSAndroid Build Coastguard Worker } catch(ClassCastException e) { 824*795d594fSAndroid Build Coastguard Worker res += 456; 825*795d594fSAndroid Build Coastguard Worker } 826*795d594fSAndroid Build Coastguard Worker try { 827*795d594fSAndroid Build Coastguard Worker res += throwClassCast(new Short((short)321)); 828*795d594fSAndroid Build Coastguard Worker } catch(ClassCastException e) { 829*795d594fSAndroid Build Coastguard Worker res += 765; 830*795d594fSAndroid Build Coastguard Worker } 831*795d594fSAndroid Build Coastguard Worker return res; 832*795d594fSAndroid Build Coastguard Worker } 833*795d594fSAndroid Build Coastguard Worker throwArrayStoreException(Object[] array, Object element)834*795d594fSAndroid Build Coastguard Worker static void throwArrayStoreException(Object[] array, Object element) { 835*795d594fSAndroid Build Coastguard Worker array[0] = element; 836*795d594fSAndroid Build Coastguard Worker } 837*795d594fSAndroid Build Coastguard Worker testArrayStoreException()838*795d594fSAndroid Build Coastguard Worker static int testArrayStoreException() { 839*795d594fSAndroid Build Coastguard Worker int res=0; 840*795d594fSAndroid Build Coastguard Worker Object[] array = new Number[2]; 841*795d594fSAndroid Build Coastguard Worker try { 842*795d594fSAndroid Build Coastguard Worker throwArrayStoreException(array, null); 843*795d594fSAndroid Build Coastguard Worker res += 1; 844*795d594fSAndroid Build Coastguard Worker } catch(ArrayStoreException e) { 845*795d594fSAndroid Build Coastguard Worker res += 2; 846*795d594fSAndroid Build Coastguard Worker } 847*795d594fSAndroid Build Coastguard Worker try { 848*795d594fSAndroid Build Coastguard Worker throwArrayStoreException(array, Integer.valueOf(1)); 849*795d594fSAndroid Build Coastguard Worker res += 10; 850*795d594fSAndroid Build Coastguard Worker } catch(ArrayStoreException e) { 851*795d594fSAndroid Build Coastguard Worker res += 20; 852*795d594fSAndroid Build Coastguard Worker } 853*795d594fSAndroid Build Coastguard Worker try { 854*795d594fSAndroid Build Coastguard Worker throwArrayStoreException(array, "hello MTV-44"); 855*795d594fSAndroid Build Coastguard Worker res += 100; 856*795d594fSAndroid Build Coastguard Worker } catch(ArrayStoreException e) { 857*795d594fSAndroid Build Coastguard Worker res += 200; 858*795d594fSAndroid Build Coastguard Worker } 859*795d594fSAndroid Build Coastguard Worker return res; 860*795d594fSAndroid Build Coastguard Worker } 861*795d594fSAndroid Build Coastguard Worker 862*795d594fSAndroid Build Coastguard Worker static long recursion_count_; throwStackOverflow(long l)863*795d594fSAndroid Build Coastguard Worker static void throwStackOverflow(long l) { 864*795d594fSAndroid Build Coastguard Worker recursion_count_++; 865*795d594fSAndroid Build Coastguard Worker throwStackOverflow(recursion_count_); 866*795d594fSAndroid Build Coastguard Worker } 867*795d594fSAndroid Build Coastguard Worker testStackOverflow()868*795d594fSAndroid Build Coastguard Worker static long testStackOverflow() { 869*795d594fSAndroid Build Coastguard Worker try { 870*795d594fSAndroid Build Coastguard Worker throwStackOverflow(0); 871*795d594fSAndroid Build Coastguard Worker if (recursion_count_ != 0) { 872*795d594fSAndroid Build Coastguard Worker return recursion_count_; 873*795d594fSAndroid Build Coastguard Worker } else { 874*795d594fSAndroid Build Coastguard Worker return -1; 875*795d594fSAndroid Build Coastguard Worker } 876*795d594fSAndroid Build Coastguard Worker } catch(StackOverflowError soe) { 877*795d594fSAndroid Build Coastguard Worker return 0; 878*795d594fSAndroid Build Coastguard Worker } 879*795d594fSAndroid Build Coastguard Worker } 880*795d594fSAndroid Build Coastguard Worker testArrayAllocation()881*795d594fSAndroid Build Coastguard Worker static int testArrayAllocation() { 882*795d594fSAndroid Build Coastguard Worker int res = 0; 883*795d594fSAndroid Build Coastguard Worker try { 884*795d594fSAndroid Build Coastguard Worker int[] x = new int[-1]; 885*795d594fSAndroid Build Coastguard Worker res += 1; 886*795d594fSAndroid Build Coastguard Worker } catch (NegativeArraySizeException e) { 887*795d594fSAndroid Build Coastguard Worker res += 2; 888*795d594fSAndroid Build Coastguard Worker } 889*795d594fSAndroid Build Coastguard Worker try { 890*795d594fSAndroid Build Coastguard Worker int[] x = new int [1]; 891*795d594fSAndroid Build Coastguard Worker res += 10; 892*795d594fSAndroid Build Coastguard Worker } catch (Throwable e) { 893*795d594fSAndroid Build Coastguard Worker res += 20; 894*795d594fSAndroid Build Coastguard Worker } 895*795d594fSAndroid Build Coastguard Worker return res; 896*795d594fSAndroid Build Coastguard Worker } 897*795d594fSAndroid Build Coastguard Worker main(String[] args)898*795d594fSAndroid Build Coastguard Worker public static void main(String[] args) { 899*795d594fSAndroid Build Coastguard Worker boolean failure = false; 900*795d594fSAndroid Build Coastguard Worker int res; 901*795d594fSAndroid Build Coastguard Worker long lres; 902*795d594fSAndroid Build Coastguard Worker 903*795d594fSAndroid Build Coastguard Worker lres = divideLongByBillion(123000000000L); 904*795d594fSAndroid Build Coastguard Worker if (lres == 123) { 905*795d594fSAndroid Build Coastguard Worker System.out.println("divideLongByBillion PASSED"); 906*795d594fSAndroid Build Coastguard Worker } else { 907*795d594fSAndroid Build Coastguard Worker System.out.println("divideLongByBillion FAILED: " + lres); 908*795d594fSAndroid Build Coastguard Worker failure = true; 909*795d594fSAndroid Build Coastguard Worker } 910*795d594fSAndroid Build Coastguard Worker res = unopTest(38); 911*795d594fSAndroid Build Coastguard Worker if (res == 37) { 912*795d594fSAndroid Build Coastguard Worker System.out.println("unopTest PASSED"); 913*795d594fSAndroid Build Coastguard Worker } else { 914*795d594fSAndroid Build Coastguard Worker System.out.println("unopTest FAILED: " + res); 915*795d594fSAndroid Build Coastguard Worker failure = true; 916*795d594fSAndroid Build Coastguard Worker } 917*795d594fSAndroid Build Coastguard Worker res = shiftTest1(); 918*795d594fSAndroid Build Coastguard Worker if (res == 0) { 919*795d594fSAndroid Build Coastguard Worker System.out.println("shiftTest1 PASSED"); 920*795d594fSAndroid Build Coastguard Worker } else { 921*795d594fSAndroid Build Coastguard Worker System.out.println("shiftTest1 FAILED: " + res); 922*795d594fSAndroid Build Coastguard Worker failure = true; 923*795d594fSAndroid Build Coastguard Worker } 924*795d594fSAndroid Build Coastguard Worker res = shiftTest2(); 925*795d594fSAndroid Build Coastguard Worker if (res == 0) { 926*795d594fSAndroid Build Coastguard Worker System.out.println("shiftTest2 PASSED"); 927*795d594fSAndroid Build Coastguard Worker } else { 928*795d594fSAndroid Build Coastguard Worker System.out.println("shiftTest2 FAILED: " + res); 929*795d594fSAndroid Build Coastguard Worker failure = true; 930*795d594fSAndroid Build Coastguard Worker } 931*795d594fSAndroid Build Coastguard Worker res = unsignedShiftTest(); 932*795d594fSAndroid Build Coastguard Worker if (res == 0) { 933*795d594fSAndroid Build Coastguard Worker System.out.println("unsignedShiftTest PASSED"); 934*795d594fSAndroid Build Coastguard Worker } else { 935*795d594fSAndroid Build Coastguard Worker System.out.println("unsignedShiftTest FAILED: " + res); 936*795d594fSAndroid Build Coastguard Worker failure = true; 937*795d594fSAndroid Build Coastguard Worker } 938*795d594fSAndroid Build Coastguard Worker res = convTest(); 939*795d594fSAndroid Build Coastguard Worker if (res == 0) { 940*795d594fSAndroid Build Coastguard Worker System.out.println("convTest PASSED"); 941*795d594fSAndroid Build Coastguard Worker } else { 942*795d594fSAndroid Build Coastguard Worker System.out.println("convTest FAILED: " + res); 943*795d594fSAndroid Build Coastguard Worker failure = true; 944*795d594fSAndroid Build Coastguard Worker } 945*795d594fSAndroid Build Coastguard Worker res = charSubTest(); 946*795d594fSAndroid Build Coastguard Worker if (res == 0) { 947*795d594fSAndroid Build Coastguard Worker System.out.println("charSubTest PASSED"); 948*795d594fSAndroid Build Coastguard Worker } else { 949*795d594fSAndroid Build Coastguard Worker System.out.println("charSubTest FAILED: " + res); 950*795d594fSAndroid Build Coastguard Worker failure = true; 951*795d594fSAndroid Build Coastguard Worker } 952*795d594fSAndroid Build Coastguard Worker res = intOperTest(70000, -3); 953*795d594fSAndroid Build Coastguard Worker if (res == 0) { 954*795d594fSAndroid Build Coastguard Worker System.out.println("intOperTest PASSED"); 955*795d594fSAndroid Build Coastguard Worker } else { 956*795d594fSAndroid Build Coastguard Worker System.out.println("intOperTest FAILED: " + res); 957*795d594fSAndroid Build Coastguard Worker failure = true; 958*795d594fSAndroid Build Coastguard Worker } 959*795d594fSAndroid Build Coastguard Worker res = lit16Test(77777); 960*795d594fSAndroid Build Coastguard Worker if (res == 0) { 961*795d594fSAndroid Build Coastguard Worker System.out.println("lit16Test PASSED"); 962*795d594fSAndroid Build Coastguard Worker } else { 963*795d594fSAndroid Build Coastguard Worker System.out.println("lit16Test FAILED: " + res); 964*795d594fSAndroid Build Coastguard Worker failure = true; 965*795d594fSAndroid Build Coastguard Worker } 966*795d594fSAndroid Build Coastguard Worker res = lit8Test(-55555); 967*795d594fSAndroid Build Coastguard Worker if (res == 0) { 968*795d594fSAndroid Build Coastguard Worker System.out.println("lit8Test PASSED"); 969*795d594fSAndroid Build Coastguard Worker } else { 970*795d594fSAndroid Build Coastguard Worker System.out.println("lit8Test FAILED: " + res); 971*795d594fSAndroid Build Coastguard Worker failure = true; 972*795d594fSAndroid Build Coastguard Worker } 973*795d594fSAndroid Build Coastguard Worker res = intShiftTest(0xff00aa01, 8); 974*795d594fSAndroid Build Coastguard Worker if (res == 0) { 975*795d594fSAndroid Build Coastguard Worker System.out.println("intShiftTest PASSED"); 976*795d594fSAndroid Build Coastguard Worker } else { 977*795d594fSAndroid Build Coastguard Worker System.out.println("intShiftTest FAILED: " + res); 978*795d594fSAndroid Build Coastguard Worker failure = true; 979*795d594fSAndroid Build Coastguard Worker } 980*795d594fSAndroid Build Coastguard Worker res = longOperTest(70000000000L, -3L); 981*795d594fSAndroid Build Coastguard Worker if (res == 0) { 982*795d594fSAndroid Build Coastguard Worker System.out.println("longOperTest PASSED"); 983*795d594fSAndroid Build Coastguard Worker } else { 984*795d594fSAndroid Build Coastguard Worker System.out.println("longOperTest FAILED: " + res); 985*795d594fSAndroid Build Coastguard Worker failure = true; 986*795d594fSAndroid Build Coastguard Worker } 987*795d594fSAndroid Build Coastguard Worker lres = longShiftTest(0xd5aa96deff00aa01L, 16); 988*795d594fSAndroid Build Coastguard Worker if (lres == 0x96deff00aa010000L) { 989*795d594fSAndroid Build Coastguard Worker System.out.println("longShiftTest PASSED"); 990*795d594fSAndroid Build Coastguard Worker } else { 991*795d594fSAndroid Build Coastguard Worker System.out.println("longShiftTest FAILED: " + lres); 992*795d594fSAndroid Build Coastguard Worker failure = true; 993*795d594fSAndroid Build Coastguard Worker } 994*795d594fSAndroid Build Coastguard Worker 995*795d594fSAndroid Build Coastguard Worker res = switchTest(1); 996*795d594fSAndroid Build Coastguard Worker if (res == 1234) { 997*795d594fSAndroid Build Coastguard Worker System.out.println("switchTest PASSED"); 998*795d594fSAndroid Build Coastguard Worker } else { 999*795d594fSAndroid Build Coastguard Worker System.out.println("switchTest FAILED: " + res); 1000*795d594fSAndroid Build Coastguard Worker failure = true; 1001*795d594fSAndroid Build Coastguard Worker } 1002*795d594fSAndroid Build Coastguard Worker 1003*795d594fSAndroid Build Coastguard Worker res = testIntCompare(-5, 4, 4, 0); 1004*795d594fSAndroid Build Coastguard Worker if (res == 1111) { 1005*795d594fSAndroid Build Coastguard Worker System.out.println("testIntCompare PASSED"); 1006*795d594fSAndroid Build Coastguard Worker } else { 1007*795d594fSAndroid Build Coastguard Worker System.out.println("testIntCompare FAILED: " + res); 1008*795d594fSAndroid Build Coastguard Worker failure = true; 1009*795d594fSAndroid Build Coastguard Worker } 1010*795d594fSAndroid Build Coastguard Worker 1011*795d594fSAndroid Build Coastguard Worker res = testLongCompare(-5L, -4294967287L, 4L, 8L); 1012*795d594fSAndroid Build Coastguard Worker if (res == 2222) { 1013*795d594fSAndroid Build Coastguard Worker System.out.println("testLongCompare PASSED"); 1014*795d594fSAndroid Build Coastguard Worker } else { 1015*795d594fSAndroid Build Coastguard Worker System.out.println("testLongCompare FAILED: " + res); 1016*795d594fSAndroid Build Coastguard Worker failure = true; 1017*795d594fSAndroid Build Coastguard Worker } 1018*795d594fSAndroid Build Coastguard Worker 1019*795d594fSAndroid Build Coastguard Worker res = testFloatCompare(-5.0f, 4.0f, 4.0f, (1.0f/0.0f) / (1.0f/0.0f)); 1020*795d594fSAndroid Build Coastguard Worker if (res == 3333) { 1021*795d594fSAndroid Build Coastguard Worker System.out.println("testFloatCompare PASSED"); 1022*795d594fSAndroid Build Coastguard Worker } else { 1023*795d594fSAndroid Build Coastguard Worker System.out.println("testFloatCompare FAILED: " + res); 1024*795d594fSAndroid Build Coastguard Worker failure = true; 1025*795d594fSAndroid Build Coastguard Worker } 1026*795d594fSAndroid Build Coastguard Worker 1027*795d594fSAndroid Build Coastguard Worker res = testDoubleCompare(-5.0, 4.0, 4.0, (1.0/0.0) / (1.0/0.0)); 1028*795d594fSAndroid Build Coastguard Worker if (res == 4444) { 1029*795d594fSAndroid Build Coastguard Worker System.out.println("testDoubleCompare PASSED"); 1030*795d594fSAndroid Build Coastguard Worker } else { 1031*795d594fSAndroid Build Coastguard Worker System.out.println("testDoubleCompare FAILED: " + res); 1032*795d594fSAndroid Build Coastguard Worker failure = true; 1033*795d594fSAndroid Build Coastguard Worker } 1034*795d594fSAndroid Build Coastguard Worker 1035*795d594fSAndroid Build Coastguard Worker res = fibonacci(10); 1036*795d594fSAndroid Build Coastguard Worker if (res == 55) { 1037*795d594fSAndroid Build Coastguard Worker System.out.println("fibonacci PASSED"); 1038*795d594fSAndroid Build Coastguard Worker } else { 1039*795d594fSAndroid Build Coastguard Worker System.out.println("fibonacci FAILED: " + res); 1040*795d594fSAndroid Build Coastguard Worker failure = true; 1041*795d594fSAndroid Build Coastguard Worker } 1042*795d594fSAndroid Build Coastguard Worker 1043*795d594fSAndroid Build Coastguard Worker res = throwAndCatch(); 1044*795d594fSAndroid Build Coastguard Worker if (res == 0) { 1045*795d594fSAndroid Build Coastguard Worker System.out.println("throwAndCatch PASSED"); 1046*795d594fSAndroid Build Coastguard Worker } else { 1047*795d594fSAndroid Build Coastguard Worker System.out.println("throwAndCatch FAILED: " + res); 1048*795d594fSAndroid Build Coastguard Worker failure = true; 1049*795d594fSAndroid Build Coastguard Worker } 1050*795d594fSAndroid Build Coastguard Worker 1051*795d594fSAndroid Build Coastguard Worker res = testClassCast(); 1052*795d594fSAndroid Build Coastguard Worker if (res == 888) { 1053*795d594fSAndroid Build Coastguard Worker System.out.println("testClassCast PASSED"); 1054*795d594fSAndroid Build Coastguard Worker } else { 1055*795d594fSAndroid Build Coastguard Worker System.out.println("testClassCast FAILED: " + res); 1056*795d594fSAndroid Build Coastguard Worker failure = true; 1057*795d594fSAndroid Build Coastguard Worker } 1058*795d594fSAndroid Build Coastguard Worker 1059*795d594fSAndroid Build Coastguard Worker res = testArrayStoreException(); 1060*795d594fSAndroid Build Coastguard Worker if (res == 211) { 1061*795d594fSAndroid Build Coastguard Worker System.out.println("testArrayStore PASSED"); 1062*795d594fSAndroid Build Coastguard Worker } else { 1063*795d594fSAndroid Build Coastguard Worker System.out.println("testArrayStore FAILED: " + res); 1064*795d594fSAndroid Build Coastguard Worker failure = true; 1065*795d594fSAndroid Build Coastguard Worker } 1066*795d594fSAndroid Build Coastguard Worker 1067*795d594fSAndroid Build Coastguard Worker lres= testStackOverflow(); 1068*795d594fSAndroid Build Coastguard Worker if (lres == 0) { 1069*795d594fSAndroid Build Coastguard Worker System.out.println("testStackOverflow PASSED"); 1070*795d594fSAndroid Build Coastguard Worker } else { 1071*795d594fSAndroid Build Coastguard Worker System.out.println("testStackOverflow FAILED: " + lres); 1072*795d594fSAndroid Build Coastguard Worker failure = true; 1073*795d594fSAndroid Build Coastguard Worker } 1074*795d594fSAndroid Build Coastguard Worker 1075*795d594fSAndroid Build Coastguard Worker res = testArrayAllocation(); 1076*795d594fSAndroid Build Coastguard Worker if (res == 12) { 1077*795d594fSAndroid Build Coastguard Worker System.out.println("testArrayAllocation PASSED"); 1078*795d594fSAndroid Build Coastguard Worker } else { 1079*795d594fSAndroid Build Coastguard Worker System.out.println("testArrayAllocation FAILED: " + res); 1080*795d594fSAndroid Build Coastguard Worker failure = true; 1081*795d594fSAndroid Build Coastguard Worker } 1082*795d594fSAndroid Build Coastguard Worker 1083*795d594fSAndroid Build Coastguard Worker res = manyArgs(0, 1L, 2, 3L, 4, 5L, 6, 7, 8.0, 9.0f, 10.0, 1084*795d594fSAndroid Build Coastguard Worker (short)11, 12, (char)13, 14, 15, (byte)-16, true, 18, 1085*795d594fSAndroid Build Coastguard Worker 19, 20L, 21L, 22, 23, 24, 25, 26); 1086*795d594fSAndroid Build Coastguard Worker if (res == -1) { 1087*795d594fSAndroid Build Coastguard Worker System.out.println("manyArgs PASSED"); 1088*795d594fSAndroid Build Coastguard Worker } else { 1089*795d594fSAndroid Build Coastguard Worker System.out.println("manyArgs FAILED: " + res); 1090*795d594fSAndroid Build Coastguard Worker failure = true; 1091*795d594fSAndroid Build Coastguard Worker } 1092*795d594fSAndroid Build Coastguard Worker 1093*795d594fSAndroid Build Coastguard Worker res = staticCall(3); 1094*795d594fSAndroid Build Coastguard Worker if (res == 6) { 1095*795d594fSAndroid Build Coastguard Worker System.out.println("virtualCall PASSED"); 1096*795d594fSAndroid Build Coastguard Worker } else { 1097*795d594fSAndroid Build Coastguard Worker System.out.println("virtualCall FAILED: " + res); 1098*795d594fSAndroid Build Coastguard Worker failure = true; 1099*795d594fSAndroid Build Coastguard Worker } 1100*795d594fSAndroid Build Coastguard Worker 1101*795d594fSAndroid Build Coastguard Worker res = testIGetPut(111); 1102*795d594fSAndroid Build Coastguard Worker if (res == 333) { 1103*795d594fSAndroid Build Coastguard Worker System.out.println("testGetPut PASSED"); 1104*795d594fSAndroid Build Coastguard Worker } else { 1105*795d594fSAndroid Build Coastguard Worker System.out.println("testGetPut FAILED: " + res); 1106*795d594fSAndroid Build Coastguard Worker failure = true; 1107*795d594fSAndroid Build Coastguard Worker } 1108*795d594fSAndroid Build Coastguard Worker 1109*795d594fSAndroid Build Coastguard Worker res = staticFieldTest(404); 1110*795d594fSAndroid Build Coastguard Worker if (res == 1404) { 1111*795d594fSAndroid Build Coastguard Worker System.out.println("staticFieldTest PASSED"); 1112*795d594fSAndroid Build Coastguard Worker } else { 1113*795d594fSAndroid Build Coastguard Worker System.out.println("staticFieldTest FAILED: " + res); 1114*795d594fSAndroid Build Coastguard Worker failure = true; 1115*795d594fSAndroid Build Coastguard Worker } 1116*795d594fSAndroid Build Coastguard Worker 1117*795d594fSAndroid Build Coastguard Worker res = catchBlock(1000); 1118*795d594fSAndroid Build Coastguard Worker if (res == 1579) { 1119*795d594fSAndroid Build Coastguard Worker System.out.println("catchBlock(1000) PASSED"); 1120*795d594fSAndroid Build Coastguard Worker } else { 1121*795d594fSAndroid Build Coastguard Worker System.out.println("catchBlock(1000) FAILED: " + res); 1122*795d594fSAndroid Build Coastguard Worker failure = true; 1123*795d594fSAndroid Build Coastguard Worker } 1124*795d594fSAndroid Build Coastguard Worker res = catchBlock(7000); 1125*795d594fSAndroid Build Coastguard Worker if (res == 7777) { 1126*795d594fSAndroid Build Coastguard Worker System.out.println("catchBlock(7000) PASSED"); 1127*795d594fSAndroid Build Coastguard Worker } else { 1128*795d594fSAndroid Build Coastguard Worker System.out.println("catchBlock(7000) FAILED: " + res); 1129*795d594fSAndroid Build Coastguard Worker failure = true; 1130*795d594fSAndroid Build Coastguard Worker } 1131*795d594fSAndroid Build Coastguard Worker res = catchBlockNoThrow(1000); 1132*795d594fSAndroid Build Coastguard Worker if (res == 1123) { 1133*795d594fSAndroid Build Coastguard Worker System.out.println("catchBlockNoThrow PASSED"); 1134*795d594fSAndroid Build Coastguard Worker } else { 1135*795d594fSAndroid Build Coastguard Worker System.out.println("catchBlockNoThrow FAILED: " + res); 1136*795d594fSAndroid Build Coastguard Worker failure = true; 1137*795d594fSAndroid Build Coastguard Worker } 1138*795d594fSAndroid Build Coastguard Worker 1139*795d594fSAndroid Build Coastguard Worker res = superTest(4141); 1140*795d594fSAndroid Build Coastguard Worker if (res == 4175) { 1141*795d594fSAndroid Build Coastguard Worker System.out.println("superTest PASSED"); 1142*795d594fSAndroid Build Coastguard Worker } else { 1143*795d594fSAndroid Build Coastguard Worker System.out.println("superTest FAILED: " + res); 1144*795d594fSAndroid Build Coastguard Worker failure = true; 1145*795d594fSAndroid Build Coastguard Worker } 1146*795d594fSAndroid Build Coastguard Worker 1147*795d594fSAndroid Build Coastguard Worker res = constClassTest(1111); 1148*795d594fSAndroid Build Coastguard Worker if (res == 2222) { 1149*795d594fSAndroid Build Coastguard Worker System.out.println("constClassTest PASSED"); 1150*795d594fSAndroid Build Coastguard Worker } else { 1151*795d594fSAndroid Build Coastguard Worker System.out.println("constClassTest FAILED: " + res); 1152*795d594fSAndroid Build Coastguard Worker failure = true; 1153*795d594fSAndroid Build Coastguard Worker } 1154*795d594fSAndroid Build Coastguard Worker 1155*795d594fSAndroid Build Coastguard Worker res = constStringTest(10); 1156*795d594fSAndroid Build Coastguard Worker if (res == 22) { 1157*795d594fSAndroid Build Coastguard Worker System.out.println("constStringTest PASSED"); 1158*795d594fSAndroid Build Coastguard Worker } else { 1159*795d594fSAndroid Build Coastguard Worker System.out.println("constStringTest FAILED: " + res); 1160*795d594fSAndroid Build Coastguard Worker failure = true; 1161*795d594fSAndroid Build Coastguard Worker } 1162*795d594fSAndroid Build Coastguard Worker 1163*795d594fSAndroid Build Coastguard Worker res = instanceTest(10); 1164*795d594fSAndroid Build Coastguard Worker if (res == 1436) { 1165*795d594fSAndroid Build Coastguard Worker System.out.println("instanceTest PASSED"); 1166*795d594fSAndroid Build Coastguard Worker } else { 1167*795d594fSAndroid Build Coastguard Worker System.out.println("instanceTest FAILED: " + res); 1168*795d594fSAndroid Build Coastguard Worker failure = true; 1169*795d594fSAndroid Build Coastguard Worker } 1170*795d594fSAndroid Build Coastguard Worker 1171*795d594fSAndroid Build Coastguard Worker System.exit(failure ? 1 : 0); 1172*795d594fSAndroid Build Coastguard Worker } 1173*795d594fSAndroid Build Coastguard Worker } 1174*795d594fSAndroid Build Coastguard Worker 1175*795d594fSAndroid Build Coastguard Worker class IntMathBase { IntMathBase()1176*795d594fSAndroid Build Coastguard Worker IntMathBase() { 1177*795d594fSAndroid Build Coastguard Worker } 1178*795d594fSAndroid Build Coastguard Worker tryThing()1179*795d594fSAndroid Build Coastguard Worker int tryThing() { 1180*795d594fSAndroid Build Coastguard Worker return 7; 1181*795d594fSAndroid Build Coastguard Worker } 1182*795d594fSAndroid Build Coastguard Worker } 1183