summaryrefslogtreecommitdiff
path: root/mpn/sparc32/v8/submul_1.asm
diff options
context:
space:
mode:
authortege <tege@gmplib.org>2000-02-15 13:24:20 +0100
committertege <tege@gmplib.org>2000-02-15 13:24:20 +0100
commitf6149307d2ecf6de15bd2ed219eef6c3ef7f1f4a (patch)
tree1f06701c518c03f718cbfb70f6ae72fdd12e286f /mpn/sparc32/v8/submul_1.asm
parent11bbd14af13c6a251d675f56e8fd654b0f52a8d5 (diff)
downloadgmp-f6149307d2ecf6de15bd2ed219eef6c3ef7f1f4a.tar.gz
Renamed from `.s'/`.S'.
Diffstat (limited to 'mpn/sparc32/v8/submul_1.asm')
-rw-r--r--mpn/sparc32/v8/submul_1.asm58
1 files changed, 58 insertions, 0 deletions
diff --git a/mpn/sparc32/v8/submul_1.asm b/mpn/sparc32/v8/submul_1.asm
new file mode 100644
index 000000000..467589d5c
--- /dev/null
+++ b/mpn/sparc32/v8/submul_1.asm
@@ -0,0 +1,58 @@
+! SPARC v8 __mpn_submul_1 -- Multiply a limb vector with a limb and
+! subtract the result from a second limb vector.
+
+! Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
+
+! 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 Library General Public License as published by
+! the Free Software Foundation; either version 2 of the License, or (at 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 Library General Public
+! License for more details.
+
+! You should have received a copy of the GNU Library 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.
+
+
+! INPUT PARAMETERS
+! res_ptr o0
+! s1_ptr o1
+! size o2
+! s2_limb o3
+
+include(`../config.m4')
+
+ASM_START()
+PROLOGUE(mpn_submul_1)
+ sub %g0,%o2,%o2 ! negate ...
+ sll %o2,2,%o2 ! ... and scale size
+ sub %o1,%o2,%o1 ! o1 is offset s1_ptr
+ sub %o0,%o2,%g1 ! g1 is offset res_ptr
+
+ mov 0,%o0 ! clear cy_limb
+
+L(loop):
+ ld [%o1+%o2],%o4
+ ld [%g1+%o2],%g2
+ umul %o4,%o3,%o5
+ rd %y,%g3
+ addcc %o5,%o0,%o5
+ addx %g3,0,%o0
+ subcc %g2,%o5,%g2
+ addx %o0,0,%o0
+ st %g2,[%g1+%o2]
+
+ addcc %o2,4,%o2
+ bne L(loop)
+ nop
+
+ retl
+ nop
+EPILOGUE(mpn_submul_1)