1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <stdio.h>
3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned long long int ULong;
5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownULong data;
7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownULong xtra;
8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownULong amt;
9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownULong flags_in;
10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownULong result;
11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownULong flags_out;
12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define AMD64G_CC_SHIFT_O   11
14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define AMD64G_CC_SHIFT_S   7
15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define AMD64G_CC_SHIFT_Z   6
16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define AMD64G_CC_SHIFT_A   4
17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define AMD64G_CC_SHIFT_C   0
18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define AMD64G_CC_SHIFT_P   2
19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define AMD64G_CC_MASK_O    (1 << AMD64G_CC_SHIFT_O)
21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define AMD64G_CC_MASK_S    (1 << AMD64G_CC_SHIFT_S)
22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define AMD64G_CC_MASK_Z    (1 << AMD64G_CC_SHIFT_Z)
23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define AMD64G_CC_MASK_A    (1 << AMD64G_CC_SHIFT_A)
24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define AMD64G_CC_MASK_C    (1 << AMD64G_CC_SHIFT_C)
25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define AMD64G_CC_MASK_P    (1 << AMD64G_CC_SHIFT_P)
26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define MASK_OSZACP  \
28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   (AMD64G_CC_MASK_O | AMD64G_CC_MASK_S | AMD64G_CC_MASK_Z \
29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    | AMD64G_CC_MASK_A | AMD64G_CC_MASK_C | AMD64G_CC_MASK_P)
30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void shld64 ( void );
32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownasm("\n"
33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"shld64:\n"
34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpushq %rsi\n"
35ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpushq %r11\n"
36ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpushq %rcx\n"
37ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tmovq data, %rsi\n"
38ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tmovq xtra, %r11\n"
39ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tmovq amt, %rcx\n"
40ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpushq flags_in\n"
41ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpopfq\n"
42ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tshldq %cl, %r11, %rsi\n"
43ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tmovq %rsi, result\n"
44ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpushfq\n"
45ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpopq flags_out\n"
46ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpopq %rcx\n"
47ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpopq %r11\n"
48ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpopq %rsi\n"
49ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tret\n"
50ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown);
51ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
52ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void shld32 ( void );
53ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownasm("\n"
54ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"shld32:\n"
55ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpushq %rsi\n"
56ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpushq %r11\n"
57ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpushq %rcx\n"
58ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tmovq data, %rsi\n"
59ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tmovq xtra, %r11\n"
60ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tmovq amt, %rcx\n"
61ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpushq flags_in\n"
62ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpopfq\n"
63ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tshldl %cl, %r11d, %esi\n"
64ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tmovq %rsi, result\n"
65ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpushfq\n"
66ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpopq flags_out\n"
67ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpopq %rcx\n"
68ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpopq %r11\n"
69ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpopq %rsi\n"
70ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tret\n"
71ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown);
72ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
73ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void shld16 ( void );
74ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownasm("\n"
75ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"shld16:\n"
76ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpushq %rsi\n"
77ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpushq %r11\n"
78ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpushq %rcx\n"
79ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tmovq data, %rsi\n"
80ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tmovq xtra, %r11\n"
81ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tmovq amt, %rcx\n"
82ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpushq flags_in\n"
83ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpopfq\n"
84ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tshldw %cl, %r11w, %si\n"
85ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tmovq %rsi, result\n"
86ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpushfq\n"
87ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpopq flags_out\n"
88ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpopq %rcx\n"
89ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpopq %r11\n"
90ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpopq %rsi\n"
91ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tret\n"
92ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown);
93ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
94ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
95ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void shrd64 ( void );
96ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownasm("\n"
97ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"shrd64:\n"
98ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpushq %rsi\n"
99ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpushq %r11\n"
100ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpushq %rcx\n"
101ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tmovq data, %rsi\n"
102ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tmovq xtra, %r11\n"
103ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tmovq amt, %rcx\n"
104ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpushq flags_in\n"
105ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpopfq\n"
106ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tshrdq %cl, %r11, %rsi\n"
107ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tmovq %rsi, result\n"
108ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpushfq\n"
109ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpopq flags_out\n"
110ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpopq %rcx\n"
111ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpopq %r11\n"
112ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpopq %rsi\n"
113ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tret\n"
114ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown);
115ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
116ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void shrd32 ( void );
117ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownasm("\n"
118ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"shrd32:\n"
119ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpushq %rsi\n"
120ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpushq %r11\n"
121ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpushq %rcx\n"
122ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tmovq data, %rsi\n"
123ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tmovq xtra, %r11\n"
124ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tmovq amt, %rcx\n"
125ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpushq flags_in\n"
126ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpopfq\n"
127ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tshrdl %cl, %r11d, %esi\n"
128ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tmovq %rsi, result\n"
129ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpushfq\n"
130ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpopq flags_out\n"
131ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpopq %rcx\n"
132ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpopq %r11\n"
133ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpopq %rsi\n"
134ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tret\n"
135ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown);
136ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
137ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void shrd16 ( void );
138ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownasm("\n"
139ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"shrd16:\n"
140ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpushq %rsi\n"
141ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpushq %r11\n"
142ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpushq %rcx\n"
143ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tmovq data, %rsi\n"
144ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tmovq xtra, %r11\n"
145ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tmovq amt, %rcx\n"
146ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpushq flags_in\n"
147ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpopfq\n"
148ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tshrdw %cl, %r11w, %si\n"
149ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tmovq %rsi, result\n"
150ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpushfq\n"
151ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpopq flags_out\n"
152ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpopq %rcx\n"
153ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpopq %r11\n"
154ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpopq %rsi\n"
155ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tret\n"
156ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown);
157ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
158ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
159ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint main ( void )
160ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
161ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int i;
162ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  ULong mask;
163ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
164ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  printf("\nleft 64\n");
165ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  for (i = 0; i < 260; i++) {
166ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    mask = MASK_OSZACP;
167ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    if (i > 1) mask &= ~AMD64G_CC_MASK_O;
168ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    if (i > 0) mask &= ~AMD64G_CC_MASK_A;
169ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    data = 0x1122334455667788ULL;
170ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    xtra = 0x3141592727182818ULL;
171ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    flags_in = 0ULL;
172ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    amt = (ULong)i;
173ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    shld64();
174ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    printf("%3d 0x%016llx 0x%llx\n", i, result, flags_out & mask);
175ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  }
176ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
177ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  printf("\nleft 32\n");
178ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  for (i = 0; i < 260; i++) {
179ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    mask = MASK_OSZACP;
180ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    if (i > 1) mask &= ~AMD64G_CC_MASK_O;
181ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    if (i > 0) mask &= ~AMD64G_CC_MASK_A;
182ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    data = 0x1122334455667788ULL;
183ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    xtra = 0x3141592727182818ULL;
184ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    flags_in = 0ULL;
185ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    amt = (ULong)i;
186ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    shld32();
187ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    printf("%3d 0x%016llx 0x%llx\n", i, result, flags_out & mask);
188ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  }
189ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  printf("\n");
190ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
191ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  printf("\nleft 16\n");
192ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  for (i = 0; i < 260; i++) {
193ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    mask = MASK_OSZACP;
194ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    if (i > 1) mask &= ~AMD64G_CC_MASK_O;
195ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    if (i > 0) mask &= ~AMD64G_CC_MASK_A;
196ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    data = 0x1122334455667788ULL;
197ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    xtra = 0x987654321987abcdULL;
198ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    flags_in = 0ULL;
199ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    amt = (ULong)i;
200ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    shld16();
201ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    printf("%3d 0x%016llx 0x%llx\n", i, result, flags_out & mask);
202ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  }
203ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  printf("\n");
204ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
205ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  printf("\nright 64\n");
206ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  for (i = 0; i < 260; i++) {
207ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    mask = MASK_OSZACP;
208ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    if (i > 1) mask &= ~AMD64G_CC_MASK_O;
209ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    if (i > 0) mask &= ~AMD64G_CC_MASK_A;
210ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    data = 0x1122334455667788ULL;
211ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    xtra = 0x3141592727182818ULL;
212ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    flags_in = 0ULL;
213ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    amt = (ULong)i;
214ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    shrd64();
215ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    printf("%3d 0x%016llx 0x%llx\n", i, result, flags_out & mask);
216ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  }
217ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
218ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  printf("\nright 32\n");
219ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  for (i = 0; i < 260; i++) {
220ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    mask = MASK_OSZACP;
221ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    if (i > 1) mask &= ~AMD64G_CC_MASK_O;
222ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    if (i > 0) mask &= ~AMD64G_CC_MASK_A;
223ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    data = 0x1122334455667788ULL;
224ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    xtra = 0x3141592727182818ULL;
225ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    flags_in = 0ULL;
226ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    amt = (ULong)i;
227ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    shrd32();
228ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    printf("%3d 0x%016llx 0x%llx\n", i, result, flags_out & mask);
229ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  }
230ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  printf("\n");
231ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
232ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  printf("\nright 16\n");
233ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  for (i = 0; i < 260; i++) {
234ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    mask = MASK_OSZACP;
235ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    if (i > 1) mask &= ~AMD64G_CC_MASK_O;
236ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    if (i > 0) mask &= ~AMD64G_CC_MASK_A;
237ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    data = 0x1122334455667788ULL;
238ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    xtra = 0x987654321987abcdULL;
239ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    flags_in = 0ULL;
240ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    amt = (ULong)i;
241ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    shrd16();
242ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    printf("%3d 0x%016llx 0x%llx\n", i, result, flags_out & mask);
243ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  }
244ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  printf("\n");
245ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
246ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  return 0;
247ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
248