]> git.ipfire.org Git - thirdparty/nettle.git/commitdiff
ARM assembly for ecc_192_modp.
authorNiels Möller <nisse@lysator.liu.se>
Thu, 28 Feb 2013 09:46:18 +0000 (10:46 +0100)
committerNiels Möller <nisse@lysator.liu.se>
Thu, 28 Feb 2013 09:46:18 +0000 (10:46 +0100)
ChangeLog
armv7/ecc-192-modp.asm [new file with mode: 0644]

index f11ea02ed8e731e58744ee413ce677a5fe8b25b2..ce7a8e9e7d645354179b47115c4cc15b41335a6f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,10 +1,16 @@
+2013-02-28  Niels Möller  <nisse@lysator.liu.se>
+
+       * armv7/ecc-192-modp.asm: New file. 2.5 time speedup over C
+       version.
+
 2013-02-27  Niels Möller  <nisse@lysator.liu.se>
 
        * ecc-192.c: Check HAVE_NATIVE_ecc_192_modp, and use native
        version if available.
        (ecc_192_modp): Fixed carry handling bug in 32-bit version.
 
-       * x86_64/ecc-192-modp.asm: New file.
+       * x86_64/ecc-192-modp.asm: New file. 3.8 times speedup over C
+       version.
 
        * configure.ac (OPT_ASM_SOURCES): New substituted variable.
        (asm_replace_list, asm_optional_list): New variables. For files in
diff --git a/armv7/ecc-192-modp.asm b/armv7/ecc-192-modp.asm
new file mode 100644 (file)
index 0000000..1b226e3
--- /dev/null
@@ -0,0 +1,93 @@
+C nettle, low-level cryptographics library
+C
+C Copyright (C) 2013, Niels Möller
+C
+C The nettle library is free software; you can redistribute it and/or modify
+C it under the terms of the GNU Lesser General Public License as published by
+C the Free Software Foundation; either version 2.1 of the License, or (at your
+C option) any later version.
+C
+C The nettle library is distributed in the hope that it will be useful, but
+C WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+C or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
+C License for more details.
+C
+C You should have received a copy of the GNU Lesser General Public License
+C along with the nettle library; see the file COPYING.LIB.  If not, write to
+C the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+C MA 02111-1301, USA.
+
+       .file "ecc-192-modp.asm"
+       .arm
+
+define(<HP>, <r0>) C Overlaps unused ecc argument
+define(<RP>, <r1>)
+
+define(<T0>, <r2>)
+define(<T1>, <r3>)
+define(<T2>, <r4>)
+define(<T3>, <r5>)
+define(<T4>, <r6>)
+define(<T5>, <r7>)
+define(<T6>, <r8>)
+define(<T7>, <r10>)
+define(<H0>, <T0>) C Overlaps T0 and T1
+define(<H1>, <T1>)
+define(<C2>, <HP>)
+define(<C4>, <r12>)
+
+       C ecc_192_modp (const struct ecc_curve *ecc, mp_limb_t *rp)
+       .text
+       .align 2
+
+PROLOGUE(nettle_ecc_192_modp)
+       push    {r4,r5,r6,r7,r8,r10}
+       C Reduce two words at a time
+       add     HP, RP, #48
+       add     RP, RP, #8
+       ldmdb   HP!, {H0,H1}
+       ldm     RP, {T2,T3,T4,T5,T6,T7}
+       mov     C4, #0
+       adds    T4, T4, H0
+       adcs    T5, T5, H1
+       adcs    T6, T6, H0
+       adcs    T7, T7, H1
+       C Need to add carry to T2 and T4, do T4 later.
+       adc     C4, C4, #0
+
+       ldmdb   HP!, {H0,H1}
+       mov     C2, #0
+       adcs    T2, T2, H0
+       adcs    T3, T3, H1
+       adcs    T4, T4, H0
+       adcs    T5, T5, H1
+       C Need to add carry to T0 and T2, do T2 later
+       adc     C2, C2, #0
+
+       ldmdb   RP!, {T0, T1}
+       adcs    T0, T0, T6
+       adcs    T1, T1, T7
+       adcs    T2, T2, T6
+       adcs    T3, T3, T7
+       adc     C4, C4, #0
+
+       adds    T2, T2, C2
+       adcs    T3, T3, #0
+       adcs    T4, T4, C4
+       adcs    T5, T5, #0
+       mov     C2, #0
+       adc     C2, C2, #0
+
+       C Add in final carry
+       adcs    T0, T0, #0
+       adcs    T1, T1, #0
+       adcs    T2, T2, C2
+       adcs    T3, T3, #0
+       adcs    T4, T4, #0
+       adc     T5, T5, #0
+
+       stm     RP, {T0,T1,T2,T3,T4,T5}
+
+       pop     {r4,r5,r6,r7,r8,r10}
+       bx      lr
+EPILOGUE(nettle_ecc_192_modp)