Defines | Functions

/tmp/buildd/xz-utils-5.0.0/src/common/tuklib_integer.h File Reference

Various integer and bit operations. More...

#include "tuklib_common.h"

Defines

#define bswap16(num)   (((uint16_t)(num) << 8) | ((uint16_t)(num) >> 8))
#define bswap32(num)
#define bswap64(num)
#define conv16be(num)   bswap16(num)
#define conv32be(num)   bswap32(num)
#define conv64be(num)   bswap64(num)
#define conv16le(num)   ((uint16_t)(num))
#define conv32le(num)   ((uint32_t)(num))
#define conv64le(num)   ((uint64_t)(num))
#define write16be(buf, num)   write16ne((buf), conv16be(num))
#define write16le(buf, num)   write16ne((buf), conv16le(num))
#define write32be(buf, num)   write32ne((buf), conv32be(num))
#define write32le(buf, num)   write32ne((buf), conv32le(num))
#define write64be(buf, num)   write64ne((buf), conv64be(num))
#define write64le(buf, num)   write64ne((buf), conv64le(num))
#define bsf32   ctz32

Functions

static uint16_t read16be (const uint8_t *buf)
static uint16_t read16le (const uint8_t *buf)
static uint32_t read32be (const uint8_t *buf)
static uint32_t read32le (const uint8_t *buf)
static uint64_t read64be (const uint8_t *buf)
static uint64_t read64le (const uint8_t *buf)
static void write16ne (uint8_t *buf, uint16_t num)
static void write32ne (uint8_t *buf, uint32_t num)
static void write64ne (uint8_t *buf, uint64_t num)
static uint16_t unaligned_read16be (const uint8_t *buf)
static uint16_t unaligned_read16le (const uint8_t *buf)
static uint32_t unaligned_read32be (const uint8_t *buf)
static uint32_t unaligned_read32le (const uint8_t *buf)
static void unaligned_write16be (uint8_t *buf, uint16_t num)
static void unaligned_write16le (uint8_t *buf, uint16_t num)
static void unaligned_write32be (uint8_t *buf, uint32_t num)
static void unaligned_write32le (uint8_t *buf, uint32_t num)
static uint32_t bsr32 (uint32_t n)
static uint32_t clz32 (uint32_t n)
static uint32_t ctz32 (uint32_t n)

Detailed Description

Various integer and bit operations.

This file provides macros or functions to do some basic integer and bit operations.

Endianness related integer operations (XX = 16, 32, or 64; Y = b or l):

Since they can macros, the arguments should have no side effects since they may be evaluated more than once.

Todo:
PowerPC and possibly some other architectures support byte swapping load and store instructions. This file doesn't take advantage of those instructions.

Bit scan operations for non-zero 32-bit integers:

The above bit scan operations return 0-31. If num is zero, the result is undefined.


Define Documentation

#define bswap32 (   num  ) 
Value:
( (((uint32_t)(num) << 24)                       ) \
                | (((uint32_t)(num) <<  8) & UINT32_C(0x00FF0000)) \
                | (((uint32_t)(num) >>  8) & UINT32_C(0x0000FF00)) \
                | (((uint32_t)(num) >> 24)                       ) )
#define bswap64 (   num  ) 
Value:
( (((uint64_t)(num) << 56)                               ) \
                | (((uint64_t)(num) << 40) & UINT64_C(0x00FF000000000000)) \
                | (((uint64_t)(num) << 24) & UINT64_C(0x0000FF0000000000)) \
                | (((uint64_t)(num) <<  8) & UINT64_C(0x000000FF00000000)) \
                | (((uint64_t)(num) >>  8) & UINT64_C(0x00000000FF000000)) \
                | (((uint64_t)(num) >> 24) & UINT64_C(0x0000000000FF0000)) \
                | (((uint64_t)(num) >> 40) & UINT64_C(0x000000000000FF00)) \
                | (((uint64_t)(num) >> 56)                               ) )