sub_n.asm revision 1.1 1 1.1 mrg dnl HP-PA mpn_sub_n -- Subtract two limb vectors of the same length > 0 and
2 1.1 mrg dnl store difference in a third limb vector.
3 1.1 mrg
4 1.1 mrg dnl Copyright 1992, 1994, 2000, 2001, 2002 Free Software Foundation, Inc.
5 1.1 mrg
6 1.1 mrg dnl This file is part of the GNU MP Library.
7 1.1 mrg
8 1.1 mrg dnl The GNU MP Library is free software; you can redistribute it and/or modify
9 1.1 mrg dnl it under the terms of the GNU Lesser General Public License as published
10 1.1 mrg dnl by the Free Software Foundation; either version 3 of the License, or (at
11 1.1 mrg dnl your option) any later version.
12 1.1 mrg
13 1.1 mrg dnl The GNU MP Library is distributed in the hope that it will be useful, but
14 1.1 mrg dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15 1.1 mrg dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
16 1.1 mrg dnl License for more details.
17 1.1 mrg
18 1.1 mrg dnl You should have received a copy of the GNU Lesser General Public License
19 1.1 mrg dnl along with the GNU MP Library. If not, see http://www.gnu.org/licenses/.
20 1.1 mrg
21 1.1 mrg include(`../config.m4')
22 1.1 mrg
23 1.1 mrg C INPUT PARAMETERS
24 1.1 mrg C res_ptr gr26
25 1.1 mrg C s1_ptr gr25
26 1.1 mrg C s2_ptr gr24
27 1.1 mrg C size gr23
28 1.1 mrg
29 1.1 mrg C One might want to unroll this as for other processors, but it turns out that
30 1.1 mrg C the data cache contention after a store makes such unrolling useless. We
31 1.1 mrg C can't come under 5 cycles/limb anyway.
32 1.1 mrg
33 1.1 mrg ASM_START()
34 1.1 mrg PROLOGUE(mpn_sub_n)
35 1.1 mrg ldws,ma 4(0,%r25),%r20
36 1.1 mrg ldws,ma 4(0,%r24),%r19
37 1.1 mrg
38 1.1 mrg addib,= -1,%r23,L(end) C check for (SIZE == 1)
39 1.1 mrg sub %r20,%r19,%r28 C subtract first limbs ignoring cy
40 1.1 mrg
41 1.1 mrg LDEF(loop)
42 1.1 mrg ldws,ma 4(0,%r25),%r20
43 1.1 mrg ldws,ma 4(0,%r24),%r19
44 1.1 mrg stws,ma %r28,4(0,%r26)
45 1.1 mrg addib,<> -1,%r23,L(loop)
46 1.1 mrg subb %r20,%r19,%r28
47 1.1 mrg
48 1.1 mrg LDEF(end)
49 1.1 mrg stws %r28,0(0,%r26)
50 1.1 mrg addc %r0,%r0,%r28
51 1.1 mrg bv 0(%r2)
52 1.1 mrg subi 1,%r28,%r28
53 1.1 mrg EPILOGUE()
54