1#ifndef SECP256K1_FIELD_OPTIMAL_HPP
2#define SECP256K1_FIELD_OPTIMAL_HPP
43#include "secp256k1/config.hpp"
56#if defined(SECP256K1_PLATFORM_STM32)
60 #define SECP256K1_OPTIMAL_TIER_64 1
62#elif defined(SECP256K1_HAS_ARM64_ASM) || defined(__aarch64__) || defined(_M_ARM64)
70 #define SECP256K1_OPTIMAL_TIER_26 1
71 #define SECP256K1_OPTIMAL_ARM64 1
76#elif !defined(SECP256K1_NO_INT128) && \
77 (defined(__SIZEOF_INT128__) || \
78 (defined(__GNUC__) && !defined(__i386__) && !defined(__arm__) && !defined(__xtensa__)))
84 #define SECP256K1_OPTIMAL_TIER_52 1
87#elif defined(SECP256K1_32BIT)
89 #if defined(CONFIG_IDF_TARGET_ESP32S3) || defined(SECP256K1_FORCE_TIER_64)
93 #define SECP256K1_OPTIMAL_TIER_64 1
99 #define SECP256K1_OPTIMAL_TIER_26 1
105 #define SECP256K1_OPTIMAL_TIER_64 1
112#if defined(SECP256K1_OPTIMAL_TIER_52)
114#elif defined(SECP256K1_OPTIMAL_TIER_26)
123#if defined(SECP256K1_OPTIMAL_TIER_52)
126#elif defined(SECP256K1_OPTIMAL_TIER_26)
128 #if defined(SECP256K1_OPTIMAL_ARM64)
129 inline constexpr const char*
kOptimalTierName =
"10x26 (ARM64 -- wins all field ops)";
135 #if defined(SECP256K1_PLATFORM_STM32)
136 inline constexpr const char*
kOptimalTierName =
"4x64 (STM32 Comba -- already optimal)";
137 #elif defined(CONFIG_IDF_TARGET_ESP32S3)
138 inline constexpr const char*
kOptimalTierName =
"4x64 (ESP32-S3 -- native wins mul)";
149#if defined(SECP256K1_OPTIMAL_TIER_52)
151#elif defined(SECP256K1_OPTIMAL_TIER_26)
159#if defined(SECP256K1_OPTIMAL_TIER_52)
161#elif defined(SECP256K1_OPTIMAL_TIER_26)
constexpr const char * kOptimalTierName
FieldElement from_optimal(const OptimalFieldElement &ofe) noexcept
OptimalFieldElement to_optimal(const FieldElement &fe) noexcept
constexpr FieldTier kOptimalTier
FieldElement OptimalFieldElement
static FieldElement26 from_fe(const FieldElement &fe) noexcept
static FieldElement52 from_fe(const FieldElement &fe) noexcept