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