qemu

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

test_pcadd.c (1250B)


      1 #include <assert.h>
      2 #include <inttypes.h>
      3 #include <string.h>
      4 
      5 #define TEST_PCADDU(N)                              \
      6 void test_##N(int a)                                \
      7 {                                                   \
      8     uint64_t rd1 = 0;                               \
      9     uint64_t rd2 = 0;                               \
     10     uint64_t rm, rn;                                \
     11                                                     \
     12     asm volatile(""#N" %0, 0x104\n\t"               \
     13                  ""#N" %1, 0x12345\n\t"             \
     14                  : "=r"(rd1), "=r"(rd2)             \
     15                  : );                               \
     16     rm = rd2 - rd1;                                 \
     17     if (!strcmp(#N, "pcalau12i")) {                 \
     18         rn = ((0x12345UL - 0x104) << a) & ~0xfff;   \
     19     } else {                                        \
     20         rn = ((0x12345UL - 0x104) << a) + 4;        \
     21     }                                               \
     22     assert(rm == rn);                               \
     23 }
     24 
     25 TEST_PCADDU(pcaddi)
     26 TEST_PCADDU(pcaddu12i)
     27 TEST_PCADDU(pcaddu18i)
     28 TEST_PCADDU(pcalau12i)
     29 
     30 int main()
     31 {
     32     test_pcaddi(2);
     33     test_pcaddu12i(12);
     34     test_pcaddu18i(18);
     35     test_pcalau12i(12);
     36 
     37     return 0;
     38 }