qemu/tests/tcg/s390x/exrl-trtr.c
<<
>>
Prefs
   1#include <stdint.h>
   2#include <unistd.h>
   3
   4int main(void)
   5{
   6    char op1[] = {0, 1, 2, 3};
   7    char op2[256];
   8    register uint64_t r1 asm("r1") = 0xffffffffffffffffull;
   9    register uint64_t r2 asm("r2") = 0xffffffffffffffffull;
  10    uint64_t cc;
  11    int i;
  12
  13    for (i = 0; i < 256; i++) {
  14        if (i == 1) {
  15            op2[i] = 0xbb;
  16        } else {
  17            op2[i] = 0;
  18        }
  19    }
  20    asm volatile(
  21        "    j 2f\n"
  22        "1:  trtr 3(1,%[op1]),%[op2]\n"
  23        "2:  exrl %[op1_len],1b\n"
  24        "    ipm %[cc]\n"
  25        : [r1] "+r" (r1),
  26          [r2] "+r" (r2),
  27          [cc] "=r" (cc)
  28        : [op1] "a" (&op1),
  29          [op1_len] "a" (3),
  30          [op2] "Q" (op2)
  31        : "cc");
  32    cc = (cc >> 28) & 3;
  33    if (cc != 1) {
  34        write(1, "bad cc\n", 7);
  35        return 1;
  36    }
  37    if ((char *)r1 != &op1[1]) {
  38        write(1, "bad r1\n", 7);
  39        return 1;
  40    }
  41    if (r2 != 0xffffffffffffffbbull) {
  42        write(1, "bad r2\n", 7);
  43        return 1;
  44    }
  45    return 0;
  46}
  47