xref: /plan9/sys/src/libmach/swap.c (revision 4de34a7edde43207e841ec91ecd12e6cf5f5ebe7)
1 #include <u.h>
2 
3 /*
4  * big-endian short
5  */
6 ushort
beswab(ushort s)7 beswab(ushort s)
8 {
9 	uchar *p;
10 
11 	p = (uchar*)&s;
12 	return (p[0]<<8) | p[1];
13 }
14 
15 /*
16  * big-endian long
17  */
18 ulong
beswal(ulong l)19 beswal(ulong l)
20 {
21 	uchar *p;
22 
23 	p = (uchar*)&l;
24 	return (p[0]<<24) | (p[1]<<16) | (p[2]<<8) | p[3];
25 }
26 
27 /*
28  * big-endian vlong
29  */
30 uvlong
beswav(uvlong v)31 beswav(uvlong v)
32 {
33 	uchar *p;
34 
35 	p = (uchar*)&v;
36 	return ((uvlong)p[0]<<56) | ((uvlong)p[1]<<48) | ((uvlong)p[2]<<40)
37 				  | ((uvlong)p[3]<<32) | ((uvlong)p[4]<<24)
38 				  | ((uvlong)p[5]<<16) | ((uvlong)p[6]<<8)
39 				  | (uvlong)p[7];
40 }
41 
42 /*
43  * little-endian short
44  */
45 ushort
leswab(ushort s)46 leswab(ushort s)
47 {
48 	uchar *p;
49 
50 	p = (uchar*)&s;
51 	return (p[1]<<8) | p[0];
52 }
53 
54 /*
55  * little-endian long
56  */
57 ulong
leswal(ulong l)58 leswal(ulong l)
59 {
60 	uchar *p;
61 
62 	p = (uchar*)&l;
63 	return (p[3]<<24) | (p[2]<<16) | (p[1]<<8) | p[0];
64 }
65 
66 /*
67  * little-endian vlong
68  */
69 uvlong
leswav(uvlong v)70 leswav(uvlong v)
71 {
72 	uchar *p;
73 
74 	p = (uchar*)&v;
75 	return ((uvlong)p[7]<<56) | ((uvlong)p[6]<<48) | ((uvlong)p[5]<<40)
76 				  | ((uvlong)p[4]<<32) | ((uvlong)p[3]<<24)
77 				  | ((uvlong)p[2]<<16) | ((uvlong)p[1]<<8)
78 				  | (uvlong)p[0];
79 }
80