Home | History | Annotate | Line # | Download | only in pa64
lshift.asm revision 1.1
      1  1.1  mrg dnl  HP-PA 2.0 mpn_lshift -- Left shift.
      2  1.1  mrg 
      3  1.1  mrg dnl  Copyright 1997, 2000, 2002, 2003 Free Software Foundation, Inc.
      4  1.1  mrg 
      5  1.1  mrg dnl  This file is part of the GNU MP Library.
      6  1.1  mrg 
      7  1.1  mrg dnl  The GNU MP Library is free software; you can redistribute it and/or modify
      8  1.1  mrg dnl  it under the terms of the GNU Lesser General Public License as published
      9  1.1  mrg dnl  by the Free Software Foundation; either version 3 of the License, or (at
     10  1.1  mrg dnl  your option) any later version.
     11  1.1  mrg 
     12  1.1  mrg dnl  The GNU MP Library is distributed in the hope that it will be useful, but
     13  1.1  mrg dnl  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
     14  1.1  mrg dnl  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
     15  1.1  mrg dnl  License for more details.
     16  1.1  mrg 
     17  1.1  mrg dnl  You should have received a copy of the GNU Lesser General Public License
     18  1.1  mrg dnl  along with the GNU MP Library.  If not, see http://www.gnu.org/licenses/.
     19  1.1  mrg 
     20  1.1  mrg 
     21  1.1  mrg dnl  This runs at 1.5 cycles/limb on PA8000 and 1.0 cycles/limb on PA8500.
     22  1.1  mrg 
     23  1.1  mrg include(`../config.m4')
     24  1.1  mrg 
     25  1.1  mrg dnl  INPUT PARAMETERS
     26  1.1  mrg define(`rp',`%r26')
     27  1.1  mrg define(`up',`%r25')
     28  1.1  mrg define(`n',`%r24')
     29  1.1  mrg define(`cnt',`%r23')
     30  1.1  mrg 
     31  1.1  mrg ifdef(`HAVE_ABI_2_0w',
     32  1.1  mrg `       .level  2.0w
     33  1.1  mrg ',`     .level  2.0
     34  1.1  mrg ')
     35  1.1  mrg PROLOGUE(mpn_lshift)
     36  1.1  mrg 	shladd		n, 3, up, up
     37  1.1  mrg 	shladd		n, 3, rp, rp
     38  1.1  mrg 	subi		64, cnt, cnt
     39  1.1  mrg 	mtsar		cnt
     40  1.1  mrg 	ldd		-8(up), %r21
     41  1.1  mrg 	addib,=		-1, n, L(end)
     42  1.1  mrg 	shrpd		%r0, %r21, %sar, %r29	C compute carry out limb
     43  1.1  mrg 	depw,z		n, 31, 3, %r28		C r28 = (size & 7)
     44  1.1  mrg 	sub		%r0, n, %r22
     45  1.1  mrg 	depw,z		%r22, 28, 3, %r22	C r22 = 8 * (-size & 7)
     46  1.1  mrg 	add		up, %r22, up		C offset up
     47  1.1  mrg 	blr		%r28, %r0		C branch into jump table
     48  1.1  mrg 	add		rp, %r22, rp		C offset rp
     49  1.1  mrg 	b		L(0)
     50  1.1  mrg 	nop
     51  1.1  mrg 	b		L(1)
     52  1.1  mrg 	copy		%r21, %r20
     53  1.1  mrg 	b		L(2)
     54  1.1  mrg 	nop
     55  1.1  mrg 	b		L(3)
     56  1.1  mrg 	copy		%r21, %r20
     57  1.1  mrg 	b		L(4)
     58  1.1  mrg 	nop
     59  1.1  mrg 	b		L(5)
     60  1.1  mrg 	copy		%r21, %r20
     61  1.1  mrg 	b		L(6)
     62  1.1  mrg 	nop
     63  1.1  mrg 	b		L(7)
     64  1.1  mrg 	copy		%r21, %r20
     65  1.1  mrg 
     66  1.1  mrg LDEF(loop)
     67  1.1  mrg LDEF(0)	ldd		-16(up), %r20
     68  1.1  mrg 	shrpd		%r21, %r20, %sar, %r21
     69  1.1  mrg 	std		%r21, -8(rp)
     70  1.1  mrg LDEF(7)	ldd		-24(up), %r21
     71  1.1  mrg 	shrpd		%r20, %r21, %sar, %r20
     72  1.1  mrg 	std		%r20, -16(rp)
     73  1.1  mrg LDEF(6)	ldd		-32(up), %r20
     74  1.1  mrg 	shrpd		%r21, %r20, %sar, %r21
     75  1.1  mrg 	std		%r21, -24(rp)
     76  1.1  mrg LDEF(5)	ldd		-40(up), %r21
     77  1.1  mrg 	shrpd		%r20, %r21, %sar, %r20
     78  1.1  mrg 	std		%r20, -32(rp)
     79  1.1  mrg LDEF(4)	ldd		-48(up), %r20
     80  1.1  mrg 	shrpd		%r21, %r20, %sar, %r21
     81  1.1  mrg 	std		%r21, -40(rp)
     82  1.1  mrg LDEF(3)	ldd		-56(up), %r21
     83  1.1  mrg 	shrpd		%r20, %r21, %sar, %r20
     84  1.1  mrg 	std		%r20, -48(rp)
     85  1.1  mrg LDEF(2)	ldd		-64(up), %r20
     86  1.1  mrg 	shrpd		%r21, %r20, %sar, %r21
     87  1.1  mrg 	std		%r21, -56(rp)
     88  1.1  mrg LDEF(1)	ldd		-72(up), %r21
     89  1.1  mrg 	ldo		-64(up), up
     90  1.1  mrg 	shrpd		%r20, %r21, %sar, %r20
     91  1.1  mrg 	std		%r20, -64(rp)
     92  1.1  mrg 	addib,>		-8, n, L(loop)
     93  1.1  mrg 	ldo		-64(rp), rp
     94  1.1  mrg 
     95  1.1  mrg LDEF(end)
     96  1.1  mrg 	shrpd		%r21, %r0, %sar, %r21
     97  1.1  mrg 	std		%r21, -8(rp)
     98  1.1  mrg 	bve		(%r2)
     99  1.1  mrg ifdef(`HAVE_ABI_2_0w',
    100  1.1  mrg `	copy		%r29,%r28
    101  1.1  mrg ',`	extrd,u		%r29, 31, 32, %r28
    102  1.1  mrg ')
    103  1.1  mrg EPILOGUE(mpn_lshift)
    104