[PATCH] Optimize 32-bit sparc T1 multiply routines.
David Miller
davem at davemloft.net
Sun Jan 6 02:14:22 CET 2013
From: Torbjorn Granlund <tg at gmplib.org>
Date: Sun, 06 Jan 2013 01:25:10 +0100
> For sub_n, I suppose
>
> ldx
> ldx
> xnor (with %g0)
> addxcc
> stx
>
> would be the right mix. This should run in 2.5 + epsilon c/l, if
> properly software pipelined. 4x should give 2.75 c/l, unless they stick
> some pipeline bubbles for taken branches.
>
> For add_n, things should run 0.5 c/l faster.
>
> (I am assuming it is a 2-way pipeline.)
It is a 2-way pipeline, but you can get 3-way in certain circumstances
if one of the instructions is a store. My Sparc-T4 pipeline description
in the GCC sparc backend shows how it works.
I have an add_n implementation and at 2-way unrolling it runs at 3.5
cycles per limb.
BTW are you going to get me the necessary paperwork so that I can
have all of this work I'm doing installed at some point?
====================
[PATCH] Optimize mpn_add_N for sparc T3 and later.
* mpn/sparc64/ultrasparct3/add_n.asm: New file.
---
ChangeLog | 4 ++
mpn/sparc64/ultrasparct3/add_n.asm | 73 ++++++++++++++++++++++++++++++++++++
2 files changed, 77 insertions(+)
create mode 100644 mpn/sparc64/ultrasparct3/add_n.asm
diff --git a/ChangeLog b/ChangeLog
index 8cceb64..e622e7e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2013-01-04 David S. Miller <davem at davemloft.net>
+
+ * mpn/sparc64/ultrasparct3/add_n.asm: New file.
+
2013-01-02 David S. Miller <davem at davemloft.net>
* config.guess: Recognize UltraSparc T4 under Linux.
diff --git a/mpn/sparc64/ultrasparct3/add_n.asm b/mpn/sparc64/ultrasparct3/add_n.asm
new file mode 100644
index 0000000..16bd0c4
--- /dev/null
+++ b/mpn/sparc64/ultrasparct3/add_n.asm
@@ -0,0 +1,73 @@
+dnl SPARC v9 mpn_add_n for T3/T4.
+
+dnl Copyright 2013 Free Software Foundation, Inc.
+
+dnl This file is part of the GNU MP Library.
+
+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 3 of the License, or (at
+dnl your option) any later version.
+
+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.
+
+dnl You should have received a copy of the GNU Lesser General Public License
+dnl along with the GNU MP Library. If not, see http://www.gnu.org/licenses/.
+
+include(`../config.m4')
+
+C cycles/limb
+C UltraSPARC T3: 9
+C UltraSPARC T4: 3.5
+
+C INPUT PARAMETERS
+define(`rp', `%o0')
+define(`up', `%o1')
+define(`vp', `%o2')
+define(`n', `%o3')
+define(`cy', `%o4')
+
+ASM_START()
+ REGISTER(%g2,#scratch)
+ REGISTER(%g3,#scratch)
+ ALIGN(32)
+PROLOGUE(mpn_add_nc)
+ b,a L(ent)
+EPILOGUE()
+PROLOGUE(mpn_add_n)
+ mov 0, cy
+L(ent):
+ subcc n, 1, n
+ be L(final_one)
+ cmp %g0, cy
+L(top):
+ ldx [up+0], %o4
+ add up, 16, up
+ ldx [vp+0], %o5
+ add vp, 16, vp
+ ldx [up-8], %g1
+ add rp, 16, rp
+ ldx [vp-8], %g2
+ sub n, 2, n
+ addxccc %o4, %o5, %g3
+ stx %g3, [rp-16]
+ addxccc %g1, %g2, %g2
+ brgz n, L(top)
+ stx %g2, [rp-8]
+
+ brlz,pt n, L(done)
+ nop
+
+L(final_one):
+ ldx [up+0], %o4
+ ldx [vp+0], %o5
+ addxccc %o4, %o5, %g3
+ stx %g3, [rp+0]
+
+L(done):
+ retl
+ addxc %g0, %g0, %o0
+EPILOGUE()
--
1.7.10.4
More information about the gmp-devel
mailing list