From 1a66190888c730f466d9d7ba0c3b044a78a80ded Mon Sep 17 00:00:00 2001 From: Andy Polyakov Date: Mon, 7 Mar 2016 23:50:01 +0100 Subject: [PATCH] ec/asm/ecp_nistz256-sparcv9.pl: get corner logic right. RT#4284 Reviewed-by: Rich Salz --- crypto/ec/asm/ecp_nistz256-sparcv9.pl | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/crypto/ec/asm/ecp_nistz256-sparcv9.pl b/crypto/ec/asm/ecp_nistz256-sparcv9.pl index 29a089b4a2..bd69eea9a0 100755 --- a/crypto/ec/asm/ecp_nistz256-sparcv9.pl +++ b/crypto/ec/asm/ecp_nistz256-sparcv9.pl @@ -722,6 +722,7 @@ ecp_nistz256_point_double: mov $rp,$rp_real mov $ap,$ap_real +.Lpoint_double_shortcut: ld [$ap+32],@acc[0] ld [$ap+32+4],@acc[1] ld [$ap+32+8],@acc[2] @@ -994,7 +995,7 @@ ecp_nistz256_point_add: be,pt %icc,.Ladd_proceed ! (in1infty || in2infty)? nop andcc $t2,$t2,%g0 - be,pt %icc,.Ladd_proceed ! is_equal(S1,S2)? + be,pt %icc,.Ladd_double ! is_equal(S1,S2)? nop ldx [%fp+STACK_BIAS-8],$rp @@ -1025,6 +1026,13 @@ ecp_nistz256_point_add: b .Ladd_done nop +.align 16 +.Ladd_double: + ldx [%fp+STACK_BIAS-8],$rp_real + mov $ap_real,$ap + b .Lpoint_double_shortcut + add %sp,32*(12-4)+32,%sp ! difference in frame sizes + .align 16 .Ladd_proceed: add %sp,LOCALS+$R,$bp @@ -2016,6 +2024,7 @@ ecp_nistz256_point_double_vis3: save %sp,-STACK64_FRAME-32*10,%sp mov $rp,$rp_real +.Ldouble_shortcut_vis3: mov -1,$minus1 mov -2,$poly3 sllx $minus1,32,$poly1 ! 0xFFFFFFFF00000000 @@ -2536,8 +2545,8 @@ ecp_nistz256_point_add_vis3: be,pt %xcc,.Ladd_proceed_vis3 ! (in1infty || in2infty)? nop andcc $t2,$t2,%g0 - be,pt %xcc,.Ladd_proceed_vis3 ! is_equal(S1,S2)? - nop + be,a,pt %xcc,.Ldouble_shortcut_vis3 ! is_equal(S1,S2)? + add %sp,32*(12-10)+32,%sp ! difference in frame sizes st %g0,[$rp_real] st %g0,[$rp_real+4] -- 2.34.1