head	1.2;
access;
symbols
	perseant-exfatfs-base-20250801:1.2
	perseant-exfatfs-base-20240630:1.2
	perseant-exfatfs:1.2.0.8
	perseant-exfatfs-base:1.2
	netbsd-8-3-RELEASE:1.1.1.1
	cjep_sun2x:1.2.0.6
	cjep_sun2x-base:1.2
	cjep_staticlib_x-base1:1.2
	cjep_staticlib_x:1.2.0.4
	cjep_staticlib_x-base:1.2
	phil-wifi-20200421:1.2
	phil-wifi-20200411:1.2
	phil-wifi-20200406:1.2
	netbsd-8-2-RELEASE:1.1.1.1
	netbsd-8-1-RELEASE:1.1.1.1
	netbsd-8-1-RC1:1.1.1.1
	pgoyette-compat-merge-20190127:1.2
	pgoyette-compat-20190127:1.2
	pgoyette-compat-20190118:1.2
	pgoyette-compat-1226:1.2
	pgoyette-compat-1126:1.2
	pgoyette-compat-1020:1.2
	pgoyette-compat-0930:1.2
	pgoyette-compat-0906:1.2
	netbsd-7-2-RELEASE:1.1.1.1
	pgoyette-compat-0728:1.2
	netbsd-8-0-RELEASE:1.1.1.1
	pgoyette-compat-0625:1.2
	netbsd-8-0-RC2:1.1.1.1
	pgoyette-compat-0521:1.2
	pgoyette-compat-0502:1.2
	pgoyette-compat-0422:1.2
	netbsd-8-0-RC1:1.1.1.1
	pgoyette-compat-0415:1.2
	pgoyette-compat-0407:1.2
	pgoyette-compat-0330:1.2
	pgoyette-compat-0322:1.2
	pgoyette-compat-0315:1.2
	netbsd-7-1-2-RELEASE:1.1.1.1
	pgoyette-compat:1.2.0.2
	pgoyette-compat-base:1.2
	netbsd-7-1-1-RELEASE:1.1.1.1
	matt-nb8-mediatek:1.1.1.1.0.26
	matt-nb8-mediatek-base:1.1.1.1
	perseant-stdc-iso10646:1.1.1.1.0.24
	perseant-stdc-iso10646-base:1.1.1.1
	netbsd-8:1.1.1.1.0.22
	netbsd-8-base:1.1.1.1
	prg-localcount2-base3:1.1.1.1
	prg-localcount2-base2:1.1.1.1
	prg-localcount2-base1:1.1.1.1
	prg-localcount2:1.1.1.1.0.20
	prg-localcount2-base:1.1.1.1
	pgoyette-localcount-20170426:1.1.1.1
	bouyer-socketcan-base1:1.1.1.1
	pgoyette-localcount-20170320:1.1.1.1
	netbsd-7-1:1.1.1.1.0.18
	netbsd-7-1-RELEASE:1.1.1.1
	netbsd-7-1-RC2:1.1.1.1
	netbsd-7-nhusb-base-20170116:1.1.1.1
	bouyer-socketcan:1.1.1.1.0.16
	bouyer-socketcan-base:1.1.1.1
	pgoyette-localcount-20170107:1.1.1.1
	netbsd-7-1-RC1:1.1.1.1
	pgoyette-localcount-20161104:1.1.1.1
	netbsd-7-0-2-RELEASE:1.1.1.1
	localcount-20160914:1.1.1.1
	netbsd-7-nhusb:1.1.1.1.0.14
	netbsd-7-nhusb-base:1.1.1.1
	pgoyette-localcount-20160806:1.1.1.1
	pgoyette-localcount-20160726:1.1.1.1
	pgoyette-localcount:1.1.1.1.0.12
	pgoyette-localcount-base:1.1.1.1
	netbsd-7-0-1-RELEASE:1.1.1.1
	netbsd-7-0:1.1.1.1.0.10
	netbsd-7-0-RELEASE:1.1.1.1
	netbsd-7-0-RC3:1.1.1.1
	netbsd-7-0-RC2:1.1.1.1
	netbsd-7-0-RC1:1.1.1.1
	tls-maxphys-base:1.1.1.1
	tls-maxphys:1.1.1.1.0.8
	netbsd-7:1.1.1.1.0.6
	netbsd-7-base:1.1.1.1
	yamt-pagecache:1.1.1.1.0.4
	yamt-pagecache-base9:1.1.1.1
	tls-earlyentropy:1.1.1.1.0.2
	tls-earlyentropy-base:1.1.1.1
	riastradh-xf86-video-intel-2-7-1-pre-2-21-15:1.1.1.1
	riastradh-drm2-base3:1.1.1.1
	gmp-5-1-3:1.1.1.1
	gmp:1.1.1;
