xref: /aosp_15_r20/art/test/538-checker-embed-constants/src/Main.java (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
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