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>