Annotation of OpenXM_contrib/gmp/mpn/powerpc32/addmul_1.asm, Revision 1.1
1.1 ! maekawa 1: dnl PowerPC-32 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 (C) 1995, 1997, 1998, 2000 Free Software Foundation, Inc.
! 5:
! 6: dnl This file is part of the GNU MP Library.
! 7:
! 8: dnl The GNU MP Library is free software; you can redistribute it and/or modify
! 9: dnl it under the terms of the GNU Lesser General Public License as published by
! 10: dnl the Free Software Foundation; either version 2.1 of the License, or (at your
! 11: dnl option) any later version.
! 12:
! 13: dnl The GNU MP Library is distributed in the hope that it will be useful, but
! 14: dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
! 15: dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
! 16: dnl License for more details.
! 17:
! 18: dnl You should have received a copy of the GNU Lesser General Public License
! 19: dnl along with the GNU MP Library; see the file COPYING.LIB. If not, write to
! 20: dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
! 21: dnl MA 02111-1307, USA.
! 22:
! 23:
! 24: dnl INPUT PARAMETERS
! 25: dnl res_ptr r3
! 26: dnl s1_ptr r4
! 27: dnl size r5
! 28: dnl s2_limb r6
! 29:
! 30: dnl This is optimized for the PPC604. It has not been tested on PPC601, PPC603
! 31: dnl or PPC750 since I don't have access to any such machines.
! 32:
! 33: include(`../config.m4')
! 34:
! 35: ASM_START()
! 36: PROLOGUE(mpn_addmul_1)
! 37: cmpi cr0,r5,9 C more than 9 limbs?
! 38: bgt cr0,.Lbig C branch if more than 9 limbs
! 39:
! 40: mtctr r5
! 41: lwz r0,0(r4)
! 42: mullw r7,r0,r6
! 43: mulhwu r10,r0,r6
! 44: lwz r9,0(r3)
! 45: addc r8,r7,r9
! 46: addi r3,r3,-4
! 47: bdz .Lend
! 48: .Lloop:
! 49: lwzu r0,4(r4)
! 50: stwu r8,4(r3)
! 51: mullw r8,r0,r6
! 52: adde r7,r8,r10
! 53: mulhwu r10,r0,r6
! 54: lwz r9,4(r3)
! 55: addze r10,r10
! 56: addc r8,r7,r9
! 57: bdnz .Lloop
! 58: .Lend: stw r8,4(r3)
! 59: addze r3,r10
! 60: blr
! 61:
! 62: .Lbig: stmw r30,-32(r1)
! 63: addi r5,r5,-1
! 64: srwi r0,r5,2
! 65: mtctr r0
! 66:
! 67: lwz r7,0(r4)
! 68: mullw r8,r7,r6
! 69: mulhwu r0,r7,r6
! 70: lwz r7,0(r3)
! 71: addc r8,r8,r7
! 72: stw r8,0(r3)
! 73:
! 74: .LloopU:
! 75: lwz r7,4(r4)
! 76: lwz r12,8(r4)
! 77: lwz r30,12(r4)
! 78: lwzu r31,16(r4)
! 79: mullw r8,r7,r6
! 80: mullw r9,r12,r6
! 81: mullw r10,r30,r6
! 82: mullw r11,r31,r6
! 83: adde r8,r8,r0 C add cy_limb
! 84: mulhwu r0,r7,r6
! 85: lwz r7,4(r3)
! 86: adde r9,r9,r0
! 87: mulhwu r0,r12,r6
! 88: lwz r12,8(r3)
! 89: adde r10,r10,r0
! 90: mulhwu r0,r30,r6
! 91: lwz r30,12(r3)
! 92: adde r11,r11,r0
! 93: mulhwu r0,r31,r6
! 94: lwz r31,16(r3)
! 95: addze r0,r0 C new cy_limb
! 96: addc r8,r8,r7
! 97: stw r8,4(r3)
! 98: adde r9,r9,r12
! 99: stw r9,8(r3)
! 100: adde r10,r10,r30
! 101: stw r10,12(r3)
! 102: adde r11,r11,r31
! 103: stwu r11,16(r3)
! 104: bdnz .LloopU
! 105:
! 106: andi. r31,r5,3
! 107: mtctr r31
! 108: beq cr0,.Lendx
! 109:
! 110: .LloopE:
! 111: lwzu r7,4(r4)
! 112: mullw r8,r7,r6
! 113: adde r8,r8,r0 C add cy_limb
! 114: mulhwu r0,r7,r6
! 115: lwz r7,4(r3)
! 116: addze r0,r0 C new cy_limb
! 117: addc r8,r8,r7
! 118: stwu r8,4(r3)
! 119: bdnz .LloopE
! 120: .Lendx:
! 121: addze r3,r0
! 122: lmw r30,-32(r1)
! 123: blr
! 124: EPILOGUE(mpn_addmul_1)
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>