1 /*  Test for bugs in equality comparison that are sensitive to regoster allocation (as #2621 was)
2 
3     type: unsigned long, unsigned long long
4 
5  */
6 
7 #include <testfwk.h>
8 
9 #ifndef __SDCC_ds390
10 
t(unsigned int i)11 void t(unsigned int i)
12 {
13 	i;
14 }
15 
16 /* Try to get lower 16 bits allocated to register x on stm8 */
17 {type} f( {type} p)
18 {
19 	register {type} v = p;
20 
21 	if(v == 0x0000ffff)
22 		t((unsigned int)v);
23 	else if(v == 0x00010000)
24 		t((unsigned int)v + 1);
25 	else if(v == 0xffff0001)
26 		t((unsigned int)v + 42);
27 	else
28 		return(v);
29 
30 	return(v);
31 }
32 
33 #ifndef __SDCC_pdk14 // Lack of memory
34 #if !(defined (__SDCC_pdk15) && defined(__SDCC_STACK_AUTO)) // Lack of code memory
35 /* Try to get lower 16 bits allocated to register y on stm8*/
36 {type} g({type} p)
37 {
38 	register {type} v = p;
39 
40 	if(v == 0x0000ffff)
41 		t((unsigned int)(v >> 16));
42 	else if(v == 0x00010000)
43 		t((unsigned int)(v >> 16) + 1);
44 	else if(v == 0xffff0001)
45 		t((unsigned int)(v >> 16) + 42);
46 	else
47 		return(v);
48 
49 
50 	return(v >> 16);
51 }
52 
53 /* Try to get lower 8 bits allocated to register a on stm8*/
54 {type} h( {type} p)
55 {
56 	register {type} v = p;
57 
58 	if(v == 0x0000ffff)
59 		v |= 0x55;
60 	else if(v == 0x00010000)
61 		v &= 0x55;
62 	else if(v == 0xffff0001)
63 		v |= 0xaa;
64 	else
65 		return(v);
66 
67 	return(v);
68 }
69 #endif
70 #endif
71 #endif
72 
testBug(void)73 void testBug(void)
74 {
75 #ifndef __SDCC_ds390
76 	ASSERT(f(0x55aa55aa) == 0x55aa55aa);
77 	ASSERT(f(0x0000ffff) == 0x0000ffff);
78 #ifndef __SDCC_pdk14 // Lack of memory
79 #if !(defined (__SDCC_pdk15) && defined(__SDCC_STACK_AUTO)) // Lack of code memory
80 	ASSERT(f(0xffff0001) == 0xffff0001);
81 
82 	ASSERT(g(0x55aa55aa) == 0x55aa55aa);
83 	ASSERT(g(0x0000ffff) == 0x00000000);
84 	ASSERT(g(0xffff0001) == 0x0000ffff);
85 
86 	ASSERT(h(0x55aa55aa) == 0x55aa55aa);
87 	ASSERT(h(0x0000ffff) == 0x0000ffff);
88 	ASSERT(h(0xffff0001) == 0xffff00ab);
89 #endif
90 #endif
91 #endif
92 }
93 
94