| Index: gcc/gmp/mpn/sparc64/add_n.asm
|
| diff --git a/gcc/gmp/mpn/sparc64/add_n.asm b/gcc/gmp/mpn/sparc64/add_n.asm
|
| deleted file mode 100644
|
| index c3e5b46ddf419cd2860bbf1acc3149515422556b..0000000000000000000000000000000000000000
|
| --- a/gcc/gmp/mpn/sparc64/add_n.asm
|
| +++ /dev/null
|
| @@ -1,220 +0,0 @@
|
| -dnl SPARC v9 mpn_add_n -- Add two limb vectors of the same length > 0 and
|
| -dnl store sum in a third limb vector.
|
| -
|
| -dnl Copyright 2001, 2002, 2003 Free Software Foundation, Inc.
|
| -
|
| -dnl This file is part of the GNU MP Library.
|
| -
|
| -dnl The GNU MP Library is free software; you can redistribute it and/or modify
|
| -dnl it under the terms of the GNU Lesser General Public License as published
|
| -dnl by the Free Software Foundation; either version 3 of the License, or (at
|
| -dnl your option) any later version.
|
| -
|
| -dnl The GNU MP Library is distributed in the hope that it will be useful, but
|
| -dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
| -dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
|
| -dnl License for more details.
|
| -
|
| -dnl You should have received a copy of the GNU Lesser General Public License
|
| -dnl along with the GNU MP Library. If not, see http://www.gnu.org/licenses/.
|
| -
|
| -include(`../config.m4')
|
| -
|
| -C cycles/limb
|
| -C UltraSPARC 1&2: 4
|
| -C UltraSPARC 3: 4.5
|
| -
|
| -C Compute carry-out from the most significant bits of u,v, and r, where
|
| -C r=u+v+carry_in, using logic operations.
|
| -
|
| -C This code runs at 4 cycles/limb on UltraSPARC 1 and 2. It has a 4 insn
|
| -C recurrency, and the UltraSPARC 1 and 2 the IE units are 100% saturated.
|
| -C Therefore, it seems futile to try to optimize this any further...
|
| -
|
| -C INPUT PARAMETERS
|
| -define(`rp',`%i0')
|
| -define(`up',`%i1')
|
| -define(`vp',`%i2')
|
| -define(`n',`%i3')
|
| -
|
| -define(`u0',`%l0')
|
| -define(`u1',`%l2')
|
| -define(`u2',`%l4')
|
| -define(`u3',`%l6')
|
| -define(`v0',`%l1')
|
| -define(`v1',`%l3')
|
| -define(`v2',`%l5')
|
| -define(`v3',`%l7')
|
| -
|
| -define(`cy',`%i4')
|
| -
|
| -define(`fanop',`fitod %f0,%f2') dnl A quasi nop running in the FA pipe
|
| -define(`fmnop',`fmuld %f0,%f0,%f4') dnl A quasi nop running in the FM pipe
|
| -
|
| -ASM_START()
|
| - REGISTER(%g2,#scratch)
|
| - REGISTER(%g3,#scratch)
|
| -PROLOGUE(mpn_add_n)
|
| - save %sp,-160,%sp
|
| -
|
| - fitod %f0,%f0 C make sure f0 contains small, quiet number
|
| - subcc n,4,%g0
|
| - bl,pn %icc,.Loop0
|
| - mov 0,cy
|
| -
|
| - ldx [up+0],u0
|
| - ldx [vp+0],v0
|
| - add up,32,up
|
| - ldx [up-24],u1
|
| - ldx [vp+8],v1
|
| - add vp,32,vp
|
| - ldx [up-16],u2
|
| - ldx [vp-16],v2
|
| - ldx [up-8],u3
|
| - ldx [vp-8],v3
|
| - subcc n,8,n
|
| - add u0,v0,%g1 C main add
|
| - add %g1,cy,%g4 C carry add
|
| - or u0,v0,%g2
|
| - bl,pn %icc,.Lend4567
|
| - fanop
|
| - b,a .Loop
|
| -
|
| - .align 16
|
| -C START MAIN LOOP
|
| -.Loop: andn %g2,%g4,%g2
|
| - and u0,v0,%g3
|
| - ldx [up+0],u0
|
| - fanop
|
| -C --
|
| - or %g3,%g2,%g2
|
| - ldx [vp+0],v0
|
| - add up,32,up
|
| - fanop
|
| -C --
|
| - srlx %g2,63,cy
|
| - add u1,v1,%g1
|
| - stx %g4,[rp+0]
|
| - fanop
|
| -C --
|
| - add %g1,cy,%g4
|
| - or u1,v1,%g2
|
| - fmnop
|
| - fanop
|
| -C --
|
| - andn %g2,%g4,%g2
|
| - and u1,v1,%g3
|
| - ldx [up-24],u1
|
| - fanop
|
| -C --
|
| - or %g3,%g2,%g2
|
| - ldx [vp+8],v1
|
| - add vp,32,vp
|
| - fanop
|
| -C --
|
| - srlx %g2,63,cy
|
| - add u2,v2,%g1
|
| - stx %g4,[rp+8]
|
| - fanop
|
| -C --
|
| - add %g1,cy,%g4
|
| - or u2,v2,%g2
|
| - fmnop
|
| - fanop
|
| -C --
|
| - andn %g2,%g4,%g2
|
| - and u2,v2,%g3
|
| - ldx [up-16],u2
|
| - fanop
|
| -C --
|
| - or %g3,%g2,%g2
|
| - ldx [vp-16],v2
|
| - add rp,32,rp
|
| - fanop
|
| -C --
|
| - srlx %g2,63,cy
|
| - add u3,v3,%g1
|
| - stx %g4,[rp-16]
|
| - fanop
|
| -C --
|
| - add %g1,cy,%g4
|
| - or u3,v3,%g2
|
| - fmnop
|
| - fanop
|
| -C --
|
| - andn %g2,%g4,%g2
|
| - and u3,v3,%g3
|
| - ldx [up-8],u3
|
| - fanop
|
| -C --
|
| - or %g3,%g2,%g2
|
| - subcc n,4,n
|
| - ldx [vp-8],v3
|
| - fanop
|
| -C --
|
| - srlx %g2,63,cy
|
| - add u0,v0,%g1
|
| - stx %g4,[rp-8]
|
| - fanop
|
| -C --
|
| - add %g1,cy,%g4
|
| - or u0,v0,%g2
|
| - bge,pt %icc,.Loop
|
| - fanop
|
| -C END MAIN LOOP
|
| -.Lend4567:
|
| - andn %g2,%g4,%g2
|
| - and u0,v0,%g3
|
| - or %g3,%g2,%g2
|
| - srlx %g2,63,cy
|
| - add u1,v1,%g1
|
| - stx %g4,[rp+0]
|
| - add %g1,cy,%g4
|
| - or u1,v1,%g2
|
| - andn %g2,%g4,%g2
|
| - and u1,v1,%g3
|
| - or %g3,%g2,%g2
|
| - srlx %g2,63,cy
|
| - add u2,v2,%g1
|
| - stx %g4,[rp+8]
|
| - add %g1,cy,%g4
|
| - or u2,v2,%g2
|
| - andn %g2,%g4,%g2
|
| - and u2,v2,%g3
|
| - or %g3,%g2,%g2
|
| - add rp,32,rp
|
| - srlx %g2,63,cy
|
| - add u3,v3,%g1
|
| - stx %g4,[rp-16]
|
| - add %g1,cy,%g4
|
| - or u3,v3,%g2
|
| - andn %g2,%g4,%g2
|
| - and u3,v3,%g3
|
| - or %g3,%g2,%g2
|
| - srlx %g2,63,cy
|
| - stx %g4,[rp-8]
|
| -
|
| - addcc n,4,n
|
| - bz,pn %icc,.Lret
|
| - fanop
|
| -
|
| -.Loop0: ldx [up],u0
|
| - add up,8,up
|
| - ldx [vp],v0
|
| - add vp,8,vp
|
| - add rp,8,rp
|
| - subcc n,1,n
|
| - add u0,v0,%g1
|
| - or u0,v0,%g2
|
| - add %g1,cy,%g4
|
| - and u0,v0,%g3
|
| - andn %g2,%g4,%g2
|
| - stx %g4,[rp-8]
|
| - or %g3,%g2,%g2
|
| - bnz,pt %icc,.Loop0
|
| - srlx %g2,63,cy
|
| -
|
| -.Lret: mov cy,%i0
|
| - ret
|
| - restore
|
| -EPILOGUE(mpn_add_n)
|
|
|