Home | History | Annotate | Line # | Download | only in ultrasparc1234
lshiftc.asm revision 1.1.1.1.8.2
      1  1.1.1.1.8.2  tls dnl  SPARC v9 mpn_lshiftc
      2  1.1.1.1.8.2  tls 
      3  1.1.1.1.8.2  tls dnl  Copyright 1996, 2000, 2001, 2002, 2003, 2010 Free Software Foundation,
      4  1.1.1.1.8.2  tls dnl  Inc.
      5  1.1.1.1.8.2  tls 
      6  1.1.1.1.8.2  tls dnl  This file is part of the GNU MP Library.
      7  1.1.1.1.8.2  tls 
      8  1.1.1.1.8.2  tls dnl  The GNU MP Library is free software; you can redistribute it and/or modify
      9  1.1.1.1.8.2  tls dnl  it under the terms of the GNU Lesser General Public License as published
     10  1.1.1.1.8.2  tls dnl  by the Free Software Foundation; either version 3 of the License, or (at
     11  1.1.1.1.8.2  tls dnl  your option) any later version.
     12  1.1.1.1.8.2  tls 
     13  1.1.1.1.8.2  tls dnl  The GNU MP Library is distributed in the hope that it will be useful, but
     14  1.1.1.1.8.2  tls dnl  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
     15  1.1.1.1.8.2  tls dnl  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
     16  1.1.1.1.8.2  tls dnl  License for more details.
     17  1.1.1.1.8.2  tls 
     18  1.1.1.1.8.2  tls dnl  You should have received a copy of the GNU Lesser General Public License
     19  1.1.1.1.8.2  tls dnl  along with the GNU MP Library.  If not, see http://www.gnu.org/licenses/.
     20  1.1.1.1.8.2  tls 
     21  1.1.1.1.8.2  tls 
     22  1.1.1.1.8.2  tls include(`../config.m4')
     23  1.1.1.1.8.2  tls 
     24  1.1.1.1.8.2  tls C		   cycles/limb
     25  1.1.1.1.8.2  tls C UltraSPARC 1&2:     ?
     26  1.1.1.1.8.2  tls C UltraSPARC 3:	      2.67
     27  1.1.1.1.8.2  tls 
     28  1.1.1.1.8.2  tls C INPUT PARAMETERS
     29  1.1.1.1.8.2  tls define(`rp', `%i0')
     30  1.1.1.1.8.2  tls define(`up', `%i1')
     31  1.1.1.1.8.2  tls define(`n',  `%i2')
     32  1.1.1.1.8.2  tls define(`cnt',`%i3')
     33  1.1.1.1.8.2  tls 
     34  1.1.1.1.8.2  tls define(`u0', `%l0')
     35  1.1.1.1.8.2  tls define(`u1', `%l2')
     36  1.1.1.1.8.2  tls define(`u2', `%l4')
     37  1.1.1.1.8.2  tls define(`u3', `%l6')
     38  1.1.1.1.8.2  tls 
     39  1.1.1.1.8.2  tls define(`tnc',`%i4')
     40  1.1.1.1.8.2  tls 
     41  1.1.1.1.8.2  tls define(`fanop',`fitod %f0,%f2')		dnl  A quasi nop running in the FA pipe
     42  1.1.1.1.8.2  tls 
     43  1.1.1.1.8.2  tls ASM_START()
     44  1.1.1.1.8.2  tls 	REGISTER(%g2,#scratch)
     45  1.1.1.1.8.2  tls 	REGISTER(%g3,#scratch)
     46  1.1.1.1.8.2  tls PROLOGUE(mpn_lshiftc)
     47  1.1.1.1.8.2  tls 	save	%sp,-160,%sp
     48  1.1.1.1.8.2  tls 
     49  1.1.1.1.8.2  tls 	sllx	n,3,%g1
     50  1.1.1.1.8.2  tls 	sub	%g0,cnt,tnc		C negate shift count
     51  1.1.1.1.8.2  tls 	add	up,%g1,up		C make %o1 point at end of src
     52  1.1.1.1.8.2  tls 	add	rp,%g1,rp		C make %o0 point at end of res
     53  1.1.1.1.8.2  tls 	ldx	[up-8],u3		C load first limb
     54  1.1.1.1.8.2  tls 	subcc	n,5,n
     55  1.1.1.1.8.2  tls 	srlx	u3,tnc,%i5		C compute function result
     56  1.1.1.1.8.2  tls 	bl,pn	%xcc,.Lend1234
     57  1.1.1.1.8.2  tls 	sllx	u3,cnt,%g3
     58  1.1.1.1.8.2  tls 
     59  1.1.1.1.8.2  tls 	subcc	n,4,n
     60  1.1.1.1.8.2  tls 	ldx	[up-16],u0
     61  1.1.1.1.8.2  tls 	ldx	[up-24],u1
     62  1.1.1.1.8.2  tls 	add	up,-32,up
     63  1.1.1.1.8.2  tls 	ldx	[up-0],u2
     64  1.1.1.1.8.2  tls 	ldx	[up-8],u3
     65  1.1.1.1.8.2  tls 	srlx	u0,tnc,%g2
     66  1.1.1.1.8.2  tls 	bl,pn	%xcc,.Lend5678
     67  1.1.1.1.8.2  tls 	not	%g3, %g3
     68  1.1.1.1.8.2  tls 
     69  1.1.1.1.8.2  tls 	b,a	.Loop
     70  1.1.1.1.8.2  tls 	ALIGN(16)
     71  1.1.1.1.8.2  tls .Loop:
     72  1.1.1.1.8.2  tls 	sllx	u0,cnt,%g1
     73  1.1.1.1.8.2  tls 	andn	%g3,%g2,%g3
     74  1.1.1.1.8.2  tls 	ldx	[up-16],u0
     75  1.1.1.1.8.2  tls 	fanop
     76  1.1.1.1.8.2  tls C --
     77  1.1.1.1.8.2  tls 	srlx	u1,tnc,%g2
     78  1.1.1.1.8.2  tls 	subcc	n,4,n
     79  1.1.1.1.8.2  tls 	stx	%g3,[rp-8]
     80  1.1.1.1.8.2  tls 	not	%g1, %g1
     81  1.1.1.1.8.2  tls C --
     82  1.1.1.1.8.2  tls 	sllx	u1,cnt,%g3
     83  1.1.1.1.8.2  tls 	andn	%g1,%g2,%g1
     84  1.1.1.1.8.2  tls 	ldx	[up-24],u1
     85  1.1.1.1.8.2  tls 	fanop
     86  1.1.1.1.8.2  tls C --
     87  1.1.1.1.8.2  tls 	srlx	u2,tnc,%g2
     88  1.1.1.1.8.2  tls 	stx	%g1,[rp-16]
     89  1.1.1.1.8.2  tls 	add	up,-32,up
     90  1.1.1.1.8.2  tls 	not	%g3, %g3
     91  1.1.1.1.8.2  tls C --
     92  1.1.1.1.8.2  tls 	sllx	u2,cnt,%g1
     93  1.1.1.1.8.2  tls 	andn	%g3,%g2,%g3
     94  1.1.1.1.8.2  tls 	ldx	[up-0],u2
     95  1.1.1.1.8.2  tls 	fanop
     96  1.1.1.1.8.2  tls C --
     97  1.1.1.1.8.2  tls 	srlx	u3,tnc,%g2
     98  1.1.1.1.8.2  tls 	stx	%g3,[rp-24]
     99  1.1.1.1.8.2  tls 	add	rp,-32,rp
    100  1.1.1.1.8.2  tls 	not	%g1, %g1
    101  1.1.1.1.8.2  tls C --
    102  1.1.1.1.8.2  tls 	sllx	u3,cnt,%g3
    103  1.1.1.1.8.2  tls 	andn	%g1,%g2,%g1
    104  1.1.1.1.8.2  tls 	ldx	[up-8],u3
    105  1.1.1.1.8.2  tls 	fanop
    106  1.1.1.1.8.2  tls C --
    107  1.1.1.1.8.2  tls 	srlx	u0,tnc,%g2
    108  1.1.1.1.8.2  tls 	stx	%g1,[rp-0]
    109  1.1.1.1.8.2  tls 	bge,pt	%xcc,.Loop
    110  1.1.1.1.8.2  tls 	not	%g3, %g3
    111  1.1.1.1.8.2  tls C --
    112  1.1.1.1.8.2  tls .Lend5678:
    113  1.1.1.1.8.2  tls 	sllx	u0,cnt,%g1
    114  1.1.1.1.8.2  tls 	andn	%g3,%g2,%g3
    115  1.1.1.1.8.2  tls 	srlx	u1,tnc,%g2
    116  1.1.1.1.8.2  tls 	stx	%g3,[rp-8]
    117  1.1.1.1.8.2  tls 	not	%g1, %g1
    118  1.1.1.1.8.2  tls 	sllx	u1,cnt,%g3
    119  1.1.1.1.8.2  tls 	andn	%g1,%g2,%g1
    120  1.1.1.1.8.2  tls 	srlx	u2,tnc,%g2
    121  1.1.1.1.8.2  tls 	stx	%g1,[rp-16]
    122  1.1.1.1.8.2  tls 	not	%g3, %g3
    123  1.1.1.1.8.2  tls 	sllx	u2,cnt,%g1
    124  1.1.1.1.8.2  tls 	andn	%g3,%g2,%g3
    125  1.1.1.1.8.2  tls 	srlx	u3,tnc,%g2
    126  1.1.1.1.8.2  tls 	stx	%g3,[rp-24]
    127  1.1.1.1.8.2  tls 	add	rp,-32,rp
    128  1.1.1.1.8.2  tls 	not	%g1, %g1
    129  1.1.1.1.8.2  tls 	sllx	u3,cnt,%g3		C carry...
    130  1.1.1.1.8.2  tls 	andn	%g1,%g2,%g1
    131  1.1.1.1.8.2  tls 	stx	%g1,[rp-0]
    132  1.1.1.1.8.2  tls 
    133  1.1.1.1.8.2  tls .Lend1234:
    134  1.1.1.1.8.2  tls 	addcc	n,4,n
    135  1.1.1.1.8.2  tls 	bz,pn	%xcc,.Lret
    136  1.1.1.1.8.2  tls 	fanop
    137  1.1.1.1.8.2  tls .Loop0:
    138  1.1.1.1.8.2  tls 	add	rp,-8,rp
    139  1.1.1.1.8.2  tls 	subcc	n,1,n
    140  1.1.1.1.8.2  tls 	ldx	[up-16],u3
    141  1.1.1.1.8.2  tls 	add	up,-8,up
    142  1.1.1.1.8.2  tls 	srlx	u3,tnc,%g2
    143  1.1.1.1.8.2  tls 	not	%g3, %g3
    144  1.1.1.1.8.2  tls 	andn	%g3,%g2,%g3
    145  1.1.1.1.8.2  tls 	stx	%g3,[rp]
    146  1.1.1.1.8.2  tls 	sllx	u3,cnt,%g3
    147  1.1.1.1.8.2  tls 	bnz,pt	%xcc,.Loop0
    148  1.1.1.1.8.2  tls 	fanop
    149  1.1.1.1.8.2  tls .Lret:
    150  1.1.1.1.8.2  tls 	not	%g3, %g3
    151  1.1.1.1.8.2  tls 	stx	%g3,[rp-8]
    152  1.1.1.1.8.2  tls 	mov	%i5,%i0
    153  1.1.1.1.8.2  tls 	ret
    154  1.1.1.1.8.2  tls 	restore
    155  1.1.1.1.8.2  tls EPILOGUE()
    156