1*5a6e8488SAndroid Build Coastguard Worker /*
2*5a6e8488SAndroid Build Coastguard Worker * *****************************************************************************
3*5a6e8488SAndroid Build Coastguard Worker *
4*5a6e8488SAndroid Build Coastguard Worker * SPDX-License-Identifier: BSD-2-Clause
5*5a6e8488SAndroid Build Coastguard Worker *
6*5a6e8488SAndroid Build Coastguard Worker * Copyright (c) 2018-2024 Gavin D. Howard and contributors.
7*5a6e8488SAndroid Build Coastguard Worker *
8*5a6e8488SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without
9*5a6e8488SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions are met:
10*5a6e8488SAndroid Build Coastguard Worker *
11*5a6e8488SAndroid Build Coastguard Worker * * Redistributions of source code must retain the above copyright notice, this
12*5a6e8488SAndroid Build Coastguard Worker * list of conditions and the following disclaimer.
13*5a6e8488SAndroid Build Coastguard Worker *
14*5a6e8488SAndroid Build Coastguard Worker * * Redistributions in binary form must reproduce the above copyright notice,
15*5a6e8488SAndroid Build Coastguard Worker * this list of conditions and the following disclaimer in the documentation
16*5a6e8488SAndroid Build Coastguard Worker * and/or other materials provided with the distribution.
17*5a6e8488SAndroid Build Coastguard Worker *
18*5a6e8488SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19*5a6e8488SAndroid Build Coastguard Worker * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20*5a6e8488SAndroid Build Coastguard Worker * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21*5a6e8488SAndroid Build Coastguard Worker * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22*5a6e8488SAndroid Build Coastguard Worker * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23*5a6e8488SAndroid Build Coastguard Worker * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24*5a6e8488SAndroid Build Coastguard Worker * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25*5a6e8488SAndroid Build Coastguard Worker * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26*5a6e8488SAndroid Build Coastguard Worker * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27*5a6e8488SAndroid Build Coastguard Worker * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28*5a6e8488SAndroid Build Coastguard Worker * POSSIBILITY OF SUCH DAMAGE.
29*5a6e8488SAndroid Build Coastguard Worker *
30*5a6e8488SAndroid Build Coastguard Worker * *****************************************************************************
31*5a6e8488SAndroid Build Coastguard Worker *
32*5a6e8488SAndroid Build Coastguard Worker * A generator for bitwise operations test.
33*5a6e8488SAndroid Build Coastguard Worker *
34*5a6e8488SAndroid Build Coastguard Worker */
35*5a6e8488SAndroid Build Coastguard Worker
36*5a6e8488SAndroid Build Coastguard Worker #include <assert.h>
37*5a6e8488SAndroid Build Coastguard Worker #include <stdint.h>
38*5a6e8488SAndroid Build Coastguard Worker #include <stdio.h>
39*5a6e8488SAndroid Build Coastguard Worker #include <stdlib.h>
40*5a6e8488SAndroid Build Coastguard Worker #include <unistd.h>
41*5a6e8488SAndroid Build Coastguard Worker #include <fcntl.h>
42*5a6e8488SAndroid Build Coastguard Worker #include <limits.h>
43*5a6e8488SAndroid Build Coastguard Worker
44*5a6e8488SAndroid Build Coastguard Worker #define NTESTS (100)
45*5a6e8488SAndroid Build Coastguard Worker
46*5a6e8488SAndroid Build Coastguard Worker /**
47*5a6e8488SAndroid Build Coastguard Worker * Abort with an error message.
48*5a6e8488SAndroid Build Coastguard Worker * @param msg The error message.
49*5a6e8488SAndroid Build Coastguard Worker */
50*5a6e8488SAndroid Build Coastguard Worker void
err(const char * msg)51*5a6e8488SAndroid Build Coastguard Worker err(const char* msg)
52*5a6e8488SAndroid Build Coastguard Worker {
53*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%s\n", msg);
54*5a6e8488SAndroid Build Coastguard Worker abort();
55*5a6e8488SAndroid Build Coastguard Worker }
56*5a6e8488SAndroid Build Coastguard Worker
57*5a6e8488SAndroid Build Coastguard Worker uint64_t
rev(uint64_t a,size_t bits)58*5a6e8488SAndroid Build Coastguard Worker rev(uint64_t a, size_t bits)
59*5a6e8488SAndroid Build Coastguard Worker {
60*5a6e8488SAndroid Build Coastguard Worker size_t i;
61*5a6e8488SAndroid Build Coastguard Worker uint64_t res = 0;
62*5a6e8488SAndroid Build Coastguard Worker
63*5a6e8488SAndroid Build Coastguard Worker for (i = 0; i < bits; ++i)
64*5a6e8488SAndroid Build Coastguard Worker {
65*5a6e8488SAndroid Build Coastguard Worker res <<= 1;
66*5a6e8488SAndroid Build Coastguard Worker res |= a & 1;
67*5a6e8488SAndroid Build Coastguard Worker a >>= 1;
68*5a6e8488SAndroid Build Coastguard Worker }
69*5a6e8488SAndroid Build Coastguard Worker
70*5a6e8488SAndroid Build Coastguard Worker return res;
71*5a6e8488SAndroid Build Coastguard Worker }
72*5a6e8488SAndroid Build Coastguard Worker
73*5a6e8488SAndroid Build Coastguard Worker uint64_t
mod(uint64_t a,size_t bits)74*5a6e8488SAndroid Build Coastguard Worker mod(uint64_t a, size_t bits)
75*5a6e8488SAndroid Build Coastguard Worker {
76*5a6e8488SAndroid Build Coastguard Worker uint64_t mod;
77*5a6e8488SAndroid Build Coastguard Worker
78*5a6e8488SAndroid Build Coastguard Worker if (bits < 64) mod = (uint64_t) ((1ULL << bits) - 1);
79*5a6e8488SAndroid Build Coastguard Worker else mod = UINT64_MAX;
80*5a6e8488SAndroid Build Coastguard Worker
81*5a6e8488SAndroid Build Coastguard Worker return a & mod;
82*5a6e8488SAndroid Build Coastguard Worker }
83*5a6e8488SAndroid Build Coastguard Worker
84*5a6e8488SAndroid Build Coastguard Worker uint64_t
rol(uint64_t a,uint64_t p,size_t bits)85*5a6e8488SAndroid Build Coastguard Worker rol(uint64_t a, uint64_t p, size_t bits)
86*5a6e8488SAndroid Build Coastguard Worker {
87*5a6e8488SAndroid Build Coastguard Worker uint64_t res;
88*5a6e8488SAndroid Build Coastguard Worker
89*5a6e8488SAndroid Build Coastguard Worker assert(bits <= 64);
90*5a6e8488SAndroid Build Coastguard Worker
91*5a6e8488SAndroid Build Coastguard Worker p %= bits;
92*5a6e8488SAndroid Build Coastguard Worker
93*5a6e8488SAndroid Build Coastguard Worker if (!p) return a;
94*5a6e8488SAndroid Build Coastguard Worker
95*5a6e8488SAndroid Build Coastguard Worker res = (a << p) | (a >> (bits - p));
96*5a6e8488SAndroid Build Coastguard Worker
97*5a6e8488SAndroid Build Coastguard Worker return mod(res, bits);
98*5a6e8488SAndroid Build Coastguard Worker }
99*5a6e8488SAndroid Build Coastguard Worker
100*5a6e8488SAndroid Build Coastguard Worker uint64_t
ror(uint64_t a,uint64_t p,size_t bits)101*5a6e8488SAndroid Build Coastguard Worker ror(uint64_t a, uint64_t p, size_t bits)
102*5a6e8488SAndroid Build Coastguard Worker {
103*5a6e8488SAndroid Build Coastguard Worker uint64_t res;
104*5a6e8488SAndroid Build Coastguard Worker
105*5a6e8488SAndroid Build Coastguard Worker assert(bits <= 64);
106*5a6e8488SAndroid Build Coastguard Worker
107*5a6e8488SAndroid Build Coastguard Worker p %= bits;
108*5a6e8488SAndroid Build Coastguard Worker
109*5a6e8488SAndroid Build Coastguard Worker if (!p) return a;
110*5a6e8488SAndroid Build Coastguard Worker
111*5a6e8488SAndroid Build Coastguard Worker res = (a << (bits - p)) | (a >> p);
112*5a6e8488SAndroid Build Coastguard Worker
113*5a6e8488SAndroid Build Coastguard Worker return mod(res, bits);
114*5a6e8488SAndroid Build Coastguard Worker }
115*5a6e8488SAndroid Build Coastguard Worker
116*5a6e8488SAndroid Build Coastguard Worker int
main(void)117*5a6e8488SAndroid Build Coastguard Worker main(void)
118*5a6e8488SAndroid Build Coastguard Worker {
119*5a6e8488SAndroid Build Coastguard Worker uint64_t a = 0, b = 0, t;
120*5a6e8488SAndroid Build Coastguard Worker size_t i;
121*5a6e8488SAndroid Build Coastguard Worker
122*5a6e8488SAndroid Build Coastguard Worker // We attempt to open this or /dev/random to get random data.
123*5a6e8488SAndroid Build Coastguard Worker int fd = open("/dev/urandom", O_RDONLY);
124*5a6e8488SAndroid Build Coastguard Worker
125*5a6e8488SAndroid Build Coastguard Worker if (fd < 0)
126*5a6e8488SAndroid Build Coastguard Worker {
127*5a6e8488SAndroid Build Coastguard Worker fd = open("/dev/random", O_RDONLY);
128*5a6e8488SAndroid Build Coastguard Worker
129*5a6e8488SAndroid Build Coastguard Worker if (fd < 0) err("cannot open a random number generator");
130*5a6e8488SAndroid Build Coastguard Worker }
131*5a6e8488SAndroid Build Coastguard Worker
132*5a6e8488SAndroid Build Coastguard Worker // Generate NTESTS tests.
133*5a6e8488SAndroid Build Coastguard Worker for (i = 0; i < NTESTS; ++i)
134*5a6e8488SAndroid Build Coastguard Worker {
135*5a6e8488SAndroid Build Coastguard Worker ssize_t nread;
136*5a6e8488SAndroid Build Coastguard Worker
137*5a6e8488SAndroid Build Coastguard Worker // Generate random data for the first operand.
138*5a6e8488SAndroid Build Coastguard Worker nread = read(fd, (char*) &a, sizeof(uint64_t));
139*5a6e8488SAndroid Build Coastguard Worker if (nread != sizeof(uint64_t)) err("I/O error");
140*5a6e8488SAndroid Build Coastguard Worker
141*5a6e8488SAndroid Build Coastguard Worker // Generate random data for the second operand.
142*5a6e8488SAndroid Build Coastguard Worker nread = read(fd, (char*) &b, sizeof(uint64_t));
143*5a6e8488SAndroid Build Coastguard Worker if (nread != sizeof(uint64_t)) err("I/O error");
144*5a6e8488SAndroid Build Coastguard Worker
145*5a6e8488SAndroid Build Coastguard Worker // Output the tests to stdout.
146*5a6e8488SAndroid Build Coastguard Worker printf("band(%lu, %lu)\n", a, b);
147*5a6e8488SAndroid Build Coastguard Worker printf("bor(%lu, %lu)\n", a, b);
148*5a6e8488SAndroid Build Coastguard Worker printf("bxor(%lu, %lu)\n", a, b);
149*5a6e8488SAndroid Build Coastguard Worker printf("bshl(%lu, %lu)\n", mod(a, 32), mod(b, 5));
150*5a6e8488SAndroid Build Coastguard Worker printf("bshr(%lu, %lu)\n", mod(a, 32), mod(b, 5));
151*5a6e8488SAndroid Build Coastguard Worker printf("bshl(%lu, %lu)\n", mod(b, 32), mod(a, 5));
152*5a6e8488SAndroid Build Coastguard Worker printf("bshr(%lu, %lu)\n", mod(b, 32), mod(a, 5));
153*5a6e8488SAndroid Build Coastguard Worker printf("bnot8(%lu)\nbnot8(%lu)\n", a, mod(a, 8));
154*5a6e8488SAndroid Build Coastguard Worker printf("bnot16(%lu)\nbnot16(%lu)\n", a, mod(a, 16));
155*5a6e8488SAndroid Build Coastguard Worker printf("bnot32(%lu)\nbnot32(%lu)\n", a, mod(a, 32));
156*5a6e8488SAndroid Build Coastguard Worker printf("bnot64(%lu)\n", a);
157*5a6e8488SAndroid Build Coastguard Worker printf("brev8(%lu)\nbrev8(%lu)\n", a, mod(a, 8));
158*5a6e8488SAndroid Build Coastguard Worker printf("brev16(%lu)\nbrev16(%lu)\n", a, mod(a, 16));
159*5a6e8488SAndroid Build Coastguard Worker printf("brev32(%lu)\nbrev32(%lu)\n", a, mod(a, 32));
160*5a6e8488SAndroid Build Coastguard Worker printf("brev64(%lu)\n", a);
161*5a6e8488SAndroid Build Coastguard Worker printf("brol8(%lu, %lu)\n", a, b);
162*5a6e8488SAndroid Build Coastguard Worker printf("brol8(%lu, %lu)\n", mod(a, 8), b);
163*5a6e8488SAndroid Build Coastguard Worker printf("brol8(%lu, %lu)\n", a, mod(b, 8));
164*5a6e8488SAndroid Build Coastguard Worker printf("brol8(%lu, %lu)\n", mod(a, 8), mod(b, 8));
165*5a6e8488SAndroid Build Coastguard Worker printf("brol16(%lu, %lu)\n", a, b);
166*5a6e8488SAndroid Build Coastguard Worker printf("brol16(%lu, %lu)\n", mod(a, 16), b);
167*5a6e8488SAndroid Build Coastguard Worker printf("brol16(%lu, %lu)\n", a, mod(b, 16));
168*5a6e8488SAndroid Build Coastguard Worker printf("brol16(%lu, %lu)\n", mod(a, 16), mod(b, 16));
169*5a6e8488SAndroid Build Coastguard Worker printf("brol32(%lu, %lu)\n", a, b);
170*5a6e8488SAndroid Build Coastguard Worker printf("brol32(%lu, %lu)\n", mod(a, 32), b);
171*5a6e8488SAndroid Build Coastguard Worker printf("brol32(%lu, %lu)\n", a, mod(b, 32));
172*5a6e8488SAndroid Build Coastguard Worker printf("brol32(%lu, %lu)\n", mod(a, 32), mod(b, 32));
173*5a6e8488SAndroid Build Coastguard Worker printf("brol64(%lu, %lu)\n", a, b);
174*5a6e8488SAndroid Build Coastguard Worker printf("bror8(%lu, %lu)\n", a, b);
175*5a6e8488SAndroid Build Coastguard Worker printf("bror8(%lu, %lu)\n", mod(a, 8), b);
176*5a6e8488SAndroid Build Coastguard Worker printf("bror8(%lu, %lu)\n", a, mod(b, 8));
177*5a6e8488SAndroid Build Coastguard Worker printf("bror8(%lu, %lu)\n", mod(a, 8), mod(b, 8));
178*5a6e8488SAndroid Build Coastguard Worker printf("bror16(%lu, %lu)\n", a, b);
179*5a6e8488SAndroid Build Coastguard Worker printf("bror16(%lu, %lu)\n", mod(a, 16), b);
180*5a6e8488SAndroid Build Coastguard Worker printf("bror16(%lu, %lu)\n", a, mod(b, 16));
181*5a6e8488SAndroid Build Coastguard Worker printf("bror16(%lu, %lu)\n", mod(a, 16), mod(b, 16));
182*5a6e8488SAndroid Build Coastguard Worker printf("bror32(%lu, %lu)\n", a, b);
183*5a6e8488SAndroid Build Coastguard Worker printf("bror32(%lu, %lu)\n", mod(a, 32), b);
184*5a6e8488SAndroid Build Coastguard Worker printf("bror32(%lu, %lu)\n", a, mod(b, 32));
185*5a6e8488SAndroid Build Coastguard Worker printf("bror32(%lu, %lu)\n", mod(a, 32), mod(b, 32));
186*5a6e8488SAndroid Build Coastguard Worker printf("bror64(%lu, %lu)\n", a, b);
187*5a6e8488SAndroid Build Coastguard Worker printf("bmod8(%lu)\nbmod8(%lu)\n", a, mod(a, 8));
188*5a6e8488SAndroid Build Coastguard Worker printf("bmod16(%lu)\nbmod16(%lu)\n", a, mod(a, 16));
189*5a6e8488SAndroid Build Coastguard Worker printf("bmod32(%lu)\nbmod32(%lu)\n", a, mod(a, 32));
190*5a6e8488SAndroid Build Coastguard Worker printf("bmod64(%lu)\n", a);
191*5a6e8488SAndroid Build Coastguard Worker
192*5a6e8488SAndroid Build Coastguard Worker // Output the results to stderr.
193*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n", a & b);
194*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n", a | b);
195*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n", a ^ b);
196*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n", mod(a, 32) << mod(b, 5));
197*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n", mod(a, 32) >> mod(b, 5));
198*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n", mod(b, 32) << mod(a, 5));
199*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n", mod(b, 32) >> mod(a, 5));
200*5a6e8488SAndroid Build Coastguard Worker t = mod(~a, 8);
201*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n%lu\n", t, t);
202*5a6e8488SAndroid Build Coastguard Worker t = mod(~a, 16);
203*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n%lu\n", t, t);
204*5a6e8488SAndroid Build Coastguard Worker t = mod(~a, 32);
205*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n%lu\n", t, t);
206*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n", ~a);
207*5a6e8488SAndroid Build Coastguard Worker t = rev(a, 8);
208*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n%lu\n", t, t);
209*5a6e8488SAndroid Build Coastguard Worker t = rev(a, 16);
210*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n%lu\n", t, t);
211*5a6e8488SAndroid Build Coastguard Worker t = rev(a, 32);
212*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n%lu\n", t, t);
213*5a6e8488SAndroid Build Coastguard Worker t = rev(a, 64);
214*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n", t);
215*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n", rol(mod(a, 8), mod(b, 8), 8));
216*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n", rol(mod(a, 8), mod(b, 8), 8));
217*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n", rol(mod(a, 8), mod(b, 8), 8));
218*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n", rol(mod(a, 8), mod(b, 8), 8));
219*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n", rol(mod(a, 16), mod(b, 16), 16));
220*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n", rol(mod(a, 16), mod(b, 16), 16));
221*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n", rol(mod(a, 16), mod(b, 16), 16));
222*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n", rol(mod(a, 16), mod(b, 16), 16));
223*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n", rol(mod(a, 32), mod(b, 32), 32));
224*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n", rol(mod(a, 32), mod(b, 32), 32));
225*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n", rol(mod(a, 32), mod(b, 32), 32));
226*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n", rol(mod(a, 32), mod(b, 32), 32));
227*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n", rol(a, b, 64));
228*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n", ror(mod(a, 8), mod(b, 8), 8));
229*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n", ror(mod(a, 8), mod(b, 8), 8));
230*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n", ror(mod(a, 8), mod(b, 8), 8));
231*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n", ror(mod(a, 8), mod(b, 8), 8));
232*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n", ror(mod(a, 16), mod(b, 16), 16));
233*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n", ror(mod(a, 16), mod(b, 16), 16));
234*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n", ror(mod(a, 16), mod(b, 16), 16));
235*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n", ror(mod(a, 16), mod(b, 16), 16));
236*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n", ror(mod(a, 32), mod(b, 32), 32));
237*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n", ror(mod(a, 32), mod(b, 32), 32));
238*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n", ror(mod(a, 32), mod(b, 32), 32));
239*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n", ror(mod(a, 32), mod(b, 32), 32));
240*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n", ror(a, b, 64));
241*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n%lu\n", mod(a, 8), mod(a, 8));
242*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n%lu\n", mod(a, 16), mod(a, 16));
243*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n%lu\n", mod(a, 32), mod(a, 32));
244*5a6e8488SAndroid Build Coastguard Worker fprintf(stderr, "%lu\n", a);
245*5a6e8488SAndroid Build Coastguard Worker }
246*5a6e8488SAndroid Build Coastguard Worker
247*5a6e8488SAndroid Build Coastguard Worker return 0;
248*5a6e8488SAndroid Build Coastguard Worker }
249