// RUN: %clang_builtins %s %librt -o %t && %run %t
// REQUIRES: librt_has_muloti4
// REQUIRES: int128
//===-- muloti4_test.c - Test __muloti4 -----------------------------------===//
//
// 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 __muloti3 for the compiler_rt library.
//
//===----------------------------------------------------------------------===//

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

#ifdef CRT_HAS_128BIT

// Returns: a * b

// Effects: sets overflow if a * b overflows

COMPILER_RT_ABI ti_int __muloti4(ti_int a, ti_int b, int *overflow);

int test__muloti4(ti_int a, ti_int b, ti_int expected, int expected_overflow)
{
    int ov;
    ti_int x = __muloti4(a, b, &ov);
    if (ov != expected_overflow) {
      twords at;
      at.all = a;
      twords bt;
      bt.all = b;
      twords xt;
      xt.all = x;
      twords expectedt;
      expectedt.all = expected;

      printf("error in __muloti4: overflow=%d expected=%d\n",
	     ov, expected_overflow);
      printf("error in __muloti4: 0x%.16llX%.16llX * 0x%.16llX%.16llX = "
	     "0x%.16llX%.16llX, expected 0x%.16llX%.16llX\n",
	     at.s.high, at.s.low, bt.s.high, bt.s.low, xt.s.high, xt.s.low,
	     expectedt.s.high, expectedt.s.low);
      return 1;
    }
    else if (!expected_overflow && x != expected)
    {
        twords at;
        at.all = a;
        twords bt;
        bt.all = b;
        twords xt;
        xt.all = x;
        twords expectedt;
        expectedt.all = expected;
        printf("error in __muloti4: 0x%.16llX%.16llX * 0x%.16llX%.16llX = "
               "0x%.16llX%.16llX, expected 0x%.16llX%.16llX\n",
               at.s.high, at.s.low, bt.s.high, bt.s.low, xt.s.high, xt.s.low,
               expectedt.s.high, expectedt.s.low);
	return 1;
    }
    return 0;
}

#endif

