Simplify fast ARM asm for add/sub
diff --git a/asm_arm.inc b/asm_arm.inc
index 7d02b52..572f9da 100644
--- a/asm_arm.inc
+++ b/asm_arm.inc
@@ -51,9 +51,9 @@
wordcount_t num_words) {
#if (uECC_MAX_WORDS != uECC_MIN_WORDS)
#if (uECC_PLATFORM == uECC_arm_thumb) || (uECC_PLATFORM == uECC_arm_thumb2)
- uint32_t jump = ((uECC_MAX_WORDS - num_words) * 4 + 5) * 2 + 1;
+ uint32_t jump = (uECC_MAX_WORDS - num_words) * 4 * 2 + 1;
#else /* ARM */
- uint32_t jump = ((uECC_MAX_WORDS - num_words) * 4 + 5) * 4;
+ uint32_t jump = (uECC_MAX_WORDS - num_words) * 4 * 4;
#endif
#endif
uint32_t carry;
@@ -64,7 +64,7 @@
".syntax unified \n\t"
"movs %[carry], #0 \n\t"
#if (uECC_MAX_WORDS != uECC_MIN_WORDS)
- "mov %[left], pc \n\t"
+ "adr %[left], 1f \n\t"
"adds %[jump], %[left] \n\t"
#endif
@@ -76,7 +76,7 @@
#if (uECC_MAX_WORDS != uECC_MIN_WORDS)
"bx %[jump] \n\t"
#endif
-
+ "1: \n\t"
"ldmia %[lptr]!, {%[left]} \n\t"
"ldmia %[rptr]!, {%[right]} \n\t"
"adcs %[left], %[right] \n\t"
@@ -136,9 +136,9 @@
wordcount_t num_words) {
#if (uECC_MAX_WORDS != uECC_MIN_WORDS)
#if (uECC_PLATFORM == uECC_arm_thumb) || (uECC_PLATFORM == uECC_arm_thumb2)
- uint32_t jump = ((uECC_MAX_WORDS - num_words) * 4 + 5) * 2 + 1;
+ uint32_t jump = (uECC_MAX_WORDS - num_words) * 4 * 2 + 1;
#else /* ARM */
- uint32_t jump = ((uECC_MAX_WORDS - num_words) * 4 + 5) * 4;
+ uint32_t jump = (uECC_MAX_WORDS - num_words) * 4 * 4;
#endif
#endif
uint32_t carry;
@@ -149,7 +149,7 @@
".syntax unified \n\t"
"movs %[carry], #0 \n\t"
#if (uECC_MAX_WORDS != uECC_MIN_WORDS)
- "mov %[left], pc \n\t"
+ "adr %[left], 1f \n\t"
"adds %[jump], %[left] \n\t"
#endif
@@ -161,7 +161,7 @@
#if (uECC_MAX_WORDS != uECC_MIN_WORDS)
"bx %[jump] \n\t"
#endif
-
+ "1: \n\t"
"ldmia %[lptr]!, {%[left]} \n\t"
"ldmia %[rptr]!, {%[right]} \n\t"
"sbcs %[left], %[right] \n\t"