Alpha assembler pack: adapt for Linux [from HEAD].

PR: 2335
This commit is contained in:
Andy Polyakov 2010-09-13 20:32:31 +00:00
parent 2c23b0716e
commit b6996c7849
2 changed files with 22 additions and 18 deletions

@ -70,9 +70,9 @@ OPENSSL_wipe_cpu:
OPENSSL_atomic_add: OPENSSL_atomic_add:
.frame $30,0,$26 .frame $30,0,$26
.prologue 0 .prologue 0
1: ldl_l $0,($16) 1: ldl_l $0,0($16)
addl $0,$17,$1 addl $0,$17,$1
stl_c $1,($16) stl_c $1,0($16)
beq $1,1b beq $1,1b
addl $0,$17,$0 addl $0,$17,$0
ret ($26) ret ($26)

@ -41,8 +41,12 @@ $j="s4";
$m1="s5"; $m1="s5";
$code=<<___; $code=<<___;
#indef __linux__
#include <asm/regdef.h>
#else
#include <asm.h> #include <asm.h>
#include <regdef.h> #include <regdef.h>
#endif
.text .text
@ -76,7 +80,7 @@ bn_mul_mont:
ldq $aj,8($ap) ldq $aj,8($ap)
subq sp,AT,sp subq sp,AT,sp
ldq $bi,0($bp) # bp[0] ldq $bi,0($bp) # bp[0]
mov -4096,AT lda AT,-4096(zero) # mov -4096,AT
ldq $n0,0($n0) ldq $n0,0($n0)
and sp,AT,sp and sp,AT,sp
@ -106,9 +110,9 @@ bn_mul_mont:
.align 4 .align 4
.L1st: .L1st:
.set noreorder .set noreorder
ldq $aj,($aj) ldq $aj,0($aj)
addl $j,1,$j addl $j,1,$j
ldq $nj,($nj) ldq $nj,0($nj)
lda $tp,8($tp) lda $tp,8($tp)
addq $alo,$hi0,$lo0 addq $alo,$hi0,$lo0
@ -159,12 +163,12 @@ bn_mul_mont:
.align 4 .align 4
.Louter: .Louter:
s8addq $i,$bp,$bi s8addq $i,$bp,$bi
ldq $hi0,($ap) ldq $hi0,0($ap)
ldq $aj,8($ap) ldq $aj,8($ap)
ldq $bi,($bi) ldq $bi,0($bi)
ldq $hi1,($np) ldq $hi1,0($np)
ldq $nj,8($np) ldq $nj,8($np)
ldq $tj,(sp) ldq $tj,0(sp)
mulq $hi0,$bi,$lo0 mulq $hi0,$bi,$lo0
umulh $hi0,$bi,$hi0 umulh $hi0,$bi,$hi0
@ -195,10 +199,10 @@ bn_mul_mont:
.set noreorder .set noreorder
ldq $tj,8($tp) #L0 ldq $tj,8($tp) #L0
nop #U1 nop #U1
ldq $aj,($aj) #L1 ldq $aj,0($aj) #L1
s8addq $j,$np,$nj #U0 s8addq $j,$np,$nj #U0
ldq $nj,($nj) #L0 ldq $nj,0($nj) #L0
nop #U1 nop #U1
addq $alo,$hi0,$lo0 #L1 addq $alo,$hi0,$lo0 #L1
lda $tp,8($tp) lda $tp,8($tp)
@ -247,7 +251,7 @@ bn_mul_mont:
addq $hi1,v0,$hi1 addq $hi1,v0,$hi1
addq $hi1,$hi0,$lo1 addq $hi1,$hi0,$lo1
stq $j,($tp) stq $j,0($tp)
cmpult $lo1,$hi0,$hi1 cmpult $lo1,$hi0,$hi1
addq $lo1,$tj,$lo1 addq $lo1,$tj,$lo1
cmpult $lo1,$tj,AT cmpult $lo1,$tj,AT
@ -265,8 +269,8 @@ bn_mul_mont:
mov 0,$hi0 # clear borrow bit mov 0,$hi0 # clear borrow bit
.align 4 .align 4
.Lsub: ldq $lo0,($tp) .Lsub: ldq $lo0,0($tp)
ldq $lo1,($np) ldq $lo1,0($np)
lda $tp,8($tp) lda $tp,8($tp)
lda $np,8($np) lda $np,8($np)
subq $lo0,$lo1,$lo1 # tp[i]-np[i] subq $lo0,$lo1,$lo1 # tp[i]-np[i]
@ -274,7 +278,7 @@ bn_mul_mont:
subq $lo1,$hi0,$lo0 subq $lo1,$hi0,$lo0
cmpult $lo1,$lo0,$hi0 cmpult $lo1,$lo0,$hi0
or $hi0,AT,$hi0 or $hi0,AT,$hi0
stq $lo0,($rp) stq $lo0,0($rp)
cmpult $tp,$tj,v0 cmpult $tp,$tj,v0
lda $rp,8($rp) lda $rp,8($rp)
bne v0,.Lsub bne v0,.Lsub
@ -288,7 +292,7 @@ bn_mul_mont:
bis $bp,$ap,$ap # ap=borrow?tp:rp bis $bp,$ap,$ap # ap=borrow?tp:rp
.align 4 .align 4
.Lcopy: ldq $aj,($ap) # copy or in-place refresh .Lcopy: ldq $aj,0($ap) # copy or in-place refresh
lda $tp,8($tp) lda $tp,8($tp)
lda $rp,8($rp) lda $rp,8($rp)
lda $ap,8($ap) lda $ap,8($ap)
@ -309,8 +313,8 @@ bn_mul_mont:
lda sp,48(sp) lda sp,48(sp)
ret (ra) ret (ra)
.end bn_mul_mont .end bn_mul_mont
.rdata .ascii "Montgomery Multiplication for Alpha, CRYPTOGAMS by <appro\@openssl.org>"
.asciiz "Montgomery Multiplication for Alpha, CRYPTOGAMS by <appro\@openssl.org>" .align 2
___ ___
print $code; print $code;