int main()
{
#ifdef CRT_HAS_128BIT
    if (test__muloti4(0, 0, 0, 0))
        return 1;
    if (test__muloti4(0, 1, 0, 0))
        return 1;
    if (test__muloti4(1, 0, 0, 0))
        return 1;
    if (test__muloti4(0, 10, 0, 0))
        return 1;
    if (test__muloti4(10, 0, 0, 0))
        return 1;
    if (test__muloti4(0, 81985529216486895LL, 0, 0))
        return 1;
    if (test__muloti4(81985529216486895LL, 0, 0, 0))
        return 1;

    if (test__muloti4(0, -1, 0, 0))
        return 1;
    if (test__muloti4(-1, 0, 0, 0))
        return 1;
    if (test__muloti4(0, -10, 0, 0))
        return 1;
    if (test__muloti4(-10, 0, 0, 0))
        return 1;
    if (test__muloti4(0, -81985529216486895LL, 0, 0))
        return 1;
    if (test__muloti4(-81985529216486895LL, 0, 0, 0))
        return 1;

    if (test__muloti4(1, 1, 1, 0))
        return 1;
    if (test__muloti4(1, 10, 10, 0))
        return 1;
    if (test__muloti4(10, 1, 10, 0))
        return 1;
    if (test__muloti4(1, 81985529216486895LL, 81985529216486895LL, 0))
        return 1;
    if (test__muloti4(81985529216486895LL, 1, 81985529216486895LL, 0))
        return 1;

    if (test__muloti4(1, -1, -1, 0))
        return 1;
    if (test__muloti4(1, -10, -10, 0))
        return 1;
    if (test__muloti4(-10, 1, -10, 0))
        return 1;
    if (test__muloti4(1, -81985529216486895LL, -81985529216486895LL, 0))
        return 1;
    if (test__muloti4(-81985529216486895LL, 1, -81985529216486895LL, 0))
        return 1;

    if (test__muloti4(3037000499LL, 3037000499LL, 9223372030926249001LL, 0))
        return 1;
    if (test__muloti4(-3037000499LL, 3037000499LL, -9223372030926249001LL, 0))
        return 1;
    if (test__muloti4(3037000499LL, -3037000499LL, -9223372030926249001LL, 0))
        return 1;
    if (test__muloti4(-3037000499LL, -3037000499LL, 9223372030926249001LL, 0))
        return 1;

    if (test__muloti4(4398046511103LL, 2097152LL, 9223372036852678656LL, 0))
        return 1;
    if (test__muloti4(-4398046511103LL, 2097152LL, -9223372036852678656LL, 0))
        return 1;
    if (test__muloti4(4398046511103LL, -2097152LL, -9223372036852678656LL, 0))
        return 1;
    if (test__muloti4(-4398046511103LL, -2097152LL, 9223372036852678656LL, 0))
        return 1;

    if (test__muloti4(2097152LL, 4398046511103LL, 9223372036852678656LL, 0))
        return 1;
    if (test__muloti4(-2097152LL, 4398046511103LL, -9223372036852678656LL, 0))
        return 1;
    if (test__muloti4(2097152LL, -4398046511103LL, -9223372036852678656LL, 0))
        return 1;
    if (test__muloti4(-2097152LL, -4398046511103LL, 9223372036852678656LL, 0))
        return 1;

    if (test__muloti4(make_ti(0x00000000000000B5LL, 0x04F333F9DE5BE000LL),
                      make_ti(0x0000000000000000LL, 0x00B504F333F9DE5BLL),
                      make_ti(0x7FFFFFFFFFFFF328LL, 0xDF915DA296E8A000LL), 0))
        return 1;

     if (test__muloti4(make_ti(0x7FFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL),
                       -2,
                       make_ti(0x8000000000000000LL, 0x0000000000000001LL), 1))
       return 1;
     if (test__muloti4(-2,
                       make_ti(0x7FFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL),
                       make_ti(0x8000000000000000LL, 0x0000000000000001LL), 1))
         return 1;
    if (test__muloti4(make_ti(0x7FFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL),
                      -1,
                      make_ti(0x8000000000000000LL, 0x0000000000000001LL), 0))
        return 1;
    if (test__muloti4(-1,
                      make_ti(0x7FFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL),
                      make_ti(0x8000000000000000LL, 0x0000000000000001LL), 0))
        return 1;
    if (test__muloti4(make_ti(0x7FFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL),
                      0,
                      0, 0))
        return 1;
    if (test__muloti4(0,
                      make_ti(0x7FFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL),
                      0, 0))
        return 1;
    if (test__muloti4(make_ti(0x7FFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL),
                      1,
                      make_ti(0x7FFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL), 0))
        return 1;
    if (test__muloti4(1,
                      make_ti(0x7FFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL),
                      make_ti(0x7FFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL), 0))
        return 1;
     if (test__muloti4(make_ti(0x7FFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL),
                       2,
                       make_ti(0x8000000000000000LL, 0x0000000000000001LL), 1))
         return 1;
     if (test__muloti4(2,
                       make_ti(0x7FFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL),
                       make_ti(0x8000000000000000LL, 0x0000000000000001LL), 1))
         return 1;

     if (test__muloti4(make_ti(0x8000000000000000LL, 0x0000000000000000LL),
                       -2,
                       make_ti(0x8000000000000000LL, 0x0000000000000000LL), 1))
         return 1;
     if (test__muloti4(-2,
                       make_ti(0x8000000000000000LL, 0x0000000000000000LL),
                       make_ti(0x8000000000000000LL, 0x0000000000000000LL), 1))
         return 1;
     if (test__muloti4(make_ti(0x8000000000000000LL, 0x0000000000000000LL),
                       -1,
                       make_ti(0x8000000000000000LL, 0x0000000000000000LL), 1))
         return 1;
     if (test__muloti4(-1,
                       make_ti(0x8000000000000000LL, 0x0000000000000000LL),
                       make_ti(0x8000000000000000LL, 0x0000000000000000LL), 1))
         return 1;
    if (test__muloti4(make_ti(0x8000000000000000LL, 0x0000000000000000LL),
                      0,
                      0, 0))
        return 1;
    if (test__muloti4(0,
                      make_ti(0x8000000000000000LL, 0x0000000000000000LL),
                      0, 0))
        return 1;
    if (test__muloti4(make_ti(0x8000000000000000LL, 0x0000000000000000LL),
                      1,
                      make_ti(0x8000000000000000LL, 0x0000000000000000LL), 0))
        return 1;
    if (test__muloti4(1,
                      make_ti(0x8000000000000000LL, 0x0000000000000000LL),
                      make_ti(0x8000000000000000LL, 0x0000000000000000LL), 0))
        return 1;
     if (test__muloti4(make_ti(0x8000000000000000LL, 0x0000000000000000LL),
                       2,
                       make_ti(0x8000000000000000LL, 0x0000000000000000LL), 1))
         return 1;
     if (test__muloti4(2,
                       make_ti(0x8000000000000000LL, 0x0000000000000000LL),
                       make_ti(0x8000000000000000LL, 0x0000000000000000LL), 1))
         return 1;

     if (test__muloti4(make_ti(0x8000000000000000LL, 0x0000000000000001LL),
                       -2,
                       make_ti(0x8000000000000000LL, 0x0000000000000001LL), 1))
         return 1;
     if (test__muloti4(-2,
                       make_ti(0x8000000000000000LL, 0x0000000000000001LL),
                       make_ti(0x8000000000000000LL, 0x0000000000000001LL), 1))
         return 1;
    if (test__muloti4(make_ti(0x8000000000000000LL, 0x0000000000000001LL),
                      -1,
                      make_ti(0x7FFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL), 0))
        return 1;
    if (test__muloti4(-1,
                      make_ti(0x8000000000000000LL, 0x0000000000000001LL),
                      make_ti(0x7FFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL), 0))
        return 1;
    if (test__muloti4(make_ti(0x8000000000000000LL, 0x0000000000000001LL),
                      0,
                      0, 0))
        return 1;
    if (test__muloti4(0,
                      make_ti(0x8000000000000000LL, 0x0000000000000001LL),
                      0, 0))
        return 1;
    if (test__muloti4(make_ti(0x8000000000000000LL, 0x0000000000000001LL),
                      1,
                      make_ti(0x8000000000000000LL, 0x0000000000000001LL), 0))
        return 1;
    if (test__muloti4(1,
                      make_ti(0x8000000000000000LL, 0x0000000000000001LL),
                      make_ti(0x8000000000000000LL, 0x0000000000000001LL), 0))
        return 1;
     if (test__muloti4(make_ti(0x8000000000000000LL, 0x0000000000000001LL),
                       2,
                       make_ti(0x8000000000000000LL, 0x0000000000000000LL), 1))
         return 1;
     if (test__muloti4(2,
                       make_ti(0x8000000000000000LL, 0x0000000000000001LL),
                       make_ti(0x8000000000000000LL, 0x0000000000000000LL), 1))
         return 1;

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