qemu/tests/tcg/cris/libc/check_abs.c
<<
>>
Prefs
   1#include <stdio.h>
   2#include <stdlib.h>
   3#include <stdint.h>
   4#include "sys.h"
   5#include "crisutils.h"
   6
   7static always_inline int cris_abs(int n)
   8{
   9        int r;
  10        asm ("abs\t%1, %0\n" : "=r" (r) : "r" (n));
  11        return r;
  12}
  13
  14static always_inline void
  15verify_abs(int val, int res,
  16           const int n, const int z, const int v, const int c)
  17{
  18        int r;
  19
  20        cris_tst_cc_init();
  21        r = cris_abs(val);
  22        cris_tst_cc(n, z, v, c);
  23        if (r != res)
  24                err();
  25}
  26
  27int main(void)
  28{
  29        verify_abs(-1, 1, 0, 0, 0, 0);
  30        verify_abs(0x80000000, 0x80000000, 1, 0, 0, 0);
  31        verify_abs(0x7fffffff, 0x7fffffff, 0, 0, 0, 0);
  32        verify_abs(42, 42, 0, 0, 0, 0);
  33        verify_abs(1, 1, 0, 0, 0, 0);
  34        verify_abs(0xffff, 0xffff, 0, 0, 0, 0);
  35        verify_abs(0xffff, 0xffff, 0, 0, 0, 0);
  36        verify_abs(-31, 0x1f, 0, 0, 0, 0);
  37        verify_abs(0, 0, 0, 1, 0, 0);
  38        pass();
  39        return 0;
  40}
  41