xref: /dflybsd-src/stand/lib/bswap.c (revision 479ab7f0492f2a51b48e8537e4f1dc686fc6014b)
1*479ab7f0SSascha Wildner /*
2*479ab7f0SSascha Wildner  * Written by Manuel Bouyer <bouyer@netbsd.org>.
3*479ab7f0SSascha Wildner  * Public domain.
4*479ab7f0SSascha Wildner  *
5*479ab7f0SSascha Wildner  * $NetBSD: bswap32.c,v 1.1 1997/10/09 15:42:33 bouyer Exp $
6*479ab7f0SSascha Wildner  * $NetBSD: bswap64.c,v 1.1 1997/10/09 15:42:33 bouyer Exp $
7*479ab7f0SSascha Wildner  * $DragonFly: src/lib/libstand/bswap.c,v 1.3 2005/12/11 02:27:26 swildner Exp $
8*479ab7f0SSascha Wildner  */
9*479ab7f0SSascha Wildner 
10*479ab7f0SSascha Wildner #include <sys/types.h>
11*479ab7f0SSascha Wildner 
12*479ab7f0SSascha Wildner #undef bswap32
13*479ab7f0SSascha Wildner #undef bswap64
14*479ab7f0SSascha Wildner 
15*479ab7f0SSascha Wildner u_int32_t
bswap32(u_int32_t x)16*479ab7f0SSascha Wildner bswap32(u_int32_t x)
17*479ab7f0SSascha Wildner {
18*479ab7f0SSascha Wildner 	return  ((x << 24) & 0xff000000 ) |
19*479ab7f0SSascha Wildner 			((x <<  8) & 0x00ff0000 ) |
20*479ab7f0SSascha Wildner 			((x >>  8) & 0x0000ff00 ) |
21*479ab7f0SSascha Wildner 			((x >> 24) & 0x000000ff );
22*479ab7f0SSascha Wildner }
23*479ab7f0SSascha Wildner 
24*479ab7f0SSascha Wildner u_int64_t
bswap64(u_int64_t x)25*479ab7f0SSascha Wildner bswap64(u_int64_t x)
26*479ab7f0SSascha Wildner {
27*479ab7f0SSascha Wildner 	u_int32_t *p = (u_int32_t*)&x;
28*479ab7f0SSascha Wildner 	u_int32_t t;
29*479ab7f0SSascha Wildner 	t = bswap32(p[0]);
30*479ab7f0SSascha Wildner 	p[0] = bswap32(p[1]);
31*479ab7f0SSascha Wildner 	p[1] = t;
32*479ab7f0SSascha Wildner 	return x;
33*479ab7f0SSascha Wildner }
34