aboutsummaryrefslogtreecommitdiff
path: root/crypto/ec
diff options
context:
space:
mode:
authorAndy Polyakov <appro@openssl.org>2016-03-07 23:50:01 +0100
committerAndy Polyakov <appro@openssl.org>2016-03-09 11:21:11 +0100
commit1a66190888c730f466d9d7ba0c3b044a78a80ded (patch)
treed687b5ad433f9649d82e22488961d389695ae982 /crypto/ec
parentb5640316771fb776101cf6be8e6ae2ed5cf93d02 (diff)
downloadopenssl-1a66190888c730f466d9d7ba0c3b044a78a80ded.zip
openssl-1a66190888c730f466d9d7ba0c3b044a78a80ded.tar.gz
openssl-1a66190888c730f466d9d7ba0c3b044a78a80ded.tar.bz2
ec/asm/ecp_nistz256-sparcv9.pl: get corner logic right.
RT#4284 Reviewed-by: Rich Salz <rsalz@openssl.org>
Diffstat (limited to 'crypto/ec')
-rwxr-xr-xcrypto/ec/asm/ecp_nistz256-sparcv9.pl15
1 files changed, 12 insertions, 3 deletions
diff --git a/crypto/ec/asm/ecp_nistz256-sparcv9.pl b/crypto/ec/asm/ecp_nistz256-sparcv9.pl
index 29a089b..bd69eea 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
@@ -1026,6 +1027,13 @@ ecp_nistz256_point_add:
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
add %sp,LOCALS+$R,$ap
@@ -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]