1 /*
2    20010224-1.c from the execute part of the gcc torture tests.
3  */
4 
5 #include <testfwk.h>
6 
7 #ifdef __SDCC
8 #pragma std_c99
9 #pragma disable_warning 85
10 #endif
11 
12 #include <stdint.h>
13 
14 #if !defined(__SDCC_pdk14) // Lack of memory
15 int16_t logadd (int16_t *a, int16_t *b);
16 void ba_compute_psd (int16_t start);
17 
18 int16_t masktab[6] = { 1, 2, 3, 4, 5};
19 int16_t psd[6] = { 50, 40, 30, 20, 10};
20 int16_t bndpsd[6] = { 1, 2, 3, 4, 5};
21 
ba_compute_psd(int16_t start)22 void ba_compute_psd (int16_t start)
23 {
24   int i,j,k;
25   int16_t lastbin = 4;
26 
27   j = start;
28   k = masktab[start];
29 
30   bndpsd[k] = psd[j];
31   j++;
32 
33   for (i = j; i < lastbin; i++) {
34     bndpsd[k] = logadd(&bndpsd[k], &psd[j]);
35     j++;
36   }
37 }
38 #endif
39 
logadd(int16_t * a,int16_t * b)40 int16_t logadd (int16_t *a, int16_t *b)
41 {
42   return *a + *b;
43 }
44 
45 void
testTortureExecute(void)46 testTortureExecute (void)
47 {
48 #if !defined(__SDCC_pdk14) // Lack of memory
49   int i;
50 
51   ba_compute_psd (0);
52 
53   if (bndpsd[1] != 140) ASSERT (0);
54   return;
55 #endif
56 }
57 
58