1 /* Test that __builtin_prefetch does no harm. 2 3 Data prefetch should not fault if used with an invalid address. */ 4 5 #include <limits.h> 6 7 #define ARRSIZE 65 8 int *bad_addr[ARRSIZE]; 9 int arr_used; 10 11 /* Fill bad_addr with a range of values in the hopes that on any target 12 some will be invalid addresses. */ 13 void init_addrs(void)14init_addrs (void) 15 { 16 int i; 17 int bits_per_ptr = sizeof (void *) * 8; 18 for (i = 0; i < bits_per_ptr; i++) 19 bad_addr[i] = (void *)(1UL << i); 20 arr_used = bits_per_ptr + 1; /* The last element used is zero. */ 21 } 22 23 void prefetch_for_read(void)24prefetch_for_read (void) 25 { 26 int i; 27 for (i = 0; i < ARRSIZE; i++) 28 __builtin_prefetch (bad_addr[i], 0, 0); 29 } 30 31 void prefetch_for_write(void)32prefetch_for_write (void) 33 { 34 int i; 35 for (i = 0; i < ARRSIZE; i++) 36 __builtin_prefetch (bad_addr[i], 1, 0); 37 } 38 39 int main()40main () 41 { 42 init_addrs (); 43 prefetch_for_read (); 44 prefetch_for_write (); 45 exit (0); 46 } 47