10bb707e1126baccfdce980a6d2a92d57e9aff550florian#include <stdint.h>
20bb707e1126baccfdce980a6d2a92d57e9aff550florian#include <stdio.h>
30bb707e1126baccfdce980a6d2a92d57e9aff550florian#include <string.h>
40bb707e1126baccfdce980a6d2a92d57e9aff550florian
50bb707e1126baccfdce980a6d2a92d57e9aff550florianvoid
60bb707e1126baccfdce980a6d2a92d57e9aff550floriantest(int64_t op1_init, int64_t op2_init, int64_t op3_init)
70bb707e1126baccfdce980a6d2a92d57e9aff550florian{
80bb707e1126baccfdce980a6d2a92d57e9aff550florian   register int64_t op1 asm("8") = op1_init;
90bb707e1126baccfdce980a6d2a92d57e9aff550florian   register int64_t op3 asm("9") = op3_init;
100bb707e1126baccfdce980a6d2a92d57e9aff550florian
110bb707e1126baccfdce980a6d2a92d57e9aff550florian   int64_t op2 = op2_init;
120bb707e1126baccfdce980a6d2a92d57e9aff550florian   int cc = 1;
130bb707e1126baccfdce980a6d2a92d57e9aff550florian
140bb707e1126baccfdce980a6d2a92d57e9aff550florian   __asm__ volatile (
150bb707e1126baccfdce980a6d2a92d57e9aff550florian           "csg     8,9,%1\n\t"
160bb707e1126baccfdce980a6d2a92d57e9aff550florian           "ipm     %0\n\t"
170bb707e1126baccfdce980a6d2a92d57e9aff550florian           "srl     %0,28\n\t"
180bb707e1126baccfdce980a6d2a92d57e9aff550florian           : "=d" (cc), "+Q" (op2), "+d"(op1), "+d"(op3)
190bb707e1126baccfdce980a6d2a92d57e9aff550florian           :
200bb707e1126baccfdce980a6d2a92d57e9aff550florian           : "cc");
210bb707e1126baccfdce980a6d2a92d57e9aff550florian}
220bb707e1126baccfdce980a6d2a92d57e9aff550florian
230bb707e1126baccfdce980a6d2a92d57e9aff550florianint main ()
240bb707e1126baccfdce980a6d2a92d57e9aff550florian{
250bb707e1126baccfdce980a6d2a92d57e9aff550florian   int64_t op1, op2, op3;
260bb707e1126baccfdce980a6d2a92d57e9aff550florian
270bb707e1126baccfdce980a6d2a92d57e9aff550florian   test(op1, 0x1000000000000000ull, 0x1234567887654321ull);  // complaint
280bb707e1126baccfdce980a6d2a92d57e9aff550florian   test(0x1000000000000000ull, op2, 0x1234567887654321ull);  // complaint
290bb707e1126baccfdce980a6d2a92d57e9aff550florian   test(0x1000000000000000ull, 0x1000000000000000ull, op3);  // no complaint
300bb707e1126baccfdce980a6d2a92d57e9aff550florian
310bb707e1126baccfdce980a6d2a92d57e9aff550florian   return 0;
320bb707e1126baccfdce980a6d2a92d57e9aff550florian}
33