// RUN: %clang_builtins %s %librt -o %t && %run %t
//===-- fixxfdi_test.c - Test __fixxfdi -----------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
// This file tests __fixxfdi for the compiler_rt library.
//
//===----------------------------------------------------------------------===//

#include "int_lib.h"
#include <stdio.h>


#if HAS_80_BIT_LONG_DOUBLE
// Returns: convert a to a signed long long, rounding toward zero.

// Assumption: long double is an intel 80 bit floating point type padded with 6 bytes
//             su_int is a 32 bit integral type
//             value in long double is representable in di_int (no range checking performed)

// gggg gggg gggg gggg gggg gggg gggg gggg | gggg gggg gggg gggg seee eeee eeee eeee |
// 1mmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm

COMPILER_RT_ABI di_int __fixxfdi(long double a);

int test__fixxfdi(long double a, di_int expected)
{
    di_int x = __fixxfdi(a);
    if (x != expected)
        printf("error in __fixxfdi(%LA) = %llX, expected %llX\n",
               a, x, expected);
    return x != expected;
}

char assumption_1[sizeof(di_int) == 2*sizeof(si_int)] = {0};
char assumption_2[sizeof(su_int)*CHAR_BIT == 32] = {0};
char assumption_3[sizeof(long double)*CHAR_BIT == 128] = {0};
#endif

int main()
{
#if HAS_80_BIT_LONG_DOUBLE
    if (test__fixxfdi(0.0, 0))
        return 1;

    if (test__fixxfdi(0.5, 0))
        return 1;
    if (test__fixxfdi(0.99, 0))
        return 1;
    if (test__fixxfdi(1.0, 1))
        return 1;
    if (test__fixxfdi(1.5, 1))
        return 1;
    if (test__fixxfdi(1.99, 1))
        return 1;
    if (test__fixxfdi(2.0, 2))
        return 1;
    if (test__fixxfdi(2.01, 2))
        return 1;
    if (test__fixxfdi(-0.5, 0))
        return 1;
    if (test__fixxfdi(-0.99, 0))
        return 1;
    if (test__fixxfdi(-1.0, -1))
        return 1;
    if (test__fixxfdi(-1.5, -1))
        return 1;
    if (test__fixxfdi(-1.99, -1))
        return 1;
    if (test__fixxfdi(-2.0, -2))
        return 1;
    if (test__fixxfdi(-2.01, -2))
        return 1;

    if (test__fixxfdi(0x1.FFFFFEp+62, 0x7FFFFF8000000000LL))
        return 1;
    if (test__fixxfdi(0x1.FFFFFCp+62, 0x7FFFFF0000000000LL))
        return 1;

    if (test__fixxfdi(-0x1.FFFFFEp+62, 0x8000008000000000LL))
        return 1;
    if (test__fixxfdi(-0x1.FFFFFCp+62, 0x8000010000000000LL))
        return 1;

    if (test__fixxfdi(0x1.FFFFFFFFFFFFFp+62, 0x7FFFFFFFFFFFFC00LL))
        return 1;
    if (test__fixxfdi(0x1.FFFFFFFFFFFFEp+62, 0x7FFFFFFFFFFFF800LL))
        return 1;

    if (test__fixxfdi(-0x1.FFFFFFFFFFFFFp+62, 0x8000000000000400LL))
        return 1;
    if (test__fixxfdi(-0x1.FFFFFFFFFFFFEp+62, 0x8000000000000800LL))
        return 1;

    if (test__fixxfdi(0x1.FFFFFFFFFFFFFFFCp+62L, 0x7FFFFFFFFFFFFFFFLL))
        return 1;
    if (test__fixxfdi(0x1.FFFFFFFFFFFFFFF8p+62L, 0x7FFFFFFFFFFFFFFELL))
        return 1;

    if (test__fixxfdi(-0x1.0000000000000000p+63L, 0x8000000000000000LL))
        return 1;
    if (test__fixxfdi(-0x1.FFFFFFFFFFFFFFFCp+62L, 0x8000000000000001LL))
        return 1;
    if (test__fixxfdi(-0x1.FFFFFFFFFFFFFFF8p+62L, 0x8000000000000002LL))
        return 1;

#else
    printf("skipped\n");
#endif
   return 0;
}
