qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

exrl-trtr.c (1015B)


      1 #include <stdint.h>
      2 #include <unistd.h>
      3 
      4 int 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 }