xref: /aosp_15_r20/external/bc/scripts/bitfuncgen.c (revision 5a6e848804d15c18a0125914844ee4eb0bda4fcf)
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