brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.9 KiB · 86aa264 Raw
86 lines · c
1// RUN: %clang_builtins %s %librt -o %t && %run %t2// REQUIRES: librt_has_addvti33// REQUIRES: int1284 5#include "int_lib.h"6#include <stdio.h>7 8#ifdef CRT_HAS_128BIT9 10// Returns: a + b11 12// Effects: aborts if a + b overflows13 14COMPILER_RT_ABI ti_int __addvti3(ti_int a, ti_int b);15 16int test__addvti3(ti_int a, ti_int b)17{18    ti_int x = __addvti3(a, b);19    ti_int expected = a + b;20    if (x != expected)21    {22        twords at;23        at.all = a;24        twords bt;25        bt.all = b;26        twords xt;27        xt.all = x;28        twords expectedt;29        expectedt.all = expected;30        printf("error in test__addvti3(0x%llX%.16llX, 0x%llX%.16llX) = "31               "0x%llX%.16llX, expected 0x%llX%.16llX\n",32                at.s.high, at.s.low, bt.s.high, bt.s.low, xt.s.high, xt.s.low,33                expectedt.s.high, expectedt.s.low);34    }35    return x != expected;36}37 38#endif39 40int main()41{42#ifdef CRT_HAS_128BIT43// should abort44//     test__addvti3(make_ti(0x8000000000000000LL, 0x0000000000000000LL),45//                   make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL));46// should abort47//     test__addvti3(make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL),48//                   make_ti(0x8000000000000000LL, 0x0000000000000000LL));49// should abort50//     test__addvti3(make_ti(0x0000000000000000LL, 0x0000000000000001LL),51//                   make_ti(0x7FFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL));52// should abort53//     test__addvti3(make_ti(0x7FFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL),54//                   make_ti(0x0000000000000000LL, 0x0000000000000001LL));55 56    if (test__addvti3(make_ti(0x8000000000000000LL, 0x0000000000000000LL),57                      make_ti(0x0000000000000000LL, 0x0000000000000001LL)))58        return 1;59    if (test__addvti3(make_ti(0x0000000000000000LL, 0x0000000000000001LL),60                      make_ti(0x8000000000000000LL, 0x0000000000000000LL)))61        return 1;62    if (test__addvti3(make_ti(0x8000000000000000LL, 0x0000000000000000LL),63                      make_ti(0x0000000000000000LL, 0x0000000000000000LL)))64        return 1;65    if (test__addvti3(make_ti(0x0000000000000000LL, 0x0000000000000000LL),66                      make_ti(0x8000000000000000LL, 0x0000000000000000LL)))67        return 1;68    if (test__addvti3(make_ti(0x7FFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL),69                      make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL)))70        return 1;71    if (test__addvti3(make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL),72                      make_ti(0x7FFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL)))73        return 1;74    if (test__addvti3(make_ti(0x7FFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL),75                      make_ti(0x0000000000000000LL, 0x0000000000000000LL)))76        return 1;77    if (test__addvti3(make_ti(0x0000000000000000LL, 0x0000000000000000LL),78                      make_ti(0x7FFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL)))79        return 1;80 81#else82    printf("skipped\n");83#endif84    return 0;85}86