diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2021-10-06 16:10:49 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2021-10-06 16:10:49 +0200 |
commit | 22fd8fd3f4c271d6037753165131c7c35a039762 (patch) | |
tree | f546315c3bf2134f107c1b5d8d89d702ec4dfa26 /networking/tls_sp_c32.c | |
parent | d74993d31dc91b7da6519527a94b4795dd8f6814 (diff) | |
download | busybox-w32-22fd8fd3f4c271d6037753165131c7c35a039762.tar.gz busybox-w32-22fd8fd3f4c271d6037753165131c7c35a039762.tar.bz2 busybox-w32-22fd8fd3f4c271d6037753165131c7c35a039762.zip |
tls: P256: tweak arm assembly (currently disabled)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'networking/tls_sp_c32.c')
-rw-r--r-- | networking/tls_sp_c32.c | 177 |
1 files changed, 89 insertions, 88 deletions
diff --git a/networking/tls_sp_c32.c b/networking/tls_sp_c32.c index 76f0770c2..532047739 100644 --- a/networking/tls_sp_c32.c +++ b/networking/tls_sp_c32.c | |||
@@ -393,7 +393,7 @@ static void sp_256_mul_8(sp_digit* r, const sp_digit* a, const sp_digit* b) | |||
393 | "\n subs r3, r5, #28" | 393 | "\n subs r3, r5, #28" |
394 | "\n movcc r3, #0" | 394 | "\n movcc r3, #0" |
395 | "\n sub r4, r5, r3" | 395 | "\n sub r4, r5, r3" |
396 | "\n 2:" | 396 | "\n 2:" |
397 | "\n ldr r14, [%[a], r3]" | 397 | "\n ldr r14, [%[a], r3]" |
398 | "\n ldr r12, [%[b], r4]" | 398 | "\n ldr r12, [%[b], r4]" |
399 | "\n umull r9, r10, r14, r12" | 399 | "\n umull r9, r10, r14, r12" |
@@ -416,7 +416,7 @@ static void sp_256_mul_8(sp_digit* r, const sp_digit* a, const sp_digit* b) | |||
416 | "\n ble 1b" | 416 | "\n ble 1b" |
417 | "\n str r6, [%[r], r5]" | 417 | "\n str r6, [%[r], r5]" |
418 | : [r] "r" (tmp), [a] "r" (a), [b] "r" (b) | 418 | : [r] "r" (tmp), [a] "r" (a), [b] "r" (b) |
419 | : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r14", "r12" | 419 | : "memory", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r12", "r14" |
420 | ); | 420 | ); |
421 | memcpy(r, tmp, sizeof(tmp)); | 421 | memcpy(r, tmp, sizeof(tmp)); |
422 | #else | 422 | #else |
@@ -732,97 +732,98 @@ static void sp_256_mont_reduce_8(sp_digit* a, sp_digit* m, sp_digit mp) | |||
732 | 732 | ||
733 | asm volatile ( | 733 | asm volatile ( |
734 | # i = 0 | 734 | # i = 0 |
735 | mov r12, #0 # i = 0 | 735 | mov r12, #0 |
736 | ldr r10, [%[a], #0] # r10 = a[0] | 736 | ldr r10, [%[a], #0] |
737 | ldr r14, [%[a], #4] # r14 = a[1] | 737 | ldr r14, [%[a], #4] |
738 | 1: | 738 | 1: |
739 | # mu = a[i] * mp # | 739 | # mu = a[i] * mp |
740 | mul r8, %[mp], r10 # mu = a[i] * mp | 740 | mul r8, %[mp], r10 |
741 | # a[i+0] += m[0] * mu # | 741 | # a[i+0] += m[0] * mu |
742 | ldr r7, [%[m], #0] # a[i+0] += m[0] * mu | 742 | ldr r7, [%[m], #0] |
743 | ldr r9, [%[a], #0] # | 743 | ldr r9, [%[a], #0] |
744 | umull r6, r7, r8, r7 # r7:r6 = mu * m[0] | 744 | umull r6, r7, r8, r7 |
745 | adds r10, r10, r6 # r5:r10 += r7:r6 | 745 | adds r10, r10, r6 |
746 | adc r5, r7, #0 # | 746 | adc r5, r7, #0 |
747 | # a[i+1] += m[1] * mu # | 747 | # a[i+1] += m[1] * mu |
748 | ldr r7, [%[m], #4] # a[i+1] += m[1] * mu | 748 | ldr r7, [%[m], #4] |
749 | ldr r9, [%[a], #4] # | 749 | ldr r9, [%[a], #4] |
750 | umull r6, r7, r8, r7 # r7:r6 = mu * m[1] | 750 | umull r6, r7, r8, r7 |
751 | adds r10, r14, r6 # r4:r10 = r7:r14 + r7:r6 | 751 | adds r10, r14, r6 |
752 | adc r4, r7, #0 # | 752 | adc r4, r7, #0 |
753 | adds r10, r10, r5 # r4:r10 += r5 | 753 | adds r10, r10, r5 |
754 | adc r4, r4, #0 # | 754 | adc r4, r4, #0 |
755 | # a[i+2] += m[2] * mu # | 755 | # a[i+2] += m[2] * mu |
756 | ldr r7, [%[m], #8] # a[i+2] += m[2] * mu | 756 | ldr r7, [%[m], #8] |
757 | ldr r14, [%[a], #8] # | 757 | ldr r14, [%[a], #8] |
758 | umull r6, r7, r8, r7 # | 758 | umull r6, r7, r8, r7 |
759 | adds r14, r14, r6 # | 759 | adds r14, r14, r6 |
760 | adc r5, r7, #0 # | 760 | adc r5, r7, #0 |
761 | adds r14, r14, r4 # | 761 | adds r14, r14, r4 |
762 | adc r5, r5, #0 # | 762 | adc r5, r5, #0 |
763 | # a[i+3] += m[3] * mu # | 763 | # a[i+3] += m[3] * mu |
764 | ldr r7, [%[m], #12] # a[i+3] += m[3] * mu | 764 | ldr r7, [%[m], #12] |
765 | ldr r9, [%[a], #12] # | 765 | ldr r9, [%[a], #12] |
766 | umull r6, r7, r8, r7 # | 766 | umull r6, r7, r8, r7 |
767 | adds r9, r9, r6 # | 767 | adds r9, r9, r6 |
768 | adc r4, r7, #0 # | 768 | adc r4, r7, #0 |
769 | adds r9, r9, r5 # | 769 | adds r9, r9, r5 |
770 | str r9, [%[a], #12] # a[3] = r9 | 770 | str r9, [%[a], #12] |
771 | adc r4, r4, #0 # | 771 | adc r4, r4, #0 |
772 | # a[i+4] += m[4] * mu # | 772 | # a[i+4] += m[4] * mu |
773 | ldr r7, [%[m], #16] # a[i+4] += m[4] * mu | 773 | ldr r7, [%[m], #16] |
774 | ldr r9, [%[a], #16] # | 774 | ldr r9, [%[a], #16] |
775 | umull r6, r7, r8, r7 # | 775 | umull r6, r7, r8, r7 |
776 | adds r9, r9, r6 # | 776 | adds r9, r9, r6 |
777 | adc r5, r7, #0 # | 777 | adc r5, r7, #0 |
778 | adds r9, r9, r4 # | 778 | adds r9, r9, r4 |
779 | str r9, [%[a], #16] # a[4] = r9 | 779 | str r9, [%[a], #16] |
780 | adc r5, r5, #0 # | 780 | adc r5, r5, #0 |
781 | # a[i+5] += m[5] * mu # | 781 | # a[i+5] += m[5] * mu |
782 | ldr r7, [%[m], #20] # a[i+5] += m[5] * mu | 782 | ldr r7, [%[m], #20] |
783 | ldr r9, [%[a], #20] # | 783 | ldr r9, [%[a], #20] |
784 | umull r6, r7, r8, r7 # | 784 | umull r6, r7, r8, r7 |
785 | adds r9, r9, r6 # | 785 | adds r9, r9, r6 |
786 | adc r4, r7, #0 # | 786 | adc r4, r7, #0 |
787 | adds r9, r9, r5 # | 787 | adds r9, r9, r5 |
788 | str r9, [%[a], #20] # a[5] = r9 | 788 | str r9, [%[a], #20] |
789 | adc r4, r4, #0 # | 789 | adc r4, r4, #0 |
790 | # a[i+6] += m[6] * mu # | 790 | # a[i+6] += m[6] * mu |
791 | ldr r7, [%[m], #24] # a[i+6] += m[6] * mu | 791 | ldr r7, [%[m], #24] |
792 | ldr r9, [%[a], #24] # | 792 | ldr r9, [%[a], #24] |
793 | umull r6, r7, r8, r7 # | 793 | umull r6, r7, r8, r7 |
794 | adds r9, r9, r6 # | 794 | adds r9, r9, r6 |
795 | adc r5, r7, #0 # | 795 | adc r5, r7, #0 |
796 | adds r9, r9, r4 # | 796 | adds r9, r9, r4 |
797 | str r9, [%[a], #24] # a[6] = r9 | 797 | str r9, [%[a], #24] |
798 | adc r5, r5, #0 # | 798 | adc r5, r5, #0 |
799 | # a[i+7] += m[7] * mu # | 799 | # a[i+7] += m[7] * mu |
800 | ldr r7, [%[m], #28] # a[i+7] += m[7] * mu | 800 | ldr r7, [%[m], #28] |
801 | ldr r9, [%[a], #28] # | 801 | ldr r9, [%[a], #28] |
802 | umull r6, r7, r8, r7 # | 802 | umull r6, r7, r8, r7 |
803 | adds r5, r5, r6 # | 803 | adds r5, r5, r6 |
804 | adcs r7, r7, %[ca] # | 804 | adcs r7, r7, %[ca] |
805 | mov %[ca], #0 # | 805 | mov %[ca], #0 |
806 | adc %[ca], %[ca], %[ca] # ca = CF | 806 | adc %[ca], %[ca], %[ca] |
807 | adds r9, r9, r5 # | 807 | adds r9, r9, r5 |
808 | str r9, [%[a], #28] # a[7] = r9 | 808 | str r9, [%[a], #28] |
809 | ldr r9, [%[a], #32] # r9 = a[8] | 809 | ldr r9, [%[a], #32] |
810 | adcs r9, r9, r7 # | 810 | adcs r9, r9, r7 |
811 | str r9, [%[a], #32] # a[8] = r9 | 811 | str r9, [%[a], #32] |
812 | adc %[ca], %[ca], #0 # ca += CF | 812 | adc %[ca], %[ca], #0 |
813 | # i += 1 # i++ | 813 | # i += 1 |
814 | add %[a], %[a], #4 # a++ | 814 | add %[a], %[a], #4 |
815 | add r12, r12, #4 # i += 4 | 815 | add r12, r12, #4 |
816 | cmp r12, #32 # if (i < 32) | 816 | cmp r12, #32 |
817 | blt 1b # goto 1 | 817 | blt 1b |
818 | 818 | ||
819 | str r10, [%[a], #0] # a[0] = r10 | 819 | str r10, [%[a], #0] |
820 | str r14, [%[a], #4] # a[1] = r14 | 820 | str r14, [%[a], #4] |
821 | : [ca] "+r" (ca), [a] "+r" (a) | 821 | : [ca] "+r" (ca), [a] "+r" (a) |
822 | : [m] "r" (m), [mp] "r" (mp) | 822 | : [m] "r" (m), [mp] "r" (mp) |
823 | : "memory", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r14", "r12" | 823 | : "memory", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r12", "r14" |
824 | ); | 824 | ); |
825 | 825 | ||
826 | memcpy(a, a + 8, 32); | ||
826 | if (ca) | 827 | if (ca) |
827 | a -= m; | 828 | a -= m; |
828 | } | 829 | } |