locks; strict;
comment	@;; @;


1.2
date	2017.08.22.09.55.45;	author mrg;	state dead;
branches;
next	1.1;
commitid	DVNRZh45aSIRZb4A;

1.1
date	2013.11.29.07.49.48;	author mrg;	state Exp;
branches
	1.1.1.1;
next	;
commitid	L2Av4PuGmdoL39fx;

1.1.1.1
date	2013.11.29.07.49.48;	author mrg;	state Exp;
branches
	1.1.1.1.4.1
	1.1.1.1.8.1;
next	;
commitid	L2Av4PuGmdoL39fx;

1.1.1.1.4.1
date	2013.11.29.07.49.48;	author yamt;	state dead;
branches;
next	1.1.1.1.4.2;
commitid	nx2BSsHy0NPeAxBx;

1.1.1.1.4.2
date	2014.05.22.14.09.01;	author yamt;	state Exp;
branches;
next	;
commitid	nx2BSsHy0NPeAxBx;

1.1.1.1.8.1
date	2013.11.29.07.49.48;	author tls;	state dead;
branches;
next	1.1.1.1.8.2;
commitid	jTnpym9Qu0o4R1Nx;

1.1.1.1.8.2
date	2014.08.19.23.59.50;	author tls;	state Exp;
branches;
next	;
commitid	jTnpym9Qu0o4R1Nx;


desc
@@


1.2
log
@merge GMP 6.1.2.
@
text
@dnl  IA-64 mpn_tabselect.

dnl  Copyright 2011 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 Itanium:       ?
C Itanium 2:     2.5

C NOTES
C  * Using software pipelining could trivially yield 2 c/l without unrolling,
C    or 1+epsilon with unrolling.  (This code was modelled after the powerpc64
C    code, for simplicity.)

