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