1*795d594fSAndroid Build Coastguard Worker /* 2*795d594fSAndroid Build Coastguard Worker * Copyright (C) 2015 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 Main { 18*795d594fSAndroid Build Coastguard Worker assertIntEquals(int expected, int result)19*795d594fSAndroid Build Coastguard Worker public static void assertIntEquals(int expected, int result) { 20*795d594fSAndroid Build Coastguard Worker if (expected != 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 assertLongEquals(long expected, long result)25*795d594fSAndroid Build Coastguard Worker public static void assertLongEquals(long expected, long result) { 26*795d594fSAndroid Build Coastguard Worker if (expected != result) { 27*795d594fSAndroid Build Coastguard Worker throw new Error("Expected: " + expected + ", found: " + result); 28*795d594fSAndroid Build Coastguard Worker } 29*795d594fSAndroid Build Coastguard Worker } 30*795d594fSAndroid Build Coastguard Worker 31*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: int Main.and254(int) disassembly (after) 32*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: movs {{r\d+}}, #254 33*795d594fSAndroid Build Coastguard Worker /// CHECK: and {{r\d+}}, {{r\d+}}, #0xfe 34*795d594fSAndroid Build Coastguard Worker and254(int arg)35*795d594fSAndroid Build Coastguard Worker public static int and254(int arg) { 36*795d594fSAndroid Build Coastguard Worker return arg & 254; 37*795d594fSAndroid Build Coastguard Worker } 38*795d594fSAndroid Build Coastguard Worker 39*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: int Main.and255(int) disassembly (after) 40*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: movs {{r\d+}}, #255 41*795d594fSAndroid Build Coastguard Worker /// CHECK: ubfx {{r\d+}}, {{r\d+}}, #0, #8 42*795d594fSAndroid Build Coastguard Worker and255(int arg)43*795d594fSAndroid Build Coastguard Worker public static int and255(int arg) { 44*795d594fSAndroid Build Coastguard Worker return arg & 255; 45*795d594fSAndroid Build Coastguard Worker } 46*795d594fSAndroid Build Coastguard Worker 47*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: int Main.and511(int) disassembly (after) 48*795d594fSAndroid Build Coastguard Worker /// CHECK: ubfx {{r\d+}}, {{r\d+}}, #0, #9 49*795d594fSAndroid Build Coastguard Worker and511(int arg)50*795d594fSAndroid Build Coastguard Worker public static int and511(int arg) { 51*795d594fSAndroid Build Coastguard Worker return arg & 511; 52*795d594fSAndroid Build Coastguard Worker } 53*795d594fSAndroid Build Coastguard Worker 54*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: int Main.andF00D(int) disassembly (after) 55*795d594fSAndroid Build Coastguard Worker /// CHECK: mov {{r\d+}}, #61453 56*795d594fSAndroid Build Coastguard Worker /// CHECK: and{{(\.w)?}} {{r\d+}}, {{r\d+}}, {{r\d+}} 57*795d594fSAndroid Build Coastguard Worker andF00D(int arg)58*795d594fSAndroid Build Coastguard Worker public static int andF00D(int arg) { 59*795d594fSAndroid Build Coastguard Worker return arg & 0xF00D; 60*795d594fSAndroid Build Coastguard Worker } 61*795d594fSAndroid Build Coastguard Worker 62*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: int Main.andNot15(int) disassembly (after) 63*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: mvn {{r\d+}}, #15 64*795d594fSAndroid Build Coastguard Worker /// CHECK: bic {{r\d+}}, {{r\d+}}, #0xf 65*795d594fSAndroid Build Coastguard Worker andNot15(int arg)66*795d594fSAndroid Build Coastguard Worker public static int andNot15(int arg) { 67*795d594fSAndroid Build Coastguard Worker return arg & ~15; 68*795d594fSAndroid Build Coastguard Worker } 69*795d594fSAndroid Build Coastguard Worker 70*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: int Main.or255(int) disassembly (after) 71*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: movs {{r\d+}}, #255 72*795d594fSAndroid Build Coastguard Worker /// CHECK: orr {{r\d+}}, {{r\d+}}, #0xff 73*795d594fSAndroid Build Coastguard Worker or255(int arg)74*795d594fSAndroid Build Coastguard Worker public static int or255(int arg) { 75*795d594fSAndroid Build Coastguard Worker return arg | 255; 76*795d594fSAndroid Build Coastguard Worker } 77*795d594fSAndroid Build Coastguard Worker 78*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: int Main.or511(int) disassembly (after) 79*795d594fSAndroid Build Coastguard Worker /// CHECK: mov {{r\d+}}, #511 80*795d594fSAndroid Build Coastguard Worker /// CHECK: orr{{(\.w)?}} {{r\d+}}, {{r\d+}}, {{r\d+}} 81*795d594fSAndroid Build Coastguard Worker or511(int arg)82*795d594fSAndroid Build Coastguard Worker public static int or511(int arg) { 83*795d594fSAndroid Build Coastguard Worker return arg | 511; 84*795d594fSAndroid Build Coastguard Worker } 85*795d594fSAndroid Build Coastguard Worker 86*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: int Main.orNot15(int) disassembly (after) 87*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: mvn {{r\d+}}, #15 88*795d594fSAndroid Build Coastguard Worker /// CHECK: orn {{r\d+}}, {{r\d+}}, #0xf 89*795d594fSAndroid Build Coastguard Worker orNot15(int arg)90*795d594fSAndroid Build Coastguard Worker public static int orNot15(int arg) { 91*795d594fSAndroid Build Coastguard Worker return arg | ~15; 92*795d594fSAndroid Build Coastguard Worker } 93*795d594fSAndroid Build Coastguard Worker 94*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: int Main.xor255(int) disassembly (after) 95*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: movs {{r\d+}}, #255 96*795d594fSAndroid Build Coastguard Worker /// CHECK: eor {{r\d+}}, {{r\d+}}, #0xff 97*795d594fSAndroid Build Coastguard Worker xor255(int arg)98*795d594fSAndroid Build Coastguard Worker public static int xor255(int arg) { 99*795d594fSAndroid Build Coastguard Worker return arg ^ 255; 100*795d594fSAndroid Build Coastguard Worker } 101*795d594fSAndroid Build Coastguard Worker 102*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: int Main.xor511(int) disassembly (after) 103*795d594fSAndroid Build Coastguard Worker /// CHECK: mov {{r\d+}}, #511 104*795d594fSAndroid Build Coastguard Worker /// CHECK: eor{{(\.w)?}} {{r\d+}}, {{r\d+}}, {{r\d+}} 105*795d594fSAndroid Build Coastguard Worker xor511(int arg)106*795d594fSAndroid Build Coastguard Worker public static int xor511(int arg) { 107*795d594fSAndroid Build Coastguard Worker return arg ^ 511; 108*795d594fSAndroid Build Coastguard Worker } 109*795d594fSAndroid Build Coastguard Worker 110*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: int Main.xorNot15(int) disassembly (after) 111*795d594fSAndroid Build Coastguard Worker /// CHECK: mvn {{r\d+}}, #15 112*795d594fSAndroid Build Coastguard Worker /// CHECK: eor{{(\.w)?}} {{r\d+}}, {{r\d+}}, {{r\d+}} 113*795d594fSAndroid Build Coastguard Worker xorNot15(int arg)114*795d594fSAndroid Build Coastguard Worker public static int xorNot15(int arg) { 115*795d594fSAndroid Build Coastguard Worker return arg ^ ~15; 116*795d594fSAndroid Build Coastguard Worker } 117*795d594fSAndroid Build Coastguard Worker 118*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.and255(long) disassembly (after) 119*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: movs {{r\d+}}, #255 120*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: and{{(\.w)?}} 121*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: bic{{(\.w)?}} 122*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: and {{r\d+}}, {{r\d+}}, #0xff 123*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: mov{{s?}} {{r\d+}}, #0 124*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: and{{(\.w)?}} 125*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: bic{{(\.w)?}} 126*795d594fSAndroid Build Coastguard Worker and255(long arg)127*795d594fSAndroid Build Coastguard Worker public static long and255(long arg) { 128*795d594fSAndroid Build Coastguard Worker return arg & 255L; 129*795d594fSAndroid Build Coastguard Worker } 130*795d594fSAndroid Build Coastguard Worker 131*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.and511(long) disassembly (after) 132*795d594fSAndroid Build Coastguard Worker /// CHECK: ubfx {{r\d+}}, {{r\d+}}, #0, #9 133*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: mov{{s?}} {{r\d+}}, #0 134*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: and{{(\.w)?}} 135*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: bic{{(\.w)?}} 136*795d594fSAndroid Build Coastguard Worker and511(long arg)137*795d594fSAndroid Build Coastguard Worker public static long and511(long arg) { 138*795d594fSAndroid Build Coastguard Worker return arg & 511L; 139*795d594fSAndroid Build Coastguard Worker } 140*795d594fSAndroid Build Coastguard Worker 141*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.andF00D(long) disassembly (after) 142*795d594fSAndroid Build Coastguard Worker /// CHECK: mov {{r\d+}}, #61453 143*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: mov{{s?}} {{r\d+}}, #0 144*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: and{{(\.w)?}} 145*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: bic{{(\.w)?}} 146*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: ubfx 147*795d594fSAndroid Build Coastguard Worker /// CHECK: and{{(\.w)?}} {{r\d+}}, {{r\d+}}, {{r\d+}} 148*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: and{{(\.w)?}} {{r\d+}}, {{r\d+}}, {{r\d+}} 149*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: and{{(\.w)?}} 150*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: bic{{(\.w)?}} 151*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: ubfx 152*795d594fSAndroid Build Coastguard Worker andF00D(long arg)153*795d594fSAndroid Build Coastguard Worker public static long andF00D(long arg) { 154*795d594fSAndroid Build Coastguard Worker return arg & 0xF00DL; 155*795d594fSAndroid Build Coastguard Worker } 156*795d594fSAndroid Build Coastguard Worker 157*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.andNot15(long) disassembly (after) 158*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: mvn {{r\d+}}, #15 159*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: and{{(\.w)?}} 160*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: bic{{(\.w)?}} 161*795d594fSAndroid Build Coastguard Worker /// CHECK: bic {{r\d+}}, {{r\d+}}, #0xf 162*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: and{{(\.w)?}} 163*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: bic{{(\.w)?}} 164*795d594fSAndroid Build Coastguard Worker andNot15(long arg)165*795d594fSAndroid Build Coastguard Worker public static long andNot15(long arg) { 166*795d594fSAndroid Build Coastguard Worker return arg & ~15L; 167*795d594fSAndroid Build Coastguard Worker } 168*795d594fSAndroid Build Coastguard Worker 169*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.and0xfffffff00000000f(long) disassembly (after) 170*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: movs {{r\d+}}, #15 171*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: mvn {{r\d+}}, #15 172*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: and{{(\.w)?}} 173*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: bic{{(\.w)?}} 174*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: and {{r\d+}}, {{r\d+}}, #0xf 175*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: bic {{r\d+}}, {{r\d+}}, #0xf 176*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: and{{(\.w)?}} 177*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: bic{{(\.w)?}} 178*795d594fSAndroid Build Coastguard Worker and0xfffffff00000000f(long arg)179*795d594fSAndroid Build Coastguard Worker public static long and0xfffffff00000000f(long arg) { 180*795d594fSAndroid Build Coastguard Worker return arg & 0xfffffff00000000fL; 181*795d594fSAndroid Build Coastguard Worker } 182*795d594fSAndroid Build Coastguard Worker 183*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.or255(long) disassembly (after) 184*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: movs {{r\d+}}, #255 185*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: orr{{(\.w)?}} 186*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: orn 187*795d594fSAndroid Build Coastguard Worker /// CHECK: orr {{r\d+}}, {{r\d+}}, #0xff 188*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: orr{{(\.w)?}} 189*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: orn 190*795d594fSAndroid Build Coastguard Worker or255(long arg)191*795d594fSAndroid Build Coastguard Worker public static long or255(long arg) { 192*795d594fSAndroid Build Coastguard Worker return arg | 255L; 193*795d594fSAndroid Build Coastguard Worker } 194*795d594fSAndroid Build Coastguard Worker 195*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.or511(long) disassembly (after) 196*795d594fSAndroid Build Coastguard Worker /// CHECK: mov {{r\d+}}, #511 197*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: mov{{s?}} {{r\d+}}, #0 198*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: orr{{(\.w)?}} 199*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: orn 200*795d594fSAndroid Build Coastguard Worker /// CHECK: orr{{(\.w)?}} {{r\d+}}, {{r\d+}}, {{r\d+}} 201*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: orr{{(\.w)?}} {{r\d+}}, {{r\d+}}, {{r\d+}} 202*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: orr{{(\.w)?}} 203*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: orn 204*795d594fSAndroid Build Coastguard Worker or511(long arg)205*795d594fSAndroid Build Coastguard Worker public static long or511(long arg) { 206*795d594fSAndroid Build Coastguard Worker return arg | 511L; 207*795d594fSAndroid Build Coastguard Worker } 208*795d594fSAndroid Build Coastguard Worker 209*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.orNot15(long) disassembly (after) 210*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: mvn {{r\d+}}, #15 211*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: orr{{(\.w)?}} 212*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: orn 213*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: orn {{r\d+}}, {{r\d+}}, #0xf 214*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: mvn {{r\d+}}, #0 215*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: orr{{(\.w)?}} 216*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: orn 217*795d594fSAndroid Build Coastguard Worker orNot15(long arg)218*795d594fSAndroid Build Coastguard Worker public static long orNot15(long arg) { 219*795d594fSAndroid Build Coastguard Worker return arg | ~15L; 220*795d594fSAndroid Build Coastguard Worker } 221*795d594fSAndroid Build Coastguard Worker 222*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.or0xfffffff00000000f(long) disassembly (after) 223*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: movs {{r\d+}}, #15 224*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: mvn {{r\d+}}, #15 225*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: orr{{(\.w)?}} 226*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: orn 227*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: orr {{r\d+}}, {{r\d+}}, #0xf 228*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: orn {{r\d+}}, {{r\d+}}, #0xf 229*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: orr{{(\.w)?}} 230*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: orn 231*795d594fSAndroid Build Coastguard Worker or0xfffffff00000000f(long arg)232*795d594fSAndroid Build Coastguard Worker public static long or0xfffffff00000000f(long arg) { 233*795d594fSAndroid Build Coastguard Worker return arg | 0xfffffff00000000fL; 234*795d594fSAndroid Build Coastguard Worker } 235*795d594fSAndroid Build Coastguard Worker 236*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.xor255(long) disassembly (after) 237*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: movs {{r\d+}}, #255 238*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: eor{{(\.w)?}} 239*795d594fSAndroid Build Coastguard Worker /// CHECK: eor {{r\d+}}, {{r\d+}}, #0xff 240*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: eor{{(\.w)?}} 241*795d594fSAndroid Build Coastguard Worker xor255(long arg)242*795d594fSAndroid Build Coastguard Worker public static long xor255(long arg) { 243*795d594fSAndroid Build Coastguard Worker return arg ^ 255L; 244*795d594fSAndroid Build Coastguard Worker } 245*795d594fSAndroid Build Coastguard Worker 246*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.xor511(long) disassembly (after) 247*795d594fSAndroid Build Coastguard Worker /// CHECK: mov {{r\d+}}, #511 248*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: mov{{s?}} {{r\d+}}, #0 249*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: eor{{(\.w)?}} 250*795d594fSAndroid Build Coastguard Worker /// CHECK: eor{{(\.w)?}} {{r\d+}}, {{r\d+}}, {{r\d+}} 251*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: eor{{(\.w)?}} {{r\d+}}, {{r\d+}}, {{r\d+}} 252*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: eor{{(\.w)?}} 253*795d594fSAndroid Build Coastguard Worker xor511(long arg)254*795d594fSAndroid Build Coastguard Worker public static long xor511(long arg) { 255*795d594fSAndroid Build Coastguard Worker return arg ^ 511L; 256*795d594fSAndroid Build Coastguard Worker } 257*795d594fSAndroid Build Coastguard Worker 258*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.xorNot15(long) disassembly (after) 259*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: mvn {{r\d+}}, #15 260*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: mov {{r\d+}}, #4294967295 261*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: eor{{(\.w)?}} 262*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: eor{{(\.w)?}} {{r\d+}}, {{r\d+}}, {{r\d+}} 263*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: eor{{(\.w)?}} {{r\d+}}, {{r\d+}}, {{r\d+}} 264*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: eor{{(\.w)?}} 265*795d594fSAndroid Build Coastguard Worker xorNot15(long arg)266*795d594fSAndroid Build Coastguard Worker public static long xorNot15(long arg) { 267*795d594fSAndroid Build Coastguard Worker return arg ^ ~15L; 268*795d594fSAndroid Build Coastguard Worker } 269*795d594fSAndroid Build Coastguard Worker 270*795d594fSAndroid Build Coastguard Worker // Note: No support for partial long constant embedding. 271*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.xor0xfffffff00000000f(long) disassembly (after) 272*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: mov{{s?}} {{r\d+}}, #15 273*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: mvn {{r\d+}}, #15 274*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: eor{{(\.w)?}} 275*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: eor{{(\.w)?}} {{r\d+}}, {{r\d+}}, {{r\d+}} 276*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: eor{{(\.w)?}} {{r\d+}}, {{r\d+}}, {{r\d+}} 277*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: eor{{(\.w)?}} 278*795d594fSAndroid Build Coastguard Worker xor0xfffffff00000000f(long arg)279*795d594fSAndroid Build Coastguard Worker public static long xor0xfffffff00000000f(long arg) { 280*795d594fSAndroid Build Coastguard Worker return arg ^ 0xfffffff00000000fL; 281*795d594fSAndroid Build Coastguard Worker } 282*795d594fSAndroid Build Coastguard Worker 283*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.xor0xf00000000000000f(long) disassembly (after) 284*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: movs {{r\d+}}, #15 285*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: mov.w {{r\d+}}, #-268435456 286*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: eor{{(\.w)?}} 287*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: eor {{r\d+}}, {{r\d+}}, #0xf 288*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: eor {{r\d+}}, {{r\d+}}, #0xf0000000 289*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: eor{{(\.w)?}} 290*795d594fSAndroid Build Coastguard Worker xor0xf00000000000000f(long arg)291*795d594fSAndroid Build Coastguard Worker public static long xor0xf00000000000000f(long arg) { 292*795d594fSAndroid Build Coastguard Worker return arg ^ 0xf00000000000000fL; 293*795d594fSAndroid Build Coastguard Worker } 294*795d594fSAndroid Build Coastguard Worker 295*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.shl1(long) disassembly (after) 296*795d594fSAndroid Build Coastguard Worker /// CHECK: lsls{{(\.w)?}} {{r\d+}}, {{r\d+}}, #1 297*795d594fSAndroid Build Coastguard Worker /// CHECK: adc{{(\.w)?}} {{r\d+}}, {{r\d+}}, {{r\d+}} 298*795d594fSAndroid Build Coastguard Worker 299*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.shl1(long) disassembly (after) 300*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: lsl{{s?|\.w}} {{r\d+}}, {{r\d+}}, {{r\d+}} 301*795d594fSAndroid Build Coastguard Worker 302*795d594fSAndroid Build Coastguard Worker /// CHECK-START-X86: long Main.shl1(long) disassembly (after) 303*795d594fSAndroid Build Coastguard Worker /// CHECK: add 304*795d594fSAndroid Build Coastguard Worker /// CHECK: adc 305*795d594fSAndroid Build Coastguard Worker 306*795d594fSAndroid Build Coastguard Worker /// CHECK-START-X86: long Main.shl1(long) disassembly (after) 307*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: shl 308*795d594fSAndroid Build Coastguard Worker shl1(long arg)309*795d594fSAndroid Build Coastguard Worker public static long shl1(long arg) { 310*795d594fSAndroid Build Coastguard Worker return arg << 1; 311*795d594fSAndroid Build Coastguard Worker } 312*795d594fSAndroid Build Coastguard Worker 313*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.shl2(long) disassembly (after) 314*795d594fSAndroid Build Coastguard Worker /// CHECK: lsl{{s?|\.w}} <<oh:r\d+>>, {{r\d+}}, #2 315*795d594fSAndroid Build Coastguard Worker /// CHECK: orr <<oh>>, <<low:r\d+>>, lsr #30 316*795d594fSAndroid Build Coastguard Worker /// CHECK: lsl{{s?|\.w}} {{r\d+}}, <<low>>, #2 317*795d594fSAndroid Build Coastguard Worker 318*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.shl2(long) disassembly (after) 319*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: lsl{{s?|\.w}} {{r\d+}}, {{r\d+}}, {{r\d+}} 320*795d594fSAndroid Build Coastguard Worker shl2(long arg)321*795d594fSAndroid Build Coastguard Worker public static long shl2(long arg) { 322*795d594fSAndroid Build Coastguard Worker return arg << 2; 323*795d594fSAndroid Build Coastguard Worker } 324*795d594fSAndroid Build Coastguard Worker 325*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.shl31(long) disassembly (after) 326*795d594fSAndroid Build Coastguard Worker /// CHECK: lsl{{s?|\.w}} <<oh:r\d+>>, {{r\d+}}, #31 327*795d594fSAndroid Build Coastguard Worker /// CHECK: orr <<oh>>, <<low:r\d+>>, lsr #1 328*795d594fSAndroid Build Coastguard Worker /// CHECK: lsl{{s?|\.w}} {{r\d+}}, <<low>>, #31 329*795d594fSAndroid Build Coastguard Worker 330*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.shl31(long) disassembly (after) 331*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: lsl{{s?|\.w}} {{r\d+}}, {{r\d+}}, {{r\d+}} 332*795d594fSAndroid Build Coastguard Worker shl31(long arg)333*795d594fSAndroid Build Coastguard Worker public static long shl31(long arg) { 334*795d594fSAndroid Build Coastguard Worker return arg << 31; 335*795d594fSAndroid Build Coastguard Worker } 336*795d594fSAndroid Build Coastguard Worker 337*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.shl32(long) disassembly (after) 338*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: mov{{s?}} {{r\d+}}, {{r\d+}} 339*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: mov{{s?|\.w}} {{r\d+}}, #0 340*795d594fSAndroid Build Coastguard Worker 341*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.shl32(long) disassembly (after) 342*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: lsl{{s?|\.w}} 343*795d594fSAndroid Build Coastguard Worker shl32(long arg)344*795d594fSAndroid Build Coastguard Worker public static long shl32(long arg) { 345*795d594fSAndroid Build Coastguard Worker return arg << 32; 346*795d594fSAndroid Build Coastguard Worker } 347*795d594fSAndroid Build Coastguard Worker 348*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.shl33(long) disassembly (after) 349*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: lsl{{s?|\.w}} {{r\d+}}, <<high:r\d+>>, #1 350*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: mov{{s?|\.w}} {{r\d+}}, #0 351*795d594fSAndroid Build Coastguard Worker 352*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.shl33(long) disassembly (after) 353*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: lsl{{s?|\.w}} {{r\d+}}, {{r\d+}}, {{r\d+}} 354*795d594fSAndroid Build Coastguard Worker shl33(long arg)355*795d594fSAndroid Build Coastguard Worker public static long shl33(long arg) { 356*795d594fSAndroid Build Coastguard Worker return arg << 33; 357*795d594fSAndroid Build Coastguard Worker } 358*795d594fSAndroid Build Coastguard Worker 359*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.shl63(long) disassembly (after) 360*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: lsl{{s?|\.w}} {{r\d+}}, <<high:r\d+>>, #31 361*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: mov{{s?|\.w}} {{r\d+}}, #0 362*795d594fSAndroid Build Coastguard Worker 363*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.shl63(long) disassembly (after) 364*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: lsl{{s?|\.w}} {{r\d+}}, {{r\d+}}, {{r\d+}} 365*795d594fSAndroid Build Coastguard Worker shl63(long arg)366*795d594fSAndroid Build Coastguard Worker public static long shl63(long arg) { 367*795d594fSAndroid Build Coastguard Worker return arg << 63; 368*795d594fSAndroid Build Coastguard Worker } 369*795d594fSAndroid Build Coastguard Worker 370*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.shr1(long) disassembly (after) 371*795d594fSAndroid Build Coastguard Worker /// CHECK: asrs{{(\.w)?}} {{r\d+}}, {{r\d+}}, #1 372*795d594fSAndroid Build Coastguard Worker /// CHECK: rrx {{r\d+}}, {{r\d+}} 373*795d594fSAndroid Build Coastguard Worker 374*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.shr1(long) disassembly (after) 375*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: asr{{s?|\.w}} {{r\d+}}, {{r\d+}}, {{r\d+}} 376*795d594fSAndroid Build Coastguard Worker shr1(long arg)377*795d594fSAndroid Build Coastguard Worker public static long shr1(long arg) { 378*795d594fSAndroid Build Coastguard Worker return arg >> 1; 379*795d594fSAndroid Build Coastguard Worker } 380*795d594fSAndroid Build Coastguard Worker 381*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.shr2(long) disassembly (after) 382*795d594fSAndroid Build Coastguard Worker /// CHECK: lsr{{s?|\.w}} <<ol:r\d+>>, {{r\d+}}, #2 383*795d594fSAndroid Build Coastguard Worker /// CHECK: orr <<ol>>, <<high:r\d+>>, lsl #30 384*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: asr{{s?|\.w}} {{r\d+}}, <<high>>, #2 385*795d594fSAndroid Build Coastguard Worker 386*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.shr2(long) disassembly (after) 387*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: asr{{s?|\.w}} {{r\d+}}, {{r\d+}}, {{r\d+}} 388*795d594fSAndroid Build Coastguard Worker shr2(long arg)389*795d594fSAndroid Build Coastguard Worker public static long shr2(long arg) { 390*795d594fSAndroid Build Coastguard Worker return arg >> 2; 391*795d594fSAndroid Build Coastguard Worker } 392*795d594fSAndroid Build Coastguard Worker 393*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.shr31(long) disassembly (after) 394*795d594fSAndroid Build Coastguard Worker /// CHECK: lsr{{s?|\.w}} <<ol:r\d+>>, {{r\d+}}, #31 395*795d594fSAndroid Build Coastguard Worker /// CHECK: orr <<ol>>, <<high:r\d+>>, lsl #1 396*795d594fSAndroid Build Coastguard Worker /// CHECK: asr{{s?|\.w}} {{r\d+}}, <<high>>, #31 397*795d594fSAndroid Build Coastguard Worker 398*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.shr31(long) disassembly (after) 399*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: asr{{s?|\.w}} {{r\d+}}, {{r\d+}}, {{r\d+}} 400*795d594fSAndroid Build Coastguard Worker shr31(long arg)401*795d594fSAndroid Build Coastguard Worker public static long shr31(long arg) { 402*795d594fSAndroid Build Coastguard Worker return arg >> 31; 403*795d594fSAndroid Build Coastguard Worker } 404*795d594fSAndroid Build Coastguard Worker 405*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.shr32(long) disassembly (after) 406*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: asr{{s?|\.w}} {{r\d+}}, <<high:r\d+>>, #31 407*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: mov{{s?}} {{r\d+}}, <<high>> 408*795d594fSAndroid Build Coastguard Worker 409*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.shr32(long) disassembly (after) 410*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: asr{{s?|\.w}} {{r\d+}}, {{r\d+}}, {{r\d+}} 411*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: lsr{{s?|\.w}} 412*795d594fSAndroid Build Coastguard Worker shr32(long arg)413*795d594fSAndroid Build Coastguard Worker public static long shr32(long arg) { 414*795d594fSAndroid Build Coastguard Worker return arg >> 32; 415*795d594fSAndroid Build Coastguard Worker } 416*795d594fSAndroid Build Coastguard Worker 417*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.shr33(long) disassembly (after) 418*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: asr{{s?|\.w}} {{r\d+}}, <<high:r\d+>>, #1 419*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: asr{{s?|\.w}} {{r\d+}}, <<high>>, #31 420*795d594fSAndroid Build Coastguard Worker 421*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.shr33(long) disassembly (after) 422*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: asr{{s?|\.w}} {{r\d+}}, {{r\d+}}, {{r\d+}} 423*795d594fSAndroid Build Coastguard Worker shr33(long arg)424*795d594fSAndroid Build Coastguard Worker public static long shr33(long arg) { 425*795d594fSAndroid Build Coastguard Worker return arg >> 33; 426*795d594fSAndroid Build Coastguard Worker } 427*795d594fSAndroid Build Coastguard Worker 428*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.shr63(long) disassembly (after) 429*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: asr{{s?|\.w}} {{r\d+}}, <<high:r\d+>>, #31 430*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: asr{{s?|\.w}} {{r\d+}}, <<high>>, #31 431*795d594fSAndroid Build Coastguard Worker 432*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.shr63(long) disassembly (after) 433*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: asr{{s?|\.w}} {{r\d+}}, {{r\d+}}, {{r\d+}} 434*795d594fSAndroid Build Coastguard Worker shr63(long arg)435*795d594fSAndroid Build Coastguard Worker public static long shr63(long arg) { 436*795d594fSAndroid Build Coastguard Worker return arg >> 63; 437*795d594fSAndroid Build Coastguard Worker } 438*795d594fSAndroid Build Coastguard Worker 439*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.ushr1(long) disassembly (after) 440*795d594fSAndroid Build Coastguard Worker /// CHECK: lsrs{{|.w}} {{r\d+}}, {{r\d+}}, #1 441*795d594fSAndroid Build Coastguard Worker /// CHECK: rrx {{r\d+}}, {{r\d+}} 442*795d594fSAndroid Build Coastguard Worker 443*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.ushr1(long) disassembly (after) 444*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: lsr{{s?|\.w}} {{r\d+}}, {{r\d+}}, {{r\d+}} 445*795d594fSAndroid Build Coastguard Worker ushr1(long arg)446*795d594fSAndroid Build Coastguard Worker public static long ushr1(long arg) { 447*795d594fSAndroid Build Coastguard Worker return arg >>> 1; 448*795d594fSAndroid Build Coastguard Worker } 449*795d594fSAndroid Build Coastguard Worker 450*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.ushr2(long) disassembly (after) 451*795d594fSAndroid Build Coastguard Worker /// CHECK: lsr{{s?|\.w}} <<ol:r\d+>>, {{r\d+}}, #2 452*795d594fSAndroid Build Coastguard Worker /// CHECK: orr <<ol>>, <<high:r\d+>>, lsl #30 453*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: lsr{{s?|\.w}} {{r\d+}}, <<high>>, #2 454*795d594fSAndroid Build Coastguard Worker 455*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.ushr2(long) disassembly (after) 456*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: lsr{{s?|\.w}} {{r\d+}}, {{r\d+}}, {{r\d+}} 457*795d594fSAndroid Build Coastguard Worker ushr2(long arg)458*795d594fSAndroid Build Coastguard Worker public static long ushr2(long arg) { 459*795d594fSAndroid Build Coastguard Worker return arg >>> 2; 460*795d594fSAndroid Build Coastguard Worker } 461*795d594fSAndroid Build Coastguard Worker 462*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.ushr31(long) disassembly (after) 463*795d594fSAndroid Build Coastguard Worker /// CHECK: lsr{{s?|\.w}} <<ol:r\d+>>, {{r\d+}}, #31 464*795d594fSAndroid Build Coastguard Worker /// CHECK: orr <<ol>>, <<high:r\d+>>, lsl #1 465*795d594fSAndroid Build Coastguard Worker /// CHECK: lsr{{s?|\.w}} {{r\d+}}, <<high>>, #31 466*795d594fSAndroid Build Coastguard Worker 467*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.ushr31(long) disassembly (after) 468*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: lsr{{s?|\.w}} {{r\d+}}, {{r\d+}}, {{r\d+}} 469*795d594fSAndroid Build Coastguard Worker ushr31(long arg)470*795d594fSAndroid Build Coastguard Worker public static long ushr31(long arg) { 471*795d594fSAndroid Build Coastguard Worker return arg >>> 31; 472*795d594fSAndroid Build Coastguard Worker } 473*795d594fSAndroid Build Coastguard Worker 474*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.ushr32(long) disassembly (after) 475*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: mov{{s?}} {{r\d+}}, {{r\d+}} 476*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: mov{{s?|\.w}} {{r\d+}}, #0 477*795d594fSAndroid Build Coastguard Worker 478*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.ushr32(long) disassembly (after) 479*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: lsr{{s?|\.w}} 480*795d594fSAndroid Build Coastguard Worker ushr32(long arg)481*795d594fSAndroid Build Coastguard Worker public static long ushr32(long arg) { 482*795d594fSAndroid Build Coastguard Worker return arg >>> 32; 483*795d594fSAndroid Build Coastguard Worker } 484*795d594fSAndroid Build Coastguard Worker 485*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.ushr33(long) disassembly (after) 486*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: lsr{{s?|\.w}} {{r\d+}}, {{r\d+}}, #1 487*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: mov{{s?|\.w}} {{r\d+}}, #0 488*795d594fSAndroid Build Coastguard Worker 489*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.ushr33(long) disassembly (after) 490*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: lsr{{s?|\.w}} {{r\d+}}, {{r\d+}}, {{r\d+}} 491*795d594fSAndroid Build Coastguard Worker ushr33(long arg)492*795d594fSAndroid Build Coastguard Worker public static long ushr33(long arg) { 493*795d594fSAndroid Build Coastguard Worker return arg >>> 33; 494*795d594fSAndroid Build Coastguard Worker } 495*795d594fSAndroid Build Coastguard Worker 496*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.ushr63(long) disassembly (after) 497*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: lsr{{s?|\.w}} {{r\d+}}, {{r\d+}}, #31 498*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: mov{{s?|\.w}} {{r\d+}}, #0 499*795d594fSAndroid Build Coastguard Worker 500*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.ushr63(long) disassembly (after) 501*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: lsr{{s?|\.w}} {{r\d+}}, {{r\d+}}, {{r\d+}} 502*795d594fSAndroid Build Coastguard Worker ushr63(long arg)503*795d594fSAndroid Build Coastguard Worker public static long ushr63(long arg) { 504*795d594fSAndroid Build Coastguard Worker return arg >>> 63; 505*795d594fSAndroid Build Coastguard Worker } 506*795d594fSAndroid Build Coastguard Worker 507*795d594fSAndroid Build Coastguard Worker /** 508*795d594fSAndroid Build Coastguard Worker * ARM/ARM64: Test that the `-1` constant is not synthesized in a register and that we 509*795d594fSAndroid Build Coastguard Worker * instead simply switch between `add` and `sub` instructions with the 510*795d594fSAndroid Build Coastguard Worker * constant embedded. 511*795d594fSAndroid Build Coastguard Worker * We need two uses (or more) of the constant because the compiler always 512*795d594fSAndroid Build Coastguard Worker * defers to immediate value handling to VIXL when it has only one use. 513*795d594fSAndroid Build Coastguard Worker */ 514*795d594fSAndroid Build Coastguard Worker 515*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: long Main.addM1(long) register (after) 516*795d594fSAndroid Build Coastguard Worker /// CHECK: <<Arg:j\d+>> ParameterValue 517*795d594fSAndroid Build Coastguard Worker /// CHECK: <<ConstM1:j\d+>> LongConstant -1 518*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: ParallelMove 519*795d594fSAndroid Build Coastguard Worker /// CHECK: Add [<<Arg>>,<<ConstM1>>] 520*795d594fSAndroid Build Coastguard Worker /// CHECK: Sub [<<Arg>>,<<ConstM1>>] 521*795d594fSAndroid Build Coastguard Worker 522*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: long Main.addM1(long) disassembly (after) 523*795d594fSAndroid Build Coastguard Worker /// CHECK: sub x{{\d+}}, x{{\d+}}, #0x1 524*795d594fSAndroid Build Coastguard Worker /// CHECK: add x{{\d+}}, x{{\d+}}, #0x1 525*795d594fSAndroid Build Coastguard Worker 526*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.addM1(long) register (after) 527*795d594fSAndroid Build Coastguard Worker /// CHECK: <<Arg:j\d+>> ParameterValue 528*795d594fSAndroid Build Coastguard Worker /// CHECK: <<ConstM1:j\d+>> LongConstant -1 529*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: ParallelMove 530*795d594fSAndroid Build Coastguard Worker /// CHECK: Add [<<Arg>>,<<ConstM1>>] 531*795d594fSAndroid Build Coastguard Worker /// CHECK: Sub [<<Arg>>,<<ConstM1>>] 532*795d594fSAndroid Build Coastguard Worker 533*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.addM1(long) disassembly (after) 534*795d594fSAndroid Build Coastguard Worker /// CHECK: <<Arg:j\d+>> ParameterValue 535*795d594fSAndroid Build Coastguard Worker /// CHECK: <<ConstM1:j\d+>> LongConstant -1 536*795d594fSAndroid Build Coastguard Worker /// CHECK: Add [<<Arg>>,<<ConstM1>>] 537*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: {{adds|subs}} r{{\d+}}, #{{4294967295|1}} 538*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: adc r{{\d+}}, r{{\d+}}, #4294967295 539*795d594fSAndroid Build Coastguard Worker /// CHECK: Sub [<<Arg>>,<<ConstM1>>] 540*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: adds r{{\d+}}, #1 541*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: adc r{{\d+}}, #0 542*795d594fSAndroid Build Coastguard Worker addM1(long arg)543*795d594fSAndroid Build Coastguard Worker public static long addM1(long arg) { 544*795d594fSAndroid Build Coastguard Worker return (arg + (-1)) | (arg - (-1)); 545*795d594fSAndroid Build Coastguard Worker } 546*795d594fSAndroid Build Coastguard Worker 547*795d594fSAndroid Build Coastguard Worker /** 548*795d594fSAndroid Build Coastguard Worker * ARM: Test that some long constants are not synthesized in a register for add-long. 549*795d594fSAndroid Build Coastguard Worker * Also test some negative cases where we do synthetize constants in registers. 550*795d594fSAndroid Build Coastguard Worker */ 551*795d594fSAndroid Build Coastguard Worker 552*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.addLongConstants(long) disassembly (after) 553*795d594fSAndroid Build Coastguard Worker /// CHECK: <<Arg:j\d+>> ParameterValue 554*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<ConstA:j\d+>> LongConstant 4486007727657233 555*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<ConstB:j\d+>> LongConstant 4486011735248896 556*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<ConstC:j\d+>> LongConstant -1071856711330889728 557*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<ConstD:j\d+>> LongConstant 17587891077120 558*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<ConstE:j\d+>> LongConstant -8808977924096 559*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<ConstF:j\d+>> LongConstant 17587891077121 560*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<ConstG:j\d+>> LongConstant 4095 561*795d594fSAndroid Build Coastguard Worker /// CHECK: Add [<<Arg>>,<<ConstA>>] 562*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: adds r{{\d+}}, r{{\d+}}, #286331153 563*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: adc r{{\d+}}, r{{\d+}}, #1044480 564*795d594fSAndroid Build Coastguard Worker /// CHECK: Add [<<Arg>>,<<ConstB>>] 565*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: subs r{{\d+}}, r{{\d+}}, #1044480 566*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: adc r{{\d+}}, r{{\d+}}, #1044480 567*795d594fSAndroid Build Coastguard Worker /// CHECK: Add [<<Arg>>,<<ConstC>>] 568*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: subs r{{\d+}}, r{{\d+}}, #16711680 569*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: sbc r{{\d+}}, r{{\d+}}, #249561088 570*795d594fSAndroid Build Coastguard Worker /// CHECK: Add [<<Arg>>,<<ConstD>>] 571*795d594fSAndroid Build Coastguard Worker // There may or may not be a MOV here. 572*795d594fSAndroid Build Coastguard Worker /// CHECK: add r{{\d+}}, r{{\d+}}, #4095 573*795d594fSAndroid Build Coastguard Worker /// CHECK: Add [<<Arg>>,<<ConstE>>] 574*795d594fSAndroid Build Coastguard Worker // There may or may not be a MOV here. 575*795d594fSAndroid Build Coastguard Worker /// CHECK: sub r{{\d+}}, r{{\d+}}, #2051 576*795d594fSAndroid Build Coastguard Worker /// CHECK: Add [<<Arg>>,<<ConstF>>] 577*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: adds{{(\.w)?}} r{{\d+}}, r{{\d+}}, r{{\d+}} 578*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: adc{{(\.w)?}} r{{\d+}}, r{{\d+}}, r{{\d+}} 579*795d594fSAndroid Build Coastguard Worker /// CHECK: Add [<<Arg>>,<<ConstG>>] 580*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: adds{{(\.w)?}} r{{\d+}}, r{{\d+}}, r{{\d+}} 581*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: adc{{(\.w)?}} r{{\d+}}, r{{\d+}}, r{{\d+}} 582*795d594fSAndroid Build Coastguard Worker addLongConstants(long arg)583*795d594fSAndroid Build Coastguard Worker public static long addLongConstants(long arg) { 584*795d594fSAndroid Build Coastguard Worker return 585*795d594fSAndroid Build Coastguard Worker // Modified immediates. 586*795d594fSAndroid Build Coastguard Worker (arg + 0x000ff00011111111L) ^ // 4486007727657233 587*795d594fSAndroid Build Coastguard Worker // Modified immediates high and -low. 588*795d594fSAndroid Build Coastguard Worker (arg + 0x000ff000fff01000L) ^ // 4486011735248896 589*795d594fSAndroid Build Coastguard Worker // Modified immediates ~high and -low. 590*795d594fSAndroid Build Coastguard Worker (arg + 0xf11fffffff010000L) ^ // -1071856711330889728 591*795d594fSAndroid Build Coastguard Worker // Low word 0 (no carry), high is imm12. 592*795d594fSAndroid Build Coastguard Worker (arg + 0x00000fff00000000L) ^ // 17587891077120 593*795d594fSAndroid Build Coastguard Worker // Low word 0 (no carry), -high is imm12. 594*795d594fSAndroid Build Coastguard Worker (arg + 0xfffff7fd00000000L) ^ // -8808977924096 595*795d594fSAndroid Build Coastguard Worker // Cannot embed imm12 in ADC/SBC for high word. 596*795d594fSAndroid Build Coastguard Worker (arg + 0x00000fff00000001L) ^ // 17587891077121 597*795d594fSAndroid Build Coastguard Worker // Cannot embed imm12 in ADDS/SUBS for low word (need to set flags). 598*795d594fSAndroid Build Coastguard Worker (arg + 0x0000000000000fffL) ^ // 4095 599*795d594fSAndroid Build Coastguard Worker arg; 600*795d594fSAndroid Build Coastguard Worker } 601*795d594fSAndroid Build Coastguard Worker 602*795d594fSAndroid Build Coastguard Worker /** 603*795d594fSAndroid Build Coastguard Worker * ARM: Test that some long constants are not synthesized in a register for add-long. 604*795d594fSAndroid Build Coastguard Worker * Also test some negative cases where we do synthetize constants in registers. 605*795d594fSAndroid Build Coastguard Worker */ 606*795d594fSAndroid Build Coastguard Worker 607*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM: long Main.subLongConstants(long) disassembly (after) 608*795d594fSAndroid Build Coastguard Worker /// CHECK: <<Arg:j\d+>> ParameterValue 609*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<ConstA:j\d+>> LongConstant 4486007727657233 610*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<ConstB:j\d+>> LongConstant 4486011735248896 611*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<ConstC:j\d+>> LongConstant -1071856711330889728 612*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<ConstD:j\d+>> LongConstant 17587891077120 613*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<ConstE:j\d+>> LongConstant -8808977924096 614*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<ConstF:j\d+>> LongConstant 17587891077121 615*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<ConstG:j\d+>> LongConstant 4095 616*795d594fSAndroid Build Coastguard Worker /// CHECK: Sub [<<Arg>>,<<ConstA>>] 617*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: subs r{{\d+}}, r{{\d+}}, #286331153 618*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: sbc r{{\d+}}, r{{\d+}}, #1044480 619*795d594fSAndroid Build Coastguard Worker /// CHECK: Sub [<<Arg>>,<<ConstB>>] 620*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: adds r{{\d+}}, r{{\d+}}, #1044480 621*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: sbc r{{\d+}}, r{{\d+}}, #1044480 622*795d594fSAndroid Build Coastguard Worker /// CHECK: Sub [<<Arg>>,<<ConstC>>] 623*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: adds r{{\d+}}, r{{\d+}}, #16711680 624*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: adc r{{\d+}}, r{{\d+}}, #249561088 625*795d594fSAndroid Build Coastguard Worker /// CHECK: Sub [<<Arg>>,<<ConstD>>] 626*795d594fSAndroid Build Coastguard Worker // There may or may not be a MOV here. 627*795d594fSAndroid Build Coastguard Worker /// CHECK: sub r{{\d+}}, r{{\d+}}, #4095 628*795d594fSAndroid Build Coastguard Worker /// CHECK: Sub [<<Arg>>,<<ConstE>>] 629*795d594fSAndroid Build Coastguard Worker // There may or may not be a MOV here. 630*795d594fSAndroid Build Coastguard Worker /// CHECK: add r{{\d+}}, r{{\d+}}, #2051 631*795d594fSAndroid Build Coastguard Worker /// CHECK: Sub [<<Arg>>,<<ConstF>>] 632*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: subs{{(\.w)?}} r{{\d+}}, r{{\d+}}, r{{\d+}} 633*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: sbc{{(\.w)?}} r{{\d+}}, r{{\d+}}, r{{\d+}} 634*795d594fSAndroid Build Coastguard Worker /// CHECK: Sub [<<Arg>>,<<ConstG>>] 635*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: subs{{(\.w)?}} r{{\d+}}, r{{\d+}}, r{{\d+}} 636*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: sbc{{(\.w)?}} r{{\d+}}, r{{\d+}}, r{{\d+}} 637*795d594fSAndroid Build Coastguard Worker subLongConstants(long arg)638*795d594fSAndroid Build Coastguard Worker public static long subLongConstants(long arg) { 639*795d594fSAndroid Build Coastguard Worker return 640*795d594fSAndroid Build Coastguard Worker // Modified immediates. 641*795d594fSAndroid Build Coastguard Worker (arg - 0x000ff00011111111L) ^ // 4486007727657233 642*795d594fSAndroid Build Coastguard Worker // Modified immediates high and -low. 643*795d594fSAndroid Build Coastguard Worker (arg - 0x000ff000fff01000L) ^ // 4486011735248896 644*795d594fSAndroid Build Coastguard Worker // Modified immediates ~high and -low. 645*795d594fSAndroid Build Coastguard Worker (arg - 0xf11fffffff010000L) ^ // -1071856711330889728 646*795d594fSAndroid Build Coastguard Worker // Low word 0 (no carry), high is imm12. 647*795d594fSAndroid Build Coastguard Worker (arg - 0x00000fff00000000L) ^ // 17587891077120 648*795d594fSAndroid Build Coastguard Worker // Low word 0 (no carry), -high is imm12. 649*795d594fSAndroid Build Coastguard Worker (arg - 0xfffff7fd00000000L) ^ // -8808977924096 650*795d594fSAndroid Build Coastguard Worker // Cannot embed imm12 in ADC/SBC for high word. 651*795d594fSAndroid Build Coastguard Worker (arg - 0x00000fff00000001L) ^ // 17587891077121 652*795d594fSAndroid Build Coastguard Worker // Cannot embed imm12 in ADDS/SUBS for low word (need to set flags). 653*795d594fSAndroid Build Coastguard Worker (arg - 0x0000000000000fffL) ^ // 4095 654*795d594fSAndroid Build Coastguard Worker arg; 655*795d594fSAndroid Build Coastguard Worker } 656*795d594fSAndroid Build Coastguard Worker main(String[] args)657*795d594fSAndroid Build Coastguard Worker public static void main(String[] args) { 658*795d594fSAndroid Build Coastguard Worker int arg = 0x87654321; 659*795d594fSAndroid Build Coastguard Worker assertIntEquals(and254(arg), 0x20); 660*795d594fSAndroid Build Coastguard Worker assertIntEquals(and255(arg), 0x21); 661*795d594fSAndroid Build Coastguard Worker assertIntEquals(and511(arg), 0x121); 662*795d594fSAndroid Build Coastguard Worker assertIntEquals(andF00D(arg), 0x4001); 663*795d594fSAndroid Build Coastguard Worker assertIntEquals(andNot15(arg), 0x87654320); 664*795d594fSAndroid Build Coastguard Worker assertIntEquals(or255(arg), 0x876543ff); 665*795d594fSAndroid Build Coastguard Worker assertIntEquals(or511(arg), 0x876543ff); 666*795d594fSAndroid Build Coastguard Worker assertIntEquals(orNot15(arg), 0xfffffff1); 667*795d594fSAndroid Build Coastguard Worker assertIntEquals(xor255(arg), 0x876543de); 668*795d594fSAndroid Build Coastguard Worker assertIntEquals(xor511(arg), 0x876542de); 669*795d594fSAndroid Build Coastguard Worker assertIntEquals(xorNot15(arg), 0x789abcd1); 670*795d594fSAndroid Build Coastguard Worker 671*795d594fSAndroid Build Coastguard Worker long longArg = 0x1234567887654321L; 672*795d594fSAndroid Build Coastguard Worker assertLongEquals(and255(longArg), 0x21L); 673*795d594fSAndroid Build Coastguard Worker assertLongEquals(and511(longArg), 0x121L); 674*795d594fSAndroid Build Coastguard Worker assertLongEquals(andF00D(longArg), 0x4001L); 675*795d594fSAndroid Build Coastguard Worker assertLongEquals(andNot15(longArg), 0x1234567887654320L); 676*795d594fSAndroid Build Coastguard Worker assertLongEquals(and0xfffffff00000000f(longArg), 0x1234567000000001L); 677*795d594fSAndroid Build Coastguard Worker assertLongEquals(or255(longArg), 0x12345678876543ffL); 678*795d594fSAndroid Build Coastguard Worker assertLongEquals(or511(longArg), 0x12345678876543ffL); 679*795d594fSAndroid Build Coastguard Worker assertLongEquals(orNot15(longArg), 0xfffffffffffffff1L); 680*795d594fSAndroid Build Coastguard Worker assertLongEquals(or0xfffffff00000000f(longArg), 0xfffffff88765432fL); 681*795d594fSAndroid Build Coastguard Worker assertLongEquals(xor255(longArg), 0x12345678876543deL); 682*795d594fSAndroid Build Coastguard Worker assertLongEquals(xor511(longArg), 0x12345678876542deL); 683*795d594fSAndroid Build Coastguard Worker assertLongEquals(xorNot15(longArg), 0xedcba987789abcd1L); 684*795d594fSAndroid Build Coastguard Worker assertLongEquals(xor0xfffffff00000000f(longArg), 0xedcba9888765432eL); 685*795d594fSAndroid Build Coastguard Worker assertLongEquals(xor0xf00000000000000f(longArg), 0xe23456788765432eL); 686*795d594fSAndroid Build Coastguard Worker 687*795d594fSAndroid Build Coastguard Worker assertLongEquals(14L, addM1(7)); 688*795d594fSAndroid Build Coastguard Worker 689*795d594fSAndroid Build Coastguard Worker assertLongEquals(shl1(longArg), 0x2468acf10eca8642L); 690*795d594fSAndroid Build Coastguard Worker assertLongEquals(shl2(longArg), 0x48d159e21d950c84L); 691*795d594fSAndroid Build Coastguard Worker assertLongEquals(shl31(longArg), 0x43b2a19080000000L); 692*795d594fSAndroid Build Coastguard Worker assertLongEquals(shl32(longArg), 0x8765432100000000L); 693*795d594fSAndroid Build Coastguard Worker assertLongEquals(shl33(longArg), 0x0eca864200000000L); 694*795d594fSAndroid Build Coastguard Worker assertLongEquals(shl63(longArg), 0x8000000000000000L); 695*795d594fSAndroid Build Coastguard Worker assertLongEquals(shl1(~longArg), 0xdb97530ef13579bcL); 696*795d594fSAndroid Build Coastguard Worker assertLongEquals(shl2(~longArg), 0xb72ea61de26af378L); 697*795d594fSAndroid Build Coastguard Worker assertLongEquals(shl31(~longArg), 0xbc4d5e6f00000000L); 698*795d594fSAndroid Build Coastguard Worker assertLongEquals(shl32(~longArg), 0x789abcde00000000L); 699*795d594fSAndroid Build Coastguard Worker assertLongEquals(shl33(~longArg), 0xf13579bc00000000L); 700*795d594fSAndroid Build Coastguard Worker assertLongEquals(shl63(~longArg), 0x0000000000000000L); 701*795d594fSAndroid Build Coastguard Worker 702*795d594fSAndroid Build Coastguard Worker assertLongEquals(shr1(longArg), 0x091a2b3c43b2a190L); 703*795d594fSAndroid Build Coastguard Worker assertLongEquals(shr2(longArg), 0x048d159e21d950c8L); 704*795d594fSAndroid Build Coastguard Worker assertLongEquals(shr31(longArg), 0x000000002468acf1L); 705*795d594fSAndroid Build Coastguard Worker assertLongEquals(shr32(longArg), 0x0000000012345678L); 706*795d594fSAndroid Build Coastguard Worker assertLongEquals(shr33(longArg), 0x00000000091a2b3cL); 707*795d594fSAndroid Build Coastguard Worker assertLongEquals(shr63(longArg), 0x0000000000000000L); 708*795d594fSAndroid Build Coastguard Worker assertLongEquals(shr1(~longArg), 0xf6e5d4c3bc4d5e6fL); 709*795d594fSAndroid Build Coastguard Worker assertLongEquals(shr2(~longArg), 0xfb72ea61de26af37L); 710*795d594fSAndroid Build Coastguard Worker assertLongEquals(shr31(~longArg), 0xffffffffdb97530eL); 711*795d594fSAndroid Build Coastguard Worker assertLongEquals(shr32(~longArg), 0xffffffffedcba987L); 712*795d594fSAndroid Build Coastguard Worker assertLongEquals(shr33(~longArg), 0xfffffffff6e5d4c3L); 713*795d594fSAndroid Build Coastguard Worker assertLongEquals(shr63(~longArg), 0xffffffffffffffffL); 714*795d594fSAndroid Build Coastguard Worker 715*795d594fSAndroid Build Coastguard Worker assertLongEquals(ushr1(longArg), 0x091a2b3c43b2a190L); 716*795d594fSAndroid Build Coastguard Worker assertLongEquals(ushr2(longArg), 0x048d159e21d950c8L); 717*795d594fSAndroid Build Coastguard Worker assertLongEquals(ushr31(longArg), 0x000000002468acf1L); 718*795d594fSAndroid Build Coastguard Worker assertLongEquals(ushr32(longArg), 0x0000000012345678L); 719*795d594fSAndroid Build Coastguard Worker assertLongEquals(ushr33(longArg), 0x00000000091a2b3cL); 720*795d594fSAndroid Build Coastguard Worker assertLongEquals(ushr63(longArg), 0x0000000000000000L); 721*795d594fSAndroid Build Coastguard Worker assertLongEquals(ushr1(~longArg), 0x76e5d4c3bc4d5e6fL); 722*795d594fSAndroid Build Coastguard Worker assertLongEquals(ushr2(~longArg), 0x3b72ea61de26af37L); 723*795d594fSAndroid Build Coastguard Worker assertLongEquals(ushr31(~longArg), 0x00000001db97530eL); 724*795d594fSAndroid Build Coastguard Worker assertLongEquals(ushr32(~longArg), 0x00000000edcba987L); 725*795d594fSAndroid Build Coastguard Worker assertLongEquals(ushr33(~longArg), 0x0000000076e5d4c3L); 726*795d594fSAndroid Build Coastguard Worker assertLongEquals(ushr63(~longArg), 0x0000000000000001L); 727*795d594fSAndroid Build Coastguard Worker 728*795d594fSAndroid Build Coastguard Worker // Test -1, 0, +1 and arbitrary constants just before and after overflow 729*795d594fSAndroid Build Coastguard Worker // on low word in subexpressions of addLongConstants()/subLongConstants(), 730*795d594fSAndroid Build Coastguard Worker // so that we check that we carry the overflow correctly to the high word. 731*795d594fSAndroid Build Coastguard Worker // For example 732*795d594fSAndroid Build Coastguard Worker // 0x111eeeeeeee+0x000ff00011111111 = 0x000ff111ffffffff (carry=0), 733*795d594fSAndroid Build Coastguard Worker // 0x111eeeeeeef+0x000ff00011111111 = 0x000ff11200000000 (carry=1). 734*795d594fSAndroid Build Coastguard Worker assertLongEquals(0xf11ff7fdee1e1111L, addLongConstants(0xffffffffffffffffL)); 735*795d594fSAndroid Build Coastguard Worker assertLongEquals(0xee0080211e00eefL, addLongConstants(0x0L)); 736*795d594fSAndroid Build Coastguard Worker assertLongEquals(0xee0080211e01111L, addLongConstants(0x1L)); 737*795d594fSAndroid Build Coastguard Worker assertLongEquals(0xedff81c12201113L, addLongConstants(0x111eeeeeeeeL)); 738*795d594fSAndroid Build Coastguard Worker assertLongEquals(0xedff81feddfeef1L, addLongConstants(0x111eeeeeeefL)); 739*795d594fSAndroid Build Coastguard Worker assertLongEquals(0xedff83e11c1f111L, addLongConstants(0x222000fefffL)); 740*795d594fSAndroid Build Coastguard Worker assertLongEquals(0xedff83fee3e0eefL, addLongConstants(0x222000ff000L)); 741*795d594fSAndroid Build Coastguard Worker assertLongEquals(0xedff805edfe1111L, addLongConstants(0x33300feffffL)); 742*795d594fSAndroid Build Coastguard Worker assertLongEquals(0xedff80412000eefL, addLongConstants(0x33300ff0000L)); 743*795d594fSAndroid Build Coastguard Worker assertLongEquals(0xee0080211e00eefL, subLongConstants(0xffffffffffffffffL)); 744*795d594fSAndroid Build Coastguard Worker assertLongEquals(0xf11ff7fdee1e1111L, subLongConstants(0x0L)); 745*795d594fSAndroid Build Coastguard Worker assertLongEquals(0xf11ff7fc11e1eef3L, subLongConstants(0x1L)); 746*795d594fSAndroid Build Coastguard Worker assertLongEquals(0xee0080412201113L, subLongConstants(0x44411111111L)); 747*795d594fSAndroid Build Coastguard Worker assertLongEquals(0xee0080412201111L, subLongConstants(0x44411111112L)); 748*795d594fSAndroid Build Coastguard Worker assertLongEquals(0xee0080e11c1f111L, subLongConstants(0x555fff01000L)); 749*795d594fSAndroid Build Coastguard Worker assertLongEquals(0xee0080e11c1eef3L, subLongConstants(0x555fff01001L)); 750*795d594fSAndroid Build Coastguard Worker assertLongEquals(0xee0080dedfe1111L, subLongConstants(0x666ff010000L)); 751*795d594fSAndroid Build Coastguard Worker assertLongEquals(0xee0080dedffeef3L, subLongConstants(0x666ff010001L)); 752*795d594fSAndroid Build Coastguard Worker } 753*795d594fSAndroid Build Coastguard Worker } 754