| static int Sub(int a, int b) { |
| return b -a; |
| } |
| |
| static unsigned Select(unsigned a, unsigned b, unsigned c) { |
| const int pa_minus_pb = |
| Sub((a >> 8) & 0xff, (b >> 8) & 0xff) + |
| Sub((a >> 0) & 0xff, (b >> 0) & 0xff); |
| return (pa_minus_pb <= 0) ? a : b; |
| } |
| |
| __attribute__((noinline)) unsigned Predictor(unsigned left, const unsigned* const top) { |
| const unsigned pred = Select(top[1], left, top[0]); |
| return pred; |
| } |
| |
| int main(void) { |
| const unsigned top[2] = {0xff7a7a7a, 0xff7a7a7a}; |
| const unsigned left = 0xff7b7b7b; |
| const unsigned pred = Predictor(left, top /*+ 1*/); |
| if (pred == left) |
| return 0; |
| return 1; |
| } |
| |
| |
| |