shithub: femtolisp

ref: 738a6ef63e019cfd6262b4418f5aa9d8c7c3a1d9
dir: /bitreverse.c/

View raw version
#include "platform.h"

uint32_t
__builtin_bitreverse32(uint32_t x)
{
	uint32_t m;

	x = (x >> 16)      | (x << 16);       m = 0xff00ff00;
	x = ((x & m) >> 8) | ((x & ~m) << 8);
	m = 0xf0f0f0f0;
	x = ((x & m) >> 4) | ((x & ~m) << 4); m = 0xcccccccc;
	x = ((x & m) >> 2) | ((x & ~m) << 2); m = 0xaaaaaaaa;
	x = ((x & m) >> 1) | ((x & ~m) << 1);

	return x;
}