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.Forsythbeswab(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*d67b7dadSforsythbeswal(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*d67b7dadSforsythbeswav(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.Forsythleswab(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*d67b7dadSforsythleswal(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*d67b7dadSforsythleswav(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