| // Copyright (c) Microsoft Corporation. All rights reserved. | |
| // Licensed under the MIT License. | |
| #if !defined __GNUC__ | |
| // relative include path contains '..', specific to this file | |
| #pragma warning( disable: 4464 ) | |
| #endif | |
| #include "../SafeInt.hpp" | |
| #if SAFEINT_USE_INTRINSICS | |
| _CONSTEXPR14 std::int16_t CastInt() | |
| { | |
| const std::int16_t t1 = 2; | |
| const std::int16_t u1 = -3; | |
| std::int16_t r1 = 0; | |
| if (!MultiplicationHelper< std::int16_t, std::int16_t, MultiplicationState_CastInt>::Multiply(t1, u1, r1)) | |
| return 0; | |
| return r1; | |
| } | |
| _CONSTEXPR14 std::uint16_t CastUint() | |
| { | |
| const std::uint16_t t1 = 2; | |
| const std::uint16_t u1 = 3; | |
| std::uint16_t r1 = 0; | |
| if (!MultiplicationHelper< std::uint16_t, std::uint16_t, MultiplicationState_CastUint>::Multiply(t1, u1, r1)) | |
| return 0; | |
| return r1; | |
| } | |
| _CONSTEXPR14 std::int32_t CastInt64() | |
| { | |
| const std::int32_t t1 = 2; | |
| const std::int32_t u1 = -3; | |
| std::int32_t r1 = 0; | |
| if (!MultiplicationHelper< std::int32_t, std::int32_t, MultiplicationState_CastInt64>::Multiply(t1, u1, r1)) | |
| return 0; | |
| return r1; | |
| } | |
| _CONSTEXPR14 std::uint32_t CastUint64() | |
| { | |
| const std::uint32_t t1 = 2; | |
| const std::uint32_t u1 = 3; | |
| std::uint32_t r1 = 0; | |
| if (!MultiplicationHelper< std::uint32_t, std::uint32_t, MultiplicationState_CastUint64>::Multiply(t1, u1, r1)) | |
| return 0; | |
| return r1; | |
| } | |
| _CONSTEXPR14_MULTIPLY std::uint64_t Uint64Uint64() | |
| { | |
| const std::uint64_t t1 = 2; | |
| const std::uint64_t u1 = 3; | |
| std::uint64_t r1 = 0; | |
| if (!MultiplicationHelper< std::uint64_t, std::uint64_t, MultiplicationState_Uint64Uint64>::Multiply(t1, u1, r1)) | |
| return 0; | |
| return r1; | |
| } | |
| _CONSTEXPR14_MULTIPLY std::uint64_t Uint64Uint() | |
| { | |
| const std::uint64_t t1 = 2; | |
| const std::uint32_t u1 = 3; | |
| std::uint64_t r1 = 0; | |
| if (!MultiplicationHelper< std::uint64_t, std::uint32_t, MultiplicationState_Uint64Uint>::Multiply(t1, u1, r1)) | |
| return 0; | |
| return r1; | |
| } | |
| _CONSTEXPR14 std::uint32_t UintUint64() | |
| { | |
| const std::uint32_t t1 = 2; | |
| const std::uint64_t u1 = 3; | |
| std::uint32_t r1 = 0; | |
| if (!MultiplicationHelper< std::uint32_t, std::uint64_t, MultiplicationState_UintUint64>::Multiply(t1, u1, r1)) | |
| return 0; | |
| return r1; | |
| } | |
| _CONSTEXPR14_MULTIPLY std::uint64_t Uint64Int() | |
| { | |
| const std::uint64_t t1 = 2; | |
| const std::int32_t u1 = 3; | |
| std::uint64_t r1 = 0; | |
| if (!MultiplicationHelper< std::uint64_t, std::int32_t, MultiplicationState_Uint64Int>::Multiply(t1, u1, r1)) | |
| return 0; | |
| return r1; | |
| } | |
| _CONSTEXPR14_MULTIPLY std::uint64_t Uint64Int64() | |
| { | |
| const std::uint64_t t1 = 2; | |
| const std::int64_t u1 = 3; | |
| std::uint64_t r1 = 0; | |
| if (!MultiplicationHelper< std::uint64_t, std::int64_t, MultiplicationState_Uint64Int64>::Multiply(t1, u1, r1)) | |
| return 0; | |
| return r1; | |
| } | |
| _CONSTEXPR14 std::uint32_t UintInt64() | |
| { | |
| const std::uint32_t t1 = 2; | |
| const std::int64_t u1 = 3; | |
| std::uint32_t r1 = 0; | |
| if (!MultiplicationHelper< std::uint32_t, std::int64_t, MultiplicationState_UintInt64>::Multiply(t1, u1, r1)) | |
| return 0; | |
| return r1; | |
| } | |
| _CONSTEXPR14_MULTIPLY std::int64_t Int64Uint() | |
| { | |
| const std::int64_t t1 = 2; | |
| const std::uint32_t u1 = 3; | |
| std::int64_t r1 = 0; | |
| if (!MultiplicationHelper< std::int64_t, std::uint32_t, MultiplicationState_Int64Uint>::Multiply(t1, u1, r1)) | |
| return 0; | |
| return r1; | |
| } | |
| _CONSTEXPR14_MULTIPLY std::int64_t Int64Int64() | |
| { | |
| const std::int64_t t1 = 2; | |
| const std::int64_t u1 = 3; | |
| std::int64_t r1 = 0; | |
| if (!MultiplicationHelper< std::int64_t, std::int64_t, MultiplicationState_Int64Int64>::Multiply(t1, u1, r1)) | |
| return 0; | |
| return r1; | |
| } | |
| _CONSTEXPR14_MULTIPLY std::int64_t Int64Int() | |
| { | |
| const std::int64_t t1 = 2; | |
| const std::int32_t u1 = 3; | |
| std::int64_t r1 = 0; | |
| if (!MultiplicationHelper< std::int64_t, std::int32_t, MultiplicationState_Int64Int>::Multiply(t1, u1, r1)) | |
| return 0; | |
| return r1; | |
| } | |
| _CONSTEXPR14 std::int32_t IntUint64() | |
| { | |
| const std::int32_t t1 = 2; | |
| const std::uint64_t u1 = 3; | |
| std::int32_t r1 = 0; | |
| if (!MultiplicationHelper< std::int32_t, std::uint64_t, MultiplicationState_IntUint64>::Multiply(t1, u1, r1)) | |
| return 0; | |
| return r1; | |
| } | |
| _CONSTEXPR14_MULTIPLY std::int64_t Int64Uint64() | |
| { | |
| const std::int64_t t1 = 2; | |
| const std::uint64_t u1 = 3; | |
| std::int64_t r1 = 0; | |
| if (!MultiplicationHelper< std::int64_t, std::uint64_t, MultiplicationState_Int64Uint64>::Multiply(t1, u1, r1)) | |
| return 0; | |
| return r1; | |
| } | |
| _CONSTEXPR14_MULTIPLY std::int32_t IntInt64() | |
| { | |
| const std::int32_t t1 = 2; | |
| const std::int64_t u1 = 3; | |
| std::int32_t r1 = 0; | |
| if (!MultiplicationHelper< std::int32_t, std::int64_t, MultiplicationState_IntInt64>::Multiply(t1, u1, r1)) | |
| return 0; | |
| return r1; | |
| } | |
| void IntrinsicConstExpr() | |
| { | |
| // Need to ensure that nothing that calls an intrinsic is marked constexpr, and everything that doesn't call an intrinsic is marked | |
| static constexpr std::int16_t test1 = CastInt(); | |
| static constexpr std::uint16_t test2 = CastUint(); | |
| static constexpr std::int32_t test3 = CastInt64(); | |
| static constexpr std::uint32_t test4 = CastUint64(); | |
| static _CONSTEXPR14_MULTIPLY std::uint64_t test5 = Uint64Uint64(); | |
| static _CONSTEXPR14_MULTIPLY std::uint64_t test6 = Uint64Uint(); | |
| static constexpr std::uint32_t test7 = UintUint64(); | |
| static _CONSTEXPR14_MULTIPLY std::uint64_t test8 = Uint64Int(); | |
| static _CONSTEXPR14_MULTIPLY std::uint64_t test9 = Uint64Int64(); | |
| static constexpr std::uint32_t test10 = UintInt64(); | |
| static _CONSTEXPR14_MULTIPLY std::int64_t test11 = Int64Uint(); | |
| static _CONSTEXPR14_MULTIPLY std::int64_t test12 = Int64Int64(); | |
| static _CONSTEXPR14_MULTIPLY std::int64_t test13 = Int64Int(); | |
| static constexpr std::int32_t test14 = IntUint64(); | |
| static _CONSTEXPR14_MULTIPLY std::int64_t test15 = Int64Uint64(); | |
| static _CONSTEXPR14_MULTIPLY std::int32_t test16 = IntInt64(); | |
| } | |
| #else | |
| void IntrinsicConstExpr(){} | |
| #endif |