xref: /plan9/sys/src/libmach/swap.c (revision 4de34a7edde43207e841ec91ecd12e6cf5f5ebe7)
1bd389b36SDavid du Colombier #include <u.h>
23e12c5d1SDavid du Colombier 
33e12c5d1SDavid du Colombier /*
47dd7cddfSDavid du Colombier  * big-endian short
53e12c5d1SDavid du Colombier  */
63e12c5d1SDavid du Colombier ushort
beswab(ushort s)73e12c5d1SDavid du Colombier beswab(ushort s)
83e12c5d1SDavid du Colombier {
93e12c5d1SDavid du Colombier 	uchar *p;
103e12c5d1SDavid du Colombier 
113e12c5d1SDavid du Colombier 	p = (uchar*)&s;
123e12c5d1SDavid du Colombier 	return (p[0]<<8) | p[1];
133e12c5d1SDavid du Colombier }
143e12c5d1SDavid du Colombier 
153e12c5d1SDavid du Colombier /*
167dd7cddfSDavid du Colombier  * big-endian long
173e12c5d1SDavid du Colombier  */
18*4de34a7eSDavid du Colombier ulong
beswal(ulong l)19*4de34a7eSDavid du Colombier beswal(ulong l)
203e12c5d1SDavid du Colombier {
213e12c5d1SDavid du Colombier 	uchar *p;
223e12c5d1SDavid du Colombier 
233e12c5d1SDavid du Colombier 	p = (uchar*)&l;
243e12c5d1SDavid du Colombier 	return (p[0]<<24) | (p[1]<<16) | (p[2]<<8) | p[3];
253e12c5d1SDavid du Colombier }
263e12c5d1SDavid du Colombier 
273e12c5d1SDavid du Colombier /*
287dd7cddfSDavid du Colombier  * big-endian vlong
297dd7cddfSDavid du Colombier  */
30*4de34a7eSDavid du Colombier uvlong
beswav(uvlong v)31*4de34a7eSDavid du Colombier beswav(uvlong v)
327dd7cddfSDavid du Colombier {
337dd7cddfSDavid du Colombier 	uchar *p;
347dd7cddfSDavid du Colombier 
357dd7cddfSDavid du Colombier 	p = (uchar*)&v;
36*4de34a7eSDavid du Colombier 	return ((uvlong)p[0]<<56) | ((uvlong)p[1]<<48) | ((uvlong)p[2]<<40)
37*4de34a7eSDavid du Colombier 				  | ((uvlong)p[3]<<32) | ((uvlong)p[4]<<24)
38*4de34a7eSDavid du Colombier 				  | ((uvlong)p[5]<<16) | ((uvlong)p[6]<<8)
39*4de34a7eSDavid du Colombier 				  | (uvlong)p[7];
407dd7cddfSDavid du Colombier }
417dd7cddfSDavid du Colombier 
427dd7cddfSDavid du Colombier /*
437dd7cddfSDavid du Colombier  * little-endian short
443e12c5d1SDavid du Colombier  */
453e12c5d1SDavid du Colombier ushort
leswab(ushort s)463e12c5d1SDavid du Colombier leswab(ushort s)
473e12c5d1SDavid du Colombier {
483e12c5d1SDavid du Colombier 	uchar *p;
493e12c5d1SDavid du Colombier 
503e12c5d1SDavid du Colombier 	p = (uchar*)&s;
513e12c5d1SDavid du Colombier 	return (p[1]<<8) | p[0];
523e12c5d1SDavid du Colombier }
533e12c5d1SDavid du Colombier 
543e12c5d1SDavid du Colombier /*
557dd7cddfSDavid du Colombier  * little-endian long
563e12c5d1SDavid du Colombier  */
57*4de34a7eSDavid du Colombier ulong
leswal(ulong l)58*4de34a7eSDavid du Colombier leswal(ulong l)
593e12c5d1SDavid du Colombier {
603e12c5d1SDavid du Colombier 	uchar *p;
613e12c5d1SDavid du Colombier 
623e12c5d1SDavid du Colombier 	p = (uchar*)&l;
633e12c5d1SDavid du Colombier 	return (p[3]<<24) | (p[2]<<16) | (p[1]<<8) | p[0];
643e12c5d1SDavid du Colombier }
657dd7cddfSDavid du Colombier 
667dd7cddfSDavid du Colombier /*
677dd7cddfSDavid du Colombier  * little-endian vlong
687dd7cddfSDavid du Colombier  */
69*4de34a7eSDavid du Colombier uvlong
leswav(uvlong v)70*4de34a7eSDavid du Colombier leswav(uvlong v)
717dd7cddfSDavid du Colombier {
727dd7cddfSDavid du Colombier 	uchar *p;
737dd7cddfSDavid du Colombier 
747dd7cddfSDavid du Colombier 	p = (uchar*)&v;
75*4de34a7eSDavid du Colombier 	return ((uvlong)p[7]<<56) | ((uvlong)p[6]<<48) | ((uvlong)p[5]<<40)
76*4de34a7eSDavid du Colombier 				  | ((uvlong)p[4]<<32) | ((uvlong)p[3]<<24)
77*4de34a7eSDavid du Colombier 				  | ((uvlong)p[2]<<16) | ((uvlong)p[1]<<8)
78*4de34a7eSDavid du Colombier 				  | (uvlong)p[0];
797dd7cddfSDavid du Colombier }
80