qemu/tests/tcg/cris/check_bound.c
<<
>>
Prefs
   1#include <stdio.h>
   2#include <stdlib.h>
   3#include <stdint.h>
   4#include "sys.h"
   5#include "crisutils.h"
   6
   7static inline int cris_bound_b(int v, int b)
   8{
   9        int r = v;
  10        asm ("bound.b\t%1, %0\n" : "+r" (r) : "ri" (b));
  11        return r;
  12}
  13
  14static inline int cris_bound_w(int v, int b)
  15{
  16        int r = v;
  17        asm ("bound.w\t%1, %0\n" : "+r" (r) : "ri" (b));
  18        return r;
  19}
  20
  21static inline int cris_bound_d(int v, int b)
  22{
  23        int r = v;
  24        asm ("bound.d\t%1, %0\n" : "+r" (r) : "ri" (b));
  25        return r;
  26}
  27
  28int main(void)
  29{
  30        int r;
  31
  32        cris_tst_cc_init();
  33        r = cris_bound_d(-1, 2);
  34        cris_tst_cc(0, 0, 0, 0);
  35        if (r != 2)
  36                err();
  37
  38        cris_tst_cc_init();
  39        r = cris_bound_d(2, 0xffffffff);
  40        cris_tst_cc(0, 0, 0, 0);
  41        if (r != 2)
  42                err();
  43
  44        cris_tst_cc_init();
  45        r = cris_bound_d(0xffff, 0xffff);
  46        cris_tst_cc(0, 0, 0, 0);
  47        if (r != 0xffff)
  48                err();
  49
  50        cris_tst_cc_init();
  51        r = cris_bound_d(-1, 0xffffffff);
  52        cris_tst_cc(1, 0, 0, 0);
  53        if (r != 0xffffffff)
  54                err();
  55
  56        cris_tst_cc_init();
  57        r = cris_bound_d(0x78134452, 0x5432f789);
  58        cris_tst_cc(0, 0, 0, 0);
  59        if (r != 0x5432f789)
  60                err();
  61
  62        cris_tst_cc_init();
  63        r = cris_bound_w(-1, 2);
  64        cris_tst_cc(0, 0, 0, 0);
  65        if (r != 2)
  66                err();
  67
  68        cris_tst_cc_init();
  69        r = cris_bound_w(-1, 0xffff);
  70        cris_tst_cc(0, 0, 0, 0);
  71        if (r != 0xffff)
  72                err();
  73
  74        cris_tst_cc_init();
  75        r = cris_bound_w(2, 0xffff);
  76        cris_tst_cc(0, 0, 0, 0);
  77        if (r != 2)
  78                err();
  79
  80        cris_tst_cc_init();
  81        r = cris_bound_w(0xfedaffff, 0xffff);
  82        cris_tst_cc(0, 0, 0, 0);
  83        if (r != 0xffff)
  84                err();
  85
  86        cris_tst_cc_init();
  87        r = cris_bound_w(0x78134452, 0xf789);
  88        cris_tst_cc(0, 0, 0, 0);
  89        if (r != 0xf789)
  90                err();
  91
  92        cris_tst_cc_init();
  93        r = cris_bound_b(-1, 2);
  94        cris_tst_cc(0, 0, 0, 0);
  95        if (r != 2)
  96                err();
  97
  98        cris_tst_cc_init();
  99        r = cris_bound_b(2, 0xff);
 100        cris_tst_cc(0, 0, 0, 0);
 101        if (r != 2)
 102                err();
 103
 104        cris_tst_cc_init();
 105        r = cris_bound_b(-1, 0xff);
 106        cris_tst_cc(0, 0, 0, 0);
 107        if (r != 0xff)
 108                err();
 109
 110        cris_tst_cc_init();
 111        r = cris_bound_b(0xff, 0xff);
 112        cris_tst_cc(0, 0, 0, 0);
 113        if (r != 0xff)
 114                err();
 115
 116        cris_tst_cc_init();
 117        r = cris_bound_b(0xfeda49ff, 0xff);
 118        cris_tst_cc(0, 0, 0, 0);
 119        if (r != 0xff)
 120                err();
 121
 122        cris_tst_cc_init();
 123        r = cris_bound_b(0x78134452, 0x89);
 124        cris_tst_cc(0, 0, 0, 0);
 125        if (r != 0x89)
 126                err();
 127
 128        cris_tst_cc_init();
 129        r = cris_bound_w(0x78134452, 0);
 130        cris_tst_cc(0, 1, 0, 0);
 131        if (r != 0)
 132                err();
 133
 134        cris_tst_cc_init();
 135        r = cris_bound_b(0xffff, -1);
 136        cris_tst_cc(0, 0, 0, 0);
 137        if (r != 0xff)
 138                err();
 139
 140        pass();
 141        return 0;
 142}
 143