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 8int *bad_addr[ARRSIZE]; 9int 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. */ 13void 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 23void 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 31void 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 39int 40main () 41{ 42 init_addrs (); 43 prefetch_for_read (); 44 prefetch_for_write (); 45 exit (0); 46} 47