#include char dummy[409600]; char buffer[3072]; check_buffer(char *p) { int i, zero_start, zero_stop; /* Initialize buffer to non-zero data */ for (i = 0; i < 2048; i++) buffer[i] = 1; /* Clear buffer out of cache */ for (i = 0; i < 409600; i++) dummy[i] = 9; #if 1 __asm__ ("pref 30, 0x0(%0)" : : "r" (p)); #endif /* Check contents for single block of zeros */ zero_start = 0; while ((buffer[zero_start] == 1) && (zero_start < 2048)) zero_start++; zero_stop = zero_start; while ((buffer[zero_stop] == 0) && (zero_stop < 2048)) zero_stop++; for (i = zero_stop; i < 2048; i++) if (buffer[i] == 0) printf("Error, extra set of zeros\n"); if (zero_start >= 2048) printf("0x%8.8x, (no zeros)\n", p); else printf("0x%8.8x, (0x%8.8x to 0x%8.8x, %d byte prefetch)\n", p, &buffer[zero_start], &buffer[zero_stop], (zero_stop - zero_start)); #if 0 /* Dump buffer contents */ for (i = 0; i < 2048; i++) printf("%1d", buffer[i]); printf("\n"); #endif } main() { int i; for (i = 1024; i < 2048; i++) check_buffer(&buffer[i]); }