Path: blob/main/crypto/openssl/include/internal/numbers.h
34879 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# endif868788# ifndef INT128_MAX89# if defined(__SIZEOF_INT128__) && __SIZEOF_INT128__ == 1690typedef __int128_t int128_t;91typedef __uint128_t uint128_t;92# define INT128_MIN __MININT__(int128_t)93# define INT128_MAX __MAXINT__(int128_t)94# define UINT128_MAX __MAXUINT__(uint128_t)95# endif96# endif9798# ifndef SIZE_MAX99# define SIZE_MAX __MAXUINT__(size_t)100# endif101102# ifndef OSSL_INTMAX_MAX103# define OSSL_INTMAX_MIN __MININT__(ossl_intmax_t)104# define OSSL_INTMAX_MAX __MAXINT__(ossl_intmax_t)105# define OSSL_UINTMAX_MAX __MAXUINT__(ossl_uintmax_t)106# endif107108#endif109110111112