* as/hc08/lkaomf51.c (OutputName),
[fw/sdcc] / support / regression / tests / bitopcse.c
1 /* Test CSE with |&^
2
3     type: bit, char, short, long
4  */
5 #include <testfwk.h>
6
7 /* This is not only a regression test, the focus of this test
8    is more on the generated code (volatile!). */
9
10 #define _{type}
11
12
13 #if defined(_bit) || defined(SDCC_hc08)
14 #  define _data
15 #else
16 #  define _data idata
17 #endif
18
19 #if defined(PORT_HOST) || defined(SDCC_z80) || defined(SDCC_gbz80) || defined(SDCC_hc08) || defined(SDCC_pic16)
20 #  define NO_BIT_TYPE
21 #endif
22
23 #if defined(_bit) && !defined(NO_BIT_TYPE)
24 #  define MASK 1
25 #elif defined(_bit) && defined(NO_BIT_TYPE)
26 #  if defined(PORT_HOST)
27 #    define MASK 0xffffffff
28 #  else
29 #    define MASK 0xffff
30 #  endif
31 #  define bit int
32 #elif defined(_char)
33 #  define MASK 0xff
34 #elif defined(_short)
35 #  define MASK 0xffff
36 #elif defined(_long)
37 #  define MASK 0xffffffff
38 #else
39 #  warning Unknown type
40 #endif
41
42 /* the variable 'mask' is only defined to see if MASK is correctly set up */
43 const unsigned long mask = MASK;
44
45       volatile          {type}  v;
46       volatile unsigned {type} uv;
47 /* an array would be nicer, but an array of bits isn't possible */
48 _data                   {type}  a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 ,
49                                 a10, a11, a12, a13, a14, a15, a16, a17, a18, a19,
50                                 a20;
51 _data          unsigned {type} ua0, ua1, ua2, ua3, ua4, ua5, ua6;
52 _data                   {type}  b;
53 _data volatile unsigned {type} ub = 0xbe;
54
55 void
56 testcse(void)
57 {
58    b = 0xeb;
59   ub = 0xbe;
60    v = 0x33;
61   uv = 0x7b;
62
63    a0   =    0 & b;
64    a1   =    0 & v;
65
66    a2   = MASK &  b;
67    a3   = MASK &  v;
68   ua0   = MASK & ub;
69   ua1   = MASK & uv;
70
71    a4   =    b & b;
72    a5   =    v & v;
73
74    a6  &= 0;
75    v   &= 0;
76    a7  &= MASK;
77    v   &= MASK;
78   ua2  &= MASK;
79   uv   &= MASK;
80
81
82    a8   =    0 | b;
83    a9   =    0 | v;
84
85    a10  = MASK |  b;
86    a11  = MASK |  v;
87   ua3   = MASK | ub;
88   ua4   = MASK | uv;
89
90    a12  =   b | b;
91    a13  =   v | v;
92
93    a14 |= 0;
94    v   |= 0;
95    a15 |= MASK;
96    v   |= MASK;
97   ua5  |= MASK;
98   uv   |= MASK;
99
100
101    a16  = 0 ^ b;
102    a17  = 0 ^ v;
103
104    a18  = b ^ b;
105    a19  = v ^ v;
106
107    a20 ^= 0;
108    v   ^= 0;
109
110    ASSERT( a0  ==  0);
111    ASSERT( a1  ==  0);
112    ASSERT( a2  ==  b);
113 #if defined(_bit) && !defined(NO_BIT_TYPE)
114    ASSERT( a3  == 1);
115 #else
116    ASSERT( a3  == ({type}) 0x33);
117 #endif
118    ASSERT(ua0  == ub);
119 #if defined(_bit) && !defined(NO_BIT_TYPE)
120    ASSERT(ua1  == 1);
121 #else
122    ASSERT(ua1  == ({type}) 0x7b);
123 #endif
124    ASSERT( a4  ==  b);
125 #if defined(_bit) && !defined(NO_BIT_TYPE)
126    ASSERT( a5  == 1);
127 #else
128    ASSERT( a5  == ({type}) 0x33);
129 #endif
130    ASSERT( a6  ==  0);
131    // ASSERT( a7 == );
132    // ASSERT(ua2 == );
133    ASSERT( a8  ==  b);
134    ASSERT( a9  ==  0);
135    ASSERT( a10 == ({type}) MASK);
136    ASSERT( a11  == ({type}) MASK);
137    ASSERT(ua3  == MASK);
138    ASSERT(ua4  == MASK);
139    ASSERT( a12 ==  b);
140    ASSERT( a13 ==  0);
141    // ASSERT( a14 == );
142    ASSERT( a15 == ({type}) MASK);
143    ASSERT(ua5 == MASK);
144    ASSERT( a16 == b);
145    ASSERT( a17 == ({type}) MASK);
146    ASSERT( a18 == 0);
147    ASSERT( a19 == 0);
148    // ASSERT( a20 == );
149    ASSERT( v   == ({type}) MASK);
150    ASSERT(uv   == MASK);
151 }