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