openssl/crypto/bn/asm/sparc.s
1998-12-21 10:56:39 +00:00

463 lines
6.5 KiB
ArmAsm

.file "bn_mulw.c"
gcc2_compiled.:
.section ".text"
.align 4
.global bn_mul_add_words
.type bn_mul_add_words,#function
.proc 016
bn_mul_add_words:
!#PROLOGUE# 0
save %sp,-112,%sp
!#PROLOGUE# 1
mov %i0,%o0
mov %i1,%o2
mov %i2,%g1
mov %i3,%o1
mov 0,%i4
add %o0,12,%g4
add %o2,12,%o7
.LL2:
mov %i4,%i3
mov 0,%i2
ld [%o0],%g2
mov %g2,%i1
ld [%o2],%g2
mov 0,%i0
umul %o1,%g2,%g3
rd %y,%g2
addcc %g3,%i1,%g3
addx %g2,%i0,%g2
addcc %g3,%i3,%g3
addx %g2,%i2,%g2
st %g3,[%o0]
mov %g2,%i5
mov 0,%i4
addcc %g1,-1,%g1
be .LL3
mov %i5,%i4
mov %i4,%i3
mov 0,%i2
ld [%g4-8],%g2
mov %g2,%i1
ld [%o7-8],%g2
mov 0,%i0
umul %o1,%g2,%g3
rd %y,%g2
addcc %g3,%i1,%g3
addx %g2,%i0,%g2
addcc %g3,%i3,%g3
addx %g2,%i2,%g2
st %g3,[%g4-8]
mov %g2,%i5
mov 0,%i4
addcc %g1,-1,%g1
be .LL3
mov %i5,%i4
mov %i4,%i3
mov 0,%i2
ld [%g4-4],%g2
mov %g2,%i1
ld [%o7-4],%g2
mov 0,%i0
umul %o1,%g2,%g3
rd %y,%g2
addcc %g3,%i1,%g3
addx %g2,%i0,%g2
addcc %g3,%i3,%g3
addx %g2,%i2,%g2
st %g3,[%g4-4]
mov %g2,%i5
mov 0,%i4
addcc %g1,-1,%g1
be .LL3
mov %i5,%i4
mov %i4,%i3
mov 0,%i2
ld [%g4],%g2
mov %g2,%i1
ld [%o7],%g2
mov 0,%i0
umul %o1,%g2,%g3
rd %y,%g2
addcc %g3,%i1,%g3
addx %g2,%i0,%g2
addcc %g3,%i3,%g3
addx %g2,%i2,%g2
st %g3,[%g4]
mov %g2,%i5
mov 0,%i4
addcc %g1,-1,%g1
be .LL3
mov %i5,%i4
add %o7,16,%o7
add %o2,16,%o2
add %g4,16,%g4
b .LL2
add %o0,16,%o0
.LL3:
ret
restore %g0,%i4,%o0
.LLfe1:
.size bn_mul_add_words,.LLfe1-bn_mul_add_words
.align 4
.global bn_mul_words
.type bn_mul_words,#function
.proc 016
bn_mul_words:
!#PROLOGUE# 0
save %sp,-112,%sp
!#PROLOGUE# 1
mov %i0,%o7
mov %i1,%o0
mov %i2,%i4
mov %i3,%g4
mov 0,%i0
add %o7,12,%g1
add %o0,12,%i5
.LL18:
mov %i0,%g3
mov 0,%g2
ld [%o0],%i2
umul %g4,%i2,%i3
rd %y,%i2
addcc %i3,%g3,%i3
addx %i2,%g2,%i2
st %i3,[%o7]
mov %i2,%i1
mov 0,%i0
addcc %i4,-1,%i4
be .LL19
mov %i1,%i0
mov %i0,%g3
mov 0,%g2
ld [%i5-8],%i2
umul %g4,%i2,%i3
rd %y,%i2
addcc %i3,%g3,%i3
addx %i2,%g2,%i2
st %i3,[%g1-8]
mov %i2,%i1
mov 0,%i0
addcc %i4,-1,%i4
be .LL19
mov %i1,%i0
mov %i0,%g3
mov 0,%g2
ld [%i5-4],%i2
umul %g4,%i2,%i3
rd %y,%i2
addcc %i3,%g3,%i3
addx %i2,%g2,%i2
st %i3,[%g1-4]
mov %i2,%i1
mov 0,%i0
addcc %i4,-1,%i4
be .LL19
mov %i1,%i0
mov %i0,%g3
mov 0,%g2
ld [%i5],%i2
umul %g4,%i2,%i3
rd %y,%i2
addcc %i3,%g3,%i3
addx %i2,%g2,%i2
st %i3,[%g1]
mov %i2,%i1
mov 0,%i0
addcc %i4,-1,%i4
be .LL19
mov %i1,%i0
add %i5,16,%i5
add %o0,16,%o0
add %g1,16,%g1
b .LL18
add %o7,16,%o7
.LL19:
ret
restore
.LLfe2:
.size bn_mul_words,.LLfe2-bn_mul_words
.align 4
.global bn_sqr_words
.type bn_sqr_words,#function
.proc 020
bn_sqr_words:
!#PROLOGUE# 0
!#PROLOGUE# 1
mov %o0,%g4
add %g4,28,%o3
add %o1,12,%g1
.LL34:
ld [%o1],%o0
addcc %o2,-1,%o2
umul %o0,%o0,%o5
rd %y,%o4
st %o5,[%g4]
mov %o4,%g3
mov 0,%g2
be .LL35
st %g3,[%o3-24]
ld [%g1-8],%o0
addcc %o2,-1,%o2
umul %o0,%o0,%o5
rd %y,%o4
st %o5,[%o3-20]
mov %o4,%g3
mov 0,%g2
be .LL35
st %g3,[%o3-16]
ld [%g1-4],%o0
addcc %o2,-1,%o2
umul %o0,%o0,%o5
rd %y,%o4
st %o5,[%o3-12]
mov %o4,%g3
mov 0,%g2
be .LL35
st %g3,[%o3-8]
ld [%g1],%o0
addcc %o2,-1,%o2
umul %o0,%o0,%o5
rd %y,%o4
st %o5,[%o3-4]
mov %o4,%g3
mov 0,%g2
be .LL35
st %g3,[%o3]
add %g1,16,%g1
add %o1,16,%o1
add %o3,32,%o3
b .LL34
add %g4,32,%g4
.LL35:
retl
nop
.LLfe3:
.size bn_sqr_words,.LLfe3-bn_sqr_words
.align 4
.global bn_add_words
.type bn_add_words,#function
.proc 016
bn_add_words:
!#PROLOGUE# 0
save %sp,-112,%sp
!#PROLOGUE# 1
mov %i0,%o2
mov %i1,%o3
mov %i2,%o4
mov %i3,%i5
mov 0,%o0
mov 0,%o1
add %o2,12,%o7
add %o4,12,%g4
b .LL42
add %o3,12,%g1
.LL45:
add %i5,-1,%i5
mov %i4,%g3
ld [%g4-8],%i4
mov 0,%g2
mov %i4,%i1
mov 0,%i0
addcc %g3,%i1,%g3
addx %g2,%i0,%g2
addcc %o1,%g3,%o1
addx %o0,%g2,%o0
st %o1,[%o7-8]
mov %o0,%i3
mov 0,%i2
mov %i2,%o0
mov %i3,%o1
cmp %i5,0
ble .LL43
add %i5,-1,%i5
ld [%g1-4],%i4
mov %i4,%g3
ld [%g4-4],%i4
mov 0,%g2
mov %i4,%i1
mov 0,%i0
addcc %g3,%i1,%g3
addx %g2,%i0,%g2
addcc %o1,%g3,%o1
addx %o0,%g2,%o0
st %o1,[%o7-4]
mov %o0,%i3
mov 0,%i2
mov %i2,%o0
mov %i3,%o1
cmp %i5,0
ble .LL43
add %i5,-1,%i5
ld [%g1],%i4
mov %i4,%g3
ld [%g4],%i4
mov 0,%g2
mov %i4,%i1
mov 0,%i0
addcc %g3,%i1,%g3
addx %g2,%i0,%g2
addcc %o1,%g3,%o1
addx %o0,%g2,%o0
st %o1,[%o7]
mov %o0,%i3
mov 0,%i2
mov %i2,%o0
mov %i3,%o1
cmp %i5,0
ble .LL43
add %g1,16,%g1
add %o3,16,%o3
add %g4,16,%g4
add %o4,16,%o4
add %o7,16,%o7
add %o2,16,%o2
.LL42:
ld [%o3],%i4
add %i5,-1,%i5
mov %i4,%g3
ld [%o4],%i4
mov 0,%g2
mov %i4,%i1
mov 0,%i0
addcc %g3,%i1,%g3
addx %g2,%i0,%g2
addcc %o1,%g3,%o1
addx %o0,%g2,%o0
st %o1,[%o2]
mov %o0,%i3
mov 0,%i2
mov %i2,%o0
mov %i3,%o1
cmp %i5,0
bg,a .LL45
ld [%g1-8],%i4
.LL43:
ret
restore %g0,%o1,%o0
.LLfe4:
.size bn_add_words,.LLfe4-bn_add_words
.section ".rodata"
.align 8
.LLC0:
.asciz "Division would overflow (%d)\n"
.section ".text"
.align 4
.global bn_div64
.type bn_div64,#function
.proc 016
bn_div64:
!#PROLOGUE# 0
save %sp,-112,%sp
!#PROLOGUE# 1
mov 0,%l1
cmp %i2,0
bne .LL51
mov 2,%l0
b .LL68
mov -1,%i0
.LL51:
call BN_num_bits_word,0
mov %i2,%o0
mov %o0,%o2
cmp %o2,32
be .LL52
mov 1,%o0
sll %o0,%o2,%o0
cmp %i0,%o0
bleu .LL69
mov 32,%o0
sethi %hi(__iob+32),%o0
or %o0,%lo(__iob+32),%o0
sethi %hi(.LLC0),%o1
call fprintf,0
or %o1,%lo(.LLC0),%o1
call abort,0
nop
.LL52:
mov 32,%o0
.LL69:
cmp %i0,%i2
blu .LL53
sub %o0,%o2,%o2
sub %i0,%i2,%i0
.LL53:
cmp %o2,0
be .LL54
sll %i0,%o2,%o1
sll %i2,%o2,%i2
sub %o0,%o2,%o0
srl %i1,%o0,%o0
or %o1,%o0,%i0
sll %i1,%o2,%i1
.LL54:
srl %i2,16,%g2
sethi %hi(65535),%o0
or %o0,%lo(65535),%o1
and %i2,%o1,%g3
mov %o0,%g4
sethi %hi(-65536),%o7
mov %o1,%g1
.LL55:
srl %i0,16,%o0
cmp %o0,%g2
be .LL59
or %g4,%lo(65535),%o3
wr %g0,%g0,%y
nop
nop
nop
udiv %i0,%g2,%o3
.LL59:
and %i1,%o7,%o0
srl %o0,16,%o5
smul %o3,%g3,%o4
smul %o3,%g2,%o2
.LL60:
sub %i0,%o2,%o1
andcc %o1,%o7,%g0
bne .LL61
sll %o1,16,%o0
add %o0,%o5,%o0
cmp %o4,%o0
bleu .LL61
sub %o4,%g3,%o4
sub %o2,%g2,%o2
b .LL60
add %o3,-1,%o3
.LL61:
smul %o3,%g2,%o2
smul %o3,%g3,%o0
srl %o0,16,%o1
sll %o0,16,%o0
and %o0,%o7,%o0
cmp %i1,%o0
bgeu .LL65
add %o2,%o1,%o2
add %o2,1,%o2
.LL65:
cmp %i0,%o2
bgeu .LL66
sub %i1,%o0,%i1
add %i0,%i2,%i0
add %o3,-1,%o3
.LL66:
addcc %l0,-1,%l0
be .LL56
sub %i0,%o2,%i0
sll %o3,16,%l1
sll %i0,16,%o0
srl %i1,16,%o1
or %o0,%o1,%i0
and %i1,%g1,%o0
b .LL55
sll %o0,16,%i1
.LL56:
or %l1,%o3,%i0
.LL68:
ret
restore
.LLfe5:
.size bn_div64,.LLfe5-bn_div64
.ident "GCC: (GNU) 2.7.2.3"