More enhancements to register optimization algorithms.
[fw/sdcc] / src / regression / sub2.c
1 //#include "p16c84.h"
2 // Addition tests
3
4 /* bit types are not ANSI - so provide a way of disabling bit types
5  * if this file is used to test other compilers besides SDCC */
6 #define SUPPORT_BIT_TYPES 1
7
8 /* Some compilers that support bit types do not support bit arithmetic 
9  * (like bitx = bity + bitz;) */
10 #define SUPPORT_BIT_ARITHMETIC 1
11
12 unsigned char success=0;
13 unsigned char failures=0;
14 unsigned char dummy=0;
15
16 #if SUPPORT_BIT_TYPES
17
18 bit bit0 = 0;
19 bit bit1 = 0;
20 bit bit2 = 0;
21 bit bit3 = 0;
22 bit bit4 = 0;
23 bit bit5 = 0;
24 bit bit6 = 0;
25 bit bit7 = 0;
26 bit bit8 = 0;
27 bit bit9 = 0;
28 bit bit10 = 0;
29 bit bit11 = 0;
30
31 #endif
32
33 int int0 = 0;
34 int int1 = 0;
35 char char0 = 0;
36 char char1 = 0;
37 char char2 = 0;
38
39
40 void done()
41 {
42
43   dummy++;
44
45 }
46
47 void sub_int1(void)
48 {
49   if(int0 != 5)
50     failures++;
51
52   if(int1 != 4)
53     failures++;
54
55   int0 = int0 - int1;
56
57   if(int0 != 1)
58     failures++;
59
60   int0 = 4 - int0;
61   if(int0 != 3)
62     failures++;
63
64   int0 = int0 - int1;
65
66   if(int0 != -1)
67     failures++;
68
69   int0 = int0 - 0xff;
70
71   if(int0 != -0x100)
72     failures++;
73
74   int0 = 0xff - int0;
75
76   if(int0 != 0x1ff)
77     failures++;
78
79
80 }
81
82 void sub_char_int(void)
83 {
84
85   int0 = int0 - char0;
86
87   if(int0 != 3)
88     failures++;
89
90   if(int0 < char0)
91     failures++;
92
93   int0 = int0 - char0;
94
95   if(int0 != 1)
96     failures++;
97
98   if(int0 > char0)
99     failures++;
100
101
102   int0 = int0 - char0;
103   if(int0 != -1)
104     failures++;
105
106   if(int0>0)
107     failures++;
108
109 }
110
111 void assign_char2int(void)
112 {
113
114   int0 = char0;
115   if(int0 != 0x7f)
116     failures++;
117
118   int1 = char1;
119   if(int1 != -5)
120     failures++;
121
122 }
123
124
125 void sub_compound_char(void)
126 {
127
128   char0 = char1 - 5;
129   if(char0 != 4)
130     failures++;
131
132   if((char1 - char0 - 5) != 0)
133     failures++;
134
135 }
136
137 void sub_compound_int(void)
138 {
139
140   int0 = int1 - 5;
141   if(int0 != 4)
142     failures++;
143
144   if((int1 - int0 - 5) != 0)
145     failures++;
146
147 }
148
149 void main(void)
150 {
151
152   int0 = 5;
153   int1 = 4;
154
155   sub_int1();
156
157   int0 = 5;
158   int1 = 4;
159   char0 = 2;
160
161   sub_char_int();
162
163   char0 = 0x7f;
164   char1 = -5;
165   assign_char2int();
166
167   char1 = 9;
168   sub_compound_char();
169   
170   int1 = 9;
171   sub_compound_int();
172
173   success = failures;
174   done();
175 }