diff options
author | rsc <devnull@localhost> | 2004-04-19 19:29:25 +0000 |
---|---|---|
committer | rsc <devnull@localhost> | 2004-04-19 19:29:25 +0000 |
commit | a84cbb2a17c9d0b88c561d5b7cb50d79a19e7c46 (patch) | |
tree | 59a0e921597e5aa53e83d487c16727a7bf01547a /src/libmach/swap.c | |
parent | 0e3cc9f456ea49919459bf1164d0c8309a6134fa (diff) | |
download | plan9port-a84cbb2a17c9d0b88c561d5b7cb50d79a19e7c46.tar.gz plan9port-a84cbb2a17c9d0b88c561d5b7cb50d79a19e7c46.tar.bz2 plan9port-a84cbb2a17c9d0b88c561d5b7cb50d79a19e7c46.zip |
libmach
Diffstat (limited to 'src/libmach/swap.c')
-rw-r--r-- | src/libmach/swap.c | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/src/libmach/swap.c b/src/libmach/swap.c new file mode 100644 index 00000000..b6558234 --- /dev/null +++ b/src/libmach/swap.c @@ -0,0 +1,118 @@ +#include <u.h> +#include <libc.h> +#include <bio.h> +#include <mach.h> + +/* + * big-endian short + */ +u16int +beswap2(u16int s) +{ + uchar *p; + + p = (uchar*)&s; + return (p[0]<<8) | p[1]; +} + +/* + * big-endian long + */ +u32int +beswap4(u32int l) +{ + uchar *p; + + p = (uchar*)&l; + return (p[0]<<24) | (p[1]<<16) | (p[2]<<8) | p[3]; +} + +/* + * big-endian vlong + */ +u64int +beswap8(u64int v) +{ + uchar *p; + + p = (uchar*)&v; + return ((u64int)p[0]<<56) | ((u64int)p[1]<<48) | ((u64int)p[2]<<40) + | ((u64int)p[3]<<32) | ((u64int)p[4]<<24) + | ((u64int)p[5]<<16) | ((u64int)p[6]<<8) + | (u64int)p[7]; +} + +/* + * little-endian short + */ +u16int +leswap2(u16int s) +{ + uchar *p; + + p = (uchar*)&s; + return (p[1]<<8) | p[0]; +} + +/* + * little-endian long + */ +u32int +leswap4(u32int l) +{ + uchar *p; + + p = (uchar*)&l; + return (p[3]<<24) | (p[2]<<16) | (p[1]<<8) | p[0]; +} + +/* + * little-endian vlong + */ +u64int +leswap8(u64int v) +{ + uchar *p; + + p = (uchar*)&v; + return ((u64int)p[7]<<56) | ((u64int)p[6]<<48) | ((u64int)p[5]<<40) + | ((u64int)p[4]<<32) | ((u64int)p[3]<<24) + | ((u64int)p[2]<<16) | ((u64int)p[1]<<8) + | (u64int)p[0]; +} + +u16int +leload2(uchar *b) +{ + return b[0] | (b[1]<<8); +} + +u32int +leload4(uchar *b) +{ + return b[0] | (b[1]<<8) | (b[2]<<16) | (b[3]<<24); +} + +u64int +leload8(uchar *b) +{ + return leload4(b) | ((uvlong)leload4(b+4) << 32); +} + +u16int +beload2(uchar *b) +{ + return (b[0]<<8) | b[1]; +} + +u32int +beload4(uchar *b) +{ + return (b[0]<<24) | (b[1]<<16) | (b[2]<<8) | b[3]; +} + +u64int +beload8(uchar *b) +{ + return ((uvlong)beload4(b) << 32) | beload4(b+4); +} |