]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/builtins/Unit/subvsi3_test.c
Vendor import of compiler-rt trunk r300422:
[FreeBSD/FreeBSD.git] / test / builtins / Unit / subvsi3_test.c
1 // RUN: %clang_builtins %s %librt -o %t && %run %t
2 //===-- subvsi3_test.c - Test __subvsi3 -----------------------------------===//
3 //
4 //                     The LLVM Compiler Infrastructure
5 //
6 // This file is dual licensed under the MIT and the University of Illinois Open
7 // Source Licenses. See LICENSE.TXT for details.
8 //
9 //===----------------------------------------------------------------------===//
10 //
11 // This file tests __subvsi3 for the compiler_rt library.
12 //
13 //===----------------------------------------------------------------------===//
14
15 #include "int_lib.h"
16 #include <stdio.h>
17 #include <stdlib.h>
18
19 // Returns: a - b
20
21 // Effects: aborts if a - b overflows
22
23 COMPILER_RT_ABI si_int __subvsi3(si_int a, si_int b);
24
25 int test__subvsi3(si_int a, si_int b)
26 {
27     si_int x = __subvsi3(a, b);
28     si_int expected = a - b;
29     if (x != expected)
30         printf("error in test__subvsi3(0x%X, 0x%X) = %d, expected %d\n",
31                a, b, x, expected);
32     return x != expected;
33 }
34
35 int main()
36 {
37 //     test__subvsi3(0x80000000, 1);  // should abort
38 //     test__subvsi3(0, 0x80000000);  // should abort
39 //     test__subvsi3(1, 0x80000000);  // should abort
40 //     test__subvsi3(0x7FFFFFFF, -1);  // should abort
41 //     test__subvsi3(-2, 0x7FFFFFFF);  // should abort
42
43     if (test__subvsi3(0x80000000, -1))
44         return 1;
45     if (test__subvsi3(0x80000000, 0))
46         return 1;
47     if (test__subvsi3(-1, 0x80000000))
48         return 1;
49     if (test__subvsi3(0x7FFFFFFF, 1))
50         return 1;
51     if (test__subvsi3(0x7FFFFFFF, 0))
52         return 1;
53     if (test__subvsi3(1, 0x7FFFFFFF))
54         return 1;
55     if (test__subvsi3(0, 0x7FFFFFFF))
56         return 1;
57     if (test__subvsi3(-1, 0x7FFFFFFF))
58         return 1;
59
60     return 0;
61 }