#define M 1024 unsigned int arr1[M]; unsigned int arr2[M]; volatile unsigned int sink; unsigned int test (void) { unsigned int sum = 0; for (int i = 0; i < M; i++) { #ifdef MODIFY /* Modify the loop accumulator using a chain of operations - this should not affect its rank biasing. */ sum |= 1; sum ^= 2; #endif #ifdef STORE /* Save the loop accumulator into a global variable - this should not affect its rank biasing. */ sink = sum; #endif #ifdef USE /* Add a tricky use of the loop accumulator - this should prevent its rank biasing. */ i = (i + sum) % M; #endif /* Use addends with different ranks. */ sum += arr1[i]; sum += arr2[((i ^ 1) + 1) % M]; } return sum; }