mirror of
https://github.com/openssl/openssl.git
synced 2024-12-09 05:51:54 +08:00
283 lines
5.4 KiB
ArmAsm
283 lines
5.4 KiB
ArmAsm
.file "bn_mulw.c"
|
|
.version "01.01"
|
|
gcc2_compiled.:
|
|
.text
|
|
.align 4
|
|
.globl _bn_mul_add_word
|
|
.type _bn_mul_add_word,@function
|
|
_bn_mul_add_word:
|
|
pushl %ebp
|
|
pushl %edi
|
|
pushl %esi
|
|
pushl %ebx
|
|
|
|
# ax L(t)
|
|
# dx H(t)
|
|
# bx a
|
|
# cx w
|
|
# di r
|
|
# si c
|
|
# bp num
|
|
xorl %esi,%esi # c=0
|
|
movl 20(%esp),%edi # r => edi
|
|
movl 24(%esp),%ebx # a => exb
|
|
movl 32(%esp),%ecx # w => ecx
|
|
movl 28(%esp),%ebp # num => ebp
|
|
|
|
shrl $2,%ebp # num/4
|
|
je .L910
|
|
|
|
# .align 4
|
|
.L110:
|
|
# Round 1
|
|
movl %ecx,%eax # w => eax
|
|
mull (%ebx) # w * *a
|
|
addl (%edi),%eax # *r+=L(t)
|
|
adcl $0,%edx # H(t)+= carry
|
|
addl %esi,%eax # L(t)+=c
|
|
adcl $0,%edx # H(t)+=carry
|
|
movl %eax,(%edi) # *r+=L(t)
|
|
movl %edx,%esi # c=H(t)
|
|
|
|
# Round 2
|
|
movl %ecx,%eax # w => eax
|
|
mull 4(%ebx) # w * *a
|
|
addl 4(%edi),%eax # *r+=L(t)
|
|
adcl $0,%edx # H(t)+= carry
|
|
addl %esi,%eax # L(t)+=c
|
|
adcl $0,%edx # H(t)+=carry
|
|
movl %eax,4(%edi) # *r+=L(t)
|
|
movl %edx,%esi # c=H(t)
|
|
|
|
# Round 3
|
|
movl %ecx,%eax # w => eax
|
|
mull 8(%ebx) # w * *a
|
|
addl 8(%edi),%eax # *r+=L(t)
|
|
adcl $0,%edx # H(t)+=carry
|
|
addl %esi,%eax # L(t)+=c
|
|
adcl $0,%edx # H(t)+=carry
|
|
movl %eax,8(%edi) # *r+=L(t)
|
|
movl %edx,%esi # c=H(t)
|
|
|
|
# Round 4
|
|
movl %ecx,%eax # w => eax
|
|
mull 12(%ebx) # w * *a
|
|
addl 12(%edi),%eax # *r+=L(t)
|
|
adcl $0,%edx # H(t)+=carry
|
|
addl %esi,%eax # L(t)+=c
|
|
adcl $0,%edx # H(t)+=carry
|
|
movl %eax,12(%edi) # *r+=L(t)
|
|
movl %edx,%esi # c=H(t)
|
|
|
|
addl $16,%ebx # a+=4 (4 words)
|
|
addl $16,%edi # r+=4 (4 words)
|
|
|
|
decl %ebp # --num
|
|
je .L910
|
|
jmp .L110
|
|
# .align 4
|
|
.L910:
|
|
movl 28(%esp),%ebp # num => ebp
|
|
andl $3,%ebp
|
|
je .L111
|
|
|
|
# Round 1
|
|
movl %ecx,%eax # w => eax
|
|
mull (%ebx) # w * *a
|
|
addl (%edi),%eax # *r+=L(t)
|
|
adcl $0,%edx # H(t)+=carry
|
|
addl %esi,%eax # L(t)+=c
|
|
adcl $0,%edx # H(t)+=carry
|
|
movl %eax,(%edi) # *r+=L(t)
|
|
movl %edx,%esi # c=H(t)
|
|
decl %ebp # --num
|
|
je .L111
|
|
|
|
# Round 2
|
|
movl %ecx,%eax # w => eax
|
|
mull 4(%ebx) # w * *a
|
|
addl 4(%edi),%eax # *r+=L(t)
|
|
adcl $0,%edx # H(t)+=carry
|
|
addl %esi,%eax # L(t)+=c
|
|
adcl $0,%edx # H(t)+=carry
|
|
movl %eax,4(%edi) # *r+=L(t)
|
|
movl %edx,%esi # c=H(t)
|
|
decl %ebp # --num
|
|
je .L111
|
|
|
|
# Round 3
|
|
movl %ecx,%eax # w => eax
|
|
mull 8(%ebx) # w * *a
|
|
addl 8(%edi),%eax # *r+=L(t)
|
|
adcl $0,%edx # H(t)+=carry
|
|
addl %esi,%eax # L(t)+=c
|
|
adcl $0,%edx # H(t)+=carry
|
|
movl %eax,8(%edi) # *r+=L(t)
|
|
movl %edx,%esi # c=H(t)
|
|
|
|
# .align 4
|
|
.L111:
|
|
movl %esi,%eax # return(c)
|
|
popl %ebx
|
|
popl %esi
|
|
popl %edi
|
|
popl %ebp
|
|
ret
|
|
.Lfe1:
|
|
.size _bn_mul_add_word,.Lfe1-_bn_mul_add_word
|
|
.align 4
|
|
.globl _bn_mul_word
|
|
.type _bn_mul_word,@function
|
|
_bn_mul_word:
|
|
pushl %ebp
|
|
pushl %edi
|
|
pushl %esi
|
|
pushl %ebx
|
|
|
|
# ax L(t)
|
|
# dx H(t)
|
|
# bx a
|
|
# cx w
|
|
# di r
|
|
# num bp
|
|
# si c
|
|
xorl %esi,%esi # c=0
|
|
movl 20(%esp),%edi # r => edi
|
|
movl 24(%esp),%ebx # a => exb
|
|
movl 28(%esp),%ebp # num => bp
|
|
movl 32(%esp),%ecx # w => ecx
|
|
|
|
# .align 4
|
|
.L210:
|
|
movl %ecx,%eax # w => eax
|
|
mull (%ebx) # w * *a
|
|
addl %esi,%eax # L(t)+=c
|
|
adcl $0,%edx # H(t)+=carry
|
|
movl %eax,(%edi) # *r=L(t)
|
|
movl %edx,%esi # c=H(t)
|
|
decl %ebp # --num
|
|
je .L211
|
|
|
|
movl %ecx,%eax # w => eax
|
|
mull 4(%ebx) # w * *a
|
|
addl %esi,%eax # L(t)+=c
|
|
adcl $0,%edx # H(t)+=carry
|
|
movl %eax,4(%edi) # *r=L(t)
|
|
movl %edx,%esi # c=H(t)
|
|
decl %ebp # --num
|
|
je .L211
|
|
|
|
movl %ecx,%eax # w => eax
|
|
mull 8(%ebx) # w * *a
|
|
addl %esi,%eax # L(t)+=c
|
|
adcl $0,%edx # H(t)+=carry
|
|
movl %eax,8(%edi) # *r=L(t)
|
|
movl %edx,%esi # c=H(t)
|
|
decl %ebp # --num
|
|
je .L211
|
|
|
|
movl %ecx,%eax # w => eax
|
|
mull 12(%ebx) # w * *a
|
|
addl %esi,%eax # L(t)+=c
|
|
adcl $0,%edx # H(t)+=carry
|
|
movl %eax,12(%edi) # *r=L(t)
|
|
movl %edx,%esi # c=H(t)
|
|
decl %ebp # --num
|
|
je .L211
|
|
|
|
addl $16,%ebx # a+=4 (4 words)
|
|
addl $16,%edi # r+=4 (4 words)
|
|
|
|
jmp .L210
|
|
# .align 4
|
|
.L211:
|
|
movl %esi,%eax # return(c)
|
|
popl %ebx
|
|
popl %esi
|
|
popl %edi
|
|
popl %ebp
|
|
ret
|
|
.Lfe2:
|
|
.size _bn_mul_word,.Lfe2-_bn_mul_word
|
|
|
|
.align 4
|
|
.globl _bn_sqr_words
|
|
.type _bn_sqr_words,@function
|
|
_bn_sqr_words:
|
|
pushl %edi
|
|
pushl %esi
|
|
pushl %ebx
|
|
movl 16(%esp),%esi # r
|
|
movl 20(%esp),%edi # a
|
|
movl 24(%esp),%ebx # n
|
|
# .align 4
|
|
shrl $2,%ebx
|
|
jz .L99
|
|
.L28:
|
|
movl (%edi),%eax # get a
|
|
mull %eax # a*a
|
|
movl %eax,(%esi) # put low into return addr
|
|
movl %edx,4(%esi) # put high into return addr
|
|
|
|
movl 4(%edi),%eax # get a
|
|
mull %eax # a*a
|
|
movl %eax,8(%esi) # put low into return addr
|
|
movl %edx,12(%esi) # put high into return addr
|
|
|
|
movl 8(%edi),%eax # get a
|
|
mull %eax # a*a
|
|
movl %eax,16(%esi) # put low into return addr
|
|
movl %edx,20(%esi) # put high into return addr
|
|
|
|
movl 12(%edi),%eax # get a
|
|
mull %eax # a*a
|
|
movl %eax,24(%esi) # put low into return addr
|
|
movl %edx,28(%esi) # put high into return addr
|
|
|
|
addl $16,%edi
|
|
addl $32,%esi
|
|
decl %ebx # n-=4;
|
|
jz .L99
|
|
jmp .L28
|
|
# .align 4
|
|
.L99:
|
|
movl 24(%esp),%ebx # n
|
|
andl $3,%ebx
|
|
jz .L29
|
|
movl (%edi),%eax # get a
|
|
mull %eax # a*a
|
|
movl %eax,(%esi) # put low into return addr
|
|
movl %edx,4(%esi) # put high into return addr
|
|
decl %ebx # n--;
|
|
jz .L29
|
|
movl 4(%edi),%eax # get a
|
|
mull %eax # a*a
|
|
movl %eax,8(%esi) # put low into return addr
|
|
movl %edx,12(%esi) # put high into return addr
|
|
decl %ebx # n--;
|
|
jz .L29
|
|
movl 8(%edi),%eax # get a
|
|
mull %eax # a*a
|
|
movl %eax,16(%esi) # put low into return addr
|
|
movl %edx,20(%esi) # put high into return addr
|
|
|
|
.L29:
|
|
popl %ebx
|
|
popl %esi
|
|
popl %edi
|
|
ret
|
|
.Lfe3:
|
|
.size _bn_sqr_words,.Lfe3-_bn_sqr_words
|
|
|
|
.align 4
|
|
.globl _bn_div64
|
|
.type _bn_div64,@function
|
|
_bn_div64:
|
|
movl 4(%esp),%edx # a
|
|
movl 8(%esp),%eax # b
|
|
divl 12(%esp) # ab/c
|
|
ret
|
|
.Lfe4:
|
|
.size _bn_div64,.Lfe4-_bn_div64
|
|
.ident "GCC: (GNU) 2.6.3"
|