C mpn_tabselect (mp_limb_t *rp, mp_limb_t *tp, mp_size_t n, mp_size_t nents, mp_size_t which)
define(`rp',     `r32')
define(`tp',     `r33')
define(`n',      `r34')
define(`nents',  `r35')
define(`which',  `r36')

define(`mask',   `r8')

define(`rp1',     `r32')
define(`tp1',     `r33')
define(`rp2',     `r14')
define(`tp2',     `r15')

ASM_START()
	TEXT
	ALIGN(16)
PROLOGUE(mpn_tabselect)
	.prologue
	.save	ar.lc, r2
	.body
ifdef(`HAVE_ABI_32',`
.mmi;	addp4	rp = 0, rp		C			M I
	addp4	tp = 0, tp		C			M I
	zxt4	n = n			C			I
.mii;	nop	0
	zxt4	nents = nents		C			I
	zxt4	which = which		C			I
	;;
')
.mmi;	add	rp2 = 8, rp1
	add	tp2 = 8, tp1
	add	r6 = -2, n
	;;
.mmi;	cmp.eq	p10, p0 = 1, n
	and	r9 = 1, n		C set cr0 for use in inner loop
	shr.u	r6 = r6, 1		C inner loop count
	;;
.mmi;	cmp.eq	p8, p0 = 0, r9
	sub	which = nents, which
	shl	n = n, 3
	;;

L(outer):
.mmi	cmp.eq	p6, p7 = which, nents	C are we at the selected table entry?
	nop	0
	mov	ar.lc = r6		C			I0
	;;
.mmb;
  (p6)	mov	mask = -1
  (p7)	mov	mask = 0
  (p8)	br.dptk	L(top)			C branch to loop entry if n even
	;;

.mmi;	ld8	r16 = [tp1], 8
	add	tp2 = 8, tp2
	nop	0
	;;
.mmi;	ld8	r18 = [rp1]
	and	r16 = r16, mask
	nop	0
	;;
.mmi;	andcm	r18 = r18, mask
	;;
	or	r16 = r16, r18
	nop	0
	;;
.mmb;	st8	[rp1] = r16, 8
	add	rp2 = 8, rp2
  (p10)	br.dpnt	L(end)

	ALIGN(32)
L(top):
.mmi;	ld8	r16 = [tp1], 16
	ld8	r17 = [tp2], 16
	nop	0
	;;
.mmi;	ld8	r18 = [rp1]
	and	r16 = r16, mask
	nop	0
.mmi;	ld8	r19 = [rp2]
	and	r17 = r17, mask
	nop	0
	;;
.mmi;	andcm	r18 = r18, mask
	andcm	r19 = r19, mask
	nop	0
	;;
.mmi;	or	r16 = r16, r18
	or	r17 = r17, r19
	nop	0
	;;
.mmb;	st8	[rp1] = r16, 16
	st8	[rp2] = r17, 16
	br.cloop.dptk	L(top)
	;;
L(end):
.mmi;	sub	rp1 = rp1, n		C move rp back to beginning
	sub	rp2 = rp2, n		C move rp back to beginning
	cmp.ne	p9, p0 = 1, nents
.mmb;	add	nents = -1, nents
	nop	0
  (p9)	br.dptk	L(outer)
	;;

.mib;	nop	0
	nop	0
	br.ret.sptk.many b0
EPILOGUE()
@


1.1
log
@Initial revision
@
text
@@


1.1.1.1
log
@initial import GMP 5.1.3 sources.  changes include:

fixes for:
- mpn_sbpi1_div_qr_sec and mpn_sbpi1_div_r_sec
- mpz_powm_ui
- AMD family 11h
- mpz_powm_sec and mpn_powm_sec
- ASSERT() fixes
- gcd, gcdext, and invert function fixes
- some PPC division operations
@
text
@@


1.1.1.1.8.1
log
@file tabselect.asm was added on branch tls-maxphys on 2014-08-19 23:59:50 +0000
@
text
@d1 139
@


1.1.1.1.8.2
log
@Rebase to HEAD as of a few days ago.
@
text
@a0 139
dnl  IA-64 mpn_tabselect.

dnl  Copyright 2011 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 Itanium:       ?
C Itanium 2:     2.5

C NOTES
C  * Using software pipelining could trivially yield 2 c/l without unrolling,
C    or 1+epsilon with unrolling.  (This code was modelled after the powerpc64
C    code, for simplicity.)

C mpn_tabselect (mp_limb_t *rp, mp_limb_t *tp, mp_size_t n, mp_size_t nents, mp_size_t which)
define(`rp',     `r32')
define(`tp',     `r33')
define(`n',      `r34')
define(`nents',  `r35')
define(`which',  `r36')

define(`mask',   `r8')

define(`rp1',     `r32')
define(`tp1',     `r33')
define(`rp2',     `r14')
define(`tp2',     `r15')

ASM_START()
	TEXT
	ALIGN(16)
PROLOGUE(mpn_tabselect)
	.prologue
	.save	ar.lc, r2
	.body
ifdef(`HAVE_ABI_32',`
.mmi;	addp4	rp = 0, rp		C			M I
	addp4	tp = 0, tp		C			M I
	zxt4	n = n			C			I
.mii;	nop	0
	zxt4	nents = nents		C			I
	zxt4	which = which		C			I
	;;
')
.mmi;	add	rp2 = 8, rp1
	add	tp2 = 8, tp1
	add	r6 = -2, n
	;;
.mmi;	cmp.eq	p10, p0 = 1, n
	and	r9 = 1, n		C set cr0 for use in inner loop
	shr.u	r6 = r6, 1		C inner loop count
	;;
.mmi;	cmp.eq	p8, p0 = 0, r9
	sub	which = nents, which
	shl	n = n, 3
	;;

L(outer):
.mmi	cmp.eq	p6, p7 = which, nents	C are we at the selected table entry?
	nop	0
	mov	ar.lc = r6		C			I0
	;;
.mmb;
  (p6)	mov	mask = -1
  (p7)	mov	mask = 0
  (p8)	br.dptk	L(top)			C branch to loop entry if n even
	;;

.mmi;	ld8	r16 = [tp1], 8
	add	tp2 = 8, tp2
	nop	0
	;;
.mmi;	ld8	r18 = [rp1]
	and	r16 = r16, mask
	nop	0
	;;
.mmi;	andcm	r18 = r18, mask
	;;
	or	r16 = r16, r18
	nop	0
	;;
.mmb;	st8	[rp1] = r16, 8
	add	rp2 = 8, rp2
  (p10)	br.dpnt	L(end)

	ALIGN(32)
L(top):
.mmi;	ld8	r16 = [tp1], 16
	ld8	r17 = [tp2], 16
	nop	0
	;;
.mmi;	ld8	r18 = [rp1]
	and	r16 = r16, mask
	nop	0
.mmi;	ld8	r19 = [rp2]
	and	r17 = r17, mask
	nop	0
	;;
.mmi;	andcm	r18 = r18, mask
	andcm	r19 = r19, mask
	nop	0
	;;
.mmi;	or	r16 = r16, r18
	or	r17 = r17, r19
	nop	0
	;;
.mmb;	st8	[rp1] = r16, 16
	st8	[rp2] = r17, 16
	br.cloop.dptk	L(top)
	;;
L(end):
.mmi;	sub	rp1 = rp1, n		C move rp back to beginning
	sub	rp2 = rp2, n		C move rp back to beginning
	cmp.ne	p9, p0 = 1, nents
.mmb;	add	nents = -1, nents
	nop	0
  (p9)	br.dptk	L(outer)
	;;

.mib;	nop	0
	nop	0
	br.ret.sptk.many b0
EPILOGUE()
@


1.1.1.1.4.1
log
@file tabselect.asm was added on branch yamt-pagecache on 2014-05-22 14:09:01 +0000
@
text
@d1 139
@


1.1.1.1.4.2
log
@sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs.  ("Protocol error: too many arguments")
@
text
@a0 139
dnl  IA-64 mpn_tabselect.

dnl  Copyright 2011 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 Itanium:       ?
C Itanium 2:     2.5

C NOTES
C  * Using software pipelining could trivially yield 2 c/l without unrolling,
C    or 1+epsilon with unrolling.  (This code was modelled after the powerpc64
C    code, for simplicity.)

C mpn_tabselect (mp_limb_t *rp, mp_limb_t *tp, mp_size_t n, mp_size_t nents, mp_size_t which)
define(`rp',     `r32')
define(`tp',     `r33')
define(`n',      `r34')
define(`nents',  `r35')
define(`which',  `r36')

define(`mask',   `r8')

define(`rp1',     `r32')
define(`tp1',     `r33')
define(`rp2',     `r14')
define(`tp2',     `r15')

ASM_START()
	TEXT
	ALIGN(16)
PROLOGUE(mpn_tabselect)
	.prologue
	.save	ar.lc, r2
	.body
ifdef(`HAVE_ABI_32',`
.mmi;	addp4	rp = 0, rp		C			M I
	addp4	tp = 0, tp		C			M I
	zxt4	n = n			C			I
.mii;	nop	0
	zxt4	nents = nents		C			I
	zxt4	which = which		C			I
	;;
')
.mmi;	add	rp2 = 8, rp1
	add	tp2 = 8, tp1
	add	r6 = -2, n
	;;
.mmi;	cmp.eq	p10, p0 = 1, n
	and	r9 = 1, n		C set cr0 for use in inner loop
	shr.u	r6 = r6, 1		C inner loop count
	;;
.mmi;	cmp.eq	p8, p0 = 0, r9
	sub	which = nents, which
	shl	n = n, 3
	;;

L(outer):
.mmi	cmp.eq	p6, p7 = which, nents	C are we at the selected table entry?
	nop	0
	mov	ar.lc = r6		C			I0
	;;
.mmb;
  (p6)	mov	mask = -1
  (p7)	mov	mask = 0
  (p8)	br.dptk	L(top)			C branch to loop entry if n even
	;;

.mmi;	ld8	r16 = [tp1], 8
	add	tp2 = 8, tp2
	nop	0
	;;
.mmi;	ld8	r18 = [rp1]
	and	r16 = r16, mask
	nop	0
	;;
.mmi;	andcm	r18 = r18, mask
	;;
	or	r16 = r16, r18
	nop	0
	;;
.mmb;	st8	[rp1] = r16, 8
	add	rp2 = 8, rp2
  (p10)	br.dpnt	L(end)

	ALIGN(32)
L(top):
.mmi;	ld8	r16 = [tp1], 16
	ld8	r17 = [tp2], 16
	nop	0
	;;
.mmi;	ld8	r18 = [rp1]
	and	r16 = r16, mask
	nop	0
.mmi;	ld8	r19 = [rp2]
	and	r17 = r17, mask
	nop	0
	;;
.mmi;	andcm	r18 = r18, mask
	andcm	r19 = r19, mask
	nop	0
	;;
.mmi;	or	r16 = r16, r18
	or	r17 = r17, r19
	nop	0
	;;
.mmb;	st8	[rp1] = r16, 16
	st8	[rp2] = r17, 16
	br.cloop.dptk	L(top)
	;;
L(end):
.mmi;	sub	rp1 = rp1, n		C move rp back to beginning
	sub	rp2 = rp2, n		C move rp back to beginning
	cmp.ne	p9, p0 = 1, nents
.mmb;	add	nents = -1, nents
	nop	0
  (p9)	br.dptk	L(outer)
	;;

.mib;	nop	0
	nop	0
	br.ret.sptk.many b0
EPILOGUE()
@


