+++ /dev/null
-/* Currently not working and not used. */
-
-/*
-Copyright (C) 1999 Free Software Foundation, Inc.
-
-This file is part of the GNU MP Library.
-
-The GNU MP Library is free software; you can redistribute it and/or modify
-it under the terms of the GNU Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 of the License, or (at your
-option) any later version.
-
-The GNU MP Library is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser General Public License
-along with the GNU MP Library; see the file COPYING.LIB. If not, write to
-the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
-MA 02111-1307, USA.
-*/
-
-
-#define SAVE_BORROW_RESTORE_CARRY(r) adcl r,r; shll $31,r
-#define SAVE_CARRY_RESTORE_BORROW(r) adcl r,r
-
- .globl mpn_addsub_n_0
- .globl mpn_addsub_n_1
-
-/* Cute i386/i486/p6 addsub loop for the "full overlap" case r1==s2,r2==s1.
- We let subtraction and addition alternate in being two limbs
- ahead of the other, thereby avoiding some SAVE_RESTORE. */
-// r1 = r2 + r1 edi = esi + edi
-// r2 = r2 - r1 esi = esi - edi
-// s1 s2
-// r2 r1
-// eax,ebx,ecx,edx,esi,edi,ebp
-mpn_addsub_n_0:
- pushl %edi
- pushl %esi
- pushl %ebx
- pushl %ebp
-
- movl 20(%esp),%edi /* res_ptr */
- movl 24(%esp),%esi /* s1_ptr */
- movl 36(%esp),%ebp /* size */
-
- shrl $2,%ebp
- xorl %edx,%edx
- .align 4
-Loop0: // L=load E=execute S=store
- movl (%esi),%ebx // sub 0 L
- movl 4(%esi),%ecx // sub 1 L
- sbbl (%edi),%ebx // sub 0 LE
- sbbl 4(%edi),%ecx // sub 1 LE
-// SAVE_BORROW_RESTORE_CARRY(%edx)
- movl (%esi),%eax // add 0 L
- adcl %eax,(%edi) // add 0 LES
- movl 4(%esi),%eax // add 1 L
- adcl %eax,4(%edi) // add 1 LES
- movl %ebx,(%esi) // sub 0 S
- movl %ecx,4(%esi) // sub 1 S
- movl 8(%esi),%ebx // add 2 L
- adcl 8(%edi),%ebx // add 2 LE
- movl 12(%esi),%ecx // add 3 L
- adcl 12(%edi),%ecx // add 3 LE
-// SAVE_CARRY_RESTORE_BORROW(%edx)
- movl 8(%edi),%eax // sub 2 L
- sbbl %eax,8(%esi) // sub 2 LES
- movl 12(%edi),%eax // sub 3 L
- sbbl %eax,12(%esi) // sub 3 LES
- movl %ebx,8(%edi) // add 2 S
- movl %ecx,12(%edi) // add 3 S
- leal 16(%esi),%esi
- leal 16(%edi),%edi
- decl %ebp
- jnz Loop0
-
- popl %ebp
- popl %ebx
- popl %esi
- popl %edi
- ret
-
-/* Cute i386/i486/p6 addsub loop for the "full overlap" case r1==s1,r2==s2.
- We let subtraction and addition alternate in being two limbs
- ahead of the other, thereby avoiding some SAVE_RESTORE. */
-// r1 = r1 + r2 edi = edi + esi
-// r2 = r1 - r2 esi = edi - esi
-// s2 s1
-// r2 r1
-// eax,ebx,ecx,edx,esi,edi,ebp
-mpn_addsub_n_1:
- pushl %edi
- pushl %esi
- pushl %ebx
- pushl %ebp
-
- movl 20(%esp),%edi /* res_ptr */
- movl 24(%esp),%esi /* s1_ptr */
- movl 36(%esp),%ebp /* size */
-
- shrl $2,%ebp
- xorl %edx,%edx
- .align 4
-Loop1: // L=load E=execute S=store
- movl (%edi),%ebx // sub 0 L
- sbbl (%esi),%ebx // sub 0 LE
- movl 4(%edi),%ecx // sub 1 L
- sbbl 4(%esi),%ecx // sub 1 LE
-// SAVE_BORROW_RESTORE_CARRY(%edx)
- movl (%esi),%eax // add 0 L
- adcl %eax,(%edi) // add 0 LES
- movl 4(%esi),%eax // add 1 L
- adcl %eax,4(%edi) // add 1 LES
- movl %ebx,(%esi) // sub 0 S
- movl %ecx,4(%esi) // sub 1 S
- movl 8(%esi),%ebx // add 2 L
- adcl 8(%edi),%ebx // add 2 LE
- movl 12(%esi),%ecx // add 3 L
- adcl 12(%edi),%ecx // add 3 LE
-// SAVE_CARRY_RESTORE_BORROW(%edx)
- movl 8(%edi),%eax // sub 2 L
- sbbl 8(%esi),%eax // sub 2 LES
- movl %eax,8(%esi) // sub 2 S
- movl 12(%edi),%eax // sub 3 L
- sbbl 12(%esi),%eax // sub 3 LE
- movl %eax,12(%esi) // sub 3 S
- movl %ebx,8(%edi) // add 2 S
- movl %ecx,12(%edi) // add 3 S
- leal 16(%esi),%esi
- leal 16(%edi),%edi
- decl %ebp
- jnz Loop1
-
- popl %ebp
- popl %ebx
- popl %esi
- popl %edi
- ret
-
- .globl mpn_copy
-mpn_copy:
- pushl %edi
- pushl %esi
- pushl %ebx
- pushl %ebp
-
- movl 20(%esp),%edi /* res_ptr */
- movl 24(%esp),%esi /* s1_ptr */
- movl 28(%esp),%ebp /* size */
-
- shrl $2,%ebp
- .align 4
-Loop2:
- movl (%esi),%eax
- movl 4(%esi),%ebx
- movl %eax,(%edi)
- movl %ebx,4(%edi)
- movl 8(%esi),%eax
- movl 12(%esi),%ebx
- movl %eax,8(%edi)
- movl %ebx,12(%edi)
- leal 16(%esi),%esi
- leal 16(%edi),%edi
- decl %ebp
- jnz Loop2
-
- popl %ebp
- popl %ebx
- popl %esi
- popl %edi
- ret