openssl/crypto/bn/asm/sparc.s

360 lines
5.1 KiB
ArmAsm
Raw Normal View History

.file "bn_mulw.c"
gcc2_compiled.:
.section ".text"
.align 4
.global bn_mul_add_word
.type bn_mul_add_word,#function
.proc 016
bn_mul_add_word:
!#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_word,.LLfe1-bn_mul_add_word
.align 4
.global bn_mul_word
.type bn_mul_word,#function
.proc 016
bn_mul_word:
!#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_word,.LLfe2-bn_mul_word
.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
.section ".rodata"
.align 8
.LLC0:
.asciz "Division would overflow\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 .LL42
mov 2,%l0
b .LL59
mov -1,%i0
.LL42:
call BN_num_bits_word,0
mov %i2,%o0
mov %o0,%o2
cmp %o2,32
be .LL43
mov 1,%o0
sll %o0,%o2,%o0
cmp %i0,%o0
bleu .LL60
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
.LL43:
mov 32,%o0
.LL60:
cmp %i0,%i2
blu .LL44
sub %o0,%o2,%o2
sub %i0,%i2,%i0
.LL44:
cmp %o2,0
be .LL45
sethi %hi(-65536),%o7
sll %i2,%o2,%i2
sll %i0,%o2,%o1
sub %o0,%o2,%o0
srl %i1,%o0,%o0
or %o1,%o0,%i0
sll %i1,%o2,%i1
.LL45:
srl %i2,16,%g2
sethi %hi(65535),%o0
or %o0,%lo(65535),%o1
and %i2,%o1,%g3
mov %o0,%g4
mov %o1,%g1
.LL46:
srl %i0,16,%o0
cmp %o0,%g2
be .LL50
or %g4,%lo(65535),%o3
wr %g0,%g0,%y
nop
nop
nop
udiv %i0,%g2,%o3
.LL50:
and %i1,%o7,%o0
srl %o0,16,%o5
smul %o3,%g3,%o4
smul %o3,%g2,%o2
.LL51:
sub %i0,%o2,%o1
andcc %o1,%o7,%g0
bne .LL52
sll %o1,16,%o0
add %o0,%o5,%o0
cmp %o4,%o0
bleu .LL52
sub %o4,%g3,%o4
sub %o2,%g2,%o2
b .LL51
add %o3,-1,%o3
.LL52:
smul %o3,%g2,%o2
smul %o3,%g3,%o0
srl %o0,16,%o1
sll %o0,16,%o0
and %o0,%o7,%o0
cmp %i1,%o0
bgeu .LL56
add %o2,%o1,%o2
add %o2,1,%o2
.LL56:
cmp %i0,%o2
bgeu .LL57
sub %i1,%o0,%i1
add %i0,%i2,%i0
add %o3,-1,%o3
.LL57:
addcc %l0,-1,%l0
be .LL47
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 .LL46
sll %o0,16,%i1
.LL47:
or %l1,%o3,%i0
.LL59:
ret
restore
.LLfe4:
.size bn_div64,.LLfe4-bn_div64
.ident "GCC: (GNU) 2.7.0"