1#include <stdio.h>
2
3#define branch(mask,icmm,_v1)                          \
4  ({                                                   \
5        unsigned char taken;                           \
6        unsigned b1 = _v1;                             \
7        asm volatile(	"	larl 1, 2f\n\t"        \
8			"	l 0, 0(1)\n\t"         \
9			"       icm 0," #icmm",%[b1]\n\t"     \
10                 	"	brc " #mask " ,1f\n\t" \
11                        "       mvi %[taken],0\n\t"    \
12			"	j   0f\n\t"            \
13			"1:	mvi %[taken],1\n\t"    \
14			"	j   0f\n\t"            \
15			"2:	.long 0xffffffff\n\t"  \
16			"0:	bcr 0,0 /* nop */\n\t" \
17             : [taken] "=Q" (taken)                    \
18             : [b1] "Q"(b1)                            \
19             : "cc", "0","1");                         \
20        taken;                                         \
21   })
22
23void
24icm_mask_0(void)
25{
26  int wrong, ok;
27  unsigned v1;
28
29  printf("Test #1  mask == 0, value == 0xFFFFFFFF  --> cc == 0\n");
30
31  v1 = 0xFFFFFFFF;
32  wrong = ok = 0;
33
34  if (branch(0,  0, v1)) ++wrong; else ++ok;
35  if (branch(1,  0, v1)) ++wrong; else ++ok;
36  if (branch(2,  0, v1)) ++wrong; else ++ok;
37  if (branch(3,  0, v1)) ++wrong; else ++ok;
38  if (branch(4,  0, v1)) ++wrong; else ++ok;
39  if (branch(5,  0, v1)) ++wrong; else ++ok;
40  if (branch(6,  0, v1)) ++wrong; else ++ok;
41  if (branch(7,  0, v1)) ++wrong; else ++ok;
42  if (branch(8,  0, v1)) ++ok; else ++wrong;
43  if (branch(9,  0, v1)) ++ok; else ++wrong;
44  if (branch(10, 0, v1)) ++ok; else ++wrong;
45  if (branch(11, 0, v1)) ++ok; else ++wrong;
46  if (branch(12, 0, v1)) ++ok; else ++wrong;
47  if (branch(13, 0, v1)) ++ok; else ++wrong;
48  if (branch(14, 0, v1)) ++ok; else ++wrong;
49  if (branch(15, 0, v1)) ++ok; else ++wrong;
50
51  if (wrong != 0 || ok != 16)
52    printf("FAILED\n");
53  else
54    printf("OK\n");
55}
56
57void
58icm_value_0(void)
59{
60  int wrong, ok;
61  unsigned v1;
62
63  printf("Test #2  mask == 0xF, value == 0  --> cc == 0\n");
64
65  v1 = 0;
66  wrong = ok = 0;
67
68  if (branch(0,  15, v1)) ++wrong; else ++ok;
69  if (branch(1,  15, v1)) ++wrong; else ++ok;
70  if (branch(2,  15, v1)) ++wrong; else ++ok;
71  if (branch(3,  15, v1)) ++wrong; else ++ok;
72  if (branch(4,  15, v1)) ++wrong; else ++ok;
73  if (branch(5,  15, v1)) ++wrong; else ++ok;
74  if (branch(6,  15, v1)) ++wrong; else ++ok;
75  if (branch(7,  15, v1)) ++wrong; else ++ok;
76  if (branch(8,  15, v1)) ++ok; else ++wrong;
77  if (branch(9,  15, v1)) ++ok; else ++wrong;
78  if (branch(10, 15, v1)) ++ok; else ++wrong;
79  if (branch(11, 15, v1)) ++ok; else ++wrong;
80  if (branch(12, 15, v1)) ++ok; else ++wrong;
81  if (branch(13, 15, v1)) ++ok; else ++wrong;
82  if (branch(14, 15, v1)) ++ok; else ++wrong;
83  if (branch(15, 15, v1)) ++ok; else ++wrong;
84
85  if (wrong != 0 || ok != 16)
86    printf("FAILED\n");
87  else
88    printf("OK\n");
89}
90
91/* loads one byte */
92void
93icm_one_byte_msb_set(void)
94{
95  int wrong, ok;
96  unsigned v1;
97
98  printf("Test #3  load one byte, msb set  --> cc == 1\n");
99
100  v1 = 0x80000000;
101  wrong = ok = 0;
102
103  if (branch(0,  8, v1)) ++wrong; else ++ok;
104  if (branch(1,  8, v1)) ++wrong; else ++ok;
105  if (branch(2,  8, v1)) ++wrong; else ++ok;
106  if (branch(3,  8, v1)) ++wrong; else ++ok;
107  if (branch(4,  8, v1)) ++ok; else ++wrong;
108  if (branch(5,  8, v1)) ++ok; else ++wrong;
109  if (branch(6,  8, v1)) ++ok; else ++wrong;
110  if (branch(7,  8, v1)) ++ok; else ++wrong;
111  if (branch(8,  8, v1)) ++wrong; else ++ok;
112  if (branch(9,  8, v1)) ++wrong; else ++ok;
113  if (branch(10, 8, v1)) ++wrong; else ++ok;
114  if (branch(11, 8, v1)) ++wrong; else ++ok;
115  if (branch(12, 8, v1)) ++ok; else ++wrong;
116  if (branch(13, 8, v1)) ++ok; else ++wrong;
117  if (branch(14, 8, v1)) ++ok; else ++wrong;
118  if (branch(15, 8, v1)) ++ok; else ++wrong;
119
120  if (branch(0,  4, v1)) ++wrong; else ++ok;
121  if (branch(1,  4, v1)) ++wrong; else ++ok;
122  if (branch(2,  4, v1)) ++wrong; else ++ok;
123  if (branch(3,  4, v1)) ++wrong; else ++ok;
124  if (branch(4,  4, v1)) ++ok; else ++wrong;
125  if (branch(5,  4, v1)) ++ok; else ++wrong;
126  if (branch(6,  4, v1)) ++ok; else ++wrong;
127  if (branch(7,  4, v1)) ++ok; else ++wrong;
128  if (branch(8,  4, v1)) ++wrong; else ++ok;
129  if (branch(9,  4, v1)) ++wrong; else ++ok;
130  if (branch(10, 4, v1)) ++wrong; else ++ok;
131  if (branch(11, 4, v1)) ++wrong; else ++ok;
132  if (branch(12, 4, v1)) ++ok; else ++wrong;
133  if (branch(13, 4, v1)) ++ok; else ++wrong;
134  if (branch(14, 4, v1)) ++ok; else ++wrong;
135  if (branch(15, 4, v1)) ++ok; else ++wrong;
136
137  if (branch(0,  2, v1)) ++wrong; else ++ok;
138  if (branch(1,  2, v1)) ++wrong; else ++ok;
139  if (branch(2,  2, v1)) ++wrong; else ++ok;
140  if (branch(3,  2, v1)) ++wrong; else ++ok;
141  if (branch(4,  2, v1)) ++ok; else ++wrong;
142  if (branch(5,  2, v1)) ++ok; else ++wrong;
143  if (branch(6,  2, v1)) ++ok; else ++wrong;
144  if (branch(7,  2, v1)) ++ok; else ++wrong;
145  if (branch(8,  2, v1)) ++wrong; else ++ok;
146  if (branch(9,  2, v1)) ++wrong; else ++ok;
147  if (branch(10, 2, v1)) ++wrong; else ++ok;
148  if (branch(11, 2, v1)) ++wrong; else ++ok;
149  if (branch(12, 2, v1)) ++ok; else ++wrong;
150  if (branch(13, 2, v1)) ++ok; else ++wrong;
151  if (branch(14, 2, v1)) ++ok; else ++wrong;
152  if (branch(15, 2, v1)) ++ok; else ++wrong;
153
154  if (branch(0,  1, v1)) ++wrong; else ++ok;
155  if (branch(1,  1, v1)) ++wrong; else ++ok;
156  if (branch(2,  1, v1)) ++wrong; else ++ok;
157  if (branch(3,  1, v1)) ++wrong; else ++ok;
158  if (branch(4,  1, v1)) ++ok; else ++wrong;
159  if (branch(5,  1, v1)) ++ok; else ++wrong;
160  if (branch(6,  1, v1)) ++ok; else ++wrong;
161  if (branch(7,  1, v1)) ++ok; else ++wrong;
162  if (branch(8,  1, v1)) ++wrong; else ++ok;
163  if (branch(9,  1, v1)) ++wrong; else ++ok;
164  if (branch(10, 1, v1)) ++wrong; else ++ok;
165  if (branch(11, 1, v1)) ++wrong; else ++ok;
166  if (branch(12, 1, v1)) ++ok; else ++wrong;
167  if (branch(13, 1, v1)) ++ok; else ++wrong;
168  if (branch(14, 1, v1)) ++ok; else ++wrong;
169  if (branch(15, 1, v1)) ++ok; else ++wrong;
170
171  if (wrong != 0 || ok != 64)
172    printf("FAILED\n");
173  else
174    printf("OK\n");
175}
176
177/* loads two bytes */
178void
179icm_two_bytes_msb_set(void)
180{
181  int wrong, ok;
182  unsigned v1;
183
184  printf("Test #4  load two bytes, msb set  --> cc == 1\n");
185
186  v1 = 0x80000000;
187  wrong = ok = 0;
188
189  if (branch(0,  12, v1)) ++wrong; else ++ok;
190  if (branch(1,  12, v1)) ++wrong; else ++ok;
191  if (branch(2,  12, v1)) ++wrong; else ++ok;
192  if (branch(3,  12, v1)) ++wrong; else ++ok;
193  if (branch(4,  12, v1)) ++ok; else ++wrong;
194  if (branch(5,  12, v1)) ++ok; else ++wrong;
195  if (branch(6,  12, v1)) ++ok; else ++wrong;
196  if (branch(7,  12, v1)) ++ok; else ++wrong;
197  if (branch(8,  12, v1)) ++wrong; else ++ok;
198  if (branch(9,  12, v1)) ++wrong; else ++ok;
199  if (branch(10, 12, v1)) ++wrong; else ++ok;
200  if (branch(11, 12, v1)) ++wrong; else ++ok;
201  if (branch(12, 12, v1)) ++ok; else ++wrong;
202  if (branch(13, 12, v1)) ++ok; else ++wrong;
203  if (branch(14, 12, v1)) ++ok; else ++wrong;
204  if (branch(15, 12, v1)) ++ok; else ++wrong;
205
206  if (branch(0,  10, v1)) ++wrong; else ++ok;
207  if (branch(1,  10, v1)) ++wrong; else ++ok;
208  if (branch(2,  10, v1)) ++wrong; else ++ok;
209  if (branch(3,  10, v1)) ++wrong; else ++ok;
210  if (branch(4,  10, v1)) ++ok; else ++wrong;
211  if (branch(5,  10, v1)) ++ok; else ++wrong;
212  if (branch(6,  10, v1)) ++ok; else ++wrong;
213  if (branch(7,  10, v1)) ++ok; else ++wrong;
214  if (branch(8,  10, v1)) ++wrong; else ++ok;
215  if (branch(9,  10, v1)) ++wrong; else ++ok;
216  if (branch(10, 10, v1)) ++wrong; else ++ok;
217  if (branch(11, 10, v1)) ++wrong; else ++ok;
218  if (branch(12, 10, v1)) ++ok; else ++wrong;
219  if (branch(13, 10, v1)) ++ok; else ++wrong;
220  if (branch(14, 10, v1)) ++ok; else ++wrong;
221  if (branch(15, 10, v1)) ++ok; else ++wrong;
222
223  if (branch(0,   9, v1)) ++wrong; else ++ok;
224  if (branch(1,   9, v1)) ++wrong; else ++ok;
225  if (branch(2,   9, v1)) ++wrong; else ++ok;
226  if (branch(3,   9, v1)) ++wrong; else ++ok;
227  if (branch(4,   9, v1)) ++ok; else ++wrong;
228  if (branch(5,   9, v1)) ++ok; else ++wrong;
229  if (branch(6,   9, v1)) ++ok; else ++wrong;
230  if (branch(7,   9, v1)) ++ok; else ++wrong;
231  if (branch(8,   9, v1)) ++wrong; else ++ok;
232  if (branch(9,   9, v1)) ++wrong; else ++ok;
233  if (branch(10,  9, v1)) ++wrong; else ++ok;
234  if (branch(11,  9, v1)) ++wrong; else ++ok;
235  if (branch(12,  9, v1)) ++ok; else ++wrong;
236  if (branch(13,  9, v1)) ++ok; else ++wrong;
237  if (branch(14,  9, v1)) ++ok; else ++wrong;
238  if (branch(15,  9, v1)) ++ok; else ++wrong;
239
240  if (branch(0,   6, v1)) ++wrong; else ++ok;
241  if (branch(1,   6, v1)) ++wrong; else ++ok;
242  if (branch(2,   6, v1)) ++wrong; else ++ok;
243  if (branch(3,   6, v1)) ++wrong; else ++ok;
244  if (branch(4,   6, v1)) ++ok; else ++wrong;
245  if (branch(5,   6, v1)) ++ok; else ++wrong;
246  if (branch(6,   6, v1)) ++ok; else ++wrong;
247  if (branch(7,   6, v1)) ++ok; else ++wrong;
248  if (branch(8,   6, v1)) ++wrong; else ++ok;
249  if (branch(9,   6, v1)) ++wrong; else ++ok;
250  if (branch(10,  6, v1)) ++wrong; else ++ok;
251  if (branch(11,  6, v1)) ++wrong; else ++ok;
252  if (branch(12,  6, v1)) ++ok; else ++wrong;
253  if (branch(13,  6, v1)) ++ok; else ++wrong;
254  if (branch(14,  6, v1)) ++ok; else ++wrong;
255  if (branch(15,  6, v1)) ++ok; else ++wrong;
256
257  if (branch(0,   5, v1)) ++wrong; else ++ok;
258  if (branch(1,   5, v1)) ++wrong; else ++ok;
259  if (branch(2,   5, v1)) ++wrong; else ++ok;
260  if (branch(3,   5, v1)) ++wrong; else ++ok;
261  if (branch(4,   5, v1)) ++ok; else ++wrong;
262  if (branch(5,   5, v1)) ++ok; else ++wrong;
263  if (branch(6,   5, v1)) ++ok; else ++wrong;
264  if (branch(7,   5, v1)) ++ok; else ++wrong;
265  if (branch(8,   5, v1)) ++wrong; else ++ok;
266  if (branch(9,   5, v1)) ++wrong; else ++ok;
267  if (branch(10,  5, v1)) ++wrong; else ++ok;
268  if (branch(11,  5, v1)) ++wrong; else ++ok;
269  if (branch(12,  5, v1)) ++ok; else ++wrong;
270  if (branch(13,  5, v1)) ++ok; else ++wrong;
271  if (branch(14,  5, v1)) ++ok; else ++wrong;
272  if (branch(15,  5, v1)) ++ok; else ++wrong;
273
274  if (branch(0,   3, v1)) ++wrong; else ++ok;
275  if (branch(1,   3, v1)) ++wrong; else ++ok;
276  if (branch(2,   3, v1)) ++wrong; else ++ok;
277  if (branch(3,   3, v1)) ++wrong; else ++ok;
278  if (branch(4,   3, v1)) ++ok; else ++wrong;
279  if (branch(5,   3, v1)) ++ok; else ++wrong;
280  if (branch(6,   3, v1)) ++ok; else ++wrong;
281  if (branch(7,   3, v1)) ++ok; else ++wrong;
282  if (branch(8,   3, v1)) ++wrong; else ++ok;
283  if (branch(9,   3, v1)) ++wrong; else ++ok;
284  if (branch(10,  3, v1)) ++wrong; else ++ok;
285  if (branch(11,  3, v1)) ++wrong; else ++ok;
286  if (branch(12,  3, v1)) ++ok; else ++wrong;
287  if (branch(13,  3, v1)) ++ok; else ++wrong;
288  if (branch(14,  3, v1)) ++ok; else ++wrong;
289  if (branch(15,  3, v1)) ++ok; else ++wrong;
290
291  if (wrong != 0 || ok != 96)
292    printf("FAILED\n");
293  else
294    printf("OK\n");
295}
296
297/* loads three bytes */
298void
299icm_three_bytes_msb_set(void)
300{
301  int wrong, ok;
302  unsigned v1;
303
304  printf("Test #5  load three bytes, msb set  --> cc == 1\n");
305
306  v1 = 0x80000000;
307  wrong = ok = 0;
308
309  if (branch(0,  14, v1)) ++wrong; else ++ok;
310  if (branch(1,  14, v1)) ++wrong; else ++ok;
311  if (branch(2,  14, v1)) ++wrong; else ++ok;
312  if (branch(3,  14, v1)) ++wrong; else ++ok;
313  if (branch(4,  14, v1)) ++ok; else ++wrong;
314  if (branch(5,  14, v1)) ++ok; else ++wrong;
315  if (branch(6,  14, v1)) ++ok; else ++wrong;
316  if (branch(7,  14, v1)) ++ok; else ++wrong;
317  if (branch(8,  14, v1)) ++wrong; else ++ok;
318  if (branch(9,  14, v1)) ++wrong; else ++ok;
319  if (branch(10, 14, v1)) ++wrong; else ++ok;
320  if (branch(11, 14, v1)) ++wrong; else ++ok;
321  if (branch(12, 14, v1)) ++ok; else ++wrong;
322  if (branch(13, 14, v1)) ++ok; else ++wrong;
323  if (branch(14, 14, v1)) ++ok; else ++wrong;
324  if (branch(15, 14, v1)) ++ok; else ++wrong;
325
326  if (branch(0,  13, v1)) ++wrong; else ++ok;
327  if (branch(1,  13, v1)) ++wrong; else ++ok;
328  if (branch(2,  13, v1)) ++wrong; else ++ok;
329  if (branch(3,  13, v1)) ++wrong; else ++ok;
330  if (branch(4,  13, v1)) ++ok; else ++wrong;
331  if (branch(5,  13, v1)) ++ok; else ++wrong;
332  if (branch(6,  13, v1)) ++ok; else ++wrong;
333  if (branch(7,  13, v1)) ++ok; else ++wrong;
334  if (branch(8,  13, v1)) ++wrong; else ++ok;
335  if (branch(9,  13, v1)) ++wrong; else ++ok;
336  if (branch(10, 13, v1)) ++wrong; else ++ok;
337  if (branch(11, 13, v1)) ++wrong; else ++ok;
338  if (branch(12, 13, v1)) ++ok; else ++wrong;
339  if (branch(13, 13, v1)) ++ok; else ++wrong;
340  if (branch(14, 13, v1)) ++ok; else ++wrong;
341  if (branch(15, 13, v1)) ++ok; else ++wrong;
342
343  if (branch(0,  11, v1)) ++wrong; else ++ok;
344  if (branch(1,  11, v1)) ++wrong; else ++ok;
345  if (branch(2,  11, v1)) ++wrong; else ++ok;
346  if (branch(3,  11, v1)) ++wrong; else ++ok;
347  if (branch(4,  11, v1)) ++ok; else ++wrong;
348  if (branch(5,  11, v1)) ++ok; else ++wrong;
349  if (branch(6,  11, v1)) ++ok; else ++wrong;
350  if (branch(7,  11, v1)) ++ok; else ++wrong;
351  if (branch(8,  11, v1)) ++wrong; else ++ok;
352  if (branch(9,  11, v1)) ++wrong; else ++ok;
353  if (branch(10, 11, v1)) ++wrong; else ++ok;
354  if (branch(11, 11, v1)) ++wrong; else ++ok;
355  if (branch(12, 11, v1)) ++ok; else ++wrong;
356  if (branch(13, 11, v1)) ++ok; else ++wrong;
357  if (branch(14, 11, v1)) ++ok; else ++wrong;
358  if (branch(15, 11, v1)) ++ok; else ++wrong;
359
360  if (branch(0,   7, v1)) ++wrong; else ++ok;
361  if (branch(1,   7, v1)) ++wrong; else ++ok;
362  if (branch(2,   7, v1)) ++wrong; else ++ok;
363  if (branch(3,   7, v1)) ++wrong; else ++ok;
364  if (branch(4,   7, v1)) ++ok; else ++wrong;
365  if (branch(5,   7, v1)) ++ok; else ++wrong;
366  if (branch(6,   7, v1)) ++ok; else ++wrong;
367  if (branch(7,   7, v1)) ++ok; else ++wrong;
368  if (branch(8,   7, v1)) ++wrong; else ++ok;
369  if (branch(9,   7, v1)) ++wrong; else ++ok;
370  if (branch(10,  7, v1)) ++wrong; else ++ok;
371  if (branch(11,  7, v1)) ++wrong; else ++ok;
372  if (branch(12,  7, v1)) ++ok; else ++wrong;
373  if (branch(13,  7, v1)) ++ok; else ++wrong;
374  if (branch(14,  7, v1)) ++ok; else ++wrong;
375  if (branch(15,  7, v1)) ++ok; else ++wrong;
376
377  if (wrong != 0 || ok != 64)
378    printf("FAILED\n");
379  else
380    printf("OK\n");
381}
382
383/* loads four bytes */
384void
385icm_four_bytes_msb_set(void)
386{
387  int wrong, ok;
388  unsigned v1;
389
390  printf("Test #6  load four bytes, msb set  --> cc == 1\n");
391
392  v1 = 0x80000000;
393  wrong = ok = 0;
394
395  if (branch(0,  15, v1)) ++wrong; else ++ok;
396  if (branch(1,  15, v1)) ++wrong; else ++ok;
397  if (branch(2,  15, v1)) ++wrong; else ++ok;
398  if (branch(3,  15, v1)) ++wrong; else ++ok;
399  if (branch(4,  15, v1)) ++ok; else ++wrong;
400  if (branch(5,  15, v1)) ++ok; else ++wrong;
401  if (branch(6,  15, v1)) ++ok; else ++wrong;
402  if (branch(7,  15, v1)) ++ok; else ++wrong;
403  if (branch(8,  15, v1)) ++wrong; else ++ok;
404  if (branch(9,  15, v1)) ++wrong; else ++ok;
405  if (branch(10, 15, v1)) ++wrong; else ++ok;
406  if (branch(11, 15, v1)) ++wrong; else ++ok;
407  if (branch(12, 15, v1)) ++ok; else ++wrong;
408  if (branch(13, 15, v1)) ++ok; else ++wrong;
409  if (branch(14, 15, v1)) ++ok; else ++wrong;
410  if (branch(15, 15, v1)) ++ok; else ++wrong;
411
412  if (wrong != 0 || ok != 16)
413    printf("FAILED\n");
414  else
415    printf("OK\n");
416}
417
418/* loads one byte */
419void
420icm_one_byte_msb_not_set(void)
421{
422  int wrong, ok, v1;
423
424  printf("Test #7  load one byte, msb not set  --> cc == 2\n");
425
426  v1 = 0x7FFFFFFF;
427  wrong = ok = 0;
428
429  if (branch(0,  8, v1)) ++wrong; else ++ok;
430  if (branch(1,  8, v1)) ++wrong; else ++ok;
431  if (branch(2,  8, v1)) ++ok; else ++wrong;
432  if (branch(3,  8, v1)) ++ok; else ++wrong;
433  if (branch(4,  8, v1)) ++wrong; else ++ok;
434  if (branch(5,  8, v1)) ++wrong; else ++ok;
435  if (branch(6,  8, v1)) ++ok; else ++wrong;
436  if (branch(7,  8, v1)) ++ok; else ++wrong;
437  if (branch(8,  8, v1)) ++wrong; else ++ok;
438  if (branch(9,  8, v1)) ++wrong; else ++ok;
439  if (branch(10, 8, v1)) ++ok; else ++wrong;
440  if (branch(11, 8, v1)) ++ok; else ++wrong;
441  if (branch(12, 8, v1)) ++wrong; else ++ok;
442  if (branch(13, 8, v1)) ++wrong; else ++ok;
443  if (branch(14, 8, v1)) ++ok; else ++wrong;
444  if (branch(15, 8, v1)) ++ok; else ++wrong;
445
446  if (branch(0,  4, v1)) ++wrong; else ++ok;
447  if (branch(1,  4, v1)) ++wrong; else ++ok;
448  if (branch(2,  4, v1)) ++ok; else ++wrong;
449  if (branch(3,  4, v1)) ++ok; else ++wrong;
450  if (branch(4,  4, v1)) ++wrong; else ++ok;
451  if (branch(5,  4, v1)) ++wrong; else ++ok;
452  if (branch(6,  4, v1)) ++ok; else ++wrong;
453  if (branch(7,  4, v1)) ++ok; else ++wrong;
454  if (branch(8,  4, v1)) ++wrong; else ++ok;
455  if (branch(9,  4, v1)) ++wrong; else ++ok;
456  if (branch(10, 4, v1)) ++ok; else ++wrong;
457  if (branch(11, 4, v1)) ++ok; else ++wrong;
458  if (branch(12, 4, v1)) ++wrong; else ++ok;
459  if (branch(13, 4, v1)) ++wrong; else ++ok;
460  if (branch(14, 4, v1)) ++ok; else ++wrong;
461  if (branch(15, 4, v1)) ++ok; else ++wrong;
462
463  if (branch(0,  2, v1)) ++wrong; else ++ok;
464  if (branch(1,  2, v1)) ++wrong; else ++ok;
465  if (branch(2,  2, v1)) ++ok; else ++wrong;
466  if (branch(3,  2, v1)) ++ok; else ++wrong;
467  if (branch(4,  2, v1)) ++wrong; else ++ok;
468  if (branch(5,  2, v1)) ++wrong; else ++ok;
469  if (branch(6,  2, v1)) ++ok; else ++wrong;
470  if (branch(7,  2, v1)) ++ok; else ++wrong;
471  if (branch(8,  2, v1)) ++wrong; else ++ok;
472  if (branch(9,  2, v1)) ++wrong; else ++ok;
473  if (branch(10, 2, v1)) ++ok; else ++wrong;
474  if (branch(11, 2, v1)) ++ok; else ++wrong;
475  if (branch(12, 2, v1)) ++wrong; else ++ok;
476  if (branch(13, 2, v1)) ++wrong; else ++ok;
477  if (branch(14, 2, v1)) ++ok; else ++wrong;
478  if (branch(15, 2, v1)) ++ok; else ++wrong;
479
480  if (branch(0,  1, v1)) ++wrong; else ++ok;
481  if (branch(1,  1, v1)) ++wrong; else ++ok;
482  if (branch(2,  1, v1)) ++ok; else ++wrong;
483  if (branch(3,  1, v1)) ++ok; else ++wrong;
484  if (branch(4,  1, v1)) ++wrong; else ++ok;
485  if (branch(5,  1, v1)) ++wrong; else ++ok;
486  if (branch(6,  1, v1)) ++ok; else ++wrong;
487  if (branch(7,  1, v1)) ++ok; else ++wrong;
488  if (branch(8,  1, v1)) ++wrong; else ++ok;
489  if (branch(9,  1, v1)) ++wrong; else ++ok;
490  if (branch(10, 1, v1)) ++ok; else ++wrong;
491  if (branch(11, 1, v1)) ++ok; else ++wrong;
492  if (branch(12, 1, v1)) ++wrong; else ++ok;
493  if (branch(13, 1, v1)) ++wrong; else ++ok;
494  if (branch(14, 1, v1)) ++ok; else ++wrong;
495  if (branch(15, 1, v1)) ++ok; else ++wrong;
496
497  if (wrong != 0 || ok != 64)
498    printf("FAILED\n");
499  else
500    printf("OK\n");
501}
502
503/* loads two bytes */
504void
505icm_two_bytes_msb_not_set(void)
506{
507  int wrong, ok;
508  unsigned v1;
509
510  printf("Test #8  load two bytes, msb not set  --> cc == 2\n");
511
512  v1 = 0x7FFFFFFF;
513  wrong = ok = 0;
514
515  if (branch(0,  12, v1)) ++wrong; else ++ok;
516  if (branch(1,  12, v1)) ++wrong; else ++ok;
517  if (branch(2,  12, v1)) ++ok; else ++wrong;
518  if (branch(3,  12, v1)) ++ok; else ++wrong;
519  if (branch(4,  12, v1)) ++wrong; else ++ok;
520  if (branch(5,  12, v1)) ++wrong; else ++ok;
521  if (branch(6,  12, v1)) ++ok; else ++wrong;
522  if (branch(7,  12, v1)) ++ok; else ++wrong;
523  if (branch(8,  12, v1)) ++wrong; else ++ok;
524  if (branch(9,  12, v1)) ++wrong; else ++ok;
525  if (branch(10, 12, v1)) ++ok; else ++wrong;
526  if (branch(11, 12, v1)) ++ok; else ++wrong;
527  if (branch(12, 12, v1)) ++wrong; else ++ok;
528  if (branch(13, 12, v1)) ++wrong; else ++ok;
529  if (branch(14, 12, v1)) ++ok; else ++wrong;
530  if (branch(15, 12, v1)) ++ok; else ++wrong;
531
532  if (branch(0,  10, v1)) ++wrong; else ++ok;
533  if (branch(1,  10, v1)) ++wrong; else ++ok;
534  if (branch(2,  10, v1)) ++ok; else ++wrong;
535  if (branch(3,  10, v1)) ++ok; else ++wrong;
536  if (branch(4,  10, v1)) ++wrong; else ++ok;
537  if (branch(5,  10, v1)) ++wrong; else ++ok;
538  if (branch(6,  10, v1)) ++ok; else ++wrong;
539  if (branch(7,  10, v1)) ++ok; else ++wrong;
540  if (branch(8,  10, v1)) ++wrong; else ++ok;
541  if (branch(9,  10, v1)) ++wrong; else ++ok;
542  if (branch(10, 10, v1)) ++ok; else ++wrong;
543  if (branch(11, 10, v1)) ++ok; else ++wrong;
544  if (branch(12, 10, v1)) ++wrong; else ++ok;
545  if (branch(13, 10, v1)) ++wrong; else ++ok;
546  if (branch(14, 10, v1)) ++ok; else ++wrong;
547  if (branch(15, 10, v1)) ++ok; else ++wrong;
548
549  if (branch(0,   9, v1)) ++wrong; else ++ok;
550  if (branch(1,   9, v1)) ++wrong; else ++ok;
551  if (branch(2,   9, v1)) ++ok; else ++wrong;
552  if (branch(3,   9, v1)) ++ok; else ++wrong;
553  if (branch(4,   9, v1)) ++wrong; else ++ok;
554  if (branch(5,   9, v1)) ++wrong; else ++ok;
555  if (branch(6,   9, v1)) ++ok; else ++wrong;
556  if (branch(7,   9, v1)) ++ok; else ++wrong;
557  if (branch(8,   9, v1)) ++wrong; else ++ok;
558  if (branch(9,   9, v1)) ++wrong; else ++ok;
559  if (branch(10,  9, v1)) ++ok; else ++wrong;
560  if (branch(11,  9, v1)) ++ok; else ++wrong;
561  if (branch(12,  9, v1)) ++wrong; else ++ok;
562  if (branch(13,  9, v1)) ++wrong; else ++ok;
563  if (branch(14,  9, v1)) ++ok; else ++wrong;
564  if (branch(15,  9, v1)) ++ok; else ++wrong;
565
566  if (branch(0,   6, v1)) ++wrong; else ++ok;
567  if (branch(1,   6, v1)) ++wrong; else ++ok;
568  if (branch(2,   6, v1)) ++ok; else ++wrong;
569  if (branch(3,   6, v1)) ++ok; else ++wrong;
570  if (branch(4,   6, v1)) ++wrong; else ++ok;
571  if (branch(5,   6, v1)) ++wrong; else ++ok;
572  if (branch(6,   6, v1)) ++ok; else ++wrong;
573  if (branch(7,   6, v1)) ++ok; else ++wrong;
574  if (branch(8,   6, v1)) ++wrong; else ++ok;
575  if (branch(9,   6, v1)) ++wrong; else ++ok;
576  if (branch(10,  6, v1)) ++ok; else ++wrong;
577  if (branch(11,  6, v1)) ++ok; else ++wrong;
578  if (branch(12,  6, v1)) ++wrong; else ++ok;
579  if (branch(13,  6, v1)) ++wrong; else ++ok;
580  if (branch(14,  6, v1)) ++ok; else ++wrong;
581  if (branch(15,  6, v1)) ++ok; else ++wrong;
582
583  if (branch(0,   5, v1)) ++wrong; else ++ok;
584  if (branch(1,   5, v1)) ++wrong; else ++ok;
585  if (branch(2,   5, v1)) ++ok; else ++wrong;
586  if (branch(3,   5, v1)) ++ok; else ++wrong;
587  if (branch(4,   5, v1)) ++wrong; else ++ok;
588  if (branch(5,   5, v1)) ++wrong; else ++ok;
589  if (branch(6,   5, v1)) ++ok; else ++wrong;
590  if (branch(7,   5, v1)) ++ok; else ++wrong;
591  if (branch(8,   5, v1)) ++wrong; else ++ok;
592  if (branch(9,   5, v1)) ++wrong; else ++ok;
593  if (branch(10,  5, v1)) ++ok; else ++wrong;
594  if (branch(11,  5, v1)) ++ok; else ++wrong;
595  if (branch(12,  5, v1)) ++wrong; else ++ok;
596  if (branch(13,  5, v1)) ++wrong; else ++ok;
597  if (branch(14,  5, v1)) ++ok; else ++wrong;
598  if (branch(15,  5, v1)) ++ok; else ++wrong;
599
600  if (branch(0,   3, v1)) ++wrong; else ++ok;
601  if (branch(1,   3, v1)) ++wrong; else ++ok;
602  if (branch(2,   3, v1)) ++ok; else ++wrong;
603  if (branch(3,   3, v1)) ++ok; else ++wrong;
604  if (branch(4,   3, v1)) ++wrong; else ++ok;
605  if (branch(5,   3, v1)) ++wrong; else ++ok;
606  if (branch(6,   3, v1)) ++ok; else ++wrong;
607  if (branch(7,   3, v1)) ++ok; else ++wrong;
608  if (branch(8,   3, v1)) ++wrong; else ++ok;
609  if (branch(9,   3, v1)) ++wrong; else ++ok;
610  if (branch(10,  3, v1)) ++ok; else ++wrong;
611  if (branch(11,  3, v1)) ++ok; else ++wrong;
612  if (branch(12,  3, v1)) ++wrong; else ++ok;
613  if (branch(13,  3, v1)) ++wrong; else ++ok;
614  if (branch(14,  3, v1)) ++ok; else ++wrong;
615  if (branch(15,  3, v1)) ++ok; else ++wrong;
616
617  if (wrong != 0 || ok != 96)
618    printf("FAILED\n");
619  else
620    printf("OK\n");
621}
622
623
624/* loads three bytes */
625void
626icm_three_bytes_msb_not_set(void)
627{
628  int wrong, ok;
629  unsigned v1;
630
631  printf("Test #9  load three bytes, msb not set  --> cc == 2\n");
632
633  v1 = 0x7FFFFFFF;
634  wrong = ok = 0;
635
636  if (branch(0,  14, v1)) ++wrong; else ++ok;
637  if (branch(1,  14, v1)) ++wrong; else ++ok;
638  if (branch(2,  14, v1)) ++ok; else ++wrong;
639  if (branch(3,  14, v1)) ++ok; else ++wrong;
640  if (branch(4,  14, v1)) ++wrong; else ++ok;
641  if (branch(5,  14, v1)) ++wrong; else ++ok;
642  if (branch(6,  14, v1)) ++ok; else ++wrong;
643  if (branch(7,  14, v1)) ++ok; else ++wrong;
644  if (branch(8,  14, v1)) ++wrong; else ++ok;
645  if (branch(9,  14, v1)) ++wrong; else ++ok;
646  if (branch(10, 14, v1)) ++ok; else ++wrong;
647  if (branch(11, 14, v1)) ++ok; else ++wrong;
648  if (branch(12, 14, v1)) ++wrong; else ++ok;
649  if (branch(13, 14, v1)) ++wrong; else ++ok;
650  if (branch(14, 14, v1)) ++ok; else ++wrong;
651  if (branch(15, 14, v1)) ++ok; else ++wrong;
652
653  if (branch(0,  13, v1)) ++wrong; else ++ok;
654  if (branch(1,  13, v1)) ++wrong; else ++ok;
655  if (branch(2,  13, v1)) ++ok; else ++wrong;
656  if (branch(3,  13, v1)) ++ok; else ++wrong;
657  if (branch(4,  13, v1)) ++wrong; else ++ok;
658  if (branch(5,  13, v1)) ++wrong; else ++ok;
659  if (branch(6,  13, v1)) ++ok; else ++wrong;
660  if (branch(7,  13, v1)) ++ok; else ++wrong;
661  if (branch(8,  13, v1)) ++wrong; else ++ok;
662  if (branch(9,  13, v1)) ++wrong; else ++ok;
663  if (branch(10, 13, v1)) ++ok; else ++wrong;
664  if (branch(11, 13, v1)) ++ok; else ++wrong;
665  if (branch(12, 13, v1)) ++wrong; else ++ok;
666  if (branch(13, 13, v1)) ++wrong; else ++ok;
667  if (branch(14, 13, v1)) ++ok; else ++wrong;
668  if (branch(15, 13, v1)) ++ok; else ++wrong;
669
670  if (branch(0,  11, v1)) ++wrong; else ++ok;
671  if (branch(1,  11, v1)) ++wrong; else ++ok;
672  if (branch(2,  11, v1)) ++ok; else ++wrong;
673  if (branch(3,  11, v1)) ++ok; else ++wrong;
674  if (branch(4,  11, v1)) ++wrong; else ++ok;
675  if (branch(5,  11, v1)) ++wrong; else ++ok;
676  if (branch(6,  11, v1)) ++ok; else ++wrong;
677  if (branch(7,  11, v1)) ++ok; else ++wrong;
678  if (branch(8,  11, v1)) ++wrong; else ++ok;
679  if (branch(9,  11, v1)) ++wrong; else ++ok;
680  if (branch(10, 11, v1)) ++ok; else ++wrong;
681  if (branch(11, 11, v1)) ++ok; else ++wrong;
682  if (branch(12, 11, v1)) ++wrong; else ++ok;
683  if (branch(13, 11, v1)) ++wrong; else ++ok;
684  if (branch(14, 11, v1)) ++ok; else ++wrong;
685  if (branch(15, 11, v1)) ++ok; else ++wrong;
686
687  if (branch(0,   7, v1)) ++wrong; else ++ok;
688  if (branch(1,   7, v1)) ++wrong; else ++ok;
689  if (branch(2,   7, v1)) ++ok; else ++wrong;
690  if (branch(3,   7, v1)) ++ok; else ++wrong;
691  if (branch(4,   7, v1)) ++wrong; else ++ok;
692  if (branch(5,   7, v1)) ++wrong; else ++ok;
693  if (branch(6,   7, v1)) ++ok; else ++wrong;
694  if (branch(7,   7, v1)) ++ok; else ++wrong;
695  if (branch(8,   7, v1)) ++wrong; else ++ok;
696  if (branch(9,   7, v1)) ++wrong; else ++ok;
697  if (branch(10,  7, v1)) ++ok; else ++wrong;
698  if (branch(11,  7, v1)) ++ok; else ++wrong;
699  if (branch(12,  7, v1)) ++wrong; else ++ok;
700  if (branch(13,  7, v1)) ++wrong; else ++ok;
701  if (branch(14,  7, v1)) ++ok; else ++wrong;
702  if (branch(15,  7, v1)) ++ok; else ++wrong;
703
704  if (wrong != 0 || ok != 64)
705    printf("FAILED\n");
706  else
707    printf("OK\n");
708}
709
710/* loads four bytes */
711void
712icm_four_bytes_msb_not_set(void)
713{
714  int wrong, ok;
715  unsigned v1;
716
717  printf("Test #10  load four bytes, msb not set  --> cc == 2\n");
718
719  v1 = 0x7FFFFFFF;
720  wrong = ok = 0;
721
722  if (branch(0,  15, v1)) ++wrong; else ++ok;
723  if (branch(1,  15, v1)) ++wrong; else ++ok;
724  if (branch(2,  15, v1)) ++ok; else ++wrong;
725  if (branch(3,  15, v1)) ++ok; else ++wrong;
726  if (branch(4,  15, v1)) ++wrong; else ++ok;
727  if (branch(5,  15, v1)) ++wrong; else ++ok;
728  if (branch(6,  15, v1)) ++ok; else ++wrong;
729  if (branch(7,  15, v1)) ++ok; else ++wrong;
730  if (branch(8,  15, v1)) ++wrong; else ++ok;
731  if (branch(9,  15, v1)) ++wrong; else ++ok;
732  if (branch(10, 15, v1)) ++ok; else ++wrong;
733  if (branch(11, 15, v1)) ++ok; else ++wrong;
734  if (branch(12, 15, v1)) ++wrong; else ++ok;
735  if (branch(13, 15, v1)) ++wrong; else ++ok;
736  if (branch(14, 15, v1)) ++ok; else ++wrong;
737  if (branch(15, 15, v1)) ++ok; else ++wrong;
738
739  if (wrong != 0 || ok != 16)
740    printf("FAILED\n");
741  else
742    printf("OK\n");
743}
744
745int main()
746{
747  icm_mask_0();
748  icm_value_0();
749
750  icm_one_byte_msb_set();
751  icm_two_bytes_msb_set();
752  icm_three_bytes_msb_set();
753  icm_four_bytes_msb_set();
754
755  icm_one_byte_msb_not_set();
756  icm_two_bytes_msb_not_set();
757  icm_three_bytes_msb_not_set();
758  icm_four_bytes_msb_not_set();
759
760  return 0;
761}
762