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

Annotation of OpenXM_contrib/gmp/mpn/pa64/umul_ppmm.S, Revision 1.1.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.0n
                     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:        depd            %r25,31,32,%r26
                     37:        std             %r26,-64(%r30)
                     38:        depd            %r23,31,32,%r24
                     39:        std             %r24,-56(%r30)
                     40:
                     41:        ldw             -180(%r30),%r31
                     42:
                     43:         fldd           -64(%r30),%fr4
                     44:         fldd           -56(%r30),%fr5
                     45:
                     46:        xmpyu           %fr5R,%fr4R,%fr6
                     47:        fstd            %fr6,-128(%r30)
                     48:        xmpyu           %fr5R,%fr4L,%fr7
                     49:        fstd            %fr7,-120(%r30)
                     50:        xmpyu           %fr5L,%fr4R,%fr8
                     51:        fstd            %fr8,-112(%r30)
                     52:        xmpyu           %fr5L,%fr4L,%fr9
                     53:        fstd            %fr9,-104(%r30)
                     54:
                     55:        depdi,z         1,31,1,t32              ; t32 = 2^32
                     56:
                     57:        ldd             -128(%r30),p0           ; lo = low 64 bit of product
                     58:        ldd             -120(%r30),m0           ; m0 = mid0 64 bit of product
                     59:        ldd             -112(%r30),m1           ; m1 = mid1 64 bit of product
                     60:        ldd             -104(%r30),p1           ; hi = high 64 bit of product
                     61:
                     62:        add,l,*nuv      m0,m1,x                 ; x = m1+m0
                     63:         add,l          t32,p1,p1               ; propagate carry to mid of p1
                     64:        depd,z          x,31,32,t0              ; lo32(m1+m0)
                     65:        add             t0,p0,p0
                     66:        extrd,u         x,31,32,t1              ; hi32(m1+m0)
                     67:        add,dc          t1,p1,p1
                     68:
                     69:        std             p0,0(%r31)              ; store low half of product
                     70:        extrd,u         p1,31,32,%r28           ; return high half of product
                     71:        bve             (%r2)
                     72:        .exit
                     73:        ldo             -128(%r30),%r30
                     74:        .procend

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