"Fossies" - the Fresh Open Source Software Archive

Member "gmp-6.2.1/mpn/powerpc64/mode32/addmul_1.asm" (14 Nov 2020, 2119 Bytes) of package /linux/misc/gmp-6.2.1.tar.xz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Generic Assembler source code syntax highlighting (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file.

    1 dnl  PowerPC-64 mpn_addmul_1 -- Multiply a limb vector with a limb and add
    2 dnl  the result to a second limb vector.
    3 
    4 dnl  Copyright 1999-2001, 2003, 2005 Free Software Foundation, Inc.
    5 
    6 dnl  This file is part of the GNU MP Library.
    7 dnl
    8 dnl  The GNU MP Library is free software; you can redistribute it and/or modify
    9 dnl  it under the terms of either:
   10 dnl
   11 dnl    * the GNU Lesser General Public License as published by the Free
   12 dnl      Software Foundation; either version 3 of the License, or (at your
   13 dnl      option) any later version.
   14 dnl
   15 dnl  or
   16 dnl
   17 dnl    * the GNU General Public License as published by the Free Software
   18 dnl      Foundation; either version 2 of the License, or (at your option) any
   19 dnl      later version.
   20 dnl
   21 dnl  or both in parallel, as here.
   22 dnl
   23 dnl  The GNU MP Library is distributed in the hope that it will be useful, but
   24 dnl  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
   25 dnl  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   26 dnl  for more details.
   27 dnl
   28 dnl  You should have received copies of the GNU General Public License and the
   29 dnl  GNU Lesser General Public License along with the GNU MP Library.  If not,
   30 dnl  see https://www.gnu.org/licenses/.
   31 
   32 include(`../config.m4')
   33 
   34 C       cycles/limb
   35 C POWER3/PPC630:     ?
   36 C POWER4/PPC970:     12.5
   37 
   38 C INPUT PARAMETERS
   39 C rp    r3
   40 C up    r4
   41 C n r5
   42 C v r6,r7  or  r7,r8
   43 
   44 ASM_START()
   45 PROLOGUE(mpn_addmul_1)
   46 
   47 ifdef(`BROKEN_LONGLONG_PARAM',
   48 `   rldimi  r8, r7, 32,0    C assemble vlimb from separate 32-bit arguments
   49     mr  r6, r8
   50 ',`
   51     rldimi  r7, r6, 32,0    C assemble vlimb from separate 32-bit arguments
   52     mr  r6, r7
   53 ')
   54     li  r7, 0       C cy_limb = 0
   55     mtctr   r5
   56     addic   r0, r0, 0
   57     addi    r3, r3, -8
   58     addi    r4, r4, -8
   59 
   60 L(oop): ldu r0, 8(r4)
   61     mulld   r9, r0, r6
   62     adde    r12, r9, r7 C add old high limb and new low limb
   63     srdi    r5, r9, 32
   64     srdi    r11, r7, 32
   65     adde    r5, r5, r11 C add high limb parts, set cy
   66     mulhdu  r7, r0, r6
   67     addze   r7, r7
   68     ld  r10, 8(r3)
   69     addc    r9, r12, r10
   70     srdi    r5, r12, 32
   71     srdi    r11, r10, 32
   72     adde    r5, r5, r11 C add high limb parts, set cy
   73     stdu    r9, 8(r3)
   74     bdnz    L(oop)
   75 
   76     addze   r4, r7
   77     srdi    r3, r4, 32
   78     blr
   79 EPILOGUE()