Skip to content

Instantly share code, notes, and snippets.

@ryancdotorg
Created May 31, 2023 12:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ryancdotorg/3a46394c19ecfce905a83ef0ec11e499 to your computer and use it in GitHub Desktop.
Save ryancdotorg/3a46394c19ecfce905a83ef0ec11e499 to your computer and use it in GitHub Desktop.
#pragma once
/* automatically generated */
#define U64H2BE(V) __extension__({ \
uint64_t _v = (V); \
uint8_t _t[8]; \
_t[0] = (_v & UINT64_C(0xFF00000000000000)) >> 56; \
_t[1] = (_v & UINT64_C(0x00FF000000000000)) >> 48; \
_t[2] = (_v & UINT64_C(0x0000FF0000000000)) >> 40; \
_t[3] = (_v & UINT64_C(0x000000FF00000000)) >> 32; \
_t[4] = (_v & UINT64_C(0x00000000FF000000)) >> 24; \
_t[5] = (_v & UINT64_C(0x0000000000FF0000)) >> 16; \
_t[6] = (_v & UINT64_C(0x000000000000FF00)) >> 8; \
_t[7] = (_v & UINT64_C(0x00000000000000FF)) >> 0; \
*((uint64_t*)_t); \
})
#define U64BE2H(V) __extension__({ \
uint64_t _v = (V); \
uint8_t *_t = (uint8_t*)&_v; \
uint64_t _r = 0; \
_r |= ((uint64_t)_t[0]) << 56; \
_r |= ((uint64_t)_t[1]) << 48; \
_r |= ((uint64_t)_t[2]) << 40; \
_r |= ((uint64_t)_t[3]) << 32; \
_r |= ((uint64_t)_t[4]) << 24; \
_r |= ((uint64_t)_t[5]) << 16; \
_r |= ((uint64_t)_t[6]) << 8; \
_r |= ((uint64_t)_t[7]) << 0; \
_r; \
})
#define U64H2LE(V) __extension__({ \
uint64_t _v = (V); \
uint8_t _t[8]; \
_t[0] = (_v & UINT64_C(0x00000000000000FF)) >> 0; \
_t[1] = (_v & UINT64_C(0x000000000000FF00)) >> 8; \
_t[2] = (_v & UINT64_C(0x0000000000FF0000)) >> 16; \
_t[3] = (_v & UINT64_C(0x00000000FF000000)) >> 24; \
_t[4] = (_v & UINT64_C(0x000000FF00000000)) >> 32; \
_t[5] = (_v & UINT64_C(0x0000FF0000000000)) >> 40; \
_t[6] = (_v & UINT64_C(0x00FF000000000000)) >> 48; \
_t[7] = (_v & UINT64_C(0xFF00000000000000)) >> 56; \
*((uint64_t*)_t); \
})
#define U64LE2H(V) __extension__({ \
uint64_t _v = (V); \
uint8_t *_t = (uint8_t*)&_v; \
uint64_t _r = 0; \
_r |= ((uint64_t)_t[0]) << 0; \
_r |= ((uint64_t)_t[1]) << 8; \
_r |= ((uint64_t)_t[2]) << 16; \
_r |= ((uint64_t)_t[3]) << 24; \
_r |= ((uint64_t)_t[4]) << 32; \
_r |= ((uint64_t)_t[5]) << 40; \
_r |= ((uint64_t)_t[6]) << 48; \
_r |= ((uint64_t)_t[7]) << 56; \
_r; \
})
#define U32H2BE(V) __extension__({ \
uint32_t _v = (V); \
uint8_t _t[4]; \
_t[0] = (_v & UINT32_C(0xFF000000)) >> 24; \
_t[1] = (_v & UINT32_C(0x00FF0000)) >> 16; \
_t[2] = (_v & UINT32_C(0x0000FF00)) >> 8; \
_t[3] = (_v & UINT32_C(0x000000FF)) >> 0; \
*((uint32_t*)_t); \
})
#define U32BE2H(V) __extension__({ \
uint32_t _v = (V); \
uint8_t *_t = (uint8_t*)&_v; \
uint32_t _r = 0; \
_r |= ((uint32_t)_t[0]) << 24; \
_r |= ((uint32_t)_t[1]) << 16; \
_r |= ((uint32_t)_t[2]) << 8; \
_r |= ((uint32_t)_t[3]) << 0; \
_r; \
})
#define U32H2LE(V) __extension__({ \
uint32_t _v = (V); \
uint8_t _t[4]; \
_t[0] = (_v & UINT32_C(0x000000FF)) >> 0; \
_t[1] = (_v & UINT32_C(0x0000FF00)) >> 8; \
_t[2] = (_v & UINT32_C(0x00FF0000)) >> 16; \
_t[3] = (_v & UINT32_C(0xFF000000)) >> 24; \
*((uint32_t*)_t); \
})
#define U32LE2H(V) __extension__({ \
uint32_t _v = (V); \
uint8_t *_t = (uint8_t*)&_v; \
uint32_t _r = 0; \
_r |= ((uint32_t)_t[0]) << 0; \
_r |= ((uint32_t)_t[1]) << 8; \
_r |= ((uint32_t)_t[2]) << 16; \
_r |= ((uint32_t)_t[3]) << 24; \
_r; \
})
#define _U64_H_4321(V) U64H2BE(V)
#define _U64_4321_H(V) U64BE2H(V)
#define _U64_H_1234(V) U64H2LE(V)
#define _U64_1234_H(V) U64LE2H(V)
#define _U32_H_4321(V) U32H2BE(V)
#define _U32_4321_H(V) U32BE2H(V)
#define _U32_H_1234(V) U32H2LE(V)
#define _U32_1234_H(V) U32LE2H(V)
#define UWSH2LE(V) CONCAT(_U,HASH_WORD_BITS,_H_,__ORDER_LITTLE_ENDIAN__)(V)
#define UWSH2BE(V) CONCAT(_U,HASH_WORD_BITS,_H_,__ORDER_BIG_ENDIAN__)(V)
#define UWSH2DE(V) CONCAT(_U,HASH_WORD_BITS,_H_,HASH_ENDIAN)(V)
#define U32H2DE(V) CONCAT(_U32_H_,HASH_ENDIAN)(V)
#define U64H2DE(V) CONCAT(_U64_H_,HASH_ENDIAN)(V)
#define UWSLE2H(V) CONCAT(_U,HASH_WORD_BITS,_,__ORDER_LITTLE_ENDIAN__,_H)(V)
#define UWSBE2H(V) CONCAT(_U,HASH_WORD_BITS,_,__ORDER_BIG_ENDIAN__,_H)(V)
#define UWSDE2H(V) CONCAT(_U,HASH_WORD_BITS,_,HASH_ENDIAN,_H)(V)
#define U32DE2H(V) CONCAT(_U32_,HASH_ENDIAN,_H)(V)
#define U64DE2H(V) CONCAT(_U64_,HASH_ENDIAN,_H)(V)
#define STORWSH(D, V) (*((uintWS_t*)(D)) = (V))
#define STOR32H(D, V) (*((uint32_t*)(D)) = (V))
#define STOR64H(D, V) (*((uint64_t*)(D)) = (V))
#define STORWSDE(D, V) (*((uintWS_t*)(D)) = UWSH2DE((V)))
#define STORWSBE(D, V) (*((uintWS_t*)(D)) = UWSH2BE((V)))
#define STORWSLE(D, V) (*((uintWS_t*)(D)) = UWSH2LE((V)))
#define STOR64DE(D, V) (*((uint64_t*)(D)) = U64H2DE((V)))
#define STOR64BE(D, V) (*((uint64_t*)(D)) = U64H2BE((V)))
#define STOR64LE(D, V) (*((uint64_t*)(D)) = U64H2LE((V)))
#define STOR32DE(D, V) (*((uint32_t*)(D)) = U32H2DE((V)))
#define STOR32BE(D, V) (*((uint32_t*)(D)) = U32H2BE((V)))
#define STOR32LE(D, V) (*((uint32_t*)(D)) = U32H2LE((V)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment