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