xref: /aosp_15_r20/art/test/427-bitwise/src/Main.java (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
1*795d594fSAndroid Build Coastguard Worker /*
2*795d594fSAndroid Build Coastguard Worker  * Copyright (C) 2014 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 // Note that $opt$ is a marker for the optimizing compiler to test
18*795d594fSAndroid Build Coastguard Worker // it does compile the method.
19*795d594fSAndroid Build Coastguard Worker public class Main {
20*795d594fSAndroid Build Coastguard Worker 
expectEquals(int expected, int result)21*795d594fSAndroid Build Coastguard Worker   public static void expectEquals(int expected, int result) {
22*795d594fSAndroid Build Coastguard Worker     if (expected != result) {
23*795d594fSAndroid Build Coastguard Worker       throw new Error("Expected: " + expected + ", found: " + result);
24*795d594fSAndroid Build Coastguard Worker     }
25*795d594fSAndroid Build Coastguard Worker   }
26*795d594fSAndroid Build Coastguard Worker 
expectEquals(long expected, long result)27*795d594fSAndroid Build Coastguard Worker   public static void expectEquals(long expected, long result) {
28*795d594fSAndroid Build Coastguard Worker     if (expected != result) {
29*795d594fSAndroid Build Coastguard Worker       throw new Error("Expected: " + expected + ", found: " + result);
30*795d594fSAndroid Build Coastguard Worker     }
31*795d594fSAndroid Build Coastguard Worker   }
32*795d594fSAndroid Build Coastguard Worker 
main(String[] args)33*795d594fSAndroid Build Coastguard Worker   public static void main(String[] args) {
34*795d594fSAndroid Build Coastguard Worker     andInt();
35*795d594fSAndroid Build Coastguard Worker     andLong();
36*795d594fSAndroid Build Coastguard Worker 
37*795d594fSAndroid Build Coastguard Worker     orInt();
38*795d594fSAndroid Build Coastguard Worker     orLong();
39*795d594fSAndroid Build Coastguard Worker 
40*795d594fSAndroid Build Coastguard Worker     xorInt();
41*795d594fSAndroid Build Coastguard Worker     xorLong();
42*795d594fSAndroid Build Coastguard Worker   }
43*795d594fSAndroid Build Coastguard Worker 
andInt()44*795d594fSAndroid Build Coastguard Worker   private static void andInt() {
45*795d594fSAndroid Build Coastguard Worker     expectEquals(1, $opt$And(5, 3));
46*795d594fSAndroid Build Coastguard Worker     expectEquals(0, $opt$And(0, 0));
47*795d594fSAndroid Build Coastguard Worker     expectEquals(0, $opt$And(0, 3));
48*795d594fSAndroid Build Coastguard Worker     expectEquals(0, $opt$And(3, 0));
49*795d594fSAndroid Build Coastguard Worker     expectEquals(1, $opt$And(1, -3));
50*795d594fSAndroid Build Coastguard Worker     expectEquals(-12, $opt$And(-12, -3));
51*795d594fSAndroid Build Coastguard Worker 
52*795d594fSAndroid Build Coastguard Worker     expectEquals(1, $opt$AndLit8(1));
53*795d594fSAndroid Build Coastguard Worker     expectEquals(0, $opt$AndLit8(0));
54*795d594fSAndroid Build Coastguard Worker     expectEquals(0, $opt$AndLit8(0));
55*795d594fSAndroid Build Coastguard Worker     expectEquals(3, $opt$AndLit8(3));
56*795d594fSAndroid Build Coastguard Worker     expectEquals(4, $opt$AndLit8(-12));
57*795d594fSAndroid Build Coastguard Worker 
58*795d594fSAndroid Build Coastguard Worker     expectEquals(0, $opt$AndLit16(1));
59*795d594fSAndroid Build Coastguard Worker     expectEquals(0, $opt$AndLit16(0));
60*795d594fSAndroid Build Coastguard Worker     expectEquals(0, $opt$AndLit16(0));
61*795d594fSAndroid Build Coastguard Worker     expectEquals(0, $opt$AndLit16(3));
62*795d594fSAndroid Build Coastguard Worker     expectEquals(65280, $opt$AndLit16(-12));
63*795d594fSAndroid Build Coastguard Worker   }
64*795d594fSAndroid Build Coastguard Worker 
andLong()65*795d594fSAndroid Build Coastguard Worker   private static void andLong() {
66*795d594fSAndroid Build Coastguard Worker     expectEquals(1L, $opt$And(5L, 3L));
67*795d594fSAndroid Build Coastguard Worker     expectEquals(0L, $opt$And(0L, 0L));
68*795d594fSAndroid Build Coastguard Worker     expectEquals(0L, $opt$And(0L, 3L));
69*795d594fSAndroid Build Coastguard Worker     expectEquals(0L, $opt$And(3L, 0L));
70*795d594fSAndroid Build Coastguard Worker     expectEquals(1L, $opt$And(1L, -3L));
71*795d594fSAndroid Build Coastguard Worker     expectEquals(-12L, $opt$And(-12L, -3L));
72*795d594fSAndroid Build Coastguard Worker 
73*795d594fSAndroid Build Coastguard Worker     expectEquals(1L, $opt$AndLit8(1L));
74*795d594fSAndroid Build Coastguard Worker     expectEquals(0L, $opt$AndLit8(0L));
75*795d594fSAndroid Build Coastguard Worker     expectEquals(0L, $opt$AndLit8(0L));
76*795d594fSAndroid Build Coastguard Worker     expectEquals(3L, $opt$AndLit8(3L));
77*795d594fSAndroid Build Coastguard Worker     expectEquals(4L, $opt$AndLit8(-12L));
78*795d594fSAndroid Build Coastguard Worker 
79*795d594fSAndroid Build Coastguard Worker     expectEquals(0L, $opt$AndLit16(1L));
80*795d594fSAndroid Build Coastguard Worker     expectEquals(0L, $opt$AndLit16(0L));
81*795d594fSAndroid Build Coastguard Worker     expectEquals(0L, $opt$AndLit16(0L));
82*795d594fSAndroid Build Coastguard Worker     expectEquals(0L, $opt$AndLit16(3L));
83*795d594fSAndroid Build Coastguard Worker     expectEquals(65280L, $opt$AndLit16(-12L));
84*795d594fSAndroid Build Coastguard Worker   }
85*795d594fSAndroid Build Coastguard Worker 
$opt$And(int a, int b)86*795d594fSAndroid Build Coastguard Worker   static int $opt$And(int a, int b) {
87*795d594fSAndroid Build Coastguard Worker     return a & b;
88*795d594fSAndroid Build Coastguard Worker   }
89*795d594fSAndroid Build Coastguard Worker 
$opt$AndLit8(int a)90*795d594fSAndroid Build Coastguard Worker   static int $opt$AndLit8(int a) {
91*795d594fSAndroid Build Coastguard Worker     return a & 0xF;
92*795d594fSAndroid Build Coastguard Worker   }
93*795d594fSAndroid Build Coastguard Worker 
$opt$AndLit16(int a)94*795d594fSAndroid Build Coastguard Worker   static int $opt$AndLit16(int a) {
95*795d594fSAndroid Build Coastguard Worker     return a & 0xFF00;
96*795d594fSAndroid Build Coastguard Worker   }
97*795d594fSAndroid Build Coastguard Worker 
$opt$And(long a, long b)98*795d594fSAndroid Build Coastguard Worker   static long $opt$And(long a, long b) {
99*795d594fSAndroid Build Coastguard Worker     return a & b;
100*795d594fSAndroid Build Coastguard Worker   }
101*795d594fSAndroid Build Coastguard Worker 
$opt$AndLit8(long a)102*795d594fSAndroid Build Coastguard Worker   static long $opt$AndLit8(long a) {
103*795d594fSAndroid Build Coastguard Worker     return a & 0xF;
104*795d594fSAndroid Build Coastguard Worker   }
105*795d594fSAndroid Build Coastguard Worker 
$opt$AndLit16(long a)106*795d594fSAndroid Build Coastguard Worker   static long $opt$AndLit16(long a) {
107*795d594fSAndroid Build Coastguard Worker     return a & 0xFF00;
108*795d594fSAndroid Build Coastguard Worker   }
109*795d594fSAndroid Build Coastguard Worker 
orInt()110*795d594fSAndroid Build Coastguard Worker   private static void orInt() {
111*795d594fSAndroid Build Coastguard Worker     expectEquals(7, $opt$Or(5, 3));
112*795d594fSAndroid Build Coastguard Worker     expectEquals(0, $opt$Or(0, 0));
113*795d594fSAndroid Build Coastguard Worker     expectEquals(3, $opt$Or(0, 3));
114*795d594fSAndroid Build Coastguard Worker     expectEquals(3, $opt$Or(3, 0));
115*795d594fSAndroid Build Coastguard Worker     expectEquals(-3, $opt$Or(1, -3));
116*795d594fSAndroid Build Coastguard Worker     expectEquals(-3, $opt$Or(-12, -3));
117*795d594fSAndroid Build Coastguard Worker 
118*795d594fSAndroid Build Coastguard Worker     expectEquals(15, $opt$OrLit8(1));
119*795d594fSAndroid Build Coastguard Worker     expectEquals(15, $opt$OrLit8(0));
120*795d594fSAndroid Build Coastguard Worker     expectEquals(15, $opt$OrLit8(3));
121*795d594fSAndroid Build Coastguard Worker     expectEquals(-1, $opt$OrLit8(-12));
122*795d594fSAndroid Build Coastguard Worker 
123*795d594fSAndroid Build Coastguard Worker     expectEquals(0xFF01, $opt$OrLit16(1));
124*795d594fSAndroid Build Coastguard Worker     expectEquals(0xFF00, $opt$OrLit16(0));
125*795d594fSAndroid Build Coastguard Worker     expectEquals(0xFF03, $opt$OrLit16(3));
126*795d594fSAndroid Build Coastguard Worker     expectEquals(-12, $opt$OrLit16(-12));
127*795d594fSAndroid Build Coastguard Worker   }
128*795d594fSAndroid Build Coastguard Worker 
orLong()129*795d594fSAndroid Build Coastguard Worker   private static void orLong() {
130*795d594fSAndroid Build Coastguard Worker     expectEquals(7L, $opt$Or(5L, 3L));
131*795d594fSAndroid Build Coastguard Worker     expectEquals(0L, $opt$Or(0L, 0L));
132*795d594fSAndroid Build Coastguard Worker     expectEquals(3L, $opt$Or(0L, 3L));
133*795d594fSAndroid Build Coastguard Worker     expectEquals(3L, $opt$Or(3L, 0L));
134*795d594fSAndroid Build Coastguard Worker     expectEquals(-3L, $opt$Or(1L, -3L));
135*795d594fSAndroid Build Coastguard Worker     expectEquals(-3L, $opt$Or(-12L, -3L));
136*795d594fSAndroid Build Coastguard Worker 
137*795d594fSAndroid Build Coastguard Worker     expectEquals(15L, $opt$OrLit8(1L));
138*795d594fSAndroid Build Coastguard Worker     expectEquals(15L, $opt$OrLit8(0L));
139*795d594fSAndroid Build Coastguard Worker     expectEquals(15L, $opt$OrLit8(3L));
140*795d594fSAndroid Build Coastguard Worker     expectEquals(-1L, $opt$OrLit8(-12L));
141*795d594fSAndroid Build Coastguard Worker 
142*795d594fSAndroid Build Coastguard Worker     expectEquals(0xFF01L, $opt$OrLit16(1L));
143*795d594fSAndroid Build Coastguard Worker     expectEquals(0xFF00L, $opt$OrLit16(0L));
144*795d594fSAndroid Build Coastguard Worker     expectEquals(0xFF03L, $opt$OrLit16(3L));
145*795d594fSAndroid Build Coastguard Worker     expectEquals(-12L, $opt$OrLit16(-12L));
146*795d594fSAndroid Build Coastguard Worker   }
147*795d594fSAndroid Build Coastguard Worker 
$opt$Or(int a, int b)148*795d594fSAndroid Build Coastguard Worker   static int $opt$Or(int a, int b) {
149*795d594fSAndroid Build Coastguard Worker     return a | b;
150*795d594fSAndroid Build Coastguard Worker   }
151*795d594fSAndroid Build Coastguard Worker 
$opt$OrLit8(int a)152*795d594fSAndroid Build Coastguard Worker   static int $opt$OrLit8(int a) {
153*795d594fSAndroid Build Coastguard Worker     return a | 0xF;
154*795d594fSAndroid Build Coastguard Worker   }
155*795d594fSAndroid Build Coastguard Worker 
$opt$OrLit16(int a)156*795d594fSAndroid Build Coastguard Worker   static int $opt$OrLit16(int a) {
157*795d594fSAndroid Build Coastguard Worker     return a | 0xFF00;
158*795d594fSAndroid Build Coastguard Worker   }
159*795d594fSAndroid Build Coastguard Worker 
$opt$Or(long a, long b)160*795d594fSAndroid Build Coastguard Worker   static long $opt$Or(long a, long b) {
161*795d594fSAndroid Build Coastguard Worker     return a | b;
162*795d594fSAndroid Build Coastguard Worker   }
163*795d594fSAndroid Build Coastguard Worker 
$opt$OrLit8(long a)164*795d594fSAndroid Build Coastguard Worker   static long $opt$OrLit8(long a) {
165*795d594fSAndroid Build Coastguard Worker     return a | 0xF;
166*795d594fSAndroid Build Coastguard Worker   }
167*795d594fSAndroid Build Coastguard Worker 
$opt$OrLit16(long a)168*795d594fSAndroid Build Coastguard Worker   static long $opt$OrLit16(long a) {
169*795d594fSAndroid Build Coastguard Worker     return a | 0xFF00;
170*795d594fSAndroid Build Coastguard Worker   }
171*795d594fSAndroid Build Coastguard Worker 
xorInt()172*795d594fSAndroid Build Coastguard Worker   private static void xorInt() {
173*795d594fSAndroid Build Coastguard Worker     expectEquals(6, $opt$Xor(5, 3));
174*795d594fSAndroid Build Coastguard Worker     expectEquals(0, $opt$Xor(0, 0));
175*795d594fSAndroid Build Coastguard Worker     expectEquals(3, $opt$Xor(0, 3));
176*795d594fSAndroid Build Coastguard Worker     expectEquals(3, $opt$Xor(3, 0));
177*795d594fSAndroid Build Coastguard Worker     expectEquals(-4, $opt$Xor(1, -3));
178*795d594fSAndroid Build Coastguard Worker     expectEquals(9, $opt$Xor(-12, -3));
179*795d594fSAndroid Build Coastguard Worker 
180*795d594fSAndroid Build Coastguard Worker     expectEquals(14, $opt$XorLit8(1));
181*795d594fSAndroid Build Coastguard Worker     expectEquals(15, $opt$XorLit8(0));
182*795d594fSAndroid Build Coastguard Worker     expectEquals(12, $opt$XorLit8(3));
183*795d594fSAndroid Build Coastguard Worker     expectEquals(-5, $opt$XorLit8(-12));
184*795d594fSAndroid Build Coastguard Worker 
185*795d594fSAndroid Build Coastguard Worker     expectEquals(0xFF01, $opt$XorLit16(1));
186*795d594fSAndroid Build Coastguard Worker     expectEquals(0xFF00, $opt$XorLit16(0));
187*795d594fSAndroid Build Coastguard Worker     expectEquals(0xFF03, $opt$XorLit16(3));
188*795d594fSAndroid Build Coastguard Worker     expectEquals(-0xFF0c, $opt$XorLit16(-12));
189*795d594fSAndroid Build Coastguard Worker   }
190*795d594fSAndroid Build Coastguard Worker 
xorLong()191*795d594fSAndroid Build Coastguard Worker   private static void xorLong() {
192*795d594fSAndroid Build Coastguard Worker     expectEquals(6L, $opt$Xor(5L, 3L));
193*795d594fSAndroid Build Coastguard Worker     expectEquals(0L, $opt$Xor(0L, 0L));
194*795d594fSAndroid Build Coastguard Worker     expectEquals(3L, $opt$Xor(0L, 3L));
195*795d594fSAndroid Build Coastguard Worker     expectEquals(3L, $opt$Xor(3L, 0L));
196*795d594fSAndroid Build Coastguard Worker     expectEquals(-4L, $opt$Xor(1L, -3L));
197*795d594fSAndroid Build Coastguard Worker     expectEquals(9L, $opt$Xor(-12L, -3L));
198*795d594fSAndroid Build Coastguard Worker 
199*795d594fSAndroid Build Coastguard Worker     expectEquals(14L, $opt$XorLit8(1L));
200*795d594fSAndroid Build Coastguard Worker     expectEquals(15L, $opt$XorLit8(0L));
201*795d594fSAndroid Build Coastguard Worker     expectEquals(12L, $opt$XorLit8(3L));
202*795d594fSAndroid Build Coastguard Worker     expectEquals(-5L, $opt$XorLit8(-12L));
203*795d594fSAndroid Build Coastguard Worker 
204*795d594fSAndroid Build Coastguard Worker     expectEquals(0xFF01L, $opt$XorLit16(1L));
205*795d594fSAndroid Build Coastguard Worker     expectEquals(0xFF00L, $opt$XorLit16(0L));
206*795d594fSAndroid Build Coastguard Worker     expectEquals(0xFF03L, $opt$XorLit16(3L));
207*795d594fSAndroid Build Coastguard Worker     expectEquals(-0xFF0cL, $opt$XorLit16(-12L));
208*795d594fSAndroid Build Coastguard Worker   }
209*795d594fSAndroid Build Coastguard Worker 
$opt$Xor(int a, int b)210*795d594fSAndroid Build Coastguard Worker   static int $opt$Xor(int a, int b) {
211*795d594fSAndroid Build Coastguard Worker     return a ^ b;
212*795d594fSAndroid Build Coastguard Worker   }
213*795d594fSAndroid Build Coastguard Worker 
$opt$XorLit8(int a)214*795d594fSAndroid Build Coastguard Worker   static int $opt$XorLit8(int a) {
215*795d594fSAndroid Build Coastguard Worker     return a ^ 0xF;
216*795d594fSAndroid Build Coastguard Worker   }
217*795d594fSAndroid Build Coastguard Worker 
$opt$XorLit16(int a)218*795d594fSAndroid Build Coastguard Worker   static int $opt$XorLit16(int a) {
219*795d594fSAndroid Build Coastguard Worker     return a ^ 0xFF00;
220*795d594fSAndroid Build Coastguard Worker   }
221*795d594fSAndroid Build Coastguard Worker 
$opt$Xor(long a, long b)222*795d594fSAndroid Build Coastguard Worker   static long $opt$Xor(long a, long b) {
223*795d594fSAndroid Build Coastguard Worker     return a ^ b;
224*795d594fSAndroid Build Coastguard Worker   }
225*795d594fSAndroid Build Coastguard Worker 
$opt$XorLit8(long a)226*795d594fSAndroid Build Coastguard Worker   static long $opt$XorLit8(long a) {
227*795d594fSAndroid Build Coastguard Worker     return a ^ 0xF;
228*795d594fSAndroid Build Coastguard Worker   }
229*795d594fSAndroid Build Coastguard Worker 
$opt$XorLit16(long a)230*795d594fSAndroid Build Coastguard Worker   static long $opt$XorLit16(long a) {
231*795d594fSAndroid Build Coastguard Worker     return a ^ 0xFF00;
232*795d594fSAndroid Build Coastguard Worker   }
233*795d594fSAndroid Build Coastguard Worker }
234