1  /* PR target/56866 */
       2  
       3  int
       4  main ()
       5  {
       6  #if __CHAR_BIT__ == 8 && __SIZEOF_LONG_LONG__ == 8 && __SIZEOF_INT__ == 4 && __SIZEOF_SHORT__ == 2
       7    unsigned long long wq[256], rq[256];
       8    unsigned int wi[256], ri[256];
       9    unsigned short ws[256], rs[256];
      10    unsigned char wc[256], rc[256];
      11    int t;
      12  
      13    __builtin_memset (wq, 0, sizeof wq);
      14    __builtin_memset (wi, 0, sizeof wi);
      15    __builtin_memset (ws, 0, sizeof ws);
      16    __builtin_memset (wc, 0, sizeof wc);
      17    wq[0] = 0x0123456789abcdefULL;
      18    wi[0] = 0x01234567;
      19    ws[0] = 0x4567;
      20    wc[0] = 0x73;
      21  
      22    asm volatile ("" : : "g" (wq), "g" (wi), "g" (ws), "g" (wc) : "memory");
      23  
      24    for (t = 0; t < 256; ++t)
      25      rq[t] = (wq[t] >> 8) | (wq[t] << (sizeof (wq[0]) * __CHAR_BIT__ - 8));
      26    for (t = 0; t < 256; ++t)
      27      ri[t] = (wi[t] >> 8) | (wi[t] << (sizeof (wi[0]) * __CHAR_BIT__ - 8));
      28    for (t = 0; t < 256; ++t)
      29      rs[t] = (ws[t] >> 9) | (ws[t] << (sizeof (ws[0]) * __CHAR_BIT__ - 9));
      30    for (t = 0; t < 256; ++t)
      31      rc[t] = (wc[t] >> 5) | (wc[t] << (sizeof (wc[0]) * __CHAR_BIT__ - 5));
      32  
      33    asm volatile ("" : : "g" (rq), "g" (ri), "g" (rs), "g" (rc) : "memory");
      34  
      35    if (rq[0] != 0xef0123456789abcdULL || rq[1])
      36      __builtin_abort ();
      37    if (ri[0] != 0x67012345 || ri[1])
      38      __builtin_abort ();
      39    if (rs[0] != 0xb3a2 || rs[1])
      40      __builtin_abort ();
      41    if (rc[0] != 0x9b || rc[1])
      42      __builtin_abort ();
      43  #endif
      44    return 0;
      45  }