Skip to content

Commit 8910cae

Browse files
committed
Thumb2 SP ASM: mont_sub fix
Always use all the parameters and always use the parameter name and not the assumed register.
1 parent 49ed1fa commit 8910cae

File tree

1 file changed

+38
-46
lines changed

1 file changed

+38
-46
lines changed

wolfcrypt/src/sp_cortexm.c

Lines changed: 38 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -35850,22 +35850,23 @@ WC_OMIT_FRAME_POINTER SP_NOINLINE static void sp_256_mont_sub_8(sp_digit* r,
3585035850
register sp_digit* r __asm__ ("r0") = (sp_digit*)r_p;
3585135851
register const sp_digit* a __asm__ ("r1") = (const sp_digit*)a_p;
3585235852
register const sp_digit* b __asm__ ("r2") = (const sp_digit*)b_p;
35853+
register const sp_digit* m __asm__ ("r3") = (const sp_digit*)m_p;
3585335854
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
3585435855

3585535856
__asm__ __volatile__ (
3585635857
"MOV lr, #0x0\n\t"
3585735858
"LDM %[a], {r5, r6, r7, r8, r9, r10, r11, r12}\n\t"
3585835859
"LDM %[b]!, {r3, r4}\n\t"
35859-
"SUBS r5, r5, r3\n\t"
35860+
"SUBS r5, r5, %[m]\n\t"
3586035861
"SBCS r6, r6, r4\n\t"
3586135862
"LDM %[b]!, {r3, r4}\n\t"
35862-
"SBCS r7, r7, r3\n\t"
35863+
"SBCS r7, r7, %[m]\n\t"
3586335864
"SBCS r8, r8, r4\n\t"
3586435865
"LDM %[b]!, {r3, r4}\n\t"
35865-
"SBCS r9, r9, r3\n\t"
35866+
"SBCS r9, r9, %[m]\n\t"
3586635867
"SBCS r10, r10, r4\n\t"
3586735868
"LDM %[b]!, {r3, r4}\n\t"
35868-
"SBCS r11, r11, r3\n\t"
35869+
"SBCS r11, r11, %[m]\n\t"
3586935870
"SBCS r12, r12, r4\n\t"
3587035871
"SBC lr, lr, #0x0\n\t"
3587135872
"ADDS r5, r5, lr\n\t"
@@ -35886,16 +35887,11 @@ WC_OMIT_FRAME_POINTER SP_NOINLINE static void sp_256_mont_sub_8(sp_digit* r,
3588635887
"ADCS r11, r11, lr, LSR #31\n\t"
3588735888
"ADC r12, r12, lr\n\t"
3588835889
"STM %[r], {r5, r6, r7, r8, r9, r10, r11, r12}\n\t"
35889-
: [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
35890+
: [r] "+r" (r), [a] "+r" (a), [b] "+r" (b), [m] "+r" (m)
3589035891
:
35891-
: "memory", "cc", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10",
35892-
"r11", "r12", "lr"
35892+
: "memory", "cc", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11",
35893+
"r12", "lr"
3589335894
);
35894-
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
35895-
(void)m_p;
35896-
#else
35897-
(void)m;
35898-
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
3589935895
}
3590035896

3590135897
/* Divide the number by 2 mod the modulus (prime). (r = a / 2 % m)
@@ -45717,7 +45713,7 @@ WC_OMIT_FRAME_POINTER SP_NOINLINE static void sp_384_mont_sub_12(sp_digit* r,
4571745713
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
4571845714

4571945715
__asm__ __volatile__ (
45720-
"MOV r3, #0x0\n\t"
45716+
"MOV %[m], #0x0\n\t"
4572145717
"LDM %[a]!, {r8, r9, r10, r11}\n\t"
4572245718
"LDM %[b]!, {r4, r5, r6, r7}\n\t"
4572345719
"SUBS r8, r8, r4\n\t"
@@ -45739,47 +45735,47 @@ WC_OMIT_FRAME_POINTER SP_NOINLINE static void sp_384_mont_sub_12(sp_digit* r,
4573945735
"SBCS r10, r10, r6\n\t"
4574045736
"SBCS r11, r11, r7\n\t"
4574145737
"STM %[r]!, {r8, r9, r10, r11}\n\t"
45742-
"SBC r3, r3, #0x0\n\t"
45738+
"SBC %[m], %[m], #0x0\n\t"
4574345739
"SUB %[r], %[r], #0x30\n\t"
45744-
"LSR r12, r3, #1\n\t"
45740+
"LSR r12, %[m], #1\n\t"
4574545741
"LDM %[r], {r8, r9, r10, r11}\n\t"
45746-
"ADDS r8, r8, r3\n\t"
45742+
"ADDS r8, r8, %[m]\n\t"
4574745743
"ADCS r9, r9, #0x0\n\t"
4574845744
"ADCS r10, r10, #0x0\n\t"
45749-
"ADCS r11, r11, r3\n\t"
45745+
"ADCS r11, r11, %[m]\n\t"
4575045746
"STM %[r]!, {r8, r9, r10, r11}\n\t"
4575145747
"LDM %[r], {r8, r9, r10, r11}\n\t"
4575245748
"ADCS r8, r8, r12, LSL #1\n\t"
45753-
"ADCS r9, r9, r3\n\t"
45754-
"ADCS r10, r10, r3\n\t"
45755-
"ADCS r11, r11, r3\n\t"
45749+
"ADCS r9, r9, %[m]\n\t"
45750+
"ADCS r10, r10, %[m]\n\t"
45751+
"ADCS r11, r11, %[m]\n\t"
4575645752
"STM %[r]!, {r8, r9, r10, r11}\n\t"
4575745753
"LDM %[r], {r8, r9, r10, r11}\n\t"
45758-
"ADCS r8, r8, r3\n\t"
45759-
"ADCS r9, r9, r3\n\t"
45760-
"ADCS r10, r10, r3\n\t"
45761-
"ADCS r11, r11, r3\n\t"
45754+
"ADCS r8, r8, %[m]\n\t"
45755+
"ADCS r9, r9, %[m]\n\t"
45756+
"ADCS r10, r10, %[m]\n\t"
45757+
"ADCS r11, r11, %[m]\n\t"
4576245758
"STM %[r]!, {r8, r9, r10, r11}\n\t"
45763-
"ADC r3, r3, #0x0\n\t"
45759+
"ADC %[m], %[m], #0x0\n\t"
4576445760
"SUB %[r], %[r], #0x30\n\t"
45765-
"LSR r12, r3, #1\n\t"
45761+
"LSR r12, %[m], #1\n\t"
4576645762
"LDM %[r], {r8, r9, r10, r11}\n\t"
45767-
"ADDS r8, r8, r3\n\t"
45763+
"ADDS r8, r8, %[m]\n\t"
4576845764
"ADCS r9, r9, #0x0\n\t"
4576945765
"ADCS r10, r10, #0x0\n\t"
45770-
"ADCS r11, r11, r3\n\t"
45766+
"ADCS r11, r11, %[m]\n\t"
4577145767
"STM %[r]!, {r8, r9, r10, r11}\n\t"
4577245768
"LDM %[r], {r8, r9, r10, r11}\n\t"
4577345769
"ADCS r8, r8, r12, LSL #1\n\t"
45774-
"ADCS r9, r9, r3\n\t"
45775-
"ADCS r10, r10, r3\n\t"
45776-
"ADCS r11, r11, r3\n\t"
45770+
"ADCS r9, r9, %[m]\n\t"
45771+
"ADCS r10, r10, %[m]\n\t"
45772+
"ADCS r11, r11, %[m]\n\t"
4577745773
"STM %[r]!, {r8, r9, r10, r11}\n\t"
4577845774
"LDM %[r], {r8, r9, r10, r11}\n\t"
45779-
"ADCS r8, r8, r3\n\t"
45780-
"ADCS r9, r9, r3\n\t"
45781-
"ADCS r10, r10, r3\n\t"
45782-
"ADC r11, r11, r3\n\t"
45775+
"ADCS r8, r8, %[m]\n\t"
45776+
"ADCS r9, r9, %[m]\n\t"
45777+
"ADCS r10, r10, %[m]\n\t"
45778+
"ADC r11, r11, %[m]\n\t"
4578345779
"STM %[r]!, {r8, r9, r10, r11}\n\t"
4578445780
: [r] "+r" (r), [a] "+r" (a), [b] "+r" (b), [m] "+r" (m)
4578545781
:
@@ -57482,10 +57478,11 @@ WC_OMIT_FRAME_POINTER SP_NOINLINE static void sp_521_mont_sub_17(sp_digit* r,
5748257478
register sp_digit* r __asm__ ("r0") = (sp_digit*)r_p;
5748357479
register const sp_digit* a __asm__ ("r1") = (const sp_digit*)a_p;
5748457480
register const sp_digit* b __asm__ ("r2") = (const sp_digit*)b_p;
57481+
register const sp_digit* m __asm__ ("r3") = (const sp_digit*)m_p;
5748557482
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
5748657483

5748757484
__asm__ __volatile__ (
57488-
"MOV r3, #0x0\n\t"
57485+
"MOV %[m], #0x0\n\t"
5748957486
"LDM %[a]!, {r8, r9, r10, r11}\n\t"
5749057487
"LDM %[b]!, {r4, r5, r6, r7}\n\t"
5749157488
"SUBS r8, r8, r4\n\t"
@@ -57518,13 +57515,13 @@ WC_OMIT_FRAME_POINTER SP_NOINLINE static void sp_521_mont_sub_17(sp_digit* r,
5751857515
"LDM %[b]!, {r4}\n\t"
5751957516
"SBCS r8, r8, r4\n\t"
5752057517
"MOV r12, #0x1ff\n\t"
57521-
"ASR r3, r8, #9\n\t"
57518+
"ASR %[m], r8, #9\n\t"
5752257519
"AND r8, r8, r12\n\t"
57523-
"neg r3, r3\n\t"
57520+
"neg %[m], %[m]\n\t"
5752457521
"STM %[r]!, {r8}\n\t"
5752557522
"SUB %[r], %[r], #0x44\n\t"
5752657523
"LDM %[r], {r4, r5, r6, r7, r8, r9, r10, r11}\n\t"
57527-
"SUBS r4, r4, r3\n\t"
57524+
"SUBS r4, r4, %[m]\n\t"
5752857525
"SBCS r5, r5, #0x0\n\t"
5752957526
"SBCS r6, r6, #0x0\n\t"
5753057527
"SBCS r7, r7, #0x0\n\t"
@@ -57546,16 +57543,11 @@ WC_OMIT_FRAME_POINTER SP_NOINLINE static void sp_521_mont_sub_17(sp_digit* r,
5754657543
"LDM %[r], {r4}\n\t"
5754757544
"SBCS r4, r4, #0x0\n\t"
5754857545
"STM %[r]!, {r4}\n\t"
57549-
: [r] "+r" (r), [a] "+r" (a), [b] "+r" (b)
57546+
: [r] "+r" (r), [a] "+r" (a), [b] "+r" (b), [m] "+r" (m)
5755057547
:
5755157548
: "memory", "cc", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11",
57552-
"r3", "r12"
57549+
"r12"
5755357550
);
57554-
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
57555-
(void)m_p;
57556-
#else
57557-
(void)m;
57558-
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
5755957551
}
5756057552

5756157553
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG

0 commit comments

Comments
 (0)