177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao//===-- cmpti2_test.c - Test __cmpti2 -------------------------------------===//
277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao//
377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao//                     The LLVM Compiler Infrastructure
477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao//
577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao// This file is distributed under the University of Illinois Open Source
677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao// License. See LICENSE.TXT for details.
777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao//
877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao//===----------------------------------------------------------------------===//
977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao//
1077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao// This file tests __cmpti2 for the compiler_rt library.
1177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao//
1277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao//===----------------------------------------------------------------------===//
1377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
1477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#if __x86_64
1577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
1677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#include "int_lib.h"
1777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#include <stdio.h>
1877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
1977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao// Returns:  if (a <  b) returns 0
2077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao//           if (a == b) returns 1
2177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao//           if (a >  b) returns 2
2277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
2377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaosi_int __cmpti2(ti_int a, ti_int b);
2477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
2577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoint test__cmpti2(ti_int a, ti_int b, si_int expected)
2677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao{
2777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    si_int x = __cmpti2(a, b);
2877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (x != expected)
2977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    {
3077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        twords at;
3177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        at.all = a;
3277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        twords bt;
3377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        bt.all = b;
3477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        printf("error in __cmpti2(0x%llX%.16llX, 0x%llX%.16llX) = %d, expected %d\n",
3577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao               at.s.high, at.s.low, bt.s.high, bt.s.low, x, expected);
3677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    }
3777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    return x != expected;
3877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao}
3977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
4077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaochar assumption_1[sizeof(ti_int) == 2*sizeof(di_int)] = {0};
4177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
4277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif
4377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
4477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoint main()
4577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao{
4677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#if __x86_64
4777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__cmpti2(0, 0, 1))
4877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
4977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__cmpti2(1, 1, 1))
5077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
5177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__cmpti2(2, 2, 1))
5277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
5377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__cmpti2(0x7FFFFFFF, 0x7FFFFFFF, 1))
5477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
5577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__cmpti2(0x80000000, 0x80000000, 1))
5677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
5777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__cmpti2(0x80000001, 0x80000001, 1))
5877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
5977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__cmpti2(0xFFFFFFFF, 0xFFFFFFFF, 1))
6077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
6177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__cmpti2(0x000000010000000LL, 0x000000010000000LL, 1))
6277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
6377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__cmpti2(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL, 1))
6477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
6577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
6677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__cmpti2(0x0000000200000002LL, 0x0000000300000001LL, 0))
6777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
6877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__cmpti2(0x0000000200000002LL, 0x0000000300000002LL, 0))
6977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
7077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__cmpti2(0x0000000200000002LL, 0x0000000300000003LL, 0))
7177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
7277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
7377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__cmpti2(0x0000000200000002LL, 0x0000000100000001LL, 2))
7477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
7577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__cmpti2(0x0000000200000002LL, 0x0000000100000002LL, 2))
7677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
7777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__cmpti2(0x0000000200000002LL, 0x0000000100000003LL, 2))
7877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
7977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
8077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__cmpti2(0x0000000200000002LL, 0x0000000200000001LL, 2))
8177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
8277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__cmpti2(0x0000000200000002LL, 0x0000000200000002LL, 1))
8377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
8477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__cmpti2(0x0000000200000002LL, 0x0000000200000003LL, 0))
8577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
8677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
8777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__cmpti2(make_ti(2, 2), make_ti(3, 1), 0))
8877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
8977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__cmpti2(make_ti(2, 2), make_ti(3, 2), 0))
9077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
9177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__cmpti2(make_ti(2, 2), make_ti(3, 3), 0))
9277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
9377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
9477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__cmpti2(make_ti(2, 2), make_ti(1, 1), 2))
9577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
9677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__cmpti2(make_ti(2, 2), make_ti(1, 2), 2))
9777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
9877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__cmpti2(make_ti(2, 2), make_ti(1, 3), 2))
9977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
10077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
10177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__cmpti2(make_ti(2, 2), make_ti(2, 1), 2))
10277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
10377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__cmpti2(make_ti(2, 2), make_ti(2, 2), 1))
10477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
10577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__cmpti2(make_ti(2, 2), make_ti(2, 3), 0))
10677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
10777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
10877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif
10977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao   return 0;
11077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao}
111