1*795d594fSAndroid Build Coastguard Worker /* 2*795d594fSAndroid Build Coastguard Worker * Copyright (C) 2018 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 public class RemTest { 18*795d594fSAndroid Build Coastguard Worker expectEquals(T expected, T result)19*795d594fSAndroid Build Coastguard Worker public static <T extends Number> void expectEquals(T expected, T result) { 20*795d594fSAndroid Build Coastguard Worker if (!expected.equals(result)) { 21*795d594fSAndroid Build Coastguard Worker throw new Error("Expected: " + expected + ", found: " + result); 22*795d594fSAndroid Build Coastguard Worker } 23*795d594fSAndroid Build Coastguard Worker } 24*795d594fSAndroid Build Coastguard Worker main()25*795d594fSAndroid Build Coastguard Worker public static void main() { 26*795d594fSAndroid Build Coastguard Worker remInt(); 27*795d594fSAndroid Build Coastguard Worker remLong(); 28*795d594fSAndroid Build Coastguard Worker } 29*795d594fSAndroid Build Coastguard Worker remInt()30*795d594fSAndroid Build Coastguard Worker private static void remInt() { 31*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntMod2(0)); 32*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntMod2(1)); 33*795d594fSAndroid Build Coastguard Worker expectEquals(-1, $noinline$IntMod2(-1)); 34*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntMod2(2)); 35*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntMod2(-2)); 36*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntMod2(3)); 37*795d594fSAndroid Build Coastguard Worker expectEquals(-1, $noinline$IntMod2(-3)); 38*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntMod2(0x0f)); 39*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntMod2(0x00ff)); 40*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntMod2(0x00ffff)); 41*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntMod2(Integer.MAX_VALUE)); 42*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntMod2(Integer.MIN_VALUE)); 43*795d594fSAndroid Build Coastguard Worker 44*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntModMinus2(0)); 45*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntModMinus2(1)); 46*795d594fSAndroid Build Coastguard Worker expectEquals(-1, $noinline$IntModMinus2(-1)); 47*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntModMinus2(2)); 48*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntModMinus2(-2)); 49*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntModMinus2(3)); 50*795d594fSAndroid Build Coastguard Worker expectEquals(-1, $noinline$IntModMinus2(-3)); 51*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntModMinus2(0x0f)); 52*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntModMinus2(0x00ff)); 53*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntModMinus2(0x00ffff)); 54*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntModMinus2(Integer.MAX_VALUE)); 55*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntModMinus2(Integer.MIN_VALUE)); 56*795d594fSAndroid Build Coastguard Worker 57*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntAbsMod2(0)); 58*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntAbsMod2(1)); 59*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntAbsMod2(-1)); 60*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntAbsMod2(2)); 61*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntAbsMod2(-2)); 62*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntAbsMod2(3)); 63*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntAbsMod2(-3)); 64*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntAbsMod2(0x0f)); 65*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntAbsMod2(0x00ff)); 66*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntAbsMod2(0x00ffff)); 67*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntAbsMod2(Integer.MAX_VALUE)); 68*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntAbsMod2(Integer.MIN_VALUE)); 69*795d594fSAndroid Build Coastguard Worker 70*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntAbsModMinus2(0)); 71*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntAbsModMinus2(1)); 72*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntAbsModMinus2(-1)); 73*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntAbsModMinus2(2)); 74*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntAbsModMinus2(-2)); 75*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntAbsModMinus2(3)); 76*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntAbsModMinus2(-3)); 77*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntAbsModMinus2(0x0f)); 78*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntAbsModMinus2(0x00ff)); 79*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntAbsModMinus2(0x00ffff)); 80*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntAbsModMinus2(Integer.MAX_VALUE)); 81*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntAbsModMinus2(Integer.MIN_VALUE)); 82*795d594fSAndroid Build Coastguard Worker 83*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntALenMod2(new int[0])); 84*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntALenMod2(new int[1])); 85*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntALenMod2(new int[2])); 86*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntALenMod2(new int[3])); 87*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntALenMod2(new int[0x0f])); 88*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntALenMod2(new int[0x00ff])); 89*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntALenMod2(new int[0x00ffff])); 90*795d594fSAndroid Build Coastguard Worker 91*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntALenModMinus2(new int[0])); 92*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntALenModMinus2(new int[1])); 93*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntALenModMinus2(new int[2])); 94*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntALenModMinus2(new int[3])); 95*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntALenModMinus2(new int[0x0f])); 96*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntALenModMinus2(new int[0x00ff])); 97*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntALenModMinus2(new int[0x00ffff])); 98*795d594fSAndroid Build Coastguard Worker 99*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntMod16(0)); 100*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntMod16(1)); 101*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntMod16(17)); 102*795d594fSAndroid Build Coastguard Worker expectEquals(-1, $noinline$IntMod16(-1)); 103*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntMod16(32)); 104*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntMod16(-32)); 105*795d594fSAndroid Build Coastguard Worker expectEquals(0x0f, $noinline$IntMod16(0x0f)); 106*795d594fSAndroid Build Coastguard Worker expectEquals(0x0f, $noinline$IntMod16(0x00ff)); 107*795d594fSAndroid Build Coastguard Worker expectEquals(0x0f, $noinline$IntMod16(0x00ffff)); 108*795d594fSAndroid Build Coastguard Worker expectEquals(15, $noinline$IntMod16(Integer.MAX_VALUE)); 109*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntMod16(Integer.MIN_VALUE)); 110*795d594fSAndroid Build Coastguard Worker 111*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntModMinus16(0)); 112*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntModMinus16(1)); 113*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntModMinus16(17)); 114*795d594fSAndroid Build Coastguard Worker expectEquals(-1, $noinline$IntModMinus16(-1)); 115*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntModMinus16(32)); 116*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntModMinus16(-32)); 117*795d594fSAndroid Build Coastguard Worker expectEquals(0x0f, $noinline$IntModMinus16(0x0f)); 118*795d594fSAndroid Build Coastguard Worker expectEquals(0x0f, $noinline$IntModMinus16(0x00ff)); 119*795d594fSAndroid Build Coastguard Worker expectEquals(0x0f, $noinline$IntModMinus16(0x00ffff)); 120*795d594fSAndroid Build Coastguard Worker expectEquals(15, $noinline$IntModMinus16(Integer.MAX_VALUE)); 121*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntModMinus16(Integer.MIN_VALUE)); 122*795d594fSAndroid Build Coastguard Worker 123*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntAbsMod16(0)); 124*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntAbsMod16(1)); 125*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntAbsMod16(17)); 126*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntAbsMod16(-1)); 127*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntAbsMod16(32)); 128*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntAbsMod16(-32)); 129*795d594fSAndroid Build Coastguard Worker expectEquals(0x0f, $noinline$IntAbsMod16(0x0f)); 130*795d594fSAndroid Build Coastguard Worker expectEquals(0x0f, $noinline$IntAbsMod16(0x00ff)); 131*795d594fSAndroid Build Coastguard Worker expectEquals(0x0f, $noinline$IntAbsMod16(0x00ffff)); 132*795d594fSAndroid Build Coastguard Worker expectEquals(15, $noinline$IntAbsMod16(Integer.MAX_VALUE)); 133*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntAbsMod16(Integer.MIN_VALUE)); 134*795d594fSAndroid Build Coastguard Worker 135*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntAbsModMinus16(0)); 136*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntAbsModMinus16(1)); 137*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntAbsModMinus16(17)); 138*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntAbsModMinus16(-1)); 139*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntAbsModMinus16(32)); 140*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntAbsModMinus16(-32)); 141*795d594fSAndroid Build Coastguard Worker expectEquals(0x0f, $noinline$IntAbsModMinus16(0x0f)); 142*795d594fSAndroid Build Coastguard Worker expectEquals(0x0f, $noinline$IntAbsModMinus16(0x00ff)); 143*795d594fSAndroid Build Coastguard Worker expectEquals(0x0f, $noinline$IntAbsModMinus16(0x00ffff)); 144*795d594fSAndroid Build Coastguard Worker expectEquals(15, $noinline$IntAbsModMinus16(Integer.MAX_VALUE)); 145*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntAbsModMinus16(Integer.MIN_VALUE)); 146*795d594fSAndroid Build Coastguard Worker 147*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntALenMod16(new int[0])); 148*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntALenMod16(new int[1])); 149*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntALenMod16(new int[17])); 150*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntALenMod16(new int[32])); 151*795d594fSAndroid Build Coastguard Worker expectEquals(0x0f, $noinline$IntALenMod16(new int[0x0f])); 152*795d594fSAndroid Build Coastguard Worker expectEquals(0x0f, $noinline$IntALenMod16(new int[0x00ff])); 153*795d594fSAndroid Build Coastguard Worker expectEquals(0x0f, $noinline$IntALenMod16(new int[0x00ffff])); 154*795d594fSAndroid Build Coastguard Worker 155*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntALenModMinus16(new int[0])); 156*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntALenModMinus16(new int[1])); 157*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntALenModMinus16(new int[17])); 158*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntALenModMinus16(new int[32])); 159*795d594fSAndroid Build Coastguard Worker expectEquals(0x0f, $noinline$IntALenModMinus16(new int[0x0f])); 160*795d594fSAndroid Build Coastguard Worker expectEquals(0x0f, $noinline$IntALenModMinus16(new int[0x00ff])); 161*795d594fSAndroid Build Coastguard Worker expectEquals(0x0f, $noinline$IntALenModMinus16(new int[0x00ffff])); 162*795d594fSAndroid Build Coastguard Worker 163*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntAbsMod1024(0)); 164*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntAbsMod1024(1)); 165*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntAbsMod1024(1025)); 166*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntAbsMod1024(-1)); 167*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntAbsMod1024(2048)); 168*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntAbsMod1024(-2048)); 169*795d594fSAndroid Build Coastguard Worker expectEquals(0x0f, $noinline$IntAbsMod1024(0x0f)); 170*795d594fSAndroid Build Coastguard Worker expectEquals(0x0ff, $noinline$IntAbsMod1024(0x00ff)); 171*795d594fSAndroid Build Coastguard Worker expectEquals(0x03ff, $noinline$IntAbsMod1024(0x00ffff)); 172*795d594fSAndroid Build Coastguard Worker expectEquals(0x03ff, $noinline$IntAbsMod1024(Integer.MAX_VALUE)); 173*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntAbsMod1024(Integer.MIN_VALUE)); 174*795d594fSAndroid Build Coastguard Worker 175*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntAbsModMinus1024(0)); 176*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntAbsModMinus1024(1)); 177*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntAbsModMinus1024(1025)); 178*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntAbsModMinus1024(-1)); 179*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntAbsModMinus1024(2048)); 180*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntAbsModMinus1024(-2048)); 181*795d594fSAndroid Build Coastguard Worker expectEquals(0x0f, $noinline$IntAbsModMinus1024(0x0f)); 182*795d594fSAndroid Build Coastguard Worker expectEquals(0x0ff, $noinline$IntAbsModMinus1024(0x00ff)); 183*795d594fSAndroid Build Coastguard Worker expectEquals(0x03ff, $noinline$IntAbsModMinus1024(0x00ffff)); 184*795d594fSAndroid Build Coastguard Worker expectEquals(0x03ff, $noinline$IntAbsModMinus1024(Integer.MAX_VALUE)); 185*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntAbsModMinus1024(Integer.MIN_VALUE)); 186*795d594fSAndroid Build Coastguard Worker 187*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntALenMod1024(new int[0])); 188*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntALenMod1024(new int[1])); 189*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntALenMod1024(new int[1025])); 190*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntALenMod1024(new int[2048])); 191*795d594fSAndroid Build Coastguard Worker expectEquals(0x0f, $noinline$IntALenMod1024(new int[0x0f])); 192*795d594fSAndroid Build Coastguard Worker expectEquals(0x0ff, $noinline$IntALenMod1024(new int[0x00ff])); 193*795d594fSAndroid Build Coastguard Worker expectEquals(0x03ff, $noinline$IntALenMod1024(new int[0x00ffff])); 194*795d594fSAndroid Build Coastguard Worker 195*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntALenModMinus1024(new int[0])); 196*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntALenModMinus1024(new int[1])); 197*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntALenModMinus1024(new int[1025])); 198*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntALenModMinus1024(new int[2048])); 199*795d594fSAndroid Build Coastguard Worker expectEquals(0x0f, $noinline$IntALenModMinus1024(new int[0x0f])); 200*795d594fSAndroid Build Coastguard Worker expectEquals(0x0ff, $noinline$IntALenModMinus1024(new int[0x00ff])); 201*795d594fSAndroid Build Coastguard Worker expectEquals(0x03ff, $noinline$IntALenModMinus1024(new int[0x00ffff])); 202*795d594fSAndroid Build Coastguard Worker 203*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntModIntMin(0)); 204*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntModIntMin(1)); 205*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntModIntMin(Integer.MIN_VALUE)); 206*795d594fSAndroid Build Coastguard Worker expectEquals(-1, $noinline$IntModIntMin(-1)); 207*795d594fSAndroid Build Coastguard Worker expectEquals(0x0f, $noinline$IntModIntMin(0x0f)); 208*795d594fSAndroid Build Coastguard Worker expectEquals(0x00ff, $noinline$IntModIntMin(0x00ff)); 209*795d594fSAndroid Build Coastguard Worker expectEquals(0x00ffff, $noinline$IntModIntMin(0x00ffff)); 210*795d594fSAndroid Build Coastguard Worker expectEquals(Integer.MAX_VALUE, $noinline$IntModIntMin(Integer.MAX_VALUE)); 211*795d594fSAndroid Build Coastguard Worker 212*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntAbsModIntMin(0)); 213*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntAbsModIntMin(1)); 214*795d594fSAndroid Build Coastguard Worker expectEquals(0, $noinline$IntAbsModIntMin(Integer.MIN_VALUE)); 215*795d594fSAndroid Build Coastguard Worker expectEquals(1, $noinline$IntAbsModIntMin(-1)); 216*795d594fSAndroid Build Coastguard Worker expectEquals(0x0f, $noinline$IntAbsModIntMin(0x0f)); 217*795d594fSAndroid Build Coastguard Worker expectEquals(0x00ff, $noinline$IntAbsModIntMin(0x00ff)); 218*795d594fSAndroid Build Coastguard Worker expectEquals(0x00ffff, $noinline$IntAbsModIntMin(0x00ffff)); 219*795d594fSAndroid Build Coastguard Worker expectEquals(Integer.MAX_VALUE, $noinline$IntAbsModIntMin(Integer.MAX_VALUE)); 220*795d594fSAndroid Build Coastguard Worker } 221*795d594fSAndroid Build Coastguard Worker 222*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: java.lang.Integer RemTest.$noinline$IntMod2(int) disassembly (after) 223*795d594fSAndroid Build Coastguard Worker /// CHECK: add r{{\d+}}, r{{\d+}}, r{{\d+}}, lsr #31 224*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: bfc r{{\d+}}, #0, #1 225*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: sub{{s?}} r{{\d+}}, r{{\d+}}, r{{\d+}} 226*795d594fSAndroid Build Coastguard Worker // 227*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: java.lang.Integer RemTest.$noinline$IntMod2(int) disassembly (after) 228*795d594fSAndroid Build Coastguard Worker /// CHECK: cmp w{{\d+}}, #0x0 229*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and w{{\d+}}, w{{\d+}}, #0x1 230*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: cneg w{{\d+}}, w{{\d+}}, lt 231*795d594fSAndroid Build Coastguard Worker // 232*795d594fSAndroid Build Coastguard Worker /// CHECK-START-X86_64: java.lang.Integer RemTest.$noinline$IntMod2(int) disassembly (after) 233*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem [{{i\d+}},{{i\d+}}] 234*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: imul 235*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: shr 236*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: imul 237*795d594fSAndroid Build Coastguard Worker /// CHECK: mov 238*795d594fSAndroid Build Coastguard Worker /// CHECK: and 239*795d594fSAndroid Build Coastguard Worker /// CHECK: jz/eq 240*795d594fSAndroid Build Coastguard Worker /// CHECK: lea 241*795d594fSAndroid Build Coastguard Worker /// CHECK: test 242*795d594fSAndroid Build Coastguard Worker /// CHECK: cmovl/nge $noinline$IntMod2(int v)243*795d594fSAndroid Build Coastguard Worker private static Integer $noinline$IntMod2(int v) { 244*795d594fSAndroid Build Coastguard Worker int r = v % 2; 245*795d594fSAndroid Build Coastguard Worker return r; 246*795d594fSAndroid Build Coastguard Worker } 247*795d594fSAndroid Build Coastguard Worker 248*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: java.lang.Integer RemTest.$noinline$IntModMinus2(int) disassembly (after) 249*795d594fSAndroid Build Coastguard Worker /// CHECK: add r{{\d+}}, r{{\d+}}, r{{\d+}}, lsr #31 250*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: bfc r{{\d+}}, #0, #1 251*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: sub{{s?}} r{{\d+}}, r{{\d+}}, r{{\d+}} 252*795d594fSAndroid Build Coastguard Worker // 253*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: java.lang.Integer RemTest.$noinline$IntModMinus2(int) disassembly (after) 254*795d594fSAndroid Build Coastguard Worker /// CHECK: cmp w{{\d+}}, #0x0 255*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and w{{\d+}}, w{{\d+}}, #0x1 256*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: cneg w{{\d+}}, w{{\d+}}, lt 257*795d594fSAndroid Build Coastguard Worker // 258*795d594fSAndroid Build Coastguard Worker /// CHECK-START-X86_64: java.lang.Integer RemTest.$noinline$IntModMinus2(int) disassembly (after) 259*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem [{{i\d+}},{{i\d+}}] 260*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: imul 261*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: shr 262*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: imul 263*795d594fSAndroid Build Coastguard Worker /// CHECK: mov 264*795d594fSAndroid Build Coastguard Worker /// CHECK: and 265*795d594fSAndroid Build Coastguard Worker /// CHECK: jz/eq 266*795d594fSAndroid Build Coastguard Worker /// CHECK: lea 267*795d594fSAndroid Build Coastguard Worker /// CHECK: test 268*795d594fSAndroid Build Coastguard Worker /// CHECK: cmovl/nge $noinline$IntModMinus2(int v)269*795d594fSAndroid Build Coastguard Worker private static Integer $noinline$IntModMinus2(int v) { 270*795d594fSAndroid Build Coastguard Worker int r = v % -2; 271*795d594fSAndroid Build Coastguard Worker return r; 272*795d594fSAndroid Build Coastguard Worker } 273*795d594fSAndroid Build Coastguard Worker 274*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: java.lang.Integer RemTest.$noinline$IntAbsMod2(int) disassembly (after) 275*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem 276*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and{{s?}} r{{\d+}}, r{{\d+}}, #0x1 277*795d594fSAndroid Build Coastguard Worker // 278*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: java.lang.Integer RemTest.$noinline$IntAbsMod2(int) disassembly (after) 279*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem 280*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and w{{\d+}}, w{{\d+}}, #0x1 $noinline$IntAbsMod2(int v)281*795d594fSAndroid Build Coastguard Worker private static Integer $noinline$IntAbsMod2(int v) { 282*795d594fSAndroid Build Coastguard Worker int r = Math.abs(v) % 2; 283*795d594fSAndroid Build Coastguard Worker return r; 284*795d594fSAndroid Build Coastguard Worker } 285*795d594fSAndroid Build Coastguard Worker 286*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: java.lang.Integer RemTest.$noinline$IntAbsModMinus2(int) disassembly (after) 287*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem 288*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and{{s?}} r{{\d+}}, r{{\d+}}, #0x1 289*795d594fSAndroid Build Coastguard Worker // 290*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: java.lang.Integer RemTest.$noinline$IntAbsModMinus2(int) disassembly (after) 291*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem 292*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and w{{\d+}}, w{{\d+}}, #0x1 $noinline$IntAbsModMinus2(int v)293*795d594fSAndroid Build Coastguard Worker private static Integer $noinline$IntAbsModMinus2(int v) { 294*795d594fSAndroid Build Coastguard Worker int r = Math.abs(v) % -2; 295*795d594fSAndroid Build Coastguard Worker return r; 296*795d594fSAndroid Build Coastguard Worker } 297*795d594fSAndroid Build Coastguard Worker 298*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: java.lang.Integer RemTest.$noinline$IntALenMod2(int[]) disassembly (after) 299*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem 300*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and{{s?}} r{{\d+}}, r{{\d+}}, #0x1 301*795d594fSAndroid Build Coastguard Worker // 302*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: java.lang.Integer RemTest.$noinline$IntALenMod2(int[]) disassembly (after) 303*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem 304*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and w{{\d+}}, w{{\d+}}, #0x1 $noinline$IntALenMod2(int[] arr)305*795d594fSAndroid Build Coastguard Worker private static Integer $noinline$IntALenMod2(int[] arr) { 306*795d594fSAndroid Build Coastguard Worker int r = arr.length % 2; 307*795d594fSAndroid Build Coastguard Worker return r; 308*795d594fSAndroid Build Coastguard Worker } 309*795d594fSAndroid Build Coastguard Worker 310*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: java.lang.Integer RemTest.$noinline$IntALenModMinus2(int[]) disassembly (after) 311*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem 312*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and{{s?}} r{{\d+}}, r{{\d+}}, #0x1 313*795d594fSAndroid Build Coastguard Worker // 314*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: java.lang.Integer RemTest.$noinline$IntALenModMinus2(int[]) disassembly (after) 315*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem 316*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and w{{\d+}}, w{{\d+}}, #0x1 $noinline$IntALenModMinus2(int[] arr)317*795d594fSAndroid Build Coastguard Worker private static Integer $noinline$IntALenModMinus2(int[] arr) { 318*795d594fSAndroid Build Coastguard Worker int r = arr.length % -2; 319*795d594fSAndroid Build Coastguard Worker return r; 320*795d594fSAndroid Build Coastguard Worker } 321*795d594fSAndroid Build Coastguard Worker 322*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: java.lang.Integer RemTest.$noinline$IntMod16(int) disassembly (after) 323*795d594fSAndroid Build Coastguard Worker /// CHECK: asr{{s?}} r{{\d+}}, r{{\d+}}, #31 324*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: add r{{\d+}}, r{{\d+}}, r{{\d+}}, lsr #28 325*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: bfc r{{\d+}}, #0, #4 326*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: sub{{s?}} r{{\d+}}, r{{\d+}}, r{{\d+}} 327*795d594fSAndroid Build Coastguard Worker // 328*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: java.lang.Integer RemTest.$noinline$IntMod16(int) disassembly (after) 329*795d594fSAndroid Build Coastguard Worker /// CHECK: negs w{{\d+}}, w{{\d+}} 330*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and w{{\d+}}, w{{\d+}}, #0xf 331*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and w{{\d+}}, w{{\d+}}, #0xf 332*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: csneg w{{\d+}}, w{{\d+}}, mi 333*795d594fSAndroid Build Coastguard Worker // 334*795d594fSAndroid Build Coastguard Worker /// CHECK-START-X86_64: java.lang.Integer RemTest.$noinline$IntMod16(int) disassembly (after) 335*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem [{{i\d+}},{{i\d+}}] 336*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: imul 337*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: shr 338*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: imul 339*795d594fSAndroid Build Coastguard Worker /// CHECK: mov 340*795d594fSAndroid Build Coastguard Worker /// CHECK: and 341*795d594fSAndroid Build Coastguard Worker /// CHECK: jz/eq 342*795d594fSAndroid Build Coastguard Worker /// CHECK: lea 343*795d594fSAndroid Build Coastguard Worker /// CHECK: test 344*795d594fSAndroid Build Coastguard Worker /// CHECK: cmovl/nge $noinline$IntMod16(int v)345*795d594fSAndroid Build Coastguard Worker private static Integer $noinline$IntMod16(int v) { 346*795d594fSAndroid Build Coastguard Worker int r = v % 16; 347*795d594fSAndroid Build Coastguard Worker return r; 348*795d594fSAndroid Build Coastguard Worker } 349*795d594fSAndroid Build Coastguard Worker 350*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: java.lang.Integer RemTest.$noinline$IntModMinus16(int) disassembly (after) 351*795d594fSAndroid Build Coastguard Worker /// CHECK: asr{{s?}} r{{\d+}}, r{{\d+}}, #31 352*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: add r{{\d+}}, r{{\d+}}, r{{\d+}}, lsr #28 353*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: bfc r{{\d+}}, #0, #4 354*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: sub{{s?}} r{{\d+}}, r{{\d+}}, r{{\d+}} 355*795d594fSAndroid Build Coastguard Worker // 356*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: java.lang.Integer RemTest.$noinline$IntModMinus16(int) disassembly (after) 357*795d594fSAndroid Build Coastguard Worker /// CHECK: negs w{{\d+}}, w{{\d+}} 358*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and w{{\d+}}, w{{\d+}}, #0xf 359*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and w{{\d+}}, w{{\d+}}, #0xf 360*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: csneg w{{\d+}}, w{{\d+}}, mi 361*795d594fSAndroid Build Coastguard Worker // 362*795d594fSAndroid Build Coastguard Worker /// CHECK-START-X86_64: java.lang.Integer RemTest.$noinline$IntModMinus16(int) disassembly (after) 363*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem [{{i\d+}},{{i\d+}}] 364*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: imul 365*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: shr 366*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: imul 367*795d594fSAndroid Build Coastguard Worker /// CHECK: mov 368*795d594fSAndroid Build Coastguard Worker /// CHECK: and 369*795d594fSAndroid Build Coastguard Worker /// CHECK: jz/eq 370*795d594fSAndroid Build Coastguard Worker /// CHECK: lea 371*795d594fSAndroid Build Coastguard Worker /// CHECK: test 372*795d594fSAndroid Build Coastguard Worker /// CHECK: cmovl/nge $noinline$IntModMinus16(int v)373*795d594fSAndroid Build Coastguard Worker private static Integer $noinline$IntModMinus16(int v) { 374*795d594fSAndroid Build Coastguard Worker int r = v % -16; 375*795d594fSAndroid Build Coastguard Worker return r; 376*795d594fSAndroid Build Coastguard Worker } 377*795d594fSAndroid Build Coastguard Worker 378*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: java.lang.Integer RemTest.$noinline$IntAbsMod16(int) disassembly (after) 379*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem 380*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and{{s?}} r{{\d+}}, r{{\d+}}, #0xf 381*795d594fSAndroid Build Coastguard Worker // 382*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: java.lang.Integer RemTest.$noinline$IntAbsMod16(int) disassembly (after) 383*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem 384*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and w{{\d+}}, w{{\d+}}, #0xf $noinline$IntAbsMod16(int v)385*795d594fSAndroid Build Coastguard Worker private static Integer $noinline$IntAbsMod16(int v) { 386*795d594fSAndroid Build Coastguard Worker int r = Math.abs(v) % 16; 387*795d594fSAndroid Build Coastguard Worker return r; 388*795d594fSAndroid Build Coastguard Worker } 389*795d594fSAndroid Build Coastguard Worker 390*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: java.lang.Integer RemTest.$noinline$IntAbsModMinus16(int) disassembly (after) 391*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem 392*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and{{s?}} r{{\d+}}, r{{\d+}}, #0xf 393*795d594fSAndroid Build Coastguard Worker // 394*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: java.lang.Integer RemTest.$noinline$IntAbsModMinus16(int) disassembly (after) 395*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem 396*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and w{{\d+}}, w{{\d+}}, #0xf $noinline$IntAbsModMinus16(int v)397*795d594fSAndroid Build Coastguard Worker private static Integer $noinline$IntAbsModMinus16(int v) { 398*795d594fSAndroid Build Coastguard Worker int r = Math.abs(v) % -16; 399*795d594fSAndroid Build Coastguard Worker return r; 400*795d594fSAndroid Build Coastguard Worker } 401*795d594fSAndroid Build Coastguard Worker 402*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: java.lang.Integer RemTest.$noinline$IntALenMod16(int[]) disassembly (after) 403*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem 404*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and{{s?}} r{{\d+}}, r{{\d+}}, #0xf 405*795d594fSAndroid Build Coastguard Worker // 406*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: java.lang.Integer RemTest.$noinline$IntALenMod16(int[]) disassembly (after) 407*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem 408*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and w{{\d+}}, w{{\d+}}, #0xf $noinline$IntALenMod16(int[] arr)409*795d594fSAndroid Build Coastguard Worker private static Integer $noinline$IntALenMod16(int[] arr) { 410*795d594fSAndroid Build Coastguard Worker int r = arr.length % 16; 411*795d594fSAndroid Build Coastguard Worker return r; 412*795d594fSAndroid Build Coastguard Worker } 413*795d594fSAndroid Build Coastguard Worker 414*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: java.lang.Integer RemTest.$noinline$IntALenModMinus16(int[]) disassembly (after) 415*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem 416*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and{{s?}} r{{\d+}}, r{{\d+}}, #0xf 417*795d594fSAndroid Build Coastguard Worker // 418*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: java.lang.Integer RemTest.$noinline$IntALenModMinus16(int[]) disassembly (after) 419*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem 420*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and w{{\d+}}, w{{\d+}}, #0xf $noinline$IntALenModMinus16(int[] arr)421*795d594fSAndroid Build Coastguard Worker private static Integer $noinline$IntALenModMinus16(int[] arr) { 422*795d594fSAndroid Build Coastguard Worker int r = arr.length % -16; 423*795d594fSAndroid Build Coastguard Worker return r; 424*795d594fSAndroid Build Coastguard Worker } 425*795d594fSAndroid Build Coastguard Worker 426*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: java.lang.Integer RemTest.$noinline$IntAbsMod1024(int) disassembly (after) 427*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem 428*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: ubfx r{{\d+}}, r{{\d+}}, #0, #10 429*795d594fSAndroid Build Coastguard Worker // 430*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: java.lang.Integer RemTest.$noinline$IntAbsMod1024(int) disassembly (after) 431*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem 432*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and w{{\d+}}, w{{\d+}}, #0x3ff $noinline$IntAbsMod1024(int v)433*795d594fSAndroid Build Coastguard Worker private static Integer $noinline$IntAbsMod1024(int v) { 434*795d594fSAndroid Build Coastguard Worker int r = Math.abs(v) % 1024; 435*795d594fSAndroid Build Coastguard Worker return r; 436*795d594fSAndroid Build Coastguard Worker } 437*795d594fSAndroid Build Coastguard Worker 438*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: java.lang.Integer RemTest.$noinline$IntAbsModMinus1024(int) disassembly (after) 439*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem 440*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: ubfx r{{\d+}}, r{{\d+}}, #0, #10 441*795d594fSAndroid Build Coastguard Worker // 442*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: java.lang.Integer RemTest.$noinline$IntAbsModMinus1024(int) disassembly (after) 443*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem 444*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and w{{\d+}}, w{{\d+}}, #0x3ff $noinline$IntAbsModMinus1024(int v)445*795d594fSAndroid Build Coastguard Worker private static Integer $noinline$IntAbsModMinus1024(int v) { 446*795d594fSAndroid Build Coastguard Worker int r = Math.abs(v) % -1024; 447*795d594fSAndroid Build Coastguard Worker return r; 448*795d594fSAndroid Build Coastguard Worker } 449*795d594fSAndroid Build Coastguard Worker 450*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: java.lang.Integer RemTest.$noinline$IntALenMod1024(int[]) disassembly (after) 451*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem 452*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: ubfx r{{\d+}}, r{{\d+}}, #0, #10 453*795d594fSAndroid Build Coastguard Worker // 454*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: java.lang.Integer RemTest.$noinline$IntALenMod1024(int[]) disassembly (after) 455*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem 456*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and w{{\d+}}, w{{\d+}}, #0x3ff $noinline$IntALenMod1024(int[] arr)457*795d594fSAndroid Build Coastguard Worker private static Integer $noinline$IntALenMod1024(int[] arr) { 458*795d594fSAndroid Build Coastguard Worker int r = arr.length % 1024; 459*795d594fSAndroid Build Coastguard Worker return r; 460*795d594fSAndroid Build Coastguard Worker } 461*795d594fSAndroid Build Coastguard Worker 462*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: java.lang.Integer RemTest.$noinline$IntALenModMinus1024(int[]) disassembly (after) 463*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem 464*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: ubfx r{{\d+}}, r{{\d+}}, #0, #10 465*795d594fSAndroid Build Coastguard Worker // 466*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: java.lang.Integer RemTest.$noinline$IntALenModMinus1024(int[]) disassembly (after) 467*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem 468*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and w{{\d+}}, w{{\d+}}, #0x3ff $noinline$IntALenModMinus1024(int[] arr)469*795d594fSAndroid Build Coastguard Worker private static Integer $noinline$IntALenModMinus1024(int[] arr) { 470*795d594fSAndroid Build Coastguard Worker int r = arr.length % -1024; 471*795d594fSAndroid Build Coastguard Worker return r; 472*795d594fSAndroid Build Coastguard Worker } 473*795d594fSAndroid Build Coastguard Worker 474*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: java.lang.Integer RemTest.$noinline$IntModIntMin(int) disassembly (after) 475*795d594fSAndroid Build Coastguard Worker /// CHECK: asr{{s?}} r{{\d+}}, r{{\d+}}, #31 476*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: add r{{\d+}}, r{{\d+}}, r{{\d+}}, lsr #1 477*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: bfc r{{\d+}}, #0, #31 478*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: sub{{s?}} r{{\d+}}, r{{\d+}}, r{{\d+}} 479*795d594fSAndroid Build Coastguard Worker // 480*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: java.lang.Integer RemTest.$noinline$IntModIntMin(int) disassembly (after) 481*795d594fSAndroid Build Coastguard Worker /// CHECK: negs w{{\d+}}, w{{\d+}} 482*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and w{{\d+}}, w{{\d+}}, #0x7fffffff 483*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and w{{\d+}}, w{{\d+}}, #0x7fffffff 484*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: csneg w{{\d+}}, w{{\d+}}, mi 485*795d594fSAndroid Build Coastguard Worker // 486*795d594fSAndroid Build Coastguard Worker /// CHECK-START-X86_64: java.lang.Integer RemTest.$noinline$IntModIntMin(int) disassembly (after) 487*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem [{{i\d+}},{{i\d+}}] 488*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: imul 489*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: shr 490*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: imul 491*795d594fSAndroid Build Coastguard Worker /// CHECK: mov 492*795d594fSAndroid Build Coastguard Worker /// CHECK: and 493*795d594fSAndroid Build Coastguard Worker /// CHECK: jz/eq 494*795d594fSAndroid Build Coastguard Worker /// CHECK: lea 495*795d594fSAndroid Build Coastguard Worker /// CHECK: test 496*795d594fSAndroid Build Coastguard Worker /// CHECK: cmovl/nge $noinline$IntModIntMin(int v)497*795d594fSAndroid Build Coastguard Worker private static Integer $noinline$IntModIntMin(int v) { 498*795d594fSAndroid Build Coastguard Worker int r = v % Integer.MIN_VALUE; 499*795d594fSAndroid Build Coastguard Worker return r; 500*795d594fSAndroid Build Coastguard Worker } 501*795d594fSAndroid Build Coastguard Worker 502*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: java.lang.Integer RemTest.$noinline$IntAbsModIntMin(int) disassembly (after) 503*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem 504*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: ubfx r{{\d+}}, r{{\d+}}, #0, #31 505*795d594fSAndroid Build Coastguard Worker // 506*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: java.lang.Integer RemTest.$noinline$IntAbsModIntMin(int) disassembly (after) 507*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem 508*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and w{{\d+}}, w{{\d+}}, #0x7fffffff $noinline$IntAbsModIntMin(int v)509*795d594fSAndroid Build Coastguard Worker private static Integer $noinline$IntAbsModIntMin(int v) { 510*795d594fSAndroid Build Coastguard Worker int r = Math.abs(v) % Integer.MIN_VALUE; 511*795d594fSAndroid Build Coastguard Worker return r; 512*795d594fSAndroid Build Coastguard Worker } 513*795d594fSAndroid Build Coastguard Worker remLong()514*795d594fSAndroid Build Coastguard Worker private static void remLong() { 515*795d594fSAndroid Build Coastguard Worker expectEquals(0L, $noinline$LongMod2(0)); 516*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongMod2(1)); 517*795d594fSAndroid Build Coastguard Worker expectEquals(-1L, $noinline$LongMod2(-1)); 518*795d594fSAndroid Build Coastguard Worker expectEquals(0L, $noinline$LongMod2(2)); 519*795d594fSAndroid Build Coastguard Worker expectEquals(0L, $noinline$LongMod2(-2)); 520*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongMod2(3)); 521*795d594fSAndroid Build Coastguard Worker expectEquals(-1L, $noinline$LongMod2(-3)); 522*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongMod2(0x0f)); 523*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongMod2(0x00ff)); 524*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongMod2(0x00ffff)); 525*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongMod2(0x00ffffff)); 526*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongMod2(0x00ffffffffL)); 527*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongMod2(Long.MAX_VALUE)); 528*795d594fSAndroid Build Coastguard Worker expectEquals(0L, $noinline$LongMod2(Long.MIN_VALUE)); 529*795d594fSAndroid Build Coastguard Worker 530*795d594fSAndroid Build Coastguard Worker expectEquals(0L, $noinline$LongModMinus2(0)); 531*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongModMinus2(1)); 532*795d594fSAndroid Build Coastguard Worker expectEquals(-1L, $noinline$LongModMinus2(-1)); 533*795d594fSAndroid Build Coastguard Worker expectEquals(0L, $noinline$LongModMinus2(2)); 534*795d594fSAndroid Build Coastguard Worker expectEquals(0L, $noinline$LongModMinus2(-2)); 535*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongModMinus2(3)); 536*795d594fSAndroid Build Coastguard Worker expectEquals(-1L, $noinline$LongModMinus2(-3)); 537*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongModMinus2(0x0f)); 538*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongModMinus2(0x00ff)); 539*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongModMinus2(0x00ffff)); 540*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongModMinus2(0x00ffffff)); 541*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongModMinus2(0x00ffffffffL)); 542*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongModMinus2(Long.MAX_VALUE)); 543*795d594fSAndroid Build Coastguard Worker expectEquals(0L, $noinline$LongModMinus2(Long.MIN_VALUE)); 544*795d594fSAndroid Build Coastguard Worker 545*795d594fSAndroid Build Coastguard Worker expectEquals(0L, $noinline$LongAbsMod2(0)); 546*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongAbsMod2(1)); 547*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongAbsMod2(-1)); 548*795d594fSAndroid Build Coastguard Worker expectEquals(0L, $noinline$LongAbsMod2(2)); 549*795d594fSAndroid Build Coastguard Worker expectEquals(0L, $noinline$LongAbsMod2(-2)); 550*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongAbsMod2(3)); 551*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongAbsMod2(-3)); 552*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongAbsMod2(0x0f)); 553*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongAbsMod2(0x00ff)); 554*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongAbsMod2(0x00ffff)); 555*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongAbsMod2(0x00ffffff)); 556*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongAbsMod2(0x00ffffffffL)); 557*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongAbsMod2(Long.MAX_VALUE)); 558*795d594fSAndroid Build Coastguard Worker expectEquals(0L, $noinline$LongAbsMod2(Long.MIN_VALUE)); 559*795d594fSAndroid Build Coastguard Worker 560*795d594fSAndroid Build Coastguard Worker expectEquals(0L, $noinline$LongAbsModMinus2(0)); 561*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongAbsModMinus2(1)); 562*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongAbsModMinus2(-1)); 563*795d594fSAndroid Build Coastguard Worker expectEquals(0L, $noinline$LongAbsModMinus2(2)); 564*795d594fSAndroid Build Coastguard Worker expectEquals(0L, $noinline$LongAbsModMinus2(-2)); 565*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongAbsModMinus2(3)); 566*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongAbsModMinus2(-3)); 567*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongAbsModMinus2(0x0f)); 568*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongAbsModMinus2(0x00ff)); 569*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongAbsModMinus2(0x00ffff)); 570*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongAbsModMinus2(0x00ffffff)); 571*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongAbsModMinus2(0x00ffffffffL)); 572*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongAbsModMinus2(Long.MAX_VALUE)); 573*795d594fSAndroid Build Coastguard Worker expectEquals(0L, $noinline$LongAbsModMinus2(Long.MIN_VALUE)); 574*795d594fSAndroid Build Coastguard Worker 575*795d594fSAndroid Build Coastguard Worker expectEquals(0L, $noinline$LongMod16(0)); 576*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongMod16(1)); 577*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongMod16(17)); 578*795d594fSAndroid Build Coastguard Worker expectEquals(-1L, $noinline$LongMod16(-1)); 579*795d594fSAndroid Build Coastguard Worker expectEquals(0L, $noinline$LongMod16(32)); 580*795d594fSAndroid Build Coastguard Worker expectEquals(0L, $noinline$LongMod16(-32)); 581*795d594fSAndroid Build Coastguard Worker expectEquals(0x0fL, $noinline$LongMod16(0x0f)); 582*795d594fSAndroid Build Coastguard Worker expectEquals(0x0fL, $noinline$LongMod16(0x00ff)); 583*795d594fSAndroid Build Coastguard Worker expectEquals(0x0fL, $noinline$LongMod16(0x00ffff)); 584*795d594fSAndroid Build Coastguard Worker expectEquals(0x0fL, $noinline$LongMod16(0x00ffffff)); 585*795d594fSAndroid Build Coastguard Worker expectEquals(0x0fL, $noinline$LongMod16(0x00ffffffffL)); 586*795d594fSAndroid Build Coastguard Worker expectEquals(15L, $noinline$LongMod16(Long.MAX_VALUE)); 587*795d594fSAndroid Build Coastguard Worker expectEquals(0L, $noinline$LongMod16(Long.MIN_VALUE)); 588*795d594fSAndroid Build Coastguard Worker 589*795d594fSAndroid Build Coastguard Worker expectEquals(0L, $noinline$LongModMinus16(0)); 590*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongModMinus16(1)); 591*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongModMinus16(17)); 592*795d594fSAndroid Build Coastguard Worker expectEquals(-1L, $noinline$LongModMinus16(-1)); 593*795d594fSAndroid Build Coastguard Worker expectEquals(0L, $noinline$LongModMinus16(32)); 594*795d594fSAndroid Build Coastguard Worker expectEquals(0L, $noinline$LongModMinus16(-32)); 595*795d594fSAndroid Build Coastguard Worker expectEquals(0x0fL, $noinline$LongModMinus16(0x0f)); 596*795d594fSAndroid Build Coastguard Worker expectEquals(0x0fL, $noinline$LongModMinus16(0x00ff)); 597*795d594fSAndroid Build Coastguard Worker expectEquals(0x0fL, $noinline$LongModMinus16(0x00ffff)); 598*795d594fSAndroid Build Coastguard Worker expectEquals(0x0fL, $noinline$LongModMinus16(0x00ffffff)); 599*795d594fSAndroid Build Coastguard Worker expectEquals(0x0fL, $noinline$LongModMinus16(0x00ffffffffL)); 600*795d594fSAndroid Build Coastguard Worker expectEquals(15L, $noinline$LongModMinus16(Long.MAX_VALUE)); 601*795d594fSAndroid Build Coastguard Worker expectEquals(0L, $noinline$LongModMinus16(Long.MIN_VALUE)); 602*795d594fSAndroid Build Coastguard Worker 603*795d594fSAndroid Build Coastguard Worker expectEquals(0L, $noinline$LongAbsMod16(0)); 604*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongAbsMod16(1)); 605*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongAbsMod16(17)); 606*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongAbsMod16(-1)); 607*795d594fSAndroid Build Coastguard Worker expectEquals(0L, $noinline$LongAbsMod16(32)); 608*795d594fSAndroid Build Coastguard Worker expectEquals(0L, $noinline$LongAbsMod16(-32)); 609*795d594fSAndroid Build Coastguard Worker expectEquals(0x0fL, $noinline$LongAbsMod16(0x0f)); 610*795d594fSAndroid Build Coastguard Worker expectEquals(0x0fL, $noinline$LongAbsMod16(0x00ff)); 611*795d594fSAndroid Build Coastguard Worker expectEquals(0x0fL, $noinline$LongAbsMod16(0x00ffff)); 612*795d594fSAndroid Build Coastguard Worker expectEquals(0x0fL, $noinline$LongAbsMod16(0x00ffffff)); 613*795d594fSAndroid Build Coastguard Worker expectEquals(0x0fL, $noinline$LongAbsMod16(0x00ffffffffL)); 614*795d594fSAndroid Build Coastguard Worker expectEquals(15L, $noinline$LongAbsMod16(Long.MAX_VALUE)); 615*795d594fSAndroid Build Coastguard Worker expectEquals(0L, $noinline$LongAbsMod16(Long.MIN_VALUE)); 616*795d594fSAndroid Build Coastguard Worker 617*795d594fSAndroid Build Coastguard Worker expectEquals(0L, $noinline$LongAbsModMinus16(0)); 618*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongAbsModMinus16(1)); 619*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongAbsModMinus16(17)); 620*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongAbsModMinus16(-1)); 621*795d594fSAndroid Build Coastguard Worker expectEquals(0L, $noinline$LongAbsModMinus16(32)); 622*795d594fSAndroid Build Coastguard Worker expectEquals(0L, $noinline$LongAbsModMinus16(-32)); 623*795d594fSAndroid Build Coastguard Worker expectEquals(0x0fL, $noinline$LongAbsModMinus16(0x0f)); 624*795d594fSAndroid Build Coastguard Worker expectEquals(0x0fL, $noinline$LongAbsModMinus16(0x00ff)); 625*795d594fSAndroid Build Coastguard Worker expectEquals(0x0fL, $noinline$LongAbsModMinus16(0x00ffff)); 626*795d594fSAndroid Build Coastguard Worker expectEquals(0x0fL, $noinline$LongAbsModMinus16(0x00ffffff)); 627*795d594fSAndroid Build Coastguard Worker expectEquals(0x0fL, $noinline$LongAbsModMinus16(0x00ffffffffL)); 628*795d594fSAndroid Build Coastguard Worker expectEquals(15L, $noinline$LongAbsModMinus16(Long.MAX_VALUE)); 629*795d594fSAndroid Build Coastguard Worker expectEquals(0L, $noinline$LongAbsModMinus16(Long.MIN_VALUE)); 630*795d594fSAndroid Build Coastguard Worker 631*795d594fSAndroid Build Coastguard Worker expectEquals(0L, $noinline$LongModLongMin(0)); 632*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongModLongMin(1)); 633*795d594fSAndroid Build Coastguard Worker expectEquals(0L, $noinline$LongModLongMin(Long.MIN_VALUE)); 634*795d594fSAndroid Build Coastguard Worker expectEquals(-1L, $noinline$LongModLongMin(-1)); 635*795d594fSAndroid Build Coastguard Worker expectEquals(0x0fL, $noinline$LongModLongMin(0x0f)); 636*795d594fSAndroid Build Coastguard Worker expectEquals(0x00ffL, $noinline$LongModLongMin(0x00ff)); 637*795d594fSAndroid Build Coastguard Worker expectEquals(0x00ffffL, $noinline$LongModLongMin(0x00ffff)); 638*795d594fSAndroid Build Coastguard Worker expectEquals(0x00ffffffL, $noinline$LongModLongMin(0x00ffffff)); 639*795d594fSAndroid Build Coastguard Worker expectEquals(0x00ffffffffL, $noinline$LongModLongMin(0x00ffffffffL)); 640*795d594fSAndroid Build Coastguard Worker expectEquals(Long.MAX_VALUE, $noinline$LongModLongMin(Long.MAX_VALUE)); 641*795d594fSAndroid Build Coastguard Worker 642*795d594fSAndroid Build Coastguard Worker expectEquals(0L, $noinline$LongAbsModLongMin(0)); 643*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongAbsModLongMin(1)); 644*795d594fSAndroid Build Coastguard Worker expectEquals(0L, $noinline$LongAbsModLongMin(Long.MIN_VALUE)); 645*795d594fSAndroid Build Coastguard Worker expectEquals(1L, $noinline$LongAbsModLongMin(-1)); 646*795d594fSAndroid Build Coastguard Worker expectEquals(0x0fL, $noinline$LongAbsModLongMin(0x0f)); 647*795d594fSAndroid Build Coastguard Worker expectEquals(0x00ffL, $noinline$LongAbsModLongMin(0x00ff)); 648*795d594fSAndroid Build Coastguard Worker expectEquals(0x00ffffL, $noinline$LongAbsModLongMin(0x00ffff)); 649*795d594fSAndroid Build Coastguard Worker expectEquals(0x00ffffffL, $noinline$LongAbsModLongMin(0x00ffffff)); 650*795d594fSAndroid Build Coastguard Worker expectEquals(0x00ffffffffL, $noinline$LongAbsModLongMin(0x00ffffffffL)); 651*795d594fSAndroid Build Coastguard Worker expectEquals(Long.MAX_VALUE, $noinline$LongAbsModLongMin(Long.MAX_VALUE)); 652*795d594fSAndroid Build Coastguard Worker } 653*795d594fSAndroid Build Coastguard Worker 654*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: java.lang.Long RemTest.$noinline$LongMod2(long) disassembly (after) 655*795d594fSAndroid Build Coastguard Worker /// CHECK: cmp x{{\d+}}, #0x0 656*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and x{{\d+}}, x{{\d+}}, #0x1 657*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: cneg x{{\d+}}, x{{\d+}}, lt 658*795d594fSAndroid Build Coastguard Worker // 659*795d594fSAndroid Build Coastguard Worker /// CHECK-START-X86_64: java.lang.Long RemTest.$noinline$LongMod2(long) disassembly (after) 660*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem [{{j\d+}},{{j\d+}}] 661*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: imul 662*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: shrq 663*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: imulq 664*795d594fSAndroid Build Coastguard Worker /// CHECK: movq 665*795d594fSAndroid Build Coastguard Worker /// CHECK: andq 666*795d594fSAndroid Build Coastguard Worker /// CHECK: jz/eq 667*795d594fSAndroid Build Coastguard Worker /// CHECK: movq 668*795d594fSAndroid Build Coastguard Worker /// CHECK: sarq 669*795d594fSAndroid Build Coastguard Worker /// CHECK: shlq 670*795d594fSAndroid Build Coastguard Worker /// CHECK: orq $noinline$LongMod2(long v)671*795d594fSAndroid Build Coastguard Worker private static Long $noinline$LongMod2(long v) { 672*795d594fSAndroid Build Coastguard Worker long r = v % 2; 673*795d594fSAndroid Build Coastguard Worker return r; 674*795d594fSAndroid Build Coastguard Worker } 675*795d594fSAndroid Build Coastguard Worker 676*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: java.lang.Long RemTest.$noinline$LongModMinus2(long) disassembly (after) 677*795d594fSAndroid Build Coastguard Worker /// CHECK: cmp x{{\d+}}, #0x0 678*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and x{{\d+}}, x{{\d+}}, #0x1 679*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: cneg x{{\d+}}, x{{\d+}}, lt 680*795d594fSAndroid Build Coastguard Worker // 681*795d594fSAndroid Build Coastguard Worker /// CHECK-START-X86_64: java.lang.Long RemTest.$noinline$LongModMinus2(long) disassembly (after) 682*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem [{{j\d+}},{{j\d+}}] 683*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: imul 684*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: shrq 685*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: imulq 686*795d594fSAndroid Build Coastguard Worker /// CHECK: movq 687*795d594fSAndroid Build Coastguard Worker /// CHECK: andq 688*795d594fSAndroid Build Coastguard Worker /// CHECK: jz/eq 689*795d594fSAndroid Build Coastguard Worker /// CHECK: movq 690*795d594fSAndroid Build Coastguard Worker /// CHECK: sarq 691*795d594fSAndroid Build Coastguard Worker /// CHECK: shlq 692*795d594fSAndroid Build Coastguard Worker /// CHECK: orq $noinline$LongModMinus2(long v)693*795d594fSAndroid Build Coastguard Worker private static Long $noinline$LongModMinus2(long v) { 694*795d594fSAndroid Build Coastguard Worker long r = v % -2; 695*795d594fSAndroid Build Coastguard Worker return r; 696*795d594fSAndroid Build Coastguard Worker } 697*795d594fSAndroid Build Coastguard Worker 698*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: java.lang.Long RemTest.$noinline$LongAbsMod2(long) disassembly (after) 699*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem 700*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and x{{\d+}}, x{{\d+}}, #0x1 $noinline$LongAbsMod2(long v)701*795d594fSAndroid Build Coastguard Worker private static Long $noinline$LongAbsMod2(long v) { 702*795d594fSAndroid Build Coastguard Worker long r = Math.abs(v) % 2; 703*795d594fSAndroid Build Coastguard Worker return r; 704*795d594fSAndroid Build Coastguard Worker } 705*795d594fSAndroid Build Coastguard Worker 706*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: java.lang.Long RemTest.$noinline$LongAbsModMinus2(long) disassembly (after) 707*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem 708*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and x{{\d+}}, x{{\d+}}, #0x1 $noinline$LongAbsModMinus2(long v)709*795d594fSAndroid Build Coastguard Worker private static Long $noinline$LongAbsModMinus2(long v) { 710*795d594fSAndroid Build Coastguard Worker long r = Math.abs(v) % -2; 711*795d594fSAndroid Build Coastguard Worker return r; 712*795d594fSAndroid Build Coastguard Worker } 713*795d594fSAndroid Build Coastguard Worker 714*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: java.lang.Long RemTest.$noinline$LongMod16(long) disassembly (after) 715*795d594fSAndroid Build Coastguard Worker /// CHECK: negs x{{\d+}}, x{{\d+}} 716*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and x{{\d+}}, x{{\d+}}, #0xf 717*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and x{{\d+}}, x{{\d+}}, #0xf 718*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: csneg x{{\d+}}, x{{\d+}}, mi 719*795d594fSAndroid Build Coastguard Worker 720*795d594fSAndroid Build Coastguard Worker /// CHECK-START-X86_64: java.lang.Long RemTest.$noinline$LongMod16(long) disassembly (after) 721*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem [{{j\d+}},{{j\d+}}] 722*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: imul 723*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: shrq 724*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: imulq 725*795d594fSAndroid Build Coastguard Worker /// CHECK: movq 726*795d594fSAndroid Build Coastguard Worker /// CHECK: andq 727*795d594fSAndroid Build Coastguard Worker /// CHECK: jz/eq 728*795d594fSAndroid Build Coastguard Worker /// CHECK: movq 729*795d594fSAndroid Build Coastguard Worker /// CHECK: sarq 730*795d594fSAndroid Build Coastguard Worker /// CHECK: shlq 731*795d594fSAndroid Build Coastguard Worker /// CHECK: orq $noinline$LongMod16(long v)732*795d594fSAndroid Build Coastguard Worker private static Long $noinline$LongMod16(long v) { 733*795d594fSAndroid Build Coastguard Worker long r = v % 16; 734*795d594fSAndroid Build Coastguard Worker return r; 735*795d594fSAndroid Build Coastguard Worker } 736*795d594fSAndroid Build Coastguard Worker 737*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: java.lang.Long RemTest.$noinline$LongModMinus16(long) disassembly (after) 738*795d594fSAndroid Build Coastguard Worker /// CHECK: negs x{{\d+}}, x{{\d+}} 739*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and x{{\d+}}, x{{\d+}}, #0xf 740*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and x{{\d+}}, x{{\d+}}, #0xf 741*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: csneg x{{\d+}}, x{{\d+}}, mi 742*795d594fSAndroid Build Coastguard Worker // 743*795d594fSAndroid Build Coastguard Worker /// CHECK-START-X86_64: java.lang.Long RemTest.$noinline$LongModMinus16(long) disassembly (after) 744*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem [{{j\d+}},{{j\d+}}] 745*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: imul 746*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: shrq 747*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: imulq 748*795d594fSAndroid Build Coastguard Worker /// CHECK: movq 749*795d594fSAndroid Build Coastguard Worker /// CHECK: andq 750*795d594fSAndroid Build Coastguard Worker /// CHECK: jz/eq 751*795d594fSAndroid Build Coastguard Worker /// CHECK: movq 752*795d594fSAndroid Build Coastguard Worker /// CHECK: sarq 753*795d594fSAndroid Build Coastguard Worker /// CHECK: shlq 754*795d594fSAndroid Build Coastguard Worker /// CHECK: orq $noinline$LongModMinus16(long v)755*795d594fSAndroid Build Coastguard Worker private static Long $noinline$LongModMinus16(long v) { 756*795d594fSAndroid Build Coastguard Worker long r = v % -16; 757*795d594fSAndroid Build Coastguard Worker return r; 758*795d594fSAndroid Build Coastguard Worker } 759*795d594fSAndroid Build Coastguard Worker 760*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: java.lang.Long RemTest.$noinline$LongAbsMod16(long) disassembly (after) 761*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem 762*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and x{{\d+}}, x{{\d+}}, #0xf $noinline$LongAbsMod16(long v)763*795d594fSAndroid Build Coastguard Worker private static Long $noinline$LongAbsMod16(long v) { 764*795d594fSAndroid Build Coastguard Worker long r = Math.abs(v) % 16; 765*795d594fSAndroid Build Coastguard Worker return r; 766*795d594fSAndroid Build Coastguard Worker } 767*795d594fSAndroid Build Coastguard Worker 768*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: java.lang.Long RemTest.$noinline$LongAbsModMinus16(long) disassembly (after) 769*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem 770*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and x{{\d+}}, x{{\d+}}, #0xf $noinline$LongAbsModMinus16(long v)771*795d594fSAndroid Build Coastguard Worker private static Long $noinline$LongAbsModMinus16(long v) { 772*795d594fSAndroid Build Coastguard Worker long r = Math.abs(v) % -16; 773*795d594fSAndroid Build Coastguard Worker return r; 774*795d594fSAndroid Build Coastguard Worker } 775*795d594fSAndroid Build Coastguard Worker 776*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: java.lang.Long RemTest.$noinline$LongModLongMin(long) disassembly (after) 777*795d594fSAndroid Build Coastguard Worker /// CHECK: negs x{{\d+}}, x{{\d+}} 778*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and x{{\d+}}, x{{\d+}}, #0x7fffffffffffffff 779*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and x{{\d+}}, x{{\d+}}, #0x7fffffffffffffff 780*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: csneg x{{\d+}}, x{{\d+}}, mi 781*795d594fSAndroid Build Coastguard Worker // 782*795d594fSAndroid Build Coastguard Worker /// CHECK-START-X86_64: java.lang.Long RemTest.$noinline$LongModLongMin(long) disassembly (after) 783*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem [{{j\d+}},{{j\d+}}] 784*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: imul 785*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: shrq 786*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: imulq 787*795d594fSAndroid Build Coastguard Worker /// CHECK: movq 788*795d594fSAndroid Build Coastguard Worker /// CHECK: andq 789*795d594fSAndroid Build Coastguard Worker /// CHECK: jz/eq 790*795d594fSAndroid Build Coastguard Worker /// CHECK: movq 791*795d594fSAndroid Build Coastguard Worker /// CHECK: sarq 792*795d594fSAndroid Build Coastguard Worker /// CHECK: shlq 793*795d594fSAndroid Build Coastguard Worker /// CHECK: orq $noinline$LongModLongMin(long v)794*795d594fSAndroid Build Coastguard Worker private static Long $noinline$LongModLongMin(long v) { 795*795d594fSAndroid Build Coastguard Worker long r = v % Long.MIN_VALUE; 796*795d594fSAndroid Build Coastguard Worker return r; 797*795d594fSAndroid Build Coastguard Worker } 798*795d594fSAndroid Build Coastguard Worker 799*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: java.lang.Long RemTest.$noinline$LongAbsModLongMin(long) disassembly (after) 800*795d594fSAndroid Build Coastguard Worker /// CHECK: Rem 801*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and x{{\d+}}, x{{\d+}}, #0x7fffffffffffffff $noinline$LongAbsModLongMin(long v)802*795d594fSAndroid Build Coastguard Worker private static Long $noinline$LongAbsModLongMin(long v) { 803*795d594fSAndroid Build Coastguard Worker long r = Math.abs(v) % Long.MIN_VALUE; 804*795d594fSAndroid Build Coastguard Worker return r; 805*795d594fSAndroid Build Coastguard Worker } 806*795d594fSAndroid Build Coastguard Worker } 807