Added more regression test to the pic port. Added support for <<, >>, ^
[fw/sdcc] / src / regression / rotate1.c
1 // Shift bytes left and right by a constant.
2
3 unsigned char success=0;
4 unsigned char failures=0;
5 unsigned char dummy=0;
6
7 bit bit0 = 0;
8 unsigned int aint0 = 0;
9 unsigned int aint1 = 0;
10 unsigned char achar0 = 0;
11 unsigned char achar1 = 0;
12 unsigned char achar2 = 0;
13
14 void done()
15 {
16
17   dummy++;
18
19 }
20
21 void check(void)
22 {
23   if(achar0 != achar1)
24     failures++;
25 }
26
27 void shift_left_1(void)
28 {
29
30   achar0 <<= 1;
31
32   check();
33 }
34
35 void shift_left_2(void)
36 {
37
38   achar0 <<= 2;
39
40   if(achar0 != achar1)
41     failures++;
42 }
43
44
45 void shift_left_3(void)
46 {
47
48   achar0 <<= 3;
49
50   if(achar0 != achar1)
51     failures++;
52 }
53
54 void shift_left_4(void)
55 {
56
57   achar0 <<= 4;
58
59   if(achar0 != achar1)
60     failures++;
61 }
62
63 void shift_left_5(void)
64 {
65
66   achar0 <<= 5;
67
68   if(achar0 != achar1)
69     failures++;
70 }
71
72 void shift_left_6(void)
73 {
74
75   achar0 <<= 6;
76
77   if(achar0 != achar1)
78     failures++;
79 }
80
81 void shift_left_7(void)
82 {
83
84   achar0 <<= 7;
85
86   if(achar0 != achar1)
87     failures++;
88 }
89
90 void shift_right_1(void)
91 {
92
93   achar0 >>= 1;
94
95   check();
96 }
97
98 void shift_right_2(void)
99 {
100
101   achar0 >>= 2;
102
103   check();
104 }
105
106 void shift_right_3(void)
107 {
108
109   achar0 >>= 3;
110
111   check();
112 }
113
114 void shift_right_4(void)
115 {
116
117   achar0 >>= 4;
118
119   check();
120 }
121
122 void shift_right_5(void)
123 {
124
125   achar0 >>= 5;
126
127   check();
128 }
129
130 void shift_right_6(void)
131 {
132
133   achar0 >>= 6;
134
135   check();
136 }
137
138 void shift_right_7(void)
139 {
140
141   achar0 >>= 7;
142
143   check();
144 }
145
146
147 void main(void)
148 {
149
150   // call with both values zero
151   shift_left_1();
152
153   achar0 = 1;
154   achar1 = 2;
155   for(achar2=0; achar2<6; achar2++) {
156     shift_left_1();
157     achar1 <<=1;
158   }
159
160   achar0 = 1;
161   achar1 = 4;
162   shift_left_2();
163
164   achar0 = 1;
165   achar1 = 8;
166   shift_left_3();
167
168   achar0 = 1;
169   achar1 = 0x10;
170   shift_left_4();
171
172   achar0 = 1;
173   achar1 = 0x20;
174   shift_left_5();
175
176   achar0 = 1;
177   achar1 = 0x40;
178   shift_left_6();
179
180   achar0 = 1;
181   achar1 = 0x80;
182   shift_left_7();
183
184
185
186
187   achar0 = 2;
188   achar1 = 1;
189   shift_right_1();
190
191   achar0 = 4;
192   shift_right_2();
193
194   achar0 = 8;
195   shift_right_3();
196
197   achar0 = 0x10;
198   shift_right_4();
199
200   achar0 = 0x20;
201   shift_right_5();
202
203   achar0 = 0x40;
204   shift_right_6();
205
206   achar0 = 0x80;
207   shift_right_7();
208
209   success=failures;
210   done();
211 }