35 return (
u16)(((x & 0xff) << 8) | (x >> 8));
44 ((x << 8) & 0x00ff0000) |
45 ((x >> 8) & 0x0000ff00);
52 const u32 lo = (
u32)(x & 0xFFFFFFFF);
53 const u32 hi = (
u32)(x >> 32);
69 memcpy(&n, p,
sizeof(n));
76 memcpy(&n, p,
sizeof(n));
83 memcpy(&n, p,
sizeof(n));
91 memcpy(&n, p,
sizeof(n));
98 memcpy(&n, p,
sizeof(n));
105 memcpy(&n, p,
sizeof(n));
113 memcpy(p, &n,
sizeof(n));
119 memcpy(p, &n,
sizeof(n));
125 memcpy(p, &n,
sizeof(n));
132 memcpy(p, &n,
sizeof(n));
138 memcpy(p, &n,
sizeof(n));
144 memcpy(p, &n,
sizeof(n));
151 for(
size_t i = 0; i < std::min(size_bytes, (
size_t)8u); i++)
152 number |= ((
u64)p[i]) << (i*8);
160 for(
size_t i = 0; i < std::min(size_bytes, (
size_t)8u); i++)
175 const u64 sign_bit = Bit<u64>((size_bytes*8)-1);
181 const u64 valid_bit_mask = (sign_bit+sign_bit)-1;
182 bits |= ~valid_bit_mask;
u32 read_le32(const void *p)
void write_be32(void *p, u32 x)
void write_le64(void *p, u64 x)
see write_le16
u64 read_le64(const void *p)
see read_le16
void write_be64(void *p, u64 x)
see write_be16
i64 movsx_le64(const u8 *p, size_t size_bytes)
sign-extend <size> (truncated to 8) bytes of little-endian data to i64, starting at address <p> (need...
u64 movzx_be64(const u8 *p, size_t size_bytes)
u32 read_be32(const void *p)
i64 movsx_be64(const u8 *p, size_t size_bytes)
T bits(T num, size_t lo_idx, size_t hi_idx)
extract the value of bits hi_idx:lo_idx within num
u16 read_le16(const void *p)
read a little-endian number from memory into native byte order.
void write_be16(void *p, u16 x)
see write_le16
u16 read_be16(const void *p)
see read_le16
u64 read_be64(const void *p)
see read_be16
void write_le16(void *p, u16 x)
see read_be16
static i64 SignExtend(u64 bits, size_t size_bytes)
u64 movzx_le64(const u8 *p, size_t size_bytes)
see write_be16
void write_le32(void *p, u32 x)