tswap.c - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       tswap.c (1551B)
       ---
            1 #include <u.h>
            2 #include <libc.h>
            3 #include <bio.h>
            4 #include <mach.h>
            5 
            6 /*
            7  * big-endian short
            8  */
            9 u16int
           10 beswap2(u16int s)
           11 {
           12         uchar *p;
           13 
           14         p = (uchar*)&s;
           15         return (p[0]<<8) | p[1];
           16 }
           17 
           18 /*
           19  * big-endian long
           20  */
           21 u32int
           22 beswap4(u32int l)
           23 {
           24         uchar *p;
           25 
           26         p = (uchar*)&l;
           27         return (p[0]<<24) | (p[1]<<16) | (p[2]<<8) | p[3];
           28 }
           29 
           30 /*
           31  * big-endian vlong
           32  */
           33 u64int
           34 beswap8(u64int v)
           35 {
           36         uchar *p;
           37 
           38         p = (uchar*)&v;
           39         return ((u64int)p[0]<<56) | ((u64int)p[1]<<48) | ((u64int)p[2]<<40)
           40                                  | ((u64int)p[3]<<32) | ((u64int)p[4]<<24)
           41                                  | ((u64int)p[5]<<16) | ((u64int)p[6]<<8)
           42                                  | (u64int)p[7];
           43 }
           44 
           45 /*
           46  * little-endian short
           47  */
           48 u16int
           49 leswap2(u16int s)
           50 {
           51         uchar *p;
           52 
           53         p = (uchar*)&s;
           54         return (p[1]<<8) | p[0];
           55 }
           56 
           57 /*
           58  * little-endian long
           59  */
           60 u32int
           61 leswap4(u32int l)
           62 {
           63         uchar *p;
           64 
           65         p = (uchar*)&l;
           66         return (p[3]<<24) | (p[2]<<16) | (p[1]<<8) | p[0];
           67 }
           68 
           69 /*
           70  * little-endian vlong
           71  */
           72 u64int
           73 leswap8(u64int v)
           74 {
           75         uchar *p;
           76 
           77         p = (uchar*)&v;
           78         return ((u64int)p[7]<<56) | ((u64int)p[6]<<48) | ((u64int)p[5]<<40)
           79                                  | ((u64int)p[4]<<32) | ((u64int)p[3]<<24)
           80                                  | ((u64int)p[2]<<16) | ((u64int)p[1]<<8)
           81                                  | (u64int)p[0];
           82 }
           83 
           84 u16int
           85 leload2(uchar *b)
           86 {
           87         return b[0] | (b[1]<<8);
           88 }
           89 
           90 u32int
           91 leload4(uchar *b)
           92 {
           93         return b[0] | (b[1]<<8) | (b[2]<<16) | (b[3]<<24);
           94 }
           95 
           96 u64int
           97 leload8(uchar *b)
           98 {
           99         return leload4(b) | ((uvlong)leload4(b+4) << 32);
          100 }
          101 
          102 u16int
          103 beload2(uchar *b)
          104 {
          105         return (b[0]<<8) | b[1];
          106 }
          107 
          108 u32int
          109 beload4(uchar *b)
          110 {
          111         return (b[0]<<24) | (b[1]<<16) | (b[2]<<8) | b[3];
          112 }
          113 
          114 u64int
          115 beload8(uchar *b)
          116 {
          117         return ((uvlong)beload4(b) << 32) | beload4(b+4);
          118 }