diff options
| author | rsc <devnull@localhost> | 2006-03-22 16:30:50 +0000 |
|---|---|---|
| committer | rsc <devnull@localhost> | 2006-03-22 16:30:50 +0000 |
| commit | 39ce0d5862cd5fab8c93d60b195610b2ac77a094 (patch) | |
| tree | 0b19fb4f9ea03b3b044f0c7b72ad000f7d02354a /src/libmp/386/mpvecadd.s | |
| parent | aff51ee51f0bab35fca95569c639042de8acf777 (diff) | |
| download | plan9port-39ce0d5862cd5fab8c93d60b195610b2ac77a094.tar.gz plan9port-39ce0d5862cd5fab8c93d60b195610b2ac77a094.zip | |
Avoid storing precious data below the stack pointer.
Diffstat (limited to 'src/libmp/386/mpvecadd.s')
| -rw-r--r-- | src/libmp/386/mpvecadd.s | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/src/libmp/386/mpvecadd.s b/src/libmp/386/mpvecadd.s index 67519ad4..04a2bedf 100644 --- a/src/libmp/386/mpvecadd.s +++ b/src/libmp/386/mpvecadd.s @@ -10,17 +10,19 @@ .type mpvecadd, @function mpvecadd: /* Prelude */ - pushl %ebp - movl %ebx, -4(%esp) /* save on stack */ - movl %esi, -8(%esp) - movl %edi, -12(%esp) + pushl %ebp /* save on stack */ + pushl %ebx + pushl %esi + pushl %edi - movl 12(%esp), %edx /* alen */ - movl 20(%esp), %ecx /* blen */ - movl 8(%esp), %esi /* a */ - movl 16(%esp), %ebx /* b */ + leal 20(%esp), %ebp /* %ebp = FP for now */ + + movl 4(%ebp), %edx /* alen */ + movl 12(%ebp), %ecx /* blen */ + movl 0(%ebp), %esi /* a */ + movl 8(%ebp), %ebx /* b */ subl %ecx, %edx - movl 24(%esp), %edi /* sum */ + movl 16(%ebp), %edi /* sum */ xorl %ebp, %ebp /* this also sets carry to 0 */ /* skip addition if b is zero */ @@ -62,9 +64,8 @@ _addloop2: done: /* Postlude */ - movl -4(%esp), %ebx /* restore from stack */ - movl -8(%esp), %esi - movl -12(%esp), %edi - movl %esp, %ebp - leave + popl %edi + popl %esi + popl %ebx + popl %ebp ret |
