version 1.1.1.1, 2000/09/09 14:12:42 |
version 1.1.1.2, 2003/08/25 16:06:27 |
|
|
dnl x86 mpn_add_n/mpn_sub_n -- mpn addition and subtraction. |
dnl x86 mpn_add_n/mpn_sub_n -- mpn addition and subtraction. |
|
|
dnl Copyright (C) 1992, 1994, 1995, 1996, 1999, 2000 Free Software |
dnl Copyright 1992, 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software |
dnl Foundation, Inc. |
dnl Foundation, Inc. |
dnl |
dnl |
dnl This file is part of the GNU MP Library. |
dnl This file is part of the GNU MP Library. |
Line 20 dnl License along with the GNU MP Library; see the fi |
|
Line 20 dnl License along with the GNU MP Library; see the fi |
|
dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - |
dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - |
dnl Suite 330, Boston, MA 02111-1307, USA. |
dnl Suite 330, Boston, MA 02111-1307, USA. |
|
|
|
|
include(`../config.m4') |
include(`../config.m4') |
|
|
|
|
|
C cycles/limb |
|
C P5: 3.375 |
|
C P6: 3.7 |
|
C K6: 3.5 |
|
C K7: 2.25 |
|
C P4: 8.75 |
|
|
|
|
ifdef(`OPERATION_add_n',` |
ifdef(`OPERATION_add_n',` |
define(M4_inst, adcl) |
define(M4_inst, adcl) |
define(M4_function_n, mpn_add_n) |
define(M4_function_n, mpn_add_n) |
Line 51 defframe(PARAM_SRC2, 12) |
|
Line 58 defframe(PARAM_SRC2, 12) |
|
defframe(PARAM_SRC1, 8) |
defframe(PARAM_SRC1, 8) |
defframe(PARAM_DST, 4) |
defframe(PARAM_DST, 4) |
|
|
.text |
TEXT |
ALIGN(8) |
ALIGN(8) |
|
|
PROLOGUE(M4_function_nc) |
PROLOGUE(M4_function_nc) |
Line 69 deflit(`FRAME',0) |
|
Line 76 deflit(`FRAME',0) |
|
shrl $3,%ecx C compute count for unrolled loop |
shrl $3,%ecx C compute count for unrolled loop |
negl %eax |
negl %eax |
andl $7,%eax C get index where to start loop |
andl $7,%eax C get index where to start loop |
jz LF(M4_function_n,oopgo) C necessary special case for 0 |
jz L(oopgo) C necessary special case for 0 |
incl %ecx C adjust loop count |
incl %ecx C adjust loop count |
shll $2,%eax C adjustment for pointers... |
shll $2,%eax C adjustment for pointers... |
subl %eax,%edi C ... since they are offset ... |
subl %eax,%edi C ... since they are offset ... |
|
|
call L(0a) |
call L(0a) |
L(0a): leal (%eax,%eax,8),%eax |
L(0a): leal (%eax,%eax,8),%eax |
addl (%esp),%eax |
addl (%esp),%eax |
addl $LF(M4_function_n,oop)-L(0a)-3,%eax |
addl $L(oop)-L(0a)-3,%eax |
addl $4,%esp |
addl $4,%esp |
',` |
',` |
C Calculate start address in loop for non-PIC. |
C Calculate start address in loop for non-PIC. |
leal LF(M4_function_n,oop)-3(%eax,%eax,8),%eax |
leal L(oop)-3(%eax,%eax,8),%eax |
') |
') |
|
|
C These lines initialize carry from the 5th parameter. Should be |
C These lines initialize carry from the 5th parameter. Should be |