1 /** test one byte mul/div/mod operations.
11 #ifndef SDCC_pic16 /* bug [ 1444425 ] onebyte.c regression tes fails on pic16 */
13 {attrL} unsigned char ucL;
15 {attrR} unsigned char ucR;
16 volatile char r8 , r8b;
17 volatile unsigned char ur8, ur8b;
18 volatile short r16, r16b;
20 cL = -127; cR = -5; r16 = cL * cR; r16b = cR * cL; ASSERT(r16 == 635); ASSERT(r16b == 635);
21 cL = 127; cR = -5; r16 = cL * cR; r16b = cR * cL; ASSERT(r16 == -635); ASSERT(r16b == -635);
22 cL = -127; cR = 5; r16 = cL * cR; r16b = cR * cL; ASSERT(r16 == -635); ASSERT(r16b == -635);
23 cL = 127; cR = 5; r16 = cL * cR; r16b = cR * cL; ASSERT(r16 == 635); ASSERT(r16b == 635);
25 cL = -128; cR = -1; ur8 = cL * cR; ur8b = cR * cL; ASSERT(ur8 == 128); ASSERT(ur8b == 128);
26 cL = 128; cR = -1; r8 = cL * cR; r8b = cR * cL; ASSERT( r8 == -128); ASSERT( r8b == -128);
27 cL = -128; cR = 1; r8 = cL * cR; r8b = cR * cL; ASSERT( r8 == -128); ASSERT( r8b == -128);
28 cL = 128; cR = 1; ur8 = cL * cR; ur8b = cR * cL; ASSERT(ur8 == 128); ASSERT(ur8b == 128);
31 ucL = 128; cR = -5; r16 = ucL * cR; r16b = cR * ucL; ASSERT(r16 == -640); ASSERT(r16b == -640);
32 ucL = 128; cR = 5; r16 = ucL * cR; r16b = cR * ucL; ASSERT(r16 == 640); ASSERT(r16b == 640);
35 ucL = 127; cR = -1; r8 = ucL * cR; r8b = cR * ucL; ASSERT( r8 == -127); ASSERT( r8b == -127);
36 ucL = 128; cR = 1; ur8 = ucL * cR; ur8b = cR * ucL; ASSERT(ur8 == 128); ASSERT(ur8b == 128);
37 ucL = 128; ucR = 5; r16 = ucL * ucR; r16b = ucR * ucL; ASSERT(r16 == 640); ASSERT(r16b == 640);
38 ucL = 128; ucR = 1; ur8 = ucL * ucR; ur8b = ucR * ucL; ASSERT(ur8 == 128); ASSERT(ur8b == 128);
46 {attrL} unsigned char ucL;
48 {attrR} unsigned char ucR;
50 volatile unsigned char ur8;
53 cL = -128; cR = -2; r8 = cL / cR; ASSERT(r8 == 64);
54 cL = -128; cR = -2; r16 = cL / cR; ASSERT(r16 == 64);
56 ucL = 255; ucR = 3; r8 = ucL / ucR; ASSERT(r8 == 85);
57 ucL = 255; ucR = 255; r8 = ucL / ucR; ASSERT(r8 == 1);
58 ucL = 3; ucR = 255; r8 = ucL / ucR; ASSERT(r8 == 0);
60 cL = 127; cR = 3; r8 = cL / cR; ASSERT(r8 == 42);
61 cL = -127; cR = 3; r8 = cL / cR; ASSERT(r8 == -42);
62 cL = 127; cR = -3; r8 = cL / cR; ASSERT(r8 == -42);
63 cL = -127; cR = -3; r8 = cL / cR; ASSERT(r8 == 42);
65 ucL = 127; cR = 3; r8 = ucL / cR; ASSERT(r8 == 42);
66 ucL = 255; cR = 3; r8 = ucL / cR; ASSERT(r8 == 85);
68 ucL = 127; cR = -3; r8 = ucL / cR; ASSERT(r8 == -42);
69 ucL = 255; cR = -3; r8 = ucL / cR; ASSERT(r8 == -85);
72 cL = 127; ucR = 3; r8 = cL / ucR; ASSERT(r8 == 42);
73 cL = -127; ucR = 3; r8 = cL / ucR; ASSERT(r8 == -42);
74 cL = 127; ucR = 128; r8 = cL / ucR; ASSERT(r8 == 0);
75 cL = -127; ucR = 128; r8 = cL / ucR; ASSERT(r8 == 0);
77 cL = 127; cR = 1; r8 = cL / cR; ASSERT(r8 == 127);
78 cL = 127; cR = 1; r16 = cL / cR; ASSERT(r16 == 127);
80 ucL = 251; cR = 1; ur8 = ucL / cR; ASSERT(ur8 == 251);
81 ucL = 251; cR = 1; r16 = ucL / cR; ASSERT(r16 == 251);
84 ucL = 253; cR = -3; r8 = ucL / cR; ASSERT(r8 == -84);
85 ucL = 253; cR = -3; r16 = ucL / cR; ASSERT(r16 == -84);
87 ucL = 254; cR = -1; r16 = ucL / cR; ASSERT(r16 == -254);
89 cL = -128; cR = -1; r16 = cL / cR; ASSERT(r16 == 128);
96 {attrL} unsigned char ucL;
98 {attrR} unsigned char ucR;
100 volatile unsigned char ur8;
103 ucL = 128; cR = 5; r16 = ucL % cR; ASSERT(r16 == 3);
105 ucL = 128; cR = -5; r16 = ucL % cR; ASSERT(r16 == 3);
107 ucL = 128; ucR = 5; r16 = ucL % ucR; ASSERT(r16 == 3);
109 ucL = 128; ucR = 255; ur8 = ucL % ucR; ASSERT(ur8 == 128);
110 ucL = 128; ucR = 255; r16 = ucL % ucR; ASSERT(r16 == 128);
112 ucL = 128; cR = 127; r8 = ucL % cR; ASSERT(r8 == 1);
114 cL = 127; cR = 5; r16 = cL % cR; ASSERT(r16 == 2);
116 cL = 127; cR = -5; r16 = cL % cR; ASSERT(r16 == 2);
118 cL = 127; ucR = 5; r16 = cL % ucR; ASSERT(r16 == 2);
120 cL = -128; cR = 5; r16 = cL % cR; ASSERT(r16 == -3);
122 cL = -128; cR = -5; r16 = cL % cR; ASSERT(r16 == -3);
124 cL = -128; ucR = 5; r16 = cL % ucR; ASSERT(r16 == -3);
131 {attrL} unsigned char ucL;
133 {attrR} unsigned char ucR;
134 volatile short r16, r16b;
136 cL = 0x00; cR = 0x80; r16 = cL | cR; r16b = cR | cL; ASSERT(r16 == (short) 0xff80); ASSERT(r16b == (short) 0xff80);
137 ucL = 0x80; cR = 0x00; r16 = ucL | cR; r16b = cR | ucL; ASSERT(r16 == 0x80); ASSERT(r16b == 0x80);
138 ucL = 0x80; ucR = 0x80; r16 = ucL | ucR; r16b = ucR | ucL; ASSERT(r16 == 0x80); ASSERT(r16b == 0x80);
145 {attrL} unsigned char ucL;
147 {attrR} unsigned char ucR;
148 volatile short r16, r16b;
150 cL = 0x80; cR = 0x80; r16 = cL ^ cR; r16b = cR ^ cL; ASSERT(r16 == 0); ASSERT(r16b == 0);
151 cL = 0x80; cR = 0x00; r16 = cL ^ cR; r16b = cR ^ cL; ASSERT(r16 == (short) 0xff80); ASSERT(r16b == (short) 0xff80);
153 ucL = 0x80; cR = 0x80; r16 = ucL ^ cR; r16b = cR ^ ucL; ASSERT(r16 == (short) 0xff00); ASSERT(r16b == (short) 0xff00);
154 ucL = 0x80; cR = 0; r16 = ucL ^ cR; r16b = cR ^ ucL; ASSERT(r16 == 0x80); ASSERT(r16b == 0x80);
155 ucL = 0; cR = 0x80; r16 = ucL ^ cR; r16b = cR ^ ucL; ASSERT(r16 == (short) 0xff80); ASSERT(r16b == (short) 0xff80);
157 ucL = 0x80; ucR = 0x80; r16 = ucL ^ ucR; r16b = ucR ^ ucL; ASSERT(r16 == 0); ASSERT(r16b == 0);
158 ucL = 0; ucR = 0x80; r16 = ucL ^ ucR; r16b = ucR ^ ucL; ASSERT(r16 == 0x80); ASSERT(r16b == 0x80);
165 {attrL} unsigned char ucL;
167 {attrR} unsigned char ucR;
168 volatile short r16, r16b;
170 cL = 0x80; cR = 0x80; r16 = cL & cR; r16b = cR & cL; ASSERT(r16 == (short) 0xff80); ASSERT(r16b == (short) 0xff80);
171 ucL = 0x80; cR = 0x80; r16 = ucL & cR; r16b = cR & ucL; ASSERT(r16 == 0x80); ASSERT(r16b == 0x80);
172 ucL = 0x80; ucR = 0x80; r16 = ucL & ucR; r16b = ucR & ucL; ASSERT(r16 == 0x80); ASSERT(r16b == 0x80);
179 {attrR} unsigned char uc;
182 c = 0x00; r16 = ~ c; ASSERT(r16 == (short) 0xffff); ASSERT( ~ c < 0);
183 uc = 0x00; r16 = ~uc; ASSERT(r16 == (short) 0xffff); ASSERT( ~uc < 0);
184 ASSERT(~ (char) 0x00 == (short) 0xffff); ASSERT(~ (char) 0x00 < 0);
185 ASSERT(~ (unsigned char) 0x00 == (short) 0xffff); ASSERT(~ (unsigned char) 0x00 < 0);
186 c = 0x80; r16 = ~ c; ASSERT(r16 == (short) 0x007f); ASSERT(~ c > 0);
187 uc = 0x80; r16 = ~uc; ASSERT(r16 == (short) 0xff7f); ASSERT(~uc < 0);
188 ASSERT(~ (char) 0x80 == (short) 0x007f); ASSERT(~ (char) 0x80 > 0);
189 ASSERT(~ (unsigned char) 0x80 == (short) 0xff7f); ASSERT(~ (unsigned char) 0x80 < 0);
200 {attrL} signed char c;
201 {attrR} unsigned char uc;
204 uc = 0x80; /* +128 */
217 signed char {attrL} sc;
218 unsigned char {attrL} uc;
219 signed int {attrL} si;
220 unsigned int {attrL} ui;
221 signed long {attrL} sl;
222 unsigned long {attrL} ul;
238 ASSERT(-( 250 ) == -250);
242 ASSERT(-(-128 ) == 128);
250 unsigned char {attrL} uc;