416 lines
7.9 KiB
ArmAsm
416 lines
7.9 KiB
ArmAsm
.SPACE $PRIVATE$
|
|
.SUBSPA $DATA$,QUAD=1,ALIGN=8,ACCESS=31
|
|
.SUBSPA $BSS$,QUAD=1,ALIGN=8,ACCESS=31,ZERO,SORT=82
|
|
.SPACE $TEXT$
|
|
.SUBSPA $LIT$,QUAD=0,ALIGN=8,ACCESS=44
|
|
.SUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY
|
|
.IMPORT $global$,DATA
|
|
.IMPORT $$dyncall,MILLICODE
|
|
; gcc_compiled.:
|
|
.SPACE $TEXT$
|
|
.SUBSPA $CODE$
|
|
|
|
.align 4
|
|
.EXPORT bn_mul_add_word,ENTRY,PRIV_LEV=3,ARGW0=GR,ARGW1=GR,ARGW2=GR,ARGW3=GR,RTNVAL=GR
|
|
bn_mul_add_word
|
|
.PROC
|
|
.CALLINFO FRAME=64,CALLS,SAVE_RP,ENTRY_GR=4
|
|
.ENTRY
|
|
stw %r2,-20(0,%r30)
|
|
stwm %r4,64(0,%r30)
|
|
copy %r24,%r31
|
|
stw %r3,-60(0,%r30)
|
|
ldi 0,%r20
|
|
ldo 12(%r26),%r2
|
|
stw %r23,-16(0,%r30)
|
|
copy %r25,%r3
|
|
ldo 12(%r3),%r1
|
|
fldws -16(0,%r30),%fr8L
|
|
L$0010
|
|
copy %r20,%r25
|
|
ldi 0,%r24
|
|
fldws 0(0,%r3),%fr9L
|
|
ldw 0(0,%r26),%r19
|
|
xmpyu %fr8L,%fr9L,%fr9
|
|
fstds %fr9,-16(0,%r30)
|
|
copy %r19,%r23
|
|
ldw -16(0,%r30),%r28
|
|
ldw -12(0,%r30),%r29
|
|
ldi 0,%r22
|
|
add %r23,%r29,%r29
|
|
addc %r22,%r28,%r28
|
|
add %r25,%r29,%r29
|
|
addc %r24,%r28,%r28
|
|
copy %r28,%r21
|
|
ldi 0,%r20
|
|
copy %r21,%r20
|
|
addib,= -1,%r31,L$0011
|
|
stw %r29,0(0,%r26)
|
|
copy %r20,%r25
|
|
ldi 0,%r24
|
|
fldws -8(0,%r1),%fr9L
|
|
ldw -8(0,%r2),%r19
|
|
xmpyu %fr8L,%fr9L,%fr9
|
|
fstds %fr9,-16(0,%r30)
|
|
copy %r19,%r23
|
|
ldw -16(0,%r30),%r28
|
|
ldw -12(0,%r30),%r29
|
|
ldi 0,%r22
|
|
add %r23,%r29,%r29
|
|
addc %r22,%r28,%r28
|
|
add %r25,%r29,%r29
|
|
addc %r24,%r28,%r28
|
|
copy %r28,%r21
|
|
ldi 0,%r20
|
|
copy %r21,%r20
|
|
addib,= -1,%r31,L$0011
|
|
stw %r29,-8(0,%r2)
|
|
copy %r20,%r25
|
|
ldi 0,%r24
|
|
fldws -4(0,%r1),%fr9L
|
|
ldw -4(0,%r2),%r19
|
|
xmpyu %fr8L,%fr9L,%fr9
|
|
fstds %fr9,-16(0,%r30)
|
|
copy %r19,%r23
|
|
ldw -16(0,%r30),%r28
|
|
ldw -12(0,%r30),%r29
|
|
ldi 0,%r22
|
|
add %r23,%r29,%r29
|
|
addc %r22,%r28,%r28
|
|
add %r25,%r29,%r29
|
|
addc %r24,%r28,%r28
|
|
copy %r28,%r21
|
|
ldi 0,%r20
|
|
copy %r21,%r20
|
|
addib,= -1,%r31,L$0011
|
|
stw %r29,-4(0,%r2)
|
|
copy %r20,%r25
|
|
ldi 0,%r24
|
|
fldws 0(0,%r1),%fr9L
|
|
ldw 0(0,%r2),%r19
|
|
xmpyu %fr8L,%fr9L,%fr9
|
|
fstds %fr9,-16(0,%r30)
|
|
copy %r19,%r23
|
|
ldw -16(0,%r30),%r28
|
|
ldw -12(0,%r30),%r29
|
|
ldi 0,%r22
|
|
add %r23,%r29,%r29
|
|
addc %r22,%r28,%r28
|
|
add %r25,%r29,%r29
|
|
addc %r24,%r28,%r28
|
|
copy %r28,%r21
|
|
ldi 0,%r20
|
|
copy %r21,%r20
|
|
addib,= -1,%r31,L$0011
|
|
stw %r29,0(0,%r2)
|
|
ldo 16(%r1),%r1
|
|
ldo 16(%r3),%r3
|
|
ldo 16(%r2),%r2
|
|
bl L$0010,0
|
|
ldo 16(%r26),%r26
|
|
L$0011
|
|
copy %r20,%r28
|
|
ldw -84(0,%r30),%r2
|
|
ldw -60(0,%r30),%r3
|
|
bv 0(%r2)
|
|
ldwm -64(0,%r30),%r4
|
|
.EXIT
|
|
.PROCEND
|
|
.align 4
|
|
.EXPORT bn_mul_word,ENTRY,PRIV_LEV=3,ARGW0=GR,ARGW1=GR,ARGW2=GR,ARGW3=GR,RTNVAL=GR
|
|
bn_mul_word
|
|
.PROC
|
|
.CALLINFO FRAME=64,CALLS,SAVE_RP,ENTRY_GR=3
|
|
.ENTRY
|
|
stw %r2,-20(0,%r30)
|
|
copy %r25,%r2
|
|
stwm %r4,64(0,%r30)
|
|
copy %r24,%r19
|
|
ldi 0,%r28
|
|
stw %r23,-16(0,%r30)
|
|
ldo 12(%r26),%r31
|
|
ldo 12(%r2),%r29
|
|
fldws -16(0,%r30),%fr8L
|
|
L$0026
|
|
fldws 0(0,%r2),%fr9L
|
|
xmpyu %fr8L,%fr9L,%fr9
|
|
fstds %fr9,-16(0,%r30)
|
|
copy %r28,%r21
|
|
ldi 0,%r20
|
|
ldw -16(0,%r30),%r24
|
|
ldw -12(0,%r30),%r25
|
|
add %r21,%r25,%r25
|
|
addc %r20,%r24,%r24
|
|
copy %r24,%r23
|
|
ldi 0,%r22
|
|
copy %r23,%r28
|
|
addib,= -1,%r19,L$0027
|
|
stw %r25,0(0,%r26)
|
|
fldws -8(0,%r29),%fr9L
|
|
xmpyu %fr8L,%fr9L,%fr9
|
|
fstds %fr9,-16(0,%r30)
|
|
copy %r28,%r21
|
|
ldi 0,%r20
|
|
ldw -16(0,%r30),%r24
|
|
ldw -12(0,%r30),%r25
|
|
add %r21,%r25,%r25
|
|
addc %r20,%r24,%r24
|
|
copy %r24,%r23
|
|
ldi 0,%r22
|
|
copy %r23,%r28
|
|
addib,= -1,%r19,L$0027
|
|
stw %r25,-8(0,%r31)
|
|
fldws -4(0,%r29),%fr9L
|
|
xmpyu %fr8L,%fr9L,%fr9
|
|
fstds %fr9,-16(0,%r30)
|
|
copy %r28,%r21
|
|
ldi 0,%r20
|
|
ldw -16(0,%r30),%r24
|
|
ldw -12(0,%r30),%r25
|
|
add %r21,%r25,%r25
|
|
addc %r20,%r24,%r24
|
|
copy %r24,%r23
|
|
ldi 0,%r22
|
|
copy %r23,%r28
|
|
addib,= -1,%r19,L$0027
|
|
stw %r25,-4(0,%r31)
|
|
fldws 0(0,%r29),%fr9L
|
|
xmpyu %fr8L,%fr9L,%fr9
|
|
fstds %fr9,-16(0,%r30)
|
|
copy %r28,%r21
|
|
ldi 0,%r20
|
|
ldw -16(0,%r30),%r24
|
|
ldw -12(0,%r30),%r25
|
|
add %r21,%r25,%r25
|
|
addc %r20,%r24,%r24
|
|
copy %r24,%r23
|
|
ldi 0,%r22
|
|
copy %r23,%r28
|
|
addib,= -1,%r19,L$0027
|
|
stw %r25,0(0,%r31)
|
|
ldo 16(%r29),%r29
|
|
ldo 16(%r2),%r2
|
|
ldo 16(%r31),%r31
|
|
bl L$0026,0
|
|
ldo 16(%r26),%r26
|
|
L$0027
|
|
ldw -84(0,%r30),%r2
|
|
bv 0(%r2)
|
|
ldwm -64(0,%r30),%r4
|
|
.EXIT
|
|
.PROCEND
|
|
.align 4
|
|
.EXPORT bn_sqr_words,ENTRY,PRIV_LEV=3,ARGW0=GR,ARGW1=GR,ARGW2=GR
|
|
bn_sqr_words
|
|
.PROC
|
|
.CALLINFO FRAME=0,NO_CALLS
|
|
.ENTRY
|
|
ldo 28(%r26),%r19
|
|
ldo 12(%r25),%r28
|
|
L$0042
|
|
fldws 0(0,%r25),%fr8L
|
|
fldws 0(0,%r25),%fr8R
|
|
xmpyu %fr8L,%fr8R,%fr8
|
|
fstds %fr8,-16(0,%r30)
|
|
ldw -16(0,%r30),%r22
|
|
ldw -12(0,%r30),%r23
|
|
stw %r23,0(0,%r26)
|
|
copy %r22,%r21
|
|
ldi 0,%r20
|
|
addib,= -1,%r24,L$0049
|
|
stw %r21,-24(0,%r19)
|
|
fldws -8(0,%r28),%fr8L
|
|
fldws -8(0,%r28),%fr8R
|
|
xmpyu %fr8L,%fr8R,%fr8
|
|
fstds %fr8,-16(0,%r30)
|
|
ldw -16(0,%r30),%r22
|
|
ldw -12(0,%r30),%r23
|
|
stw %r23,-20(0,%r19)
|
|
copy %r22,%r21
|
|
ldi 0,%r20
|
|
addib,= -1,%r24,L$0049
|
|
stw %r21,-16(0,%r19)
|
|
fldws -4(0,%r28),%fr8L
|
|
fldws -4(0,%r28),%fr8R
|
|
xmpyu %fr8L,%fr8R,%fr8
|
|
fstds %fr8,-16(0,%r30)
|
|
ldw -16(0,%r30),%r22
|
|
ldw -12(0,%r30),%r23
|
|
stw %r23,-12(0,%r19)
|
|
copy %r22,%r21
|
|
ldi 0,%r20
|
|
addib,= -1,%r24,L$0049
|
|
stw %r21,-8(0,%r19)
|
|
fldws 0(0,%r28),%fr8L
|
|
fldws 0(0,%r28),%fr8R
|
|
xmpyu %fr8L,%fr8R,%fr8
|
|
fstds %fr8,-16(0,%r30)
|
|
ldw -16(0,%r30),%r22
|
|
ldw -12(0,%r30),%r23
|
|
stw %r23,-4(0,%r19)
|
|
copy %r22,%r21
|
|
ldi 0,%r20
|
|
addib,= -1,%r24,L$0049
|
|
stw %r21,0(0,%r19)
|
|
ldo 16(%r28),%r28
|
|
ldo 16(%r25),%r25
|
|
ldo 32(%r19),%r19
|
|
bl L$0042,0
|
|
ldo 32(%r26),%r26
|
|
L$0049
|
|
bv,n 0(%r2)
|
|
.EXIT
|
|
.PROCEND
|
|
.IMPORT BN_num_bits_word,CODE
|
|
.IMPORT fprintf,CODE
|
|
.IMPORT __iob,DATA
|
|
.SPACE $TEXT$
|
|
.SUBSPA $LIT$
|
|
|
|
.align 4
|
|
L$C0000
|
|
.STRING "Division would overflow (%d)\x0a\x00"
|
|
.IMPORT abort,CODE
|
|
.SPACE $TEXT$
|
|
.SUBSPA $CODE$
|
|
|
|
.align 4
|
|
.EXPORT bn_div64,ENTRY,PRIV_LEV=3,ARGW0=GR,ARGW1=GR,ARGW2=GR,RTNVAL=GR
|
|
bn_div64
|
|
.PROC
|
|
.CALLINFO FRAME=128,CALLS,SAVE_RP,ENTRY_GR=8
|
|
.ENTRY
|
|
stw %r2,-20(0,%r30)
|
|
stwm %r8,128(0,%r30)
|
|
stw %r7,-124(0,%r30)
|
|
stw %r4,-112(0,%r30)
|
|
stw %r3,-108(0,%r30)
|
|
copy %r26,%r3
|
|
copy %r25,%r4
|
|
stw %r6,-120(0,%r30)
|
|
ldi 0,%r7
|
|
stw %r5,-116(0,%r30)
|
|
movb,<> %r24,%r5,L$0051
|
|
ldi 2,%r6
|
|
bl L$0068,0
|
|
ldi -1,%r28
|
|
L$0051
|
|
.CALL ARGW0=GR
|
|
bl BN_num_bits_word,%r2
|
|
copy %r5,%r26
|
|
copy %r28,%r24
|
|
ldi 32,%r19
|
|
comb,= %r19,%r24,L$0052
|
|
subi 31,%r24,%r19
|
|
mtsar %r19
|
|
zvdepi 1,32,%r19
|
|
comb,>>= %r19,%r3,L$0052
|
|
addil LR'__iob-$global$+32,%r27
|
|
ldo RR'__iob-$global$+32(%r1),%r26
|
|
ldil LR'L$C0000,%r25
|
|
.CALL ARGW0=GR,ARGW1=GR,ARGW2=GR
|
|
bl fprintf,%r2
|
|
ldo RR'L$C0000(%r25),%r25
|
|
.CALL
|
|
bl abort,%r2
|
|
nop
|
|
L$0052
|
|
comb,>> %r5,%r3,L$0053
|
|
subi 32,%r24,%r24
|
|
sub %r3,%r5,%r3
|
|
L$0053
|
|
comib,= 0,%r24,L$0054
|
|
subi 31,%r24,%r19
|
|
mtsar %r19
|
|
zvdep %r5,32,%r5
|
|
zvdep %r3,32,%r21
|
|
subi 32,%r24,%r20
|
|
mtsar %r20
|
|
vshd 0,%r4,%r20
|
|
or %r21,%r20,%r3
|
|
mtsar %r19
|
|
zvdep %r4,32,%r4
|
|
L$0054
|
|
extru %r5,15,16,%r23
|
|
extru %r5,31,16,%r28
|
|
L$0055
|
|
extru %r3,15,16,%r19
|
|
comb,<> %r23,%r19,L$0058
|
|
copy %r3,%r26
|
|
bl L$0059,0
|
|
zdepi -1,31,16,%r29
|
|
L$0058
|
|
.IMPORT $$divU,MILLICODE
|
|
bl $$divU,%r31
|
|
copy %r23,%r25
|
|
L$0059
|
|
stw %r29,-16(0,%r30)
|
|
fldws -16(0,%r30),%fr10L
|
|
stw %r28,-16(0,%r30)
|
|
fldws -16(0,%r30),%fr10R
|
|
stw %r23,-16(0,%r30)
|
|
xmpyu %fr10L,%fr10R,%fr8
|
|
fldws -16(0,%r30),%fr10R
|
|
fstws %fr8R,-16(0,%r30)
|
|
xmpyu %fr10L,%fr10R,%fr9
|
|
ldw -16(0,%r30),%r8
|
|
fstws %fr9R,-16(0,%r30)
|
|
copy %r8,%r22
|
|
ldw -16(0,%r30),%r8
|
|
extru %r4,15,16,%r24
|
|
copy %r8,%r21
|
|
L$0060
|
|
sub %r3,%r21,%r20
|
|
copy %r20,%r19
|
|
depi 0,31,16,%r19
|
|
comib,<> 0,%r19,L$0061
|
|
zdep %r20,15,16,%r19
|
|
addl %r19,%r24,%r19
|
|
comb,>>= %r19,%r22,L$0061
|
|
sub %r22,%r28,%r22
|
|
sub %r21,%r23,%r21
|
|
bl L$0060,0
|
|
ldo -1(%r29),%r29
|
|
L$0061
|
|
stw %r29,-16(0,%r30)
|
|
fldws -16(0,%r30),%fr10L
|
|
stw %r28,-16(0,%r30)
|
|
fldws -16(0,%r30),%fr10R
|
|
xmpyu %fr10L,%fr10R,%fr8
|
|
fstws %fr8R,-16(0,%r30)
|
|
ldw -16(0,%r30),%r8
|
|
stw %r23,-16(0,%r30)
|
|
fldws -16(0,%r30),%fr10R
|
|
copy %r8,%r19
|
|
xmpyu %fr10L,%fr10R,%fr8
|
|
fstws %fr8R,-16(0,%r30)
|
|
extru %r19,15,16,%r20
|
|
ldw -16(0,%r30),%r8
|
|
zdep %r19,15,16,%r19
|
|
addl %r8,%r20,%r20
|
|
comclr,<<= %r19,%r4,0
|
|
addi 1,%r20,%r20
|
|
comb,<<= %r20,%r3,L$0066
|
|
sub %r4,%r19,%r4
|
|
addl %r3,%r5,%r3
|
|
ldo -1(%r29),%r29
|
|
L$0066
|
|
addib,= -1,%r6,L$0056
|
|
sub %r3,%r20,%r3
|
|
zdep %r29,15,16,%r7
|
|
shd %r3,%r4,16,%r3
|
|
bl L$0055,0
|
|
zdep %r4,15,16,%r4
|
|
L$0056
|
|
or %r7,%r29,%r28
|
|
L$0068
|
|
ldw -148(0,%r30),%r2
|
|
ldw -124(0,%r30),%r7
|
|
ldw -120(0,%r30),%r6
|
|
ldw -116(0,%r30),%r5
|
|
ldw -112(0,%r30),%r4
|
|
ldw -108(0,%r30),%r3
|
|
bv 0(%r2)
|
|
ldwm -128(0,%r30),%r8
|
|
.EXIT
|
|
.PROCEND
|