| /* Test that __builtin_prefetch does no harm. |
| |
| Prefetch using all valid combinations of rw and locality values. |
| These must be compile-time constants. */ |
| |
| #define NO_TEMPORAL_LOCALITY 0 |
| #define LOW_TEMPORAL_LOCALITY 1 |
| #define MODERATE_TEMPORAL_LOCALITY 1 |
| #define HIGH_TEMPORAL_LOCALITY 3 |
| |
| #define WRITE_ACCESS 1 |
| #define READ_ACCESS 0 |
| |
| enum locality { none, low, moderate, high }; |
| enum rw { read, write }; |
| |
| int arr[10]; |
| |
| void |
| good_const (const int *p) |
| { |
| __builtin_prefetch (p, 0, 0); |
| __builtin_prefetch (p, 0, 1); |
| __builtin_prefetch (p, 0, 2); |
| __builtin_prefetch (p, READ_ACCESS, 3); |
| __builtin_prefetch (p, 1, NO_TEMPORAL_LOCALITY); |
| __builtin_prefetch (p, 1, LOW_TEMPORAL_LOCALITY); |
| __builtin_prefetch (p, 1, MODERATE_TEMPORAL_LOCALITY); |
| __builtin_prefetch (p, WRITE_ACCESS, HIGH_TEMPORAL_LOCALITY); |
| } |
| |
| void |
| good_enum (const int *p) |
| { |
| __builtin_prefetch (p, read, none); |
| __builtin_prefetch (p, read, low); |
| __builtin_prefetch (p, read, moderate); |
| __builtin_prefetch (p, read, high); |
| __builtin_prefetch (p, write, none); |
| __builtin_prefetch (p, write, low); |
| __builtin_prefetch (p, write, moderate); |
| __builtin_prefetch (p, write, high); |
| } |
| |
| void |
| good_expr (const int *p) |
| { |
| __builtin_prefetch (p, 1 - 1, 6 - (2 * 3)); |
| __builtin_prefetch (p, 1 + 0, 1 + 2); |
| } |
| |
| void |
| good_vararg (const int *p) |
| { |
| __builtin_prefetch (p, 0, 3); |
| __builtin_prefetch (p, 0); |
| __builtin_prefetch (p, 1); |
| __builtin_prefetch (p); |
| } |
| |
| int |
| main () |
| { |
| good_const (arr); |
| good_enum (arr); |
| good_expr (arr); |
| good_vararg (arr); |
| exit (0); |
| } |