blob: 18e2787b802f7ad42b7a78ed0d7b4569d397b72a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
/*
pr63209.c from the execute part of the gcc torture tests.
*/
#include <testfwk.h>
#ifdef __SDCC
#pragma std_c99
#pragma disable_warning 85
#endif
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);
(void)c;
return (pa_minus_pb <= 0) ? a : b;
}
unsigned Predictor(unsigned left, const unsigned* const top) {
const unsigned pred = Select(top[1], left, top[0]);
return pred;
}
void
testTortureExecute (void) {
const unsigned top[2] = {0xff7a7a7a, 0xff7a7a7a};
const unsigned left = 0xff7b7b7b;
const unsigned pred = Predictor(left, top /*+ 1*/);
ASSERT (pred == left);
}
|