From 8e9642e9627dfa38b7c9620ed5df83cf958af0a4 Mon Sep 17 00:00:00 2001 From: Leonard Chan Date: Thu, 25 May 2023 23:24:34 +0000 Subject: [PATCH] Never inline uECC_vli_add/sub/clear. Clang will unconditionally inline these large assembly functions at -Oz. This should be addressed upstream, but in the meantime, we can save some kilobytes by forcing them to never be inlined. --- asm_arm.inc | 2 ++ uECC.c | 1 + 2 files changed, 3 insertions(+) diff --git a/asm_arm.inc b/asm_arm.inc index 12e747f..c5231aa 100644 --- a/asm_arm.inc +++ b/asm_arm.inc @@ -43,6 +43,7 @@ #if (uECC_OPTIMIZATION_LEVEL >= 2) +__attribute__((noinline)) uECC_VLI_API uECC_word_t uECC_vli_add(uECC_word_t *result, const uECC_word_t *left, const uECC_word_t *right, @@ -97,6 +98,7 @@ uECC_VLI_API uECC_word_t uECC_vli_add(uECC_word_t *result, } #define asm_add 1 +__attribute__((noinline)) uECC_VLI_API uECC_word_t uECC_vli_sub(uECC_word_t *result, const uECC_word_t *left, const uECC_word_t *right, diff --git a/uECC.c b/uECC.c index a3d502c..862aa6d 100644 --- a/uECC.c +++ b/uECC.c @@ -209,6 +209,7 @@ int uECC_curve_public_key_size(uECC_Curve curve) { } #if !asm_clear +__attribute__((noinline)) uECC_VLI_API void uECC_vli_clear(uECC_word_t *vli, wordcount_t num_words) { wordcount_t i; for (i = 0; i < num_words; ++i) {