brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · 64d8a1d Raw
72 lines · c
1// RUN: %clang_builtins %s %librt -o %t && %run %t2// REQUIRES: librt_has_subvti33// REQUIRES: int1284 5#include "int_lib.h"6#include <stdio.h>7#include <stdlib.h>8 9#ifdef CRT_HAS_128BIT10 11// Returns: a - b12 13// Effects: aborts if a - b overflows14 15COMPILER_RT_ABI ti_int __subvti3(ti_int a, ti_int b);16 17int test__subvti3(ti_int a, ti_int b)18{19    ti_int x = __subvti3(a, b);20    ti_int expected = a - b;21    if (x != expected)22    {23        twords at;24        at.all = a;25        twords bt;26        bt.all = b;27        twords xt;28        xt.all = x;29        twords expectedt;30        expectedt.all = expected;31        printf("error in test__subvsi3(0x%.16llX%.16llX, 0x%.16llX%.16llX) = "32               "0x%.16llX%.16llX, expected 0x%.16llX%.16llX\n",33               at.s.high, at.s.low, bt.s.high, bt.s.low, xt.s.high, xt.s.low,34               expectedt.s.high, expectedt.s.low);35    }36    return x != expected;37}38 39#endif40 41int main()42{43#ifdef CRT_HAS_128BIT44//     test__subvti3(make_ti(0x8000000000000000LL, 0), 1);  // should abort45//     test__subvti3(0, make_ti(0x8000000000000000LL, 0));  // should abort46//     test__subvti3(1, make_ti(0x8000000000000000LL, 0));  // should abort47//     test__subvti3(make_ti(0x7FFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL), -1);  // should abort48//     test__subvti3(-2, make_ti(0x7FFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL));  // should abort49 50    if (test__subvti3(make_ti(0x8000000000000000LL, 0), -1))51        return 1;52    if (test__subvti3(make_ti(0x8000000000000000LL, 0), 0))53        return 1;54    if (test__subvti3(-1, make_ti(0x8000000000000000LL, 0)))55        return 1;56    if (test__subvti3(make_ti(0x7FFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL), 1))57        return 1;58    if (test__subvti3(make_ti(0x7FFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL), 0))59        return 1;60    if (test__subvti3(1, make_ti(0x7FFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL)))61        return 1;62    if (test__subvti3(0, make_ti(0x7FFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL)))63        return 1;64    if (test__subvti3(-1, make_ti(0x7FFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL)))65        return 1;66 67#else68    printf("skipped\n");69#endif70    return 0;71}72