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    uint64_t r1 = 0xffffffffffffffffull;
   9    uint64_t 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]),0(%[op2])\n"
  23        "2:  exrl %[op1_len],1b\n"
  24        "    lgr %[r1],%%r1\n"
  25        "    lgr %[r2],%%r2\n"
  26        "    ipm %[cc]\n"
  27        : [r1] "+r" (r1),
  28          [r2] "+r" (r2),
  29          [cc] "=r" (cc)
  30        : [op1] "r" (&op1),
  31          [op1_len] "r" (3),
  32          [op2] "r" (&op2)
  33        : "r1", "r2", "cc");
  34    cc = (cc >> 28) & 3;
  35    if (cc != 1) {
  36        write(1, "bad cc\n", 7);
  37        return 1;
  38    }
  39    if ((char *)r1 != &op1[1]) {
  40        write(1, "bad r1\n", 7);
  41        return 1;
  42    }
  43    if (r2 != 0xffffffffffffffbbull) {
  44        write(1, "bad r2\n", 7);
  45        return 1;
  46    }
  47    return 0;
  48}
  49