123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- /* Copyright 2015, Kenneth MacKay. Licensed under the BSD 2-clause license. */
- #ifndef _UECC_TYPES_H_
- #define _UECC_TYPES_H_
- #ifndef uECC_PLATFORM
- #if __AVR__
- #define uECC_PLATFORM uECC_avr
- #elif defined(__thumb2__) || defined(_M_ARMT) /* I think MSVC only supports Thumb-2 targets */
- #define uECC_PLATFORM uECC_arm_thumb2
- #elif defined(__thumb__)
- #define uECC_PLATFORM uECC_arm_thumb
- #elif defined(__arm__) || defined(_M_ARM)
- #define uECC_PLATFORM uECC_arm
- #elif defined(__aarch64__)
- #define uECC_PLATFORM uECC_arm64
- #elif defined(__i386__) || defined(_M_IX86) || defined(_X86_) || defined(__I86__)
- #define uECC_PLATFORM uECC_x86
- #elif defined(__amd64__) || defined(_M_X64)
- #define uECC_PLATFORM uECC_x86_64
- #else
- #define uECC_PLATFORM uECC_arch_other
- #endif
- #endif
- #ifndef uECC_ARM_USE_UMAAL
- #if (uECC_PLATFORM == uECC_arm) && (__ARM_ARCH >= 6)
- #define uECC_ARM_USE_UMAAL 1
- #elif (uECC_PLATFORM == uECC_arm_thumb2) && (__ARM_ARCH >= 6) && !__ARM_ARCH_7M__
- #define uECC_ARM_USE_UMAAL 1
- #else
- #define uECC_ARM_USE_UMAAL 0
- #endif
- #endif
- #ifndef uECC_WORD_SIZE
- #if uECC_PLATFORM == uECC_avr
- #define uECC_WORD_SIZE 1
- #elif (uECC_PLATFORM == uECC_x86_64 || uECC_PLATFORM == uECC_arm64)
- #define uECC_WORD_SIZE 8
- #else
- #define uECC_WORD_SIZE 4
- #endif
- #endif
- #if (uECC_WORD_SIZE != 1) && (uECC_WORD_SIZE != 4) && (uECC_WORD_SIZE != 8)
- #error "Unsupported value for uECC_WORD_SIZE"
- #endif
- #if ((uECC_PLATFORM == uECC_avr) && (uECC_WORD_SIZE != 1))
- #pragma message ("uECC_WORD_SIZE must be 1 for AVR")
- #undef uECC_WORD_SIZE
- #define uECC_WORD_SIZE 1
- #endif
- #if ((uECC_PLATFORM == uECC_arm || uECC_PLATFORM == uECC_arm_thumb || \
- uECC_PLATFORM == uECC_arm_thumb2) && \
- (uECC_WORD_SIZE != 4))
- #pragma message ("uECC_WORD_SIZE must be 4 for ARM")
- #undef uECC_WORD_SIZE
- #define uECC_WORD_SIZE 4
- #endif
- #if defined(__SIZEOF_INT128__) || ((__clang_major__ * 100 + __clang_minor__) >= 302)
- #define SUPPORTS_INT128 1
- #else
- #define SUPPORTS_INT128 0
- #endif
- typedef int8_t wordcount_t;
- typedef int16_t bitcount_t;
- typedef int8_t cmpresult_t;
- #if (uECC_WORD_SIZE == 1)
- typedef uint8_t uECC_word_t;
- typedef uint16_t uECC_dword_t;
- #define HIGH_BIT_SET 0x80
- #define uECC_WORD_BITS 8
- #define uECC_WORD_BITS_SHIFT 3
- #define uECC_WORD_BITS_MASK 0x07
- #elif (uECC_WORD_SIZE == 4)
- typedef uint32_t uECC_word_t;
- typedef uint64_t uECC_dword_t;
- #define HIGH_BIT_SET 0x80000000
- #define uECC_WORD_BITS 32
- #define uECC_WORD_BITS_SHIFT 5
- #define uECC_WORD_BITS_MASK 0x01F
- #elif (uECC_WORD_SIZE == 8)
- typedef uint64_t uECC_word_t;
- #if SUPPORTS_INT128
- typedef unsigned __int128 uECC_dword_t;
- #endif
- #define HIGH_BIT_SET 0x8000000000000000ull
- #define uECC_WORD_BITS 64
- #define uECC_WORD_BITS_SHIFT 6
- #define uECC_WORD_BITS_MASK 0x03F
- #endif /* uECC_WORD_SIZE */
- #endif /* _UECC_TYPES_H_ */
|