[BACK]Return to umul_ppmm.S CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / gmp / mpn / pa64w

Annotation of OpenXM_contrib/gmp/mpn/pa64w/umul_ppmm.S, Revision 1.1

1.1     ! maekawa     1: ; Copyright (C) 1999, 2000 Free Software Foundation, Inc.
        !             2:
        !             3: ; This file is part of the GNU MP Library.
        !             4:
        !             5: ; The GNU MP Library is free software; you can redistribute it and/or modify
        !             6: ; it under the terms of the GNU Lesser General Public License as published by
        !             7: ; the Free Software Foundation; either version 2.1 of the License, or (at your
        !             8: ; option) any later version.
        !             9:
        !            10: ; The GNU MP Library is distributed in the hope that it will be useful, but
        !            11: ; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
        !            12: ; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
        !            13: ; License for more details.
        !            14:
        !            15: ; You should have received a copy of the GNU Lesser General Public License
        !            16: ; along with the GNU MP Library; see the file COPYING.LIB.  If not, write to
        !            17: ; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
        !            18: ; MA 02111-1307, USA.
        !            19:
        !            20: #define p0     %r28
        !            21: #define p1     %r29
        !            22: #define t32    %r19
        !            23: #define t0     %r20
        !            24: #define t1     %r21
        !            25: #define x      %r22
        !            26: #define m0     %r23
        !            27: #define m1     %r24
        !            28:        .level  2.0w
        !            29:        .code
        !            30:        .export __gmpn_umul_ppmm,entry
        !            31: __gmpn_umul_ppmm
        !            32:        .proc
        !            33:        .callinfo frame=128,no_calls
        !            34:        .entry
        !            35:        ldo             128(%r30),%r30
        !            36:        std             %r26,-64(%r30)
        !            37:        std             %r25,-56(%r30)
        !            38:
        !            39:        copy            %r24,%r31
        !            40:
        !            41:         fldd           -64(%r30),%fr4
        !            42:         fldd           -56(%r30),%fr5
        !            43:
        !            44:        xmpyu           %fr5R,%fr4R,%fr6
        !            45:        fstd            %fr6,-128(%r30)
        !            46:        xmpyu           %fr5R,%fr4L,%fr7
        !            47:        fstd            %fr7,-120(%r30)
        !            48:        xmpyu           %fr5L,%fr4R,%fr8
        !            49:        fstd            %fr8,-112(%r30)
        !            50:        xmpyu           %fr5L,%fr4L,%fr9
        !            51:        fstd            %fr9,-104(%r30)
        !            52:
        !            53:        depdi,z         1,31,1,t32              ; t32 = 2^32
        !            54:
        !            55:        ldd             -128(%r30),p0           ; lo = low 64 bit of product
        !            56:        ldd             -120(%r30),m0           ; m0 = mid0 64 bit of product
        !            57:        ldd             -112(%r30),m1           ; m1 = mid1 64 bit of product
        !            58:        ldd             -104(%r30),p1           ; hi = high 64 bit of product
        !            59:
        !            60:        add,l,*nuv      m0,m1,x                 ; x = m1+m0
        !            61:         add,l          t32,p1,p1               ; propagate carry to mid of p1
        !            62:        depd,z          x,31,32,t0              ; lo32(m1+m0)
        !            63:        add             t0,p0,p0
        !            64:        extrd,u         x,31,32,t1              ; hi32(m1+m0)
        !            65:        add,dc          t1,p1,p1
        !            66:
        !            67:        std             p0,0(%r31)              ; store low half of product
        !            68:        copy            p1,%r28                 ; return high half of product
        !            69:        bve             (%r2)
        !            70:        .exit
        !            71:        ldo             -128(%r30),%r30
        !            72:        .procend

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