Home | History | Annotate | Line # | Download | only in pa32
      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