/* Test that __builtin_prefetch does no harm. Use addresses that are unlikely to be word-aligned. Some targets have alignment requirements for prefetch addresses, so make sure the compiler takes care of that. This fails if it aborts, anything else is OK. */ struct S { short a; short b; char c[8]; } s; char arr[100]; char *ptr = arr; int idx = 3; void arg_ptr (char *p) { __builtin_prefetch (p, 0, 0); } void arg_idx (char *p, int i) { __builtin_prefetch (&p[i], 0, 0); } void glob_ptr (void) { __builtin_prefetch (ptr, 0, 0); } void glob_idx (void) { __builtin_prefetch (&ptr[idx], 0, 0); } int main () { __builtin_prefetch (&s.b, 0, 0); __builtin_prefetch (&s.c[1], 0, 0); arg_ptr (&s.c[1]); arg_ptr (ptr+3); arg_idx (ptr, 3); arg_idx (ptr+1, 2); idx = 3; glob_ptr (); glob_idx (); ptr++; idx = 2; glob_ptr (); glob_idx (); exit (0); }