in reply to Re^4: 64-bit *nix/gcc expertise required
in thread 64-bit *nix/gcc expertise required (THIS IS NOT OFF TOPIC!)
Quite the contrary. If printf wasn't an instrinsic, the compiler couldn't even give you warnings that you're risking getting garbage or causing segfaults.
The other warning is for void main. I guess that's no longer kosher?
So the minimal change is:
#include <stdint.h> #include <stdio.h> #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, (unsigne +d)nop ); return 1; } int main( void ) { uintptr_t p; for( p = 123456ULL; p < ( 1ULL << 31 ); p += ( 1ULL << 29 ) ) { check_new( p ); } return 0; }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
| A reply falls below the community's threshold of quality. You may see it by logging in. |