summaryrefslogtreecommitdiff
path: root/libraries/ghc-prim/cbits/bswap.c
blob: 9f920b3edaadcfd33e284977efc1111b9a19781d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include "Rts.h"

extern StgWord16 hs_bswap16(StgWord16 x);
StgWord16
hs_bswap16(StgWord16 x)
{
  return ((x >> 8) | (x << 8));
}

extern StgWord32 hs_bswap32(StgWord32 x);
StgWord32
hs_bswap32(StgWord32 x)
{
  return ((x >> 24) | ((x >> 8) & 0xff00) |
          (x << 24) | ((x & 0xff00) << 8));
}

extern StgWord64 hs_bswap64(StgWord64 x);
StgWord64
hs_bswap64(StgWord64 x)
{
  return ( (x >> 56)                | (x << 56)
         | ((x >> 40) & 0xff00)     | ((x & 0xff00) << 40)
         | ((x >> 24) & 0xff0000)   | ((x & 0xff0000) << 24)
         | ((x >> 8)  & 0xff000000) | ((x & 0xff000000) << 8)
         );
}