Updated from ../=mpn/gmp-1.906.7
[kopensolaris-gnu/glibc.git] / sysdeps / hppa / sub_n.s
1 ; HP-PA  __mpn_sub_n -- Subtract two limb vectors of the same length > 0 and
2 ; store difference in a third limb vector.
3
4 ; Copyright (C) 1992, 1994 Free Software Foundation, Inc.
5
6 ; This file is part of the GNU MP Library.
7
8 ; The GNU MP Library is free software; you can redistribute it and/or modify
9 ; it under the terms of the GNU Library General Public License as published by
10 ; the Free Software Foundation; either version 2 of the License, or (at your
11 ; option) any later version.
12
13 ; The GNU MP Library is distributed in the hope that it will be useful, but
14 ; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15 ; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
16 ; License for more details.
17
18 ; You should have received a copy of the GNU Library General Public License
19 ; along with the GNU MP Library; see the file COPYING.LIB.  If not, write to
20 ; the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21
22
23 ; INPUT PARAMETERS
24 ; res_ptr       gr26
25 ; s1_ptr        gr25
26 ; s2_ptr        gr24
27 ; size          gr23
28
29 ; One might want to unroll this as for other processors, but it turns
30 ; out that the data cache contention after a store makes such
31 ; unrolling useless.  We can't come under 5 cycles/limb anyway.
32
33         .code
34         .export         __mpn_sub_n
35 __mpn_sub_n
36         .proc
37         .callinfo       frame=0,no_calls
38         .entry
39
40         ldws,ma         4(0,%r25),%r20
41         ldws,ma         4(0,%r24),%r19
42
43         addib,=         -1,%r23,L$end   ; check for (SIZE == 1)
44          sub            %r20,%r19,%r28  ; subtract first limbs ignoring cy
45
46 L$loop  ldws,ma         4(0,%r25),%r20
47         ldws,ma         4(0,%r24),%r19
48         stws,ma         %r28,4(0,%r26)
49         addib,<>        -1,%r23,L$loop
50          subb           %r20,%r19,%r28
51
52 L$end   stws            %r28,0(0,%r26)
53         addc            %r0,%r0,%r28
54         bv              0(%r2)
55          subi           1,%r28,%r28
56
57         .exit
58         .procend