2 !!DESCRIPTION!! Optimized-shift signed ints right by a constant; and, assign to chars.
3 !!ORIGIN!! cc65 regression tests
4 !!LICENCE!! Public Domain
10 static unsigned char failures = 0;
11 static unsigned char n = 0;
13 /* This number must be read from a variable because
14 ** we want this program, not cc65, to do the shift.
16 static const signed int aint0 = 0xAAC0;
18 static signed char achar0, achar1;
20 static void check(void)
22 if ((unsigned char)achar0 != (unsigned char)achar1)
26 static void shift_right_0(void)
32 static void shift_right_1(void)
38 static void shift_right_2(void)
44 static void shift_right_3(void)
50 static void shift_right_4(void)
56 static void shift_right_5(void)
62 static void shift_right_6(void)
68 static void shift_right_7(void)
74 static void shift_right_8(void)
80 static void shift_right_9(void)
86 static void shift_right_10(void)
92 static void shift_right_11(void)
98 static void shift_right_12(void)
100 achar0 = aint0 >> 12;
104 static void shift_right_13(void)
106 achar0 = aint0 >> 13;
110 static void shift_right_14(void)
112 achar0 = aint0 >> 14;
116 static void shift_right_15(void)
118 achar0 = aint0 >> 15;
126 {0xC0, shift_right_0},
127 {0x60, shift_right_1},
128 {0xB0, shift_right_2},
129 {0x58, shift_right_3},
130 {0xAC, shift_right_4},
131 {0x56, shift_right_5},
132 {0xAB, shift_right_6},
133 {0x55, shift_right_7},
134 {0xAA, shift_right_8},
135 {0xD5, shift_right_9},
136 {0xEA, shift_right_10},
137 {0xF5, shift_right_11},
138 {0xFA, shift_right_12},
139 {0xFD, shift_right_13},
140 {0xFE, shift_right_14},
141 {0xFF, shift_right_15}
147 achar1 = tests[n].achar;
149 } while (++n < sizeof tests / sizeof tests[0]);
152 printf("rotate8: failures: %u (of %u).\n",
153 failures, sizeof tests / sizeof tests[0]);