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