17559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj
27559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj#include <stdio.h>
37559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj
47559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardjtypedef unsigned long long int ULong;
57559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj
67559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardjULong data;
77559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardjULong xtra;
87559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardjULong amt;
97559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardjULong flags_in;
107559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardjULong result;
117559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardjULong flags_out;
127559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj
137559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj#define AMD64G_CC_SHIFT_O   11
147559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj#define AMD64G_CC_SHIFT_S   7
157559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj#define AMD64G_CC_SHIFT_Z   6
167559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj#define AMD64G_CC_SHIFT_A   4
177559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj#define AMD64G_CC_SHIFT_C   0
187559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj#define AMD64G_CC_SHIFT_P   2
197559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj
207559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj#define AMD64G_CC_MASK_O    (1 << AMD64G_CC_SHIFT_O)
217559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj#define AMD64G_CC_MASK_S    (1 << AMD64G_CC_SHIFT_S)
227559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj#define AMD64G_CC_MASK_Z    (1 << AMD64G_CC_SHIFT_Z)
237559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj#define AMD64G_CC_MASK_A    (1 << AMD64G_CC_SHIFT_A)
247559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj#define AMD64G_CC_MASK_C    (1 << AMD64G_CC_SHIFT_C)
257559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj#define AMD64G_CC_MASK_P    (1 << AMD64G_CC_SHIFT_P)
267559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj
277559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj#define MASK_OSZACP  \
287559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj   (AMD64G_CC_MASK_O | AMD64G_CC_MASK_S | AMD64G_CC_MASK_Z \
297559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    | AMD64G_CC_MASK_A | AMD64G_CC_MASK_C | AMD64G_CC_MASK_P)
307559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj
317559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardjextern void shld64 ( void );
327559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardjasm("\n"
337559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"shld64:\n"
347559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpushq %rsi\n"
357559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpushq %r11\n"
367559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpushq %rcx\n"
377559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tmovq data, %rsi\n"
387559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tmovq xtra, %r11\n"
397559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tmovq amt, %rcx\n"
407559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpushq flags_in\n"
417559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpopfq\n"
427559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tshldq %cl, %r11, %rsi\n"
437559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tmovq %rsi, result\n"
447559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpushfq\n"
457559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpopq flags_out\n"
467559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpopq %rcx\n"
477559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpopq %r11\n"
487559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpopq %rsi\n"
497559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tret\n"
507559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj);
517559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj
527559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardjextern void shld32 ( void );
537559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardjasm("\n"
547559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"shld32:\n"
557559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpushq %rsi\n"
567559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpushq %r11\n"
577559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpushq %rcx\n"
587559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tmovq data, %rsi\n"
597559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tmovq xtra, %r11\n"
607559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tmovq amt, %rcx\n"
617559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpushq flags_in\n"
627559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpopfq\n"
637559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tshldl %cl, %r11d, %esi\n"
647559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tmovq %rsi, result\n"
657559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpushfq\n"
667559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpopq flags_out\n"
677559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpopq %rcx\n"
687559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpopq %r11\n"
697559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpopq %rsi\n"
707559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tret\n"
717559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj);
727559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj
737559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardjextern void shld16 ( void );
747559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardjasm("\n"
757559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"shld16:\n"
767559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpushq %rsi\n"
777559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpushq %r11\n"
787559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpushq %rcx\n"
797559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tmovq data, %rsi\n"
807559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tmovq xtra, %r11\n"
817559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tmovq amt, %rcx\n"
827559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpushq flags_in\n"
837559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpopfq\n"
847559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tshldw %cl, %r11w, %si\n"
857559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tmovq %rsi, result\n"
867559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpushfq\n"
877559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpopq flags_out\n"
887559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpopq %rcx\n"
897559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpopq %r11\n"
907559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpopq %rsi\n"
917559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tret\n"
927559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj);
937559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj
947559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj
957559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardjextern void shrd64 ( void );
967559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardjasm("\n"
977559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"shrd64:\n"
987559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpushq %rsi\n"
997559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpushq %r11\n"
1007559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpushq %rcx\n"
1017559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tmovq data, %rsi\n"
1027559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tmovq xtra, %r11\n"
1037559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tmovq amt, %rcx\n"
1047559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpushq flags_in\n"
1057559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpopfq\n"
1067559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tshrdq %cl, %r11, %rsi\n"
1077559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tmovq %rsi, result\n"
1087559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpushfq\n"
1097559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpopq flags_out\n"
1107559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpopq %rcx\n"
1117559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpopq %r11\n"
1127559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpopq %rsi\n"
1137559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tret\n"
1147559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj);
1157559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj
1167559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardjextern void shrd32 ( void );
1177559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardjasm("\n"
1187559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"shrd32:\n"
1197559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpushq %rsi\n"
1207559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpushq %r11\n"
1217559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpushq %rcx\n"
1227559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tmovq data, %rsi\n"
1237559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tmovq xtra, %r11\n"
1247559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tmovq amt, %rcx\n"
1257559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpushq flags_in\n"
1267559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpopfq\n"
1277559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tshrdl %cl, %r11d, %esi\n"
1287559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tmovq %rsi, result\n"
1297559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpushfq\n"
1307559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpopq flags_out\n"
1317559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpopq %rcx\n"
1327559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpopq %r11\n"
1337559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpopq %rsi\n"
1347559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tret\n"
1357559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj);
1367559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj
1377559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardjextern void shrd16 ( void );
1387559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardjasm("\n"
1397559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"shrd16:\n"
1407559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpushq %rsi\n"
1417559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpushq %r11\n"
1427559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpushq %rcx\n"
1437559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tmovq data, %rsi\n"
1447559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tmovq xtra, %r11\n"
1457559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tmovq amt, %rcx\n"
1467559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpushq flags_in\n"
1477559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpopfq\n"
1487559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tshrdw %cl, %r11w, %si\n"
1497559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tmovq %rsi, result\n"
1507559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpushfq\n"
1517559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpopq flags_out\n"
1527559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpopq %rcx\n"
1537559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpopq %r11\n"
1547559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tpopq %rsi\n"
1557559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj"\tret\n"
1567559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj);
1577559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj
1587559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj
1597559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardjint main ( void )
1607559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj{
1617559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj  int i;
1627559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj  ULong mask;
1637559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj
1647559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj  printf("\nleft 64\n");
1657559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj  for (i = 0; i < 260; i++) {
1667559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    mask = MASK_OSZACP;
1677559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    if (i > 1) mask &= ~AMD64G_CC_MASK_O;
1687559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    if (i > 0) mask &= ~AMD64G_CC_MASK_A;
1697559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    data = 0x1122334455667788ULL;
1707559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    xtra = 0x3141592727182818ULL;
1717559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    flags_in = 0ULL;
1727559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    amt = (ULong)i;
1737559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    shld64();
1747559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    printf("%3d 0x%016llx 0x%llx\n", i, result, flags_out & mask);
1757559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj  }
1767559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj
1777559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj  printf("\nleft 32\n");
1787559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj  for (i = 0; i < 260; i++) {
1797559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    mask = MASK_OSZACP;
1807559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    if (i > 1) mask &= ~AMD64G_CC_MASK_O;
1817559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    if (i > 0) mask &= ~AMD64G_CC_MASK_A;
1827559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    data = 0x1122334455667788ULL;
1837559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    xtra = 0x3141592727182818ULL;
1847559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    flags_in = 0ULL;
1857559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    amt = (ULong)i;
1867559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    shld32();
1877559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    printf("%3d 0x%016llx 0x%llx\n", i, result, flags_out & mask);
1887559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj  }
1897559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj  printf("\n");
1907559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj
1917559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj  printf("\nleft 16\n");
1927559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj  for (i = 0; i < 260; i++) {
1937559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    mask = MASK_OSZACP;
1947559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    if (i > 1) mask &= ~AMD64G_CC_MASK_O;
1957559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    if (i > 0) mask &= ~AMD64G_CC_MASK_A;
1967559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    data = 0x1122334455667788ULL;
1977559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    xtra = 0x987654321987abcdULL;
1987559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    flags_in = 0ULL;
1997559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    amt = (ULong)i;
2007559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    shld16();
2017559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    printf("%3d 0x%016llx 0x%llx\n", i, result, flags_out & mask);
2027559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj  }
2037559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj  printf("\n");
2047559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj
2057559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj  printf("\nright 64\n");
2067559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj  for (i = 0; i < 260; i++) {
2077559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    mask = MASK_OSZACP;
2087559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    if (i > 1) mask &= ~AMD64G_CC_MASK_O;
2097559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    if (i > 0) mask &= ~AMD64G_CC_MASK_A;
2107559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    data = 0x1122334455667788ULL;
2117559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    xtra = 0x3141592727182818ULL;
2127559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    flags_in = 0ULL;
2137559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    amt = (ULong)i;
2147559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    shrd64();
2157559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    printf("%3d 0x%016llx 0x%llx\n", i, result, flags_out & mask);
2167559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj  }
2177559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj
2187559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj  printf("\nright 32\n");
2197559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj  for (i = 0; i < 260; i++) {
2207559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    mask = MASK_OSZACP;
2217559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    if (i > 1) mask &= ~AMD64G_CC_MASK_O;
2227559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    if (i > 0) mask &= ~AMD64G_CC_MASK_A;
2237559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    data = 0x1122334455667788ULL;
2247559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    xtra = 0x3141592727182818ULL;
2257559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    flags_in = 0ULL;
2267559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    amt = (ULong)i;
2277559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    shrd32();
2287559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    printf("%3d 0x%016llx 0x%llx\n", i, result, flags_out & mask);
2297559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj  }
2307559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj  printf("\n");
2317559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj
2327559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj  printf("\nright 16\n");
2337559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj  for (i = 0; i < 260; i++) {
2347559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    mask = MASK_OSZACP;
2357559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    if (i > 1) mask &= ~AMD64G_CC_MASK_O;
2367559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    if (i > 0) mask &= ~AMD64G_CC_MASK_A;
2377559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    data = 0x1122334455667788ULL;
2387559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    xtra = 0x987654321987abcdULL;
2397559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    flags_in = 0ULL;
2407559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    amt = (ULong)i;
2417559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    shrd16();
2427559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj    printf("%3d 0x%016llx 0x%llx\n", i, result, flags_out & mask);
2437559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj  }
2447559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj  printf("\n");
2457559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj
2467559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj  return 0;
2477559dbcc5d5a1e498f5c52dac91cf5ebb7396e04sewardj}
248