micro-ecc: 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. Bug: b/244452330 Change-Id: I7a5974c659d717ae05e14878c1e3b3b29f89c279 Reviewed-on: https://pigweed-review.googlesource.com/c/third_party/github/kmackay/micro-ecc/+/149056 Reviewed-by: Prabhu Karthikeyan Rajasekaran <prabhukr@google.com>
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 @@ } #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 @@ } #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) {