xref: /qemu/tests/tcg/sh4/test-subv.c (revision d1da8af8)
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
3 #include <limits.h>
4 #include <stdio.h>
5 #include <stdlib.h>
6 
7 static void subv(const int a, const int b, const int res, const int carry)
8 {
9     int o = a, c;
10 
11     asm volatile("subv %2,%0\n"
12                  "movt %1\n"
13                  : "+r"(o), "=r"(c) : "r"(b) : );
14 
15     if (c != carry || o != res) {
16         printf("SUBV %d, %d = %d/%d [T = %d/%d]\n", a, b, o, res, c, carry);
17         abort();
18     }
19 }
20 
21 int main(void)
22 {
23     subv(INT_MIN, 1, INT_MAX, 1);
24     subv(INT_MAX, -1, INT_MIN, 1);
25     subv(INT_MAX, 1, INT_MAX - 1, 0);
26     subv(0, 1, -1, 0);
27     subv(-1, -1, 0, 0);
28 
29     return 0;
30 }
31