1/* Test that __builtin_prefetch does no harm. 2 3 Prefetch using all valid combinations of rw and locality values. 4 These must be compile-time constants. */ 5 6#define NO_TEMPORAL_LOCALITY 0 7#define LOW_TEMPORAL_LOCALITY 1 8#define MODERATE_TEMPORAL_LOCALITY 1 9#define HIGH_TEMPORAL_LOCALITY 3 10 11#define WRITE_ACCESS 1 12#define READ_ACCESS 0 13 14enum locality { none, low, moderate, high }; 15enum rw { read, write }; 16 17int arr[10]; 18 19void 20good_const (const int *p) 21{ 22 __builtin_prefetch (p, 0, 0); 23 __builtin_prefetch (p, 0, 1); 24 __builtin_prefetch (p, 0, 2); 25 __builtin_prefetch (p, READ_ACCESS, 3); 26 __builtin_prefetch (p, 1, NO_TEMPORAL_LOCALITY); 27 __builtin_prefetch (p, 1, LOW_TEMPORAL_LOCALITY); 28 __builtin_prefetch (p, 1, MODERATE_TEMPORAL_LOCALITY); 29 __builtin_prefetch (p, WRITE_ACCESS, HIGH_TEMPORAL_LOCALITY); 30} 31 32void 33good_enum (const int *p) 34{ 35 __builtin_prefetch (p, read, none); 36 __builtin_prefetch (p, read, low); 37 __builtin_prefetch (p, read, moderate); 38 __builtin_prefetch (p, read, high); 39 __builtin_prefetch (p, write, none); 40 __builtin_prefetch (p, write, low); 41 __builtin_prefetch (p, write, moderate); 42 __builtin_prefetch (p, write, high); 43} 44 45void 46good_expr (const int *p) 47{ 48 __builtin_prefetch (p, 1 - 1, 6 - (2 * 3)); 49 __builtin_prefetch (p, 1 + 0, 1 + 2); 50} 51 52void 53good_vararg (const int *p) 54{ 55 __builtin_prefetch (p, 0, 3); 56 __builtin_prefetch (p, 0); 57 __builtin_prefetch (p, 1); 58 __builtin_prefetch (p); 59} 60 61int 62main () 63{ 64 good_const (arr); 65 good_enum (arr); 66 good_expr (arr); 67 good_vararg (arr); 68 exit (0); 69} 70