diff --git a/ChangeLog b/ChangeLog index 1e0d25a..dcb5565 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2011-05-26 NIIBE Yutaka + + * polarssl-0.14.0/include/polarssl/bn_mul.h [__arm__] + (MULADDC_INIT): Add ADDS instruction to clear of carry flag. + (MULADDC_CORE): Tune to 6 instructions and less registers. + (MULADDC_STOP): Add ADC instruction to save carry flag. + 2011-05-25 NIIBE Yutaka * tool/hub_ctrl.py: New. Port of original C implementation. diff --git a/polarssl-0.14.0/include/polarssl/bn_mul.h b/polarssl-0.14.0/include/polarssl/bn_mul.h index a73d5fb..afcbdc2 100644 --- a/polarssl-0.14.0/include/polarssl/bn_mul.h +++ b/polarssl-0.14.0/include/polarssl/bn_mul.h @@ -500,22 +500,23 @@ asm( "ldr r0, %0 " :: "m" (s)); \ asm( "ldr r1, %0 " :: "m" (d)); \ asm( "ldr r2, %0 " :: "m" (c)); \ - asm( "ldr r3, %0 " :: "m" (b)); + asm( "ldr r3, %0 " :: "m" (b)); \ + asm( "adds r0, #0 "); #define MULADDC_CORE \ + asm( "ldr r5, [r1] " ); \ asm( "ldr r4, [r0], #4 " ); \ - asm( "mov r5, #0 " ); \ - asm( "ldr r6, [r1] " ); \ - asm( "umlal r2, r5, r3, r4 " ); \ - asm( "adds r7, r6, r2 " ); \ - asm( "adc r2, r5, #0 " ); \ - asm( "str r7, [r1], #4 " ); + asm( "adcs r5, r2, r5 " ); \ + asm( "mov r2, #0 " ); \ + asm( "umlal r5, r2, r3, r4 " ); \ + asm( "str r5, [r1], #4 " ); #define MULADDC_STOP \ + asm( "adc r2, r2, #0 " ); \ asm( "str r2, %0 " : "=m" (c)); \ asm( "str r1, %0 " : "=m" (d)); \ asm( "str r0, %0 " : "=m" (s) :: \ - "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7" ); + "r0", "r1", "r2", "r3", "r4", "r5" ); #endif /* ARMv3 */