Path: blob/main/crypto/openssl/include/internal/numbers.h
103857 views
/*1* Copyright 2015-2023 The OpenSSL Project Authors. All Rights Reserved.2*3* Licensed under the Apache License 2.0 (the "License"). You may not use4* this file except in compliance with the License. You can obtain a copy5* in the file LICENSE in the source distribution or at6* https://www.openssl.org/source/license.html7*/89#ifndef OSSL_INTERNAL_NUMBERS_H10#define OSSL_INTERNAL_NUMBERS_H11#pragma once1213#include <limits.h>1415#if (-1 & 3) == 0x03 /* Two's complement */1617#define __MAXUINT__(T) ((T) - 1)18#define __MAXINT__(T) ((T)((((T)1) << ((sizeof(T) * CHAR_BIT) - 1)) ^ __MAXUINT__(T)))19#define __MININT__(T) (-__MAXINT__(T) - 1)2021#elif (-1 & 3) == 0x02 /* Ones' complement */2223#define __MAXUINT__(T) (((T) - 1) + 1)24#define __MAXINT__(T) ((T)((((T)1) << ((sizeof(T) * CHAR_BIT) - 1)) ^ __MAXUINT__(T)))25#define __MININT__(T) (-__MAXINT__(T))2627#elif (-1 & 3) == 0x01 /* Sign/magnitude */2829#define __MAXINT__(T) ((T)(((((T)1) << ((sizeof(T) * CHAR_BIT) - 2)) - 1) | (((T)1) << ((sizeof(T) * CHAR_BIT) - 2))))30#define __MAXUINT__(T) ((T)(__MAXINT__(T) | (((T)1) << ((sizeof(T) * CHAR_BIT) - 1))))31#define __MININT__(T) (-__MAXINT__(T))3233#else3435#error "do not know the integer encoding on this architecture"3637#endif3839#ifndef INT8_MAX40#define INT8_MIN __MININT__(int8_t)41#define INT8_MAX __MAXINT__(int8_t)42#define UINT8_MAX __MAXUINT__(uint8_t)43#endif4445#ifndef INT16_MAX46#define INT16_MIN __MININT__(int16_t)47#define INT16_MAX __MAXINT__(int16_t)48#define UINT16_MAX __MAXUINT__(uint16_t)49#endif5051#ifndef INT32_MAX52#define INT32_MIN __MININT__(int32_t)53#define INT32_MAX __MAXINT__(int32_t)54#define UINT32_MAX __MAXUINT__(uint32_t)55#endif5657#ifndef INT64_MAX58#define INT64_MIN __MININT__(int64_t)59#define INT64_MAX __MAXINT__(int64_t)60#define UINT64_MAX __MAXUINT__(uint64_t)61#endif6263/*64* 64-bit processor with LP64 ABI65*/66#ifdef SIXTY_FOUR_BIT_LONG67#ifndef UINT32_C68#define UINT32_C(c) (c)69#endif70#ifndef UINT64_C71#define UINT64_C(c) (c##UL)72#endif73#endif7475/*76* 64-bit processor other than LP64 ABI77*/78#ifdef SIXTY_FOUR_BIT79#ifndef UINT32_C80#define UINT32_C(c) (c##UL)81#endif82#ifndef UINT64_C83#define UINT64_C(c) (c##ULL)84#endif85#endif8687#ifndef INT128_MAX88#if defined(__SIZEOF_INT128__) && __SIZEOF_INT128__ == 1689typedef __int128_t int128_t;90typedef __uint128_t uint128_t;91#define INT128_MIN __MININT__(int128_t)92#define INT128_MAX __MAXINT__(int128_t)93#define UINT128_MAX __MAXUINT__(uint128_t)94#endif95#endif9697#ifndef SIZE_MAX98#define SIZE_MAX __MAXUINT__(size_t)99#endif100101#ifndef OSSL_INTMAX_MAX102#define OSSL_INTMAX_MIN __MININT__(ossl_intmax_t)103#define OSSL_INTMAX_MAX __MAXINT__(ossl_intmax_t)104#define OSSL_UINTMAX_MAX __MAXUINT__(ossl_uintmax_t)105#endif106107#endif108109110