[Gmp-commit] /var/hg/gmp: New POWER7 popcount/hamdist support.

mercurial at gmplib.org mercurial at gmplib.org
Wed Apr 4 19:41:27 CEST 2012


details:   /var/hg/gmp/rev/a31b1106f148
changeset: 14795:a31b1106f148
user:      Torbjorn Granlund <tege at gmplib.org>
date:      Wed Apr 04 19:41:07 2012 +0200
description:
New POWER7 popcount/hamdist support.

diffstat:

 ChangeLog                     |   3 +
 mpn/powerpc64/p7/hamdist.asm  |  97 +++++++++++++++++++++++++++++++++++++++++++
 mpn/powerpc64/p7/popcount.asm |  77 ++++++++++++++++++++++++++++++++++
 3 files changed, 177 insertions(+), 0 deletions(-)

diffs (194 lines):

diff -r d6cc05ca6948 -r a31b1106f148 ChangeLog
--- a/ChangeLog	Wed Apr 04 14:21:22 2012 +0200
+++ b/ChangeLog	Wed Apr 04 19:41:07 2012 +0200
@@ -1,5 +1,8 @@
 2012-04-04  Torbjorn Granlund  <tege at gmplib.org>
 
+	* mpn/powerpc64/p7/popcount.asm: New file.
+	* mpn/powerpc64/p7/hamdist.asm: New file.
+
 	* longlong.h (ARM count_leading_zeros): Enable for more arch versions.
 
 	* mpn/x86_64/gcd_1.asm: Make room for DOS64 regparm shadow area.
diff -r d6cc05ca6948 -r a31b1106f148 mpn/powerpc64/p7/hamdist.asm
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpn/powerpc64/p7/hamdist.asm	Wed Apr 04 19:41:07 2012 +0200
@@ -0,0 +1,97 @@
+dnl  PowerPC-64 mpn_hamdist.
+
+dnl  Copyright 2012 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 POWER3/PPC630          -
+C POWER4/PPC970          -
+C POWER5                 -
+C POWER6                 -
+C POWER7                 2.87
+
+define(`up', r3)
+define(`vp', r4)
+define(`n',  r5)
+
+ASM_START()
+PROLOGUE(mpn_hamdist)
+	std	r30, -16(r1)
+	std	r31, -8(r1)
+
+	addi	r0, n, 1
+	srdi	r0, r0, 1
+	mtctr	r0
+
+	andi.	r0, n, 1
+
+	li	r0, 0
+	li	r12, 0
+
+	beq	L(evn)
+
+L(odd):	ld	r6, 0(up)
+	addi	up, up, 8
+	ld	r8, 0(vp)
+	addi	vp, vp, 8
+	xor	r10, r6, r8
+	popcntd	r0, r10
+	bdz	L(e1)
+
+L(evn):	ld	r6, 0(up)
+	ld	r8, 0(vp)
+	ld	r7, 8(up)
+	ld	r9, 8(vp)
+	xor	r10, r6, r8
+	addi	up, up, 16
+	addi	vp, vp, 16
+	li	r30, 0
+	li	r31, 0
+	bdz	L(end)
+
+	nop
+	nop
+C	ALIGN(16)
+L(top):	add	r0, r0, r30
+	ld	r6, 0(up)
+	ld	r8, 0(vp)
+	xor	r11, r7, r9
+	popcntd	r30, r10
+	add	r12, r12, r31
+	ld	r7, 8(up)
+	ld	r9, 8(vp)
+	xor	r10, r6, r8
+	popcntd	r31, r11
+	addi	up, up, 16
+	addi	vp, vp, 16
+	bdnz	L(top)
+
+L(end):	add	r0, r0, r30
+	xor	r11, r7, r9
+	popcntd	r30, r10
+	add	r12, r12, r31
+	popcntd	r31, r11
+
+	add	r0, r0, r30
+	add	r12, r12, r31
+L(e1):	add	r3, r0, r12
+	ld	r30, -16(r1)
+	ld	r31, -8(r1)
+	blr
+EPILOGUE()
diff -r d6cc05ca6948 -r a31b1106f148 mpn/powerpc64/p7/popcount.asm
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpn/powerpc64/p7/popcount.asm	Wed Apr 04 19:41:07 2012 +0200
@@ -0,0 +1,77 @@
+dnl  PowerPC-64 mpn_popcount.
+
+dnl  Copyright 2012 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 POWER3/PPC630          -
+C POWER4/PPC970          -
+C POWER5                 -
+C POWER6                 -
+C POWER7                 2
+
+define(`up', r3)
+define(`n',  r4)
+
+ASM_START()
+PROLOGUE(mpn_popcount)
+	addi	r0, n, 1
+	srdi	r0, r0, 1
+	mtctr	r0
+
+	andi.	r0, n, 1
+
+	li	r0, 0
+	li	r12, 0
+	beq	L(evn)
+
+L(odd):	ld	r4, 0(up)
+	addi	up, up, 8
+	popcntd	r0, r4
+	bdz	L(e1)
+
+L(evn):	ld	r4, 0(up)
+	ld	r5, 8(up)
+	popcntd	r8, r4
+	popcntd	r9, r5
+	bdz	L(e2)
+
+	ld	r4, 16(up)
+	ld	r5, 24(up)
+	bdz	L(e4)
+	addi	up, up, 32
+
+L(top):	add	r0, r0, r8
+	popcntd	r8, r4
+	ld	r4, 0(up)
+	add	r12, r12, r9
+	popcntd	r9, r5
+	ld	r5, 8(up)
+	addi	up, up, 16
+	bdnz	L(top)
+
+L(e4):	add	r0, r0, r8
+	popcntd	r8, r4
+	add	r12, r12, r9
+	popcntd	r9, r5
+L(e2):	add	r0, r0, r8
+	add	r12, r12, r9
+L(e1):	add	r3, r0, r12
+	blr
+EPILOGUE()


More information about the gmp-commit mailing list