#ifndef PARTITION_ALLOC_PARTITION_ALLOC_BASE_NUMERICS_SAFE_MATH_CLANG_GCC_IMPL_H_
#define PARTITION_ALLOC_PARTITION_ALLOC_BASE_NUMERICS_SAFE_MATH_CLANG_GCC_IMPL_H_
#include <cassert>
#include <limits>
#include <type_traits>
#include "partition_alloc/partition_alloc_base/numerics/safe_conversions.h"
#if !defined(__native_client__) && (defined(__ARMEL__) || defined(__arch64__))
#include "partition_alloc/partition_alloc_base/numerics/safe_math_arm_impl.h"
#define PA_BASE_HAS_ASSEMBLER_SAFE_MATH …
#else
#define PA_BASE_HAS_ASSEMBLER_SAFE_MATH …
#endif
namespace partition_alloc::internal::base::internal {
#if !PA_BASE_HAS_ASSEMBLER_SAFE_MATH
template <typename T, typename U>
struct CheckedMulFastAsmOp { … };
template <typename T, typename U>
struct ClampedAddFastAsmOp { … };
template <typename T, typename U>
struct ClampedSubFastAsmOp { … };
template <typename T, typename U>
struct ClampedMulFastAsmOp { … };
#endif
#undef PA_BASE_HAS_ASSEMBLER_SAFE_MATH
template <typename T, typename U>
struct CheckedAddFastOp { … };
template <typename T, typename U>
struct CheckedSubFastOp { … };
template <typename T, typename U>
struct CheckedMulFastOp { … };
template <typename T, typename U>
struct ClampedAddFastOp { … };
template <typename T, typename U>
struct ClampedSubFastOp { … };
template <typename T, typename U>
struct ClampedMulFastOp { … };
template <typename T>
struct ClampedNegFastOp { … };
}
#endif