Avoid storing precious data below the stack pointer.
This commit is contained in:
parent
aff51ee51f
commit
39ce0d5862
4 changed files with 61 additions and 63 deletions
|
|
@ -1,19 +1,19 @@
|
||||||
.text
|
.text
|
||||||
|
|
||||||
.p2align 2,0x90
|
.p2align 2,0x90
|
||||||
.globl mpdigdiv
|
.globl mpdigdiv
|
||||||
.type mpdigdiv, @function
|
.type mpdigdiv, @function
|
||||||
mpdigdiv:
|
mpdigdiv:
|
||||||
/* Prelude */
|
/* Prelude */
|
||||||
pushl %ebp
|
pushl %ebp /* save on stack */
|
||||||
movl %ebx, -4(%esp) /* save on stack */
|
pushl %ebx
|
||||||
|
|
||||||
movl 8(%esp), %ebx
|
leal 12(%esp), %ebp /* %ebp = FP for now */
|
||||||
movl (%ebx), %eax
|
movl 0(%ebp), %ebx /* dividend */
|
||||||
movl 4(%ebx), %edx
|
movl 0(%ebx), %eax
|
||||||
|
movl 4(%ebx), %edx
|
||||||
|
movl 4(%ebp), %ebx /* divisor */
|
||||||
|
movl 8(%ebp), %ebp /* quotient */
|
||||||
|
|
||||||
movl 12(%esp), %ebx
|
|
||||||
movl 16(%esp), %ebp
|
|
||||||
xorl %ecx, %ecx
|
xorl %ecx, %ecx
|
||||||
cmpl %ebx, %edx /* dividend >= 2^32 * divisor */
|
cmpl %ebx, %edx /* dividend >= 2^32 * divisor */
|
||||||
jae divovfl
|
jae divovfl
|
||||||
|
|
@ -21,19 +21,14 @@ mpdigdiv:
|
||||||
je divovfl
|
je divovfl
|
||||||
divl %ebx /* AX = DX:AX/BX */
|
divl %ebx /* AX = DX:AX/BX */
|
||||||
movl %eax, (%ebp)
|
movl %eax, (%ebp)
|
||||||
jmp done
|
done:
|
||||||
|
/* Postlude */
|
||||||
|
popl %ebx
|
||||||
|
popl %ebp
|
||||||
|
ret
|
||||||
|
|
||||||
/* return all 1's */
|
/* return all 1's */
|
||||||
divovfl:
|
divovfl:
|
||||||
notl %ecx
|
notl %ecx
|
||||||
movl %ecx, (%ebp)
|
movl %ecx, (%ebp)
|
||||||
|
jmp done
|
||||||
done:
|
|
||||||
/* Postlude */
|
|
||||||
movl -4(%esp), %ebx /* restore from stack */
|
|
||||||
movl %esp, %ebp
|
|
||||||
leave
|
|
||||||
ret
|
|
||||||
|
|
||||||
.endmpdigdiv:
|
|
||||||
.size mpdigdiv,.endmpdigdiv-mpdigdiv
|
|
||||||
|
|
|
||||||
|
|
@ -10,17 +10,19 @@
|
||||||
.type mpvecadd, @function
|
.type mpvecadd, @function
|
||||||
mpvecadd:
|
mpvecadd:
|
||||||
/* Prelude */
|
/* Prelude */
|
||||||
pushl %ebp
|
pushl %ebp /* save on stack */
|
||||||
movl %ebx, -4(%esp) /* save on stack */
|
pushl %ebx
|
||||||
movl %esi, -8(%esp)
|
pushl %esi
|
||||||
movl %edi, -12(%esp)
|
pushl %edi
|
||||||
|
|
||||||
movl 12(%esp), %edx /* alen */
|
leal 20(%esp), %ebp /* %ebp = FP for now */
|
||||||
movl 20(%esp), %ecx /* blen */
|
|
||||||
movl 8(%esp), %esi /* a */
|
movl 4(%ebp), %edx /* alen */
|
||||||
movl 16(%esp), %ebx /* b */
|
movl 12(%ebp), %ecx /* blen */
|
||||||
|
movl 0(%ebp), %esi /* a */
|
||||||
|
movl 8(%ebp), %ebx /* b */
|
||||||
subl %ecx, %edx
|
subl %ecx, %edx
|
||||||
movl 24(%esp), %edi /* sum */
|
movl 16(%ebp), %edi /* sum */
|
||||||
xorl %ebp, %ebp /* this also sets carry to 0 */
|
xorl %ebp, %ebp /* this also sets carry to 0 */
|
||||||
|
|
||||||
/* skip addition if b is zero */
|
/* skip addition if b is zero */
|
||||||
|
|
@ -62,9 +64,8 @@ _addloop2:
|
||||||
|
|
||||||
done:
|
done:
|
||||||
/* Postlude */
|
/* Postlude */
|
||||||
movl -4(%esp), %ebx /* restore from stack */
|
popl %edi
|
||||||
movl -8(%esp), %esi
|
popl %esi
|
||||||
movl -12(%esp), %edi
|
popl %ebx
|
||||||
movl %esp, %ebp
|
popl %ebp
|
||||||
leave
|
|
||||||
ret
|
ret
|
||||||
|
|
|
||||||
|
|
@ -27,15 +27,16 @@
|
||||||
.type mpvecdigmuladd, @function
|
.type mpvecdigmuladd, @function
|
||||||
mpvecdigmuladd:
|
mpvecdigmuladd:
|
||||||
/* Prelude */
|
/* Prelude */
|
||||||
pushl %ebp
|
pushl %ebp /* save on stack */
|
||||||
movl %ebx, -4(%esp) /* save on stack */
|
pushl %ebx
|
||||||
movl %esi, -8(%esp)
|
pushl %esi
|
||||||
movl %edi, -12(%esp)
|
pushl %edi
|
||||||
|
|
||||||
movl 8(%esp), %esi /* b */
|
leal 20(%esp), %ebp /* %ebp = FP for now */
|
||||||
movl 12(%esp), %ecx /* n */
|
movl 0(%ebp), %esi /* b */
|
||||||
movl 16(%esp), %ebx /* m */
|
movl 4(%ebp), %ecx /* n */
|
||||||
movl 20(%esp), %edi /* p */
|
movl 8(%ebp), %ebx /* m */
|
||||||
|
movl 12(%ebp), %edi /* p */
|
||||||
movl %ecx, %ebp
|
movl %ecx, %ebp
|
||||||
negl %ebp /* BP = -n */
|
negl %ebp /* BP = -n */
|
||||||
shll $2, %ecx
|
shll $2, %ecx
|
||||||
|
|
@ -61,9 +62,9 @@ _muladdnocarry2:
|
||||||
adcl %eax, %eax /* return carry out of p[n] */
|
adcl %eax, %eax /* return carry out of p[n] */
|
||||||
|
|
||||||
/* Postlude */
|
/* Postlude */
|
||||||
movl -4(%esp), %ebx /* restore from stack */
|
popl %edi
|
||||||
movl -8(%esp), %esi
|
popl %esi
|
||||||
movl -12(%esp), %edi
|
popl %ebx
|
||||||
movl %esp, %ebp
|
popl %ebp
|
||||||
leave
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,16 +10,18 @@
|
||||||
.type mpvecsub, @function
|
.type mpvecsub, @function
|
||||||
mpvecsub:
|
mpvecsub:
|
||||||
/* Prelude */
|
/* Prelude */
|
||||||
pushl %ebp
|
pushl %ebp /* save on stack */
|
||||||
movl %ebx, -4(%esp) /* save on stack */
|
pushl %ebx
|
||||||
movl %esi, -8(%esp)
|
pushl %esi
|
||||||
movl %edi, -12(%esp)
|
pushl %edi
|
||||||
|
|
||||||
|
leal 20(%esp), %ebp /* %ebp = FP for now */
|
||||||
|
movl 0(%ebp), %esi /* a */
|
||||||
|
movl 8(%ebp), %ebx /* b */
|
||||||
|
movl 4(%ebp), %edx /* alen */
|
||||||
|
movl 12(%ebp), %ecx /* blen */
|
||||||
|
movl 16(%ebp), %edi /* diff */
|
||||||
|
|
||||||
movl 8(%esp), %esi /* a */
|
|
||||||
movl 16(%esp), %ebx /* b */
|
|
||||||
movl 12(%esp), %edx /* alen */
|
|
||||||
movl 20(%esp), %ecx /* blen */
|
|
||||||
movl 24(%esp), %edi /* diff */
|
|
||||||
subl %ecx,%edx
|
subl %ecx,%edx
|
||||||
xorl %ebp,%ebp /* this also sets carry to 0 */
|
xorl %ebp,%ebp /* this also sets carry to 0 */
|
||||||
|
|
||||||
|
|
@ -46,15 +48,14 @@ _subloop2:
|
||||||
movl (%esi, %ebp, 4), %eax
|
movl (%esi, %ebp, 4), %eax
|
||||||
sbbl $0, %eax
|
sbbl $0, %eax
|
||||||
movl %eax, (%edi, %ebp, 4)
|
movl %eax, (%edi, %ebp, 4)
|
||||||
INCL %ebp
|
incl %ebp
|
||||||
LOOP _subloop2
|
loop _subloop2
|
||||||
|
|
||||||
done:
|
done:
|
||||||
/* Postlude */
|
/* Postlude */
|
||||||
movl -4(%esp), %ebx /* restore from stack */
|
popl %edi
|
||||||
movl -8(%esp), %esi
|
popl %esi
|
||||||
movl -12(%esp), %edi
|
popl %ebx
|
||||||
movl %esp, %ebp
|
popl %ebp
|
||||||
leave
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue