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) {