[BACK]Return to lshift.asm CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / gmp / mpn / pa64

Annotation of OpenXM_contrib/gmp/mpn/pa64/lshift.asm, Revision 1.1.1.1

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>