xref: /inferno-os/utils/libmach/swap.c (revision d67b7dad77bb8aa973dad1f7c3ab0c309b114278)
174a4d8c2SCharles.Forsyth #include <lib9.h>
2*d67b7dadSforsyth #include <bio.h>
3*d67b7dadSforsyth #include "mach.h"
474a4d8c2SCharles.Forsyth 
574a4d8c2SCharles.Forsyth /*
674a4d8c2SCharles.Forsyth  * big-endian short
774a4d8c2SCharles.Forsyth  */
874a4d8c2SCharles.Forsyth ushort
beswab(ushort s)974a4d8c2SCharles.Forsyth beswab(ushort s)
1074a4d8c2SCharles.Forsyth {
1174a4d8c2SCharles.Forsyth 	uchar *p;
1274a4d8c2SCharles.Forsyth 
1374a4d8c2SCharles.Forsyth 	p = (uchar*)&s;
1474a4d8c2SCharles.Forsyth 	return (p[0]<<8) | p[1];
1574a4d8c2SCharles.Forsyth }
1674a4d8c2SCharles.Forsyth 
1774a4d8c2SCharles.Forsyth /*
1874a4d8c2SCharles.Forsyth  * big-endian long
1974a4d8c2SCharles.Forsyth  */
20*d67b7dadSforsyth ulong
beswal(ulong l)21*d67b7dadSforsyth beswal(ulong l)
2274a4d8c2SCharles.Forsyth {
2374a4d8c2SCharles.Forsyth 	uchar *p;
2474a4d8c2SCharles.Forsyth 
2574a4d8c2SCharles.Forsyth 	p = (uchar*)&l;
2674a4d8c2SCharles.Forsyth 	return (p[0]<<24) | (p[1]<<16) | (p[2]<<8) | p[3];
2774a4d8c2SCharles.Forsyth }
2874a4d8c2SCharles.Forsyth 
2974a4d8c2SCharles.Forsyth /*
3074a4d8c2SCharles.Forsyth  * big-endian vlong
3174a4d8c2SCharles.Forsyth  */
32*d67b7dadSforsyth uvlong
beswav(uvlong v)33*d67b7dadSforsyth beswav(uvlong v)
3474a4d8c2SCharles.Forsyth {
3574a4d8c2SCharles.Forsyth 	uchar *p;
3674a4d8c2SCharles.Forsyth 
3774a4d8c2SCharles.Forsyth 	p = (uchar*)&v;
38*d67b7dadSforsyth 	return ((uvlong)p[0]<<56) | ((uvlong)p[1]<<48) | ((uvlong)p[2]<<40)
39*d67b7dadSforsyth 				  | ((uvlong)p[3]<<32) | ((uvlong)p[4]<<24)
40*d67b7dadSforsyth 				  | ((uvlong)p[5]<<16) | ((uvlong)p[6]<<8)
41*d67b7dadSforsyth 				  | (uvlong)p[7];
4274a4d8c2SCharles.Forsyth }
4374a4d8c2SCharles.Forsyth 
4474a4d8c2SCharles.Forsyth /*
4574a4d8c2SCharles.Forsyth  * little-endian short
4674a4d8c2SCharles.Forsyth  */
4774a4d8c2SCharles.Forsyth ushort
leswab(ushort s)4874a4d8c2SCharles.Forsyth leswab(ushort s)
4974a4d8c2SCharles.Forsyth {
5074a4d8c2SCharles.Forsyth 	uchar *p;
5174a4d8c2SCharles.Forsyth 
5274a4d8c2SCharles.Forsyth 	p = (uchar*)&s;
5374a4d8c2SCharles.Forsyth 	return (p[1]<<8) | p[0];
5474a4d8c2SCharles.Forsyth }
5574a4d8c2SCharles.Forsyth 
5674a4d8c2SCharles.Forsyth /*
5774a4d8c2SCharles.Forsyth  * little-endian long
5874a4d8c2SCharles.Forsyth  */
59*d67b7dadSforsyth ulong
leswal(ulong l)60*d67b7dadSforsyth leswal(ulong l)
6174a4d8c2SCharles.Forsyth {
6274a4d8c2SCharles.Forsyth 	uchar *p;
6374a4d8c2SCharles.Forsyth 
6474a4d8c2SCharles.Forsyth 	p = (uchar*)&l;
6574a4d8c2SCharles.Forsyth 	return (p[3]<<24) | (p[2]<<16) | (p[1]<<8) | p[0];
6674a4d8c2SCharles.Forsyth }
6774a4d8c2SCharles.Forsyth 
6874a4d8c2SCharles.Forsyth /*
6974a4d8c2SCharles.Forsyth  * little-endian vlong
7074a4d8c2SCharles.Forsyth  */
71*d67b7dadSforsyth uvlong
leswav(uvlong v)72*d67b7dadSforsyth leswav(uvlong v)
7374a4d8c2SCharles.Forsyth {
7474a4d8c2SCharles.Forsyth 	uchar *p;
7574a4d8c2SCharles.Forsyth 
7674a4d8c2SCharles.Forsyth 	p = (uchar*)&v;
77*d67b7dadSforsyth 	return ((uvlong)p[7]<<56) | ((uvlong)p[6]<<48) | ((uvlong)p[5]<<40)
78*d67b7dadSforsyth 				  | ((uvlong)p[4]<<32) | ((uvlong)p[3]<<24)
79*d67b7dadSforsyth 				  | ((uvlong)p[2]<<16) | ((uvlong)p[1]<<8)
80*d67b7dadSforsyth 				  | (uvlong)p[0];
8174a4d8c2SCharles.Forsyth }
82