// RUN: %clang_builtins %s %librt -o %t && %run %t
// REQUIRES: librt_has_fixdfdi

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

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

// Assumption: double is a IEEE 64 bit floating point type 
//             su_int is a 32 bit integral type
//             value in double is representable in di_int (no range checking performed)

// seee eeee eeee mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm

COMPILER_RT_ABI di_int __fixdfdi(double a);

int test__fixdfdi(double a, di_int expected)
{
    di_int x = __fixdfdi(a);
    if (x != expected)
        printf("error in __fixdfdi(%A) = %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(double)*CHAR_BIT == 64] = {0};

int main()
{
    if (test__fixdfdi(0.0, 0))
        return 1;

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

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

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

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

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

   return 0;
}
