qemu/tests/tcg/openrisc/test_lx.c
<<
>>
Prefs
   1#include <stdio.h>
   2
   3int main(void)
   4{
   5    int a;
   6    int p[50];
   7    int result;
   8
   9    result = 0x23;
  10    __asm
  11    ("l.ori r8, r0, 0x123\n\t"
  12     "l.sb  0x4 + %1, r8\n\t"
  13     "\n\t"
  14     "l.lbz %0, 0x4 + %1\n\t"
  15     : "=r"(a), "+m"(*p)
  16    );
  17    if (a != result) {
  18        printf("lbz error, %x\n", a);
  19        return -1;
  20    }
  21
  22    result = 0x23;
  23    __asm
  24    ("l.lbs %0, 0x4 + %1\n\t"
  25     : "=r"(a)
  26     : "m"(*p)
  27    );
  28    if (a != result) {
  29        printf("lbs error\n");
  30        return -1;
  31    }
  32
  33    result = 0x1111;
  34    __asm
  35    ("l.ori r8, r0, 0x1111\n\t"
  36     "l.sh  0x20 + %1, r8\n\t"
  37     "\n\t"
  38     "l.lhs %0, 0x20 + %1\n\t"
  39     : "=r"(a), "=m"(*p)
  40    );
  41    if (a != result) {
  42        printf("lhs error, %x\n", a);
  43        return -1;
  44    }
  45
  46    result = 0x1111;
  47    __asm
  48    ("l.lhz %0, 0x20 + %1\n\t"
  49     : "=r"(a)
  50     : "m"(*p)
  51    );
  52    if (a != result) {
  53        printf("lhz error\n");
  54        return -1;
  55    }
  56
  57    result = 0x1111233;
  58    __asm
  59    ("l.ori r8, r0, 0x1233\n\t"
  60     "l.movhi r1, 0x111\n\t"
  61     "l.or  r8, r8, r1\n\t"
  62     "l.sw  0x123 + %1, r8\n\t"
  63     "\n\t"
  64     "l.lws %0, 0x123 + %1\n\t"
  65     : "=r"(a), "+m"(*p)
  66    );
  67    if (a != result) {
  68        printf("lws error, %x\n", a);
  69        return -1;
  70    }
  71
  72    result = 0x1111233;
  73    __asm
  74    ("l.lwz %0, 0x123 + %1\n\t"
  75     : "=r"(a)
  76     : "m"(*p)
  77    );
  78    if (a != result) {
  79        printf("lwz error\n");
  80        return -1;
  81    }
  82
  83    return 0;
  84}
  85