Steve Tell fixed a nested for-loop bug in the PIC Port
[fw/sdcc] / src / regression / rotate4.c
1 #define __16F873
2 #include "p16f873.h"
3 // rotate bytes left and right by a constant.
4
5 unsigned char success=0;
6 unsigned char failures=0;
7 unsigned char dummy=0;
8
9 bit bit0 = 0;
10 unsigned int uint0 = 0;
11 unsigned int uint1 = 0;
12 unsigned char uchar0 = 0;
13 unsigned char uchar1 = 0;
14 unsigned char uchar2 = 0;
15
16 void done()
17 {
18
19   dummy++;
20
21 }
22
23 void check(void)
24 {
25   if(uchar0 != uchar1)
26     failures++;
27 }
28
29 void rotate_left_1(void)
30 {
31
32   uchar0 = (uchar0<<1) | (uchar0>>7);
33
34   check();
35 }
36
37 void rotate_left_2(void)
38 {
39
40   uchar0 = (uchar0<<2) | (uchar0>>6);
41
42   check();
43 }
44
45
46 void rotate_left_3(void)
47 {
48
49   uchar0 <<= 3;
50
51   if(uchar0 != uchar1)
52     failures++;
53 }
54
55 void rotate_left_4(void)
56 {
57
58   uchar0 <<= 4;
59
60   if(uchar0 != uchar1)
61     failures++;
62 }
63
64 void rotate_left_5(void)
65 {
66
67   uchar0 <<= 5;
68
69   if(uchar0 != uchar1)
70     failures++;
71 }
72
73 void rotate_left_6(void)
74 {
75
76   uchar0 <<= 6;
77
78   if(uchar0 != uchar1)
79     failures++;
80 }
81
82 void rotate_left_7(void)
83 {
84
85   uchar0 <<= 7;
86
87   if(uchar0 != uchar1)
88     failures++;
89 }
90
91 void rotate_right_1(void)
92 {
93
94   uchar0 = (uchar0>>1) | (uchar0<<7);
95
96   check();
97
98 }
99
100 void rotate_right_2(void)
101 {
102
103   uchar0 = (uchar0>>2) | (uchar0<<6);
104
105   check();
106 }
107
108 void rotate_right_3(void)
109 {
110
111   uchar0 >>= 3;
112
113   check();
114 }
115
116 void rotate_right_4(void)
117 {
118
119   uchar0 >>= 4;
120
121   check();
122 }
123
124 void rotate_right_5(void)
125 {
126
127   uchar0 >>= 5;
128
129   check();
130 }
131
132 void rotate_right_6(void)
133 {
134
135   uchar0 >>= 6;
136
137   check();
138 }
139
140 void rotate_right_7(void)
141 {
142
143   uchar0 >>= 7;
144
145   check();
146 }
147
148
149 void main(void)
150 {
151
152   // call with both values zero
153   rotate_left_1();
154
155   uchar0 = 1;
156   uchar1 = 2;
157
158   rotate_left_1();
159
160   uchar0 = 0x80;
161   uchar1 = 1;
162
163   rotate_left_1();
164
165   uchar1 = 2;
166   for(uchar2=0; uchar2<6; uchar2++) {
167     rotate_left_1();
168     uchar1 <<=1;
169   }
170
171
172   uchar0 = 1;
173   uchar1 = 4;
174   rotate_left_2();
175
176   uchar0 = 1;
177   uchar1 = 8;
178   rotate_left_3();
179
180   uchar0 = 1;
181   uchar1 = 0x10;
182   rotate_left_4();
183
184   uchar0 = 1;
185   uchar1 = 0x20;
186   rotate_left_5();
187
188   uchar0 = 1;
189   uchar1 = 0x40;
190   rotate_left_6();
191
192   uchar0 = 1;
193   uchar1 = 0x80;
194   rotate_left_7();
195
196
197
198
199   uchar0 = 2;
200   uchar1 = 1;
201   rotate_right_1();
202
203   uchar0 = 1;
204   uchar1 = 0x80;
205   rotate_right_1();
206
207   uchar0 = 4;
208   uchar1 = 1;
209   rotate_right_2();
210
211   uchar0 = 8;
212   rotate_right_3();
213
214   uchar0 = 0x10;
215   rotate_right_4();
216
217   uchar0 = 0x20;
218   rotate_right_5();
219
220   uchar0 = 0x40;
221   rotate_right_6();
222
223   uchar0 = 0x80;
224   rotate_right_7();
225
226   success=failures;
227   done();
228 }