qemu/tests/tcg/cris/libc/check_moveq.c
<<
>>
Prefs
   1#include <stdio.h>
   2#include <stdlib.h>
   3#include <stdint.h>
   4#include "sys.h"
   5#include "crisutils.h"
   6
   7#define cris_moveq(dst, src) \
   8               asm volatile ("moveq %1, %0\n" : "=r" (dst) : "i" (src));
   9
  10
  11
  12int main(void)
  13{
  14        int t;
  15
  16        cris_tst_cc_init();
  17        asm volatile ("setf\tzvnc\n");
  18        cris_moveq(t, 10);
  19        cris_tst_cc(1, 1, 1, 1);
  20        if (t != 10)
  21                err();
  22
  23        /* make sure moveq doesn't clobber the zflag.  */
  24        cris_tst_cc_init();
  25        asm volatile ("setf vnc\n");
  26        asm volatile ("clearf z\n");
  27        cris_moveq(t, 0);
  28        cris_tst_cc(1, 0, 1, 1);
  29        if (t != 0)
  30                err();
  31
  32        /* make sure moveq doesn't clobber the nflag.
  33           Also check large immediates  */
  34        cris_tst_cc_init();
  35        asm volatile ("setf zvc\n");
  36        asm volatile ("clearf n\n");
  37        cris_moveq(t, -31);
  38        cris_tst_cc(0, 1, 1, 1);
  39        if (t != -31)
  40                err();
  41
  42        cris_tst_cc_init();
  43        asm volatile ("setf nzvc\n");
  44        cris_moveq(t, 31);
  45        cris_tst_cc(1, 1, 1, 1);
  46        if (t != 31)
  47                err();
  48
  49        pass();
  50        return 0;
  51}
  52