#include #include int main(void) { uint64_t parmlist[] __attribute__((aligned(16))) = { 0xfedcba9876543210ull, 0, 0x7777777777777777ull, 0, }; uint64_t op1 = 0x0123456789abcdefull; uint64_t op2 = 0; uint64_t op3 = op1; uint64_t cc; asm volatile( " lghi %%r0,%[flags]\n" " la %%r1,%[parmlist]\n" " csst %[op1],%[op2],%[op3]\n" " ipm %[cc]\n" : [op1] "+m" (op1), [op2] "+m" (op2), [op3] "+r" (op3), [cc] "=r" (cc) : [flags] "K" (0x0301), [parmlist] "m" (parmlist) : "r0", "r1", "cc", "memory"); cc = (cc >> 28) & 3; if (cc) { write(1, "bad cc\n", 7); return 1; } if (op1 != parmlist[0]) { write(1, "bad op1\n", 8); return 1; } if (op2 != parmlist[2]) { write(1, "bad op2\n", 8); return 1; } return 0; }