=================================================================== RCS file: /home/cvs/OpenXM_contrib/gmp/mpn/powerpc64/Attic/sub_n.asm,v retrieving revision 1.1 retrieving revision 1.1.1.2 diff -u -p -r1.1 -r1.1.1.2 --- OpenXM_contrib/gmp/mpn/powerpc64/Attic/sub_n.asm 2000/09/09 14:12:39 1.1 +++ OpenXM_contrib/gmp/mpn/powerpc64/Attic/sub_n.asm 2003/08/25 16:06:24 1.1.1.2 @@ -1,61 +1,62 @@ -# PowerPC-64 mpn_sub_n -- Subtract two limb vectors of the same length > 0 -# and store difference in a third limb vector. +dnl PowerPC-64 mpn_sub_n -- Subtract two limb vectors of the same length > 0 +dnl and store difference in a third limb vector. -# Copyright (C) 1999, 2000 Free Software Foundation, Inc.b +dnl Copyright 1999, 2000, 2001 Free Software Foundation, Inc. -# This file is part of the GNU MP Library. +dnl This file is part of the GNU MP Library. -# The GNU MP Library is free software; you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. +dnl The GNU MP Library is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU Lesser General Public License as published +dnl by the Free Software Foundation; either version 2.1 of the License, or (at +dnl your option) any later version. -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. +dnl The GNU MP Library is distributed in the hope that it will be useful, but +dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public +dnl License for more details. -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. +dnl You should have received a copy of the GNU Lesser General Public License +dnl along with the GNU MP Library; see the file COPYING.LIB. If not, write to +dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, +dnl MA 02111-1307, USA. +include(`../config.m4') -# INPUT PARAMETERS -# res_ptr r3 -# s1_ptr r4 -# s2_ptr r5 -# size r6 +C INPUT PARAMETERS +C res_ptr r3 +C s1_ptr r4 +C s2_ptr r5 +C size r6 -include(`../config.m4') +C This code runs at 1.5 cycles/limb on the PPC630. ASM_START() PROLOGUE(mpn_sub_n) - mtctr r6 # copy size into CTR - addic r0,r6,-1 # set cy - ld r8,0(r4) # load least significant s1 limb - ld r0,0(r5) # load least significant s2 limb - addi r3,r3,-8 # offset res_ptr, it's updated before it's used - bdz .Lend # If done, skip loop -.Loop: ld r9,8(r4) # load s1 limb - ld r10,8(r5) # load s2 limb - subfe r7,r0,r8 # subtract limbs with cy, set cy - std r7,8(r3) # store result limb - bdz .Lexit # decrement CTR and exit if done - ldu r8,16(r4) # load s1 limb and update s1_ptr - ldu r0,16(r5) # load s2 limb and update s2_ptr - subfe r7,r10,r9 # subtract limbs with cy, set cy - stdu r7,16(r3) # store result limb and update res_ptr - bdnz .Loop # decrement CTR and loop back + mtctr r6 C copy size into CTR + addic r0,r6,-1 C set cy + ld r8,0(r4) C load least significant s1 limb + ld r0,0(r5) C load least significant s2 limb + addi r3,r3,-8 C offset res_ptr, it's updated before it's used + bdz .Lend C If done, skip loop +.Loop: ld r9,8(r4) C load s1 limb + ld r10,8(r5) C load s2 limb + subfe r7,r0,r8 C subtract limbs with cy, set cy + std r7,8(r3) C store result limb + bdz .Lexit C decrement CTR and exit if done + ldu r8,16(r4) C load s1 limb and update s1_ptr + ldu r0,16(r5) C load s2 limb and update s2_ptr + subfe r7,r10,r9 C subtract limbs with cy, set cy + stdu r7,16(r3) C store result limb and update res_ptr + bdnz .Loop C decrement CTR and loop back .Lend: subfe r7,r0,r8 - std r7,8(r3) # store ultimate result limb - subfe r3,r0,r0 # load !cy into ... - subfic r3,r3,0 # ... return value register + std r7,8(r3) C store ultimate result limb + subfe r3,r0,r0 C load !cy into ... + subfic r3,r3,0 C ... return value register blr .Lexit: subfe r7,r10,r9 std r7,16(r3) - subfe r3,r0,r0 # load !cy into ... - subfic r3,r3,0 # ... return value register + subfe r3,r0,r0 C load !cy into ... + subfic r3,r3,0 C ... return value register blr EPILOGUE(mpn_sub_n)