The OpenD Programming Language

core.bitop

This module contains a collection of bit-level operations.

Members

Aliases

bswap
alias bswap = llvm_bswap!uint

Swaps bytes in a 4 byte uint end-to-end, i.e. byte 0 becomes byte 3, byte 1 becomes byte 2, byte 2 becomes byte 1, byte 3 becomes byte 0.

bswap
alias bswap = llvm_bswap!ulong

Swaps bytes in an 8 byte ulong end-to-end, i.e. byte 0 becomes byte 7, byte 1 becomes byte 6, etc. This is meant to be recognized by the compiler as an intrinsic.

byteswap
alias byteswap = llvm_bswap!ushort

Swaps bytes in a 2 byte ushort.

Functions

_popcnt
ushort _popcnt(ushort x)
int _popcnt(uint x)
int _popcnt(ulong x)

Calculates the number of set bits in an integer using the X86 SSE4 POPCNT instruction. POPCNT is not available on all X86 CPUs.

bitswap
uint bitswap(uint x)

Reverses the order of bits in a 32-bit integer.

bitswap
ulong bitswap(ulong x)

Reverses the order of bits in a 64-bit integer.

bsf
int bsf(uint v)
int bsf(ulong v)

Scans the bits in v starting with bit 0, looking for the first set bit.

bsr
int bsr(uint v)
int bsr(ulong v)

Scans the bits in v from the most significant bit to the least significant bit, looking for the first set bit.

bt
int bt(size_t* p, size_t bitnum)

Tests the bit. (No longer an intrisic - the compiler recognizes the patterns in the body.)

btc
int btc(size_t* p, size_t bitnum)

Tests and complements the bit.

btr
int btr(size_t* p, size_t bitnum)

Tests and resets (sets to 0) the bit.

bts
int bts(size_t* p, size_t bitnum)

Tests and sets the bit.

inp
ubyte inp(uint port_address)

Reads I/O port at port_address.

inp
uint inp(uint port_address)
inpl
uint inpl(uint port_address)
inpw
ushort inpw(uint port_address)
uint inpw(uint port_address)

Reads I/O port at port_address.

outp
ubyte outp(uint port_address, ubyte value)

Writes and returns value to I/O port at port_address.

outp
ubyte outp(uint port_address, uint value)
outpl
uint outpl(uint port_address, uint value)
outpw
ushort outpw(uint port_address, ushort value)
ushort outpw(uint port_address, uint value)

Writes and returns value to I/O port at port_address.

popcnt
int popcnt(uint x)
int popcnt(ulong x)

Calculates the number of set bits in an integer.

rol
T rol(T value, uint count)
T rol(T value)
ror
T ror(T value, uint count)
T ror(T value)

Bitwise rotate value left (rol) or right (ror) by count bit positions.

Structs

BitRange
struct BitRange

Range over bit set. Each element is the bit number that is set.

Meta

Source

See Source File
core/bitop.d

Some of the LDC-specific parts came »From GDC ... public domain!«

Authors

Don Clugston, Sean Kelly, Walter Bright, Alex Rønne Petersen, Thomas Stuart Bockman