aboutsummaryrefslogtreecommitdiff
path: root/networking/tls_sp_c32.c
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2021-10-06 16:10:49 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2021-10-06 16:10:49 +0200
commit22fd8fd3f4c271d6037753165131c7c35a039762 (patch)
treef546315c3bf2134f107c1b5d8d89d702ec4dfa26 /networking/tls_sp_c32.c
parentd74993d31dc91b7da6519527a94b4795dd8f6814 (diff)
downloadbusybox-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.c177
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]
7381: 7381:
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}