3 #define branch(mask,_v1,_v2) \
6 unsigned b1 = _v1, b2 = _v2; \
7 asm volatile( " cr %[b1],%[b2]\n\t" \
8 " brc " #mask " ,1f\n\t" \
9 " mvi %[taken],0\n\t" \
11 "1: mvi %[taken],1\n\t" \
12 "0: bcr 0,0 /* nop */\n\t" \
13 : [taken] "=Q" (taken) \
14 : [b1] "d"(b1), [b2] "d"(b2) \
22 int wrong
, ok
, v1
, v2
;
24 printf("Test #1 op1 == op2\n");
29 if (branch(0, v1
, v2
)) ++wrong
; else ++ok
;
30 if (branch(1, v1
, v2
)) ++wrong
; else ++ok
;
31 if (branch(2, v1
, v2
)) ++wrong
; else ++ok
;
32 if (branch(3, v1
, v2
)) ++wrong
; else ++ok
;
33 if (branch(4, v1
, v2
)) ++wrong
; else ++ok
;
34 if (branch(5, v1
, v2
)) ++wrong
; else ++ok
;
35 if (branch(6, v1
, v2
)) ++wrong
; else ++ok
;
36 if (branch(7, v1
, v2
)) ++wrong
; else ++ok
;
37 if (branch(8, v1
, v2
)) ++ok
; else ++wrong
;
38 if (branch(9, v1
, v2
)) ++ok
; else ++wrong
;
39 if (branch(10, v1
, v2
)) ++ok
; else ++wrong
;
40 if (branch(11, v1
, v2
)) ++ok
; else ++wrong
;
41 if (branch(12, v1
, v2
)) ++ok
; else ++wrong
;
42 if (branch(13, v1
, v2
)) ++ok
; else ++wrong
;
43 if (branch(14, v1
, v2
)) ++ok
; else ++wrong
;
44 if (branch(15, v1
, v2
)) ++ok
; else ++wrong
;
46 if (wrong
!= 0 || ok
!= 16)
55 int wrong
, ok
, v1
, v2
;
57 printf("Test #2 op1 > op2\n");
62 if (branch(0, v1
, v2
)) ++wrong
; else ++ok
;
63 if (branch(1, v1
, v2
)) ++wrong
; else ++ok
;
64 if (branch(2, v1
, v2
)) ++ok
; else ++wrong
;
65 if (branch(3, v1
, v2
)) ++ok
; else ++wrong
;
66 if (branch(4, v1
, v2
)) ++wrong
; else ++ok
;
67 if (branch(5, v1
, v2
)) ++wrong
; else ++ok
;
68 if (branch(6, v1
, v2
)) ++ok
; else ++wrong
;
69 if (branch(7, v1
, v2
)) ++ok
; else ++wrong
;
70 if (branch(8, v1
, v2
)) ++wrong
; else ++ok
;
71 if (branch(9, v1
, v2
)) ++wrong
; else ++ok
;
72 if (branch(10, v1
, v2
)) ++ok
; else ++wrong
;
73 if (branch(11, v1
, v2
)) ++ok
; else ++wrong
;
74 if (branch(12, v1
, v2
)) ++wrong
; else ++ok
;
75 if (branch(13, v1
, v2
)) ++wrong
; else ++ok
;
76 if (branch(14, v1
, v2
)) ++ok
; else ++wrong
;
77 if (branch(15, v1
, v2
)) ++ok
; else ++wrong
;
79 if (wrong
!= 0 || ok
!= 16)
88 int wrong
, ok
, v1
, v2
;
90 printf("Test #3 op1 < op2\n");
95 if (branch(0, v1
, v2
)) ++wrong
; else ++ok
;
96 if (branch(1, v1
, v2
)) ++wrong
; else ++ok
;
97 if (branch(2, v1
, v2
)) ++wrong
; else ++ok
;
98 if (branch(3, v1
, v2
)) ++wrong
; else ++ok
;
99 if (branch(4, v1
, v2
)) ++ok
; else ++wrong
;
100 if (branch(5, v1
, v2
)) ++ok
; else ++wrong
;
101 if (branch(6, v1
, v2
)) ++ok
; else ++wrong
;
102 if (branch(7, v1
, v2
)) ++ok
; else ++wrong
;
103 if (branch(8, v1
, v2
)) ++wrong
; else ++ok
;
104 if (branch(9, v1
, v2
)) ++wrong
; else ++ok
;
105 if (branch(10, v1
, v2
)) ++wrong
; else ++ok
;
106 if (branch(11, v1
, v2
)) ++wrong
; else ++ok
;
107 if (branch(12, v1
, v2
)) ++ok
; else ++wrong
;
108 if (branch(13, v1
, v2
)) ++ok
; else ++wrong
;
109 if (branch(14, v1
, v2
)) ++ok
; else ++wrong
;
110 if (branch(15, v1
, v2
)) ++ok
; else ++wrong
;
112 if (wrong
!= 0 || ok
!= 16)