]> git.sur5r.net Git - cc65/blob - test/val/rotate4.c
goto.c warning fix for implicit truncation
[cc65] / test / val / rotate4.c
1 /*
2   !!DESCRIPTION!! rotate bytes left and right by a constant.
3   !!ORIGIN!!      SDCC regression tests
4   !!LICENCE!!     GPL, read COPYING.GPL
5 */
6
7 #include <stdio.h>
8 #include <limits.h>
9
10 unsigned char success=0;
11 unsigned char failures=0;
12 unsigned char dummy=0;
13
14 #ifdef SUPPORT_BIT_TYPES
15 bit bit0 = 0;
16 #endif
17 #ifdef SIZEOF_INT_16BIT
18 #if defined(__LINUX__) || defined(LINUX)
19 unsigned short aint0 = 0;
20 unsigned short aint1 = 0;
21
22 #else
23 unsigned int aint0 = 0;
24 unsigned int aint1 = 0;
25
26 #endif
27
28 #else
29 unsigned int aint0 = 0;
30 unsigned int aint1 = 0;
31
32 #endif
33 unsigned char uchar0 = 0;
34 unsigned char uchar1 = 0;
35 unsigned char uchar2 = 0;
36
37 void done()
38 {
39   dummy++;
40 }
41
42 void check(void)
43 {
44   if(uchar0 != uchar1)
45     failures++;
46 }
47
48 void rotate_left_1(void)
49 {
50   uchar0 = (uchar0<<1) | (uchar0>>7);
51
52   check();
53 }
54
55 void rotate_left_2(void)
56 {
57   uchar0 = (uchar0<<2) | (uchar0>>6);
58
59   check();
60 }
61
62 void rotate_left_3(void)
63 {
64   uchar0 <<= 3;
65
66   if(uchar0 != uchar1)
67     failures++;
68 }
69
70 void rotate_left_4(void)
71 {
72   uchar0 <<= 4;
73
74   if(uchar0 != uchar1)
75     failures++;
76 }
77
78 void rotate_left_5(void)
79 {
80   uchar0 <<= 5;
81
82   if(uchar0 != uchar1)
83     failures++;
84 }
85
86 void rotate_left_6(void)
87 {
88   uchar0 <<= 6;
89
90   if(uchar0 != uchar1)
91     failures++;
92 }
93
94 void rotate_left_7(void)
95 {
96   uchar0 <<= 7;
97
98   if(uchar0 != uchar1)
99     failures++;
100 }
101
102 void rotate_right_1(void)
103 {
104   uchar0 = (uchar0>>1) | (uchar0<<7);
105
106   check();
107 }
108
109 void rotate_right_2(void)
110 {
111   uchar0 = (uchar0>>2) | (uchar0<<6);
112
113   check();
114 }
115
116 void rotate_right_3(void)
117 {
118   uchar0 >>= 3;
119
120   check();
121 }
122
123 void rotate_right_4(void)
124 {
125   uchar0 >>= 4;
126
127   check();
128 }
129
130 void rotate_right_5(void)
131 {
132   uchar0 >>= 5;
133
134   check();
135 }
136
137 void rotate_right_6(void)
138 {
139   uchar0 >>= 6;
140
141   check();
142 }
143
144 void rotate_right_7(void)
145 {
146   uchar0 >>= 7;
147
148   check();
149 }
150
151 int main(void)
152 {
153   /* call with both values zero */
154   rotate_left_1();
155
156   uchar0 = 1;
157   uchar1 = 2;
158
159   rotate_left_1();
160
161   uchar0 = 0x80;
162   uchar1 = 1;
163
164   rotate_left_1();
165
166   uchar1 = 2;
167   for(uchar2=0; uchar2<6; uchar2++) {
168     rotate_left_1();
169     uchar1 <<=1;
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   uchar0 = 2;
197   uchar1 = 1;
198   rotate_right_1();
199
200   uchar0 = 1;
201   uchar1 = 0x80;
202   rotate_right_1();
203
204   uchar0 = 4;
205   uchar1 = 1;
206   rotate_right_2();
207
208   uchar0 = 8;
209   rotate_right_3();
210
211   uchar0 = 0x10;
212   rotate_right_4();
213
214   uchar0 = 0x20;
215   rotate_right_5();
216
217   uchar0 = 0x40;
218   rotate_right_6();
219
220   uchar0 = 0x80;
221   rotate_right_7();
222
223   success=failures;
224   done();
225   printf("failures: %d\n",failures);
226
227   return failures;
228 }