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