#include #define ALIGN_BITS ( sizeof(unsigned long long) >> 1 ) #define BIT_BITS 3 #define BYTE_BITS 14 #define SLOT_BITS ( sizeof(unsigned long long) * 8 )-( ALIGN_BITS + BIT_BITS + BYTE_BITS ) #define BYTES_PER_SLOT 1 << BYTE_BITS #define TRACKING_SLOTS 8192 // max. 8192 for 4GB/32-bit machine int check_new( unsigned long long p ) { unsigned long long slot = ( p >> (BYTE_BITS + BIT_BITS + ALIGN_BITS) ); unsigned long long byte = ( p >> (ALIGN_BITS + BIT_BITS)) & 0x00003fffULL; unsigned long long bit = ( p >> ALIGN_BITS) & 0x00000007ULL; unsigned long long nop = p & 0x3ULL; printf( "address: %016llx slot: %016llx byte: %4llx bit: %4llx nop:%llx\n", p, slot, byte, bit, nop ); return 1; } int main( void ) { unsigned long long p; for( p = 123456ULL; p < ( 1ULL << 34 ); p += ( 1ULL << 29 ) ) { check_new( p ); } return 1; }