Home | History | Annotate | Download | only in Unit
      1 //===-- negvti2_test.c - Test __negvti2 -----------------------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is dual licensed under the MIT and the University of Illinois Open
      6 // Source Licenses. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This file tests __negvti2 for the compiler_rt library.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 #include "int_lib.h"
     15 #include <stdio.h>
     16 
     17 #ifdef CRT_HAS_128BIT
     18 
     19 // Returns: -a
     20 
     21 // Effects: aborts if -a overflows
     22 
     23 COMPILER_RT_ABI ti_int __negvti2(ti_int a);
     24 COMPILER_RT_ABI ti_int __negti2(ti_int a);
     25 
     26 int test__negvti2(ti_int a)
     27 {
     28     ti_int x = __negvti2(a);
     29     ti_int expected = __negti2(a);
     30     if (x != expected)
     31     {
     32         twords at;
     33         at.all = a;
     34         twords xt;
     35         xt.all = x;
     36         twords expectedt;
     37         expectedt.all = expected;
     38         printf("error in __negvti2(0x%.16llX%.16llX) = 0x%.16llX%.16llX, "
     39                "expected 0x%.16llX%.16llX\n",
     40                at.s.high, at.s.low, xt.s.high, xt.s.low, expectedt.s.high, expectedt.s.low);
     41     }
     42     return x != expected;
     43 }
     44 
     45 #endif
     46 
     47 int main()
     48 {
     49 #ifdef CRT_HAS_128BIT
     50     if (test__negvti2(0))
     51         return 1;
     52     if (test__negvti2(1))
     53         return 1;
     54     if (test__negvti2(-1))
     55         return 1;
     56     if (test__negvti2(2))
     57         return 1;
     58     if (test__negvti2(-2))
     59         return 1;
     60     if (test__negvti2(3))
     61         return 1;
     62     if (test__negvti2(-3))
     63         return 1;
     64     if (test__negvti2(make_ti(0x0000000000000000LL, 0x00000000FFFFFFFELL)))
     65         return 1;
     66     if (test__negvti2(make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFF00000002LL)))
     67         return 1;
     68     if (test__negvti2(make_ti(0x0000000000000000LL, 0x00000000FFFFFFFFLL)))
     69         return 1;
     70     if (test__negvti2(make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFF00000001LL)))
     71         return 1;
     72     if (test__negvti2(make_ti(0x0000000000000000LL, 0x0000000100000000LL)))
     73         return 1;
     74     if (test__negvti2(make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFF00000000LL)))
     75         return 1;
     76     if (test__negvti2(make_ti(0x0000000000000000LL, 0x0000000200000000LL)))
     77         return 1;
     78     if (test__negvti2(make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFE00000000LL)))
     79         return 1;
     80     if (test__negvti2(make_ti(0x0000000000000000LL, 0x0000000300000000LL)))
     81         return 1;
     82     if (test__negvti2(make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFD00000000LL)))
     83         return 1;
     84     if (test__negvti2(make_ti(0x0000000000000000LL, 0x7FFFFFFFFFFFFFFFLL)))
     85         return 1;
     86     if (test__negvti2(make_ti(0xFFFFFFFFFFFFFFFFLL, 0x8000000000000001LL)))
     87         return 1;
     88     if (test__negvti2(make_ti(0x0000000000000000LL, 0x7FFFFFFFFFFFFFFFLL)))
     89         return 1;
     90     if (test__negvti2(make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFE00000000LL)))
     91         return 1;
     92     if (test__negvti2(make_ti(0x0000000000000000LL, 0x0000000200000000LL)))
     93         return 1;
     94     if (test__negvti2(make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFF00000000LL)))
     95         return 1;
     96     if (test__negvti2(make_ti(0x0000000000000000LL, 0x0000000100000000LL)))
     97         return 1;
     98 //     if (test__negvti2(make_ti(0x8000000000000000LL, 0x0000000000000000LL))) // abort
     99 //         return 1;
    100     if (test__negvti2(make_ti(0x8000000000000000LL, 0x0000000000000001LL)))
    101         return 1;
    102     if (test__negvti2(make_ti(0x7FFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL)))
    103         return 1;
    104 
    105 #else
    106     printf("skipped\n");
    107 #endif
    108    return 0;
    109 }
    110