177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao//===-- ashlti3_test.c - Test __ashlti3 -----------------------------------===//
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 __ashlti3 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: a << b
2077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
2177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao// Precondition:  0 <= b < bits_in_tword
2277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
2377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoti_int __ashlti3(ti_int a, si_int b);
2477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
2577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoint test__ashlti3(ti_int a, si_int b, ti_int expected)
2677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao{
2777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    ti_int x = __ashlti3(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        twords xt;
3577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        xt.all = x;
3677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        twords expectedt;
3777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        expectedt.all = expected;
3877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        printf("error in __ashlti3: 0x%llX%.16llX << %d = 0x%llX%.16llX,"
3977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao               " expected 0x%llX%.16llX\n",
4077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                at.s.high, at.s.low, b, xt.s.high, xt.s.low,
4177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                expectedt.s.high, expectedt.s.low);
4277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    }
4377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    return x != expected;
4477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao}
4577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
4677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaochar assumption_1[sizeof(ti_int) == 2*sizeof(di_int)] = {0};
4777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
4877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif
4977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
5077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoint main()
5177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao{
5277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#if __x86_64
5377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 0,
5477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                      make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL)))
5577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
5677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 1,
5777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                      make_ti(0xFDB97530ECA8642BLL, 0xFDB97530ECA8642ALL)))
5877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
5977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 2,
6077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                      make_ti(0xFB72EA61D950C857LL, 0XFB72EA61D950C854LL)))
6177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
6277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 3,
6377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                      make_ti(0xF6E5D4C3B2A190AFLL, 0xF6E5D4C3B2A190A8LL)))
6477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
6577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 4,
6677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                      make_ti(0xEDCBA9876543215FLL, 0xEDCBA98765432150LL)))
6777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
6877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
6977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 28,
7077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                      make_ti(0x876543215FEDCBA9LL, 0x8765432150000000LL)))
7177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
7277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 29,
7377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                      make_ti(0x0ECA8642BFDB9753LL, 0x0ECA8642A0000000LL)))
7477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
7577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 30,
7677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                      make_ti(0x1D950C857FB72EA6LL, 0x1D950C8540000000LL)))
7777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
7877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 31,
7977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                      make_ti(0x3B2A190AFF6E5D4CLL, 0x3B2A190A80000000LL)))
8077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
8177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
8277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 32,
8377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                      make_ti(0x76543215FEDCBA98LL, 0x7654321500000000LL)))
8477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
8577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
8677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 33,
8777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                      make_ti(0xECA8642BFDB97530LL, 0xECA8642A00000000LL)))
8877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
8977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 34,
9077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                      make_ti(0xD950C857FB72EA61LL, 0xD950C85400000000LL)))
9177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
9277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 35,
9377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                      make_ti(0xB2A190AFF6E5D4C3LL, 0xB2A190A800000000LL)))
9477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
9577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 36,
9677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                      make_ti(0x6543215FEDCBA987LL, 0x6543215000000000LL)))
9777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
9877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
9977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 60,
10077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                      make_ti(0x5FEDCBA987654321LL, 0x5000000000000000LL)))
10177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
10277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 61,
10377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                      make_ti(0xBFDB97530ECA8642LL, 0xA000000000000000LL)))
10477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
10577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 62,
10677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                      make_ti(0x7FB72EA61D950C85LL, 0x4000000000000000LL)))
10777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
10877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 63,
10977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                      make_ti(0xFF6E5D4C3B2A190ALL, 0x8000000000000000LL)))
11077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
11177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
11277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 64,
11377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                      make_ti(0xFEDCBA9876543215LL, 0x0000000000000000LL)))
11477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
11577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
11677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 65,
11777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                      make_ti(0xFDB97530ECA8642ALL, 0x0000000000000000LL)))
11877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
11977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 66,
12077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                      make_ti(0xFB72EA61D950C854LL, 0x0000000000000000LL)))
12177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
12277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 67,
12377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                      make_ti(0xF6E5D4C3B2A190A8LL, 0x0000000000000000LL)))
12477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
12577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 68,
12677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                      make_ti(0xEDCBA98765432150LL, 0x0000000000000000LL)))
12777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
12877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
12977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 92,
13077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                      make_ti(0x8765432150000000LL, 0x0000000000000000LL)))
13177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
13277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 93,
13377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                      make_ti(0x0ECA8642A0000000LL, 0x0000000000000000LL)))
13477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
13577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 94,
13677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                      make_ti(0x1D950C8540000000LL, 0x0000000000000000LL)))
13777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
13877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 95,
13977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                      make_ti(0x3B2A190A80000000LL, 0x0000000000000000LL)))
14077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
14177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
14277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 96,
14377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                      make_ti(0x7654321500000000LL, 0x0000000000000000LL)))
14477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
14577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
14677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 97,
14777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                      make_ti(0xECA8642A00000000LL, 0x0000000000000000LL)))
14877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
14977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 98,
15077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                      make_ti(0xD950C85400000000LL, 0x0000000000000000LL)))
15177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
15277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 99,
15377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                      make_ti(0xB2A190A800000000LL, 0x0000000000000000LL)))
15477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
15577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 100,
15677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                      make_ti(0x6543215000000000LL, 0x0000000000000000LL)))
15777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
15877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
15977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 124,
16077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                      make_ti(0x5000000000000000LL, 0x0000000000000000LL)))
16177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
16277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 125,
16377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                      make_ti(0xA000000000000000LL, 0x0000000000000000LL)))
16477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
16577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 126,
16677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                      make_ti(0x4000000000000000LL, 0x0000000000000000LL)))
16777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
16877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 127,
16977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                      make_ti(0x8000000000000000LL, 0x0000000000000000LL)))
17077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return 1;
17177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif
17277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    return 0;
17377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao}
174