Steve Tell fixed a nested for-loop bug in the PIC Port
[fw/sdcc] / src / regression / rotate6.c
1 #define __16F873
2 #include "p16f873.h"
3 // Shift bytes left and right by a variable.
4
5 unsigned char success=0;
6 unsigned char failures=0;
7 unsigned char dummy=0;
8
9 bit bit0 = 0;
10 signed int aint0 = 0;
11 signed int aint1 = 0;
12 signed char achar0 = 0;
13 signed char achar1 = 0;
14 signed char achar2 = 0;
15 signed char achar3 = 0;
16
17 void done()
18 {
19
20   dummy++;
21
22 }
23
24 void shift_right_var(void)
25 {
26
27   achar0 >>= achar1;
28
29 }
30
31 void shift_left_var(void)
32 {
33
34   achar0 <<= achar1;
35 }
36
37 void shift_int_left_var(void)
38 {
39
40   aint0 <<= achar1;
41
42 }
43
44 void shift_int_right_var(void)
45 {
46
47   aint0 >>= achar1;
48
49 }
50
51 void shift_int_right_var2(void)
52 {
53
54   aint0 = aint1 >> achar1;
55
56 }
57
58 void shift_int_left_var2(void)
59 {
60
61   aint0 = aint1 << achar1;
62
63 }
64
65 void main(void)
66 {
67   char i;
68
69   achar0 = 1;
70   achar1 = 1;
71   shift_left_var();
72
73   if(achar0 !=2)
74     failures++;
75
76   achar0 = 1;
77   achar1 = 1;
78   achar2 = 1;
79   for(i=0; i<7; i++) {
80     shift_left_var();
81     achar2 <<= 1;
82
83     if(achar2 != achar0)
84       failures++;
85   }
86
87   achar1 = 4;
88   achar0 = 0xf0;
89   shift_right_var();
90   if(achar0 != 0xff)
91     failures++;
92
93   aint0 = 1;
94   aint1 = 1;
95   achar1 = 1;
96
97   for(i=0; i<15; i++) {
98     shift_int_left_var();
99     aint1 <<= 1;
100     if(aint0 != aint1)
101       failures++;
102   }
103
104   aint0 = 0x4000;
105   aint1 = 0x4000;
106
107   for(i=0; i<15; i++) {
108     shift_int_right_var();
109     aint1 >>= 1;
110     if(aint0 != aint1)
111       failures++;
112   }
113
114
115   aint0 = -0x4000;
116   aint1 = -0x4000;
117
118   for(i=0; i<15; i++) {
119     shift_int_right_var();
120     aint1 >>= 1;
121     if(aint0 != aint1)
122       failures++;
123   }
124
125   aint1 = 0xf000;
126   achar1 = 10;
127   shift_int_right_var2();
128
129   if(aint0 != 0xfffc)
130     failures++;
131
132   aint1 = aint0;
133   shift_int_left_var2();
134
135   if(aint0 != 0xf000)
136     failures++;
137
138   success=failures;
139   done();
140 }