Tune armv6 mpi assembly
authorJussi Kivilinna <jussi.kivilinna@iki.fi>
Fri, 6 Sep 2013 08:11:37 +0000 (11:11 +0300)
committerJussi Kivilinna <jussi.kivilinna@iki.fi>
Fri, 6 Sep 2013 08:11:37 +0000 (11:11 +0300)
* mpi/armv6/mpih-mul1.S: Tune assembly for Cortex-A8.
* mpi/armv6/mpih-mul2.S: Ditto.
* mpi/armv6/mpih-mul3.S: Ditto.
--

Little bit of tuning of assembly functions with help of Cortex-A8 profiler.

Old (armhf/Cortex-A8 1Ghz):
Algorithm         generate  100*sign  100*verify
------------------------------------------------
RSA 1024 bit         350ms    2230ms        50ms
RSA 2048 bit        3500ms   11890ms       150ms
RSA 3072 bit       23900ms   32540ms       280ms
RSA 4096 bit       15750ms   69420ms       450ms
Algorithm         generate  100*sign  100*verify
------------------------------------------------
DSA 1024/160             -     990ms       930ms
DSA 2048/224             -    3840ms      3400ms
DSA 3072/256             -    8280ms      7620ms
Algorithm         generate  100*sign  100*verify
------------------------------------------------
ECDSA 192 bit         60ms    1760ms      3300ms
ECDSA 224 bit         80ms    2240ms      4300ms
ECDSA 256 bit        110ms    2740ms      5420ms
ECDSA 384 bit        230ms    5680ms     11300ms
ECDSA 521 bit        540ms   13590ms     26890ms

New:
Algorithm         generate  100*sign  100*verify
------------------------------------------------
RSA 1024 bit         350ms    2190ms        60ms
RSA 2048 bit        8910ms   11800ms       150ms
RSA 3072 bit       11000ms   31810ms       270ms
RSA 4096 bit       50290ms   68690ms       450ms
Algorithm         generate  100*sign  100*verify
------------------------------------------------
DSA 1024/160             -     980ms       920ms
DSA 2048/224             -    3780ms      3370ms
DSA 3072/256             -    8100ms      7060ms
Algorithm         generate  100*sign  100*verify
------------------------------------------------
ECDSA 192 bit         70ms    1730ms      3200ms
ECDSA 224 bit         90ms    2180ms      4220ms
ECDSA 256 bit        110ms    2660ms      5200ms
ECDSA 384 bit        220ms    5660ms     10910ms
ECDSA 521 bit        530ms   13420ms     26000ms

Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
mpi/armv6/mpih-mul1.S
mpi/armv6/mpih-mul2.S
mpi/armv6/mpih-mul3.S

index ae19a15..0aa41ef 100644 (file)
@@ -60,18 +60,18 @@ _gcry_mpih_mul_1:
        beq     .Lend;
 
 .Large_loop:
-       mov     %r9, #0;
        ldm     %r1!, {%r5, %r6, %r7, %r8};
+       mov     %r9, #0;
        mov     %r10, #0;
        umlal   %r4, %r9, %r5, %r3;
        mov     %r11, #0;
        umlal   %r9, %r10, %r6, %r3;
-       mov     %lr, #0;
+       str     %r4, [%r0], #4;
+       mov     %r4, #0;
        umlal   %r10, %r11, %r7, %r3;
        subs    %r2, #4;
-       umlal   %r11, %lr, %r8, %r3;
-       stm     %r0!, {%r4, %r9, %r10, %r11};
-       mov     %r4, %lr;
+       umlal   %r11, %r4, %r8, %r3;
+       stm     %r0!, {%r9, %r10, %r11};
        bne     .Large_loop;
 
 .Lend:
index 02f7c07..a7eb8a1 100644 (file)
@@ -61,8 +61,8 @@ _gcry_mpih_addmul_1:
        beq     .Lend;
 
 .Large_loop:
-       ldm     %r0, {%r4, %r6, %r8, %r10};
        ldr     %r5, [%r1], #4;
+       ldm     %r0, {%r4, %r6, %r8, %r10};
 
        sub     %r2, #4;
        adcs    %r4, %lr;
index e42fc30..034929e 100644 (file)
@@ -63,20 +63,23 @@ _gcry_mpih_submul_1:
 
 .Large_loop:
        ldr     %r5, [%r1], #4;
-       ldm     %r0, {%r4, %r6, %r8, %r10};
-
        mov     %r9, #0;
+       ldr     %r4, [%r0, #0];
+
        umlal   %lr, %r9, %r5, %r3;
+       ldr     %r6, [%r0, #4];
        ldr     %r5, [%r1], #4;
        sbcs    %r4, %r4, %lr;
 
        mov     %lr, #0;
        umlal   %r9, %lr, %r5, %r3;
+       ldr     %r8, [%r0, #8];
        ldr     %r5, [%r1], #4;
        sbcs    %r6, %r6, %r9;
 
        mov     %r9, #0;
        umlal   %lr, %r9, %r5, %r3;
+       ldr     %r10, [%r0, #12];
        ldr     %r5, [%r1], #4;
        sbcs    %r8, %r8, %lr;