#include <stdint.h>
#include <stdio.h>
#include <string.h>

void 
test(int32_t op1_init, int32_t op2_init, int32_t op3_init)
{
   register int32_t op1 asm("8") = op1_init;
   register int32_t op3 asm("9") = op3_init;
   
   int32_t op2 = op2_init;
   int cc = 1; 

   __asm__ volatile (
           "cs      8,9,%1\n\t"
           "ipm     %0\n\t"
           "srl     %0,28\n\t"
           : "=d" (cc), "+Q" (op2), "+d"(op1), "+d"(op3)
           : 
           : "cc");
}

int main ()
{
   int op1, op2, op3;

   test(op1, 0x10000000, 0x12345678);   // complaint
   test(0x10000000, op2, 0x12345678);   // complaint
   test(0x10000000, 0x01000000, op3);   // no complaint

   return 0;
}