/* Test that __builtin_prefetch does no harm. Data prefetch should not fault if used with an invalid address. */ #include #define ARRSIZE 65 int *bad_addr[ARRSIZE]; int arr_used; /* Fill bad_addr with a range of values in the hopes that on any target some will be invalid addresses. */ void init_addrs (void) { int i; int bits_per_ptr = sizeof (void *) * 8; for (i = 0; i < bits_per_ptr; i++) bad_addr[i] = (void *)(1UL << i); arr_used = bits_per_ptr + 1; /* The last element used is zero. */ } void prefetch_for_read (void) { int i; for (i = 0; i < ARRSIZE; i++) __builtin_prefetch (bad_addr[i], 0, 0); } void prefetch_for_write (void) { int i; for (i = 0; i < ARRSIZE; i++) __builtin_prefetch (bad_addr[i], 1, 0); } int main () { init_addrs (); prefetch_for_read (); prefetch_for_write (); exit (0); }