Annotation of OpenXM_contrib/gmp/mpn/x86/copyd.asm, Revision 1.1.1.2
1.1 maekawa 1: dnl x86 mpn_copyd -- copy limb vector, decrementing.
2:
1.1.1.2 ! ohara 3: dnl Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
1.1 maekawa 4: dnl
5: dnl This file is part of the GNU MP Library.
6: dnl
7: dnl The GNU MP Library is free software; you can redistribute it and/or
8: dnl modify it under the terms of the GNU Lesser General Public License as
9: dnl published by the Free Software Foundation; either version 2.1 of the
10: dnl License, or (at your option) any later version.
11: dnl
12: dnl The GNU MP Library is distributed in the hope that it will be useful,
13: dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
14: dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15: dnl Lesser General Public License for more details.
16: dnl
17: dnl You should have received a copy of the GNU Lesser General Public
18: dnl License along with the GNU MP Library; see the file COPYING.LIB. If
19: dnl not, write to the Free Software Foundation, Inc., 59 Temple Place -
20: dnl Suite 330, Boston, MA 02111-1307, USA.
21:
22: include(`../config.m4')
23:
24:
1.1.1.2 ! ohara 25: C cycles/limb startup (approx)
! 26: C P5: 1.0 40
! 27: C P6 2.4 70
! 28: C K6 1.0 55
! 29: C K7: 1.3 75
! 30: C P4: 2.6 175
! 31: C
! 32: C (Startup time includes some function call overheads.)
! 33:
! 34:
1.1 maekawa 35: C void mpn_copyd (mp_ptr dst, mp_srcptr src, mp_size_t size);
36: C
37: C Copy src,size to dst,size, working from high to low addresses.
38: C
39: C The code here is very generic and can be expected to be reasonable on all
40: C the x86 family.
41:
42: defframe(PARAM_SIZE,12)
43: defframe(PARAM_SRC, 8)
44: defframe(PARAM_DST, 4)
45: deflit(`FRAME',0)
46:
1.1.1.2 ! ohara 47: TEXT
1.1 maekawa 48: ALIGN(32)
49:
50: PROLOGUE(mpn_copyd)
51: C eax saved esi
52: C ebx
53: C ecx counter
54: C edx saved edi
55: C esi src
56: C edi dst
57: C ebp
58:
59: movl PARAM_SIZE, %ecx
60: movl %esi, %eax
61:
62: movl PARAM_SRC, %esi
63: movl %edi, %edx
64:
65: movl PARAM_DST, %edi
66: leal -4(%esi,%ecx,4), %esi
67:
68: leal -4(%edi,%ecx,4), %edi
69:
70: std
71:
72: rep
73: movsl
74:
75: cld
76:
77: movl %eax, %esi
78: movl %edx, %edi
79:
80: ret
81:
82: EPILOGUE()
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>