PIC port now supports object files. Applied patch from Craig Franklin that started...
[fw/sdcc] / src / regression / nestfor.c
1 #define __16F873
2 #include "p16f873.h"
3 //#include "p16c84.h"
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
15 void dput(unsigned char val)
16 {
17         PORTB = val;
18         PORTA = 0x01;
19         PORTA = 0x00;
20 }
21
22 void done()
23 {
24
25   dummy++;
26
27 }
28
29 /* both loops use the loop variable inside the inner loop */
30 void for1(void)
31 {
32         unsigned char i, j;
33
34         uchar0 = 0;
35         uchar1 = 0;
36         for(i = 0; i < 3; i++) {
37                 uchar0++;
38                 for(j = 0; j < 4; j++) {
39                         uchar1++;
40                         dput(i);
41                         dput(j);
42                 }
43         }
44         if(uchar0 != 3)
45                 failures++;
46         if(uchar1 != 12)
47                 failures++;
48 }
49
50 /* only the outer loop's variable is used inside, inner can be optimized into a repeat-loop */
51 void for2(void)
52 {
53         unsigned char i, j;
54
55         uchar0 = 0;
56         uchar1 = 0;
57         for(i = 0; i < 3; i++) {
58                 uchar0++;
59                 for(j = 0; j < 4; j++) {
60                         uchar1++;
61                         dput(i);
62                 }
63         }
64         if(uchar0 != 3)
65                 failures++;
66         if(uchar1 != 12)
67                 failures++;
68 }
69
70 /* only the inner loop's variable is used inside */
71 void for3(void)
72 {
73         unsigned char i, j;
74
75         uchar0 = 0;
76         uchar1 = 0;
77         for(i = 0; i < 3; i++) {
78                 uchar0++;
79                 for(j = 0; j < 4; j++) {
80                         uchar1++;
81                         dput(j);
82                 }
83         }
84         if(uchar0 != 3)
85                 failures++;
86         if(uchar1 != 12)
87                 failures++;
88
89 }
90
91 /* neither loop variable used inside the loops */
92 void for4(void)
93 {
94         unsigned char i, j;
95
96         uchar0 = 0;
97         uchar1 = 0;
98         for(i = 0; i < 3; i++) {
99                 uchar0++;
100                 for(j = 0; j < 4; j++) {
101                         uchar1++;
102                         dput(uchar0);
103                         dput(uchar1);
104                 }
105         }
106         if(uchar0 != 3)
107                 failures++;
108         if(uchar1 != 12)
109                 failures++;
110
111 }
112
113 /* like for1 but different condition in inner loop */
114 void for5(void)
115 {
116         unsigned char i, j;
117
118         uchar0 = 0;
119         uchar1 = 0;
120         for(i = 0; i < 3; i++) {
121                 uchar0++;
122                 for(j = 10; j >= 5; j--) {
123                         uchar1++;
124                         dput(i);
125                         dput(j);
126                 }
127         }
128         if(uchar0 != 3)
129                 failures++;
130         if(uchar1 != 18)
131                 failures++;
132 }
133
134 void main(void)
135 {
136   for1();
137   for2();
138   for3();
139   for4();
140   for5();
141
142   success = failures;
143   done();
144 }