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