#include #include #define ALIGN_BITS ( sizeof(void*) >> 1 ) #define BIT_BITS 3 #define BYTE_BITS 14 int check_new( uintptr_t p ) { uintptr_t slot = ( p >> (BYTE_BITS + BIT_BITS + ALIGN_BITS) ); uintptr_t byte = ( p >> (ALIGN_BITS + BIT_BITS)) & 0x00003fffULL; uintptr_t bit = ( p >> ALIGN_BITS) & 0x00000007ULL; uintptr_t nop = p & 0x3ULL; printf( "address: %p slot: %p byte: %4x bit: %4x nop:%x\n", (void*)p, (void*)slot, (unsigned)byte, (unsigned)bit, (unsigned)nop ); return 1; } int main( void ) { uintptr_t p; for( p = 123456ULL; p < ( 1ULL << 31 ); p += ( 1ULL << 29 ) ) { check_new( p ); } return 0; }