xref: /netbsd/external/lgpl3/gmp/dist/mpn/mips64/add_n.asm (revision f81b1c5b)
14a1767b4Smrgdnl  MIPS64 mpn_add_n -- Add two limb vectors of the same length > 0 and store
24a1767b4Smrgdnl  sum in a third limb vector.
34a1767b4Smrg
4*f81b1c5bSmrgdnl  Copyright 1995, 2000-2002, 2011 Free Software Foundation, Inc.
54a1767b4Smrg
64a1767b4Smrgdnl  This file is part of the GNU MP Library.
7*f81b1c5bSmrgdnl
84a1767b4Smrgdnl  The GNU MP Library is free software; you can redistribute it and/or modify
9*f81b1c5bSmrgdnl  it under the terms of either:
10*f81b1c5bSmrgdnl
11*f81b1c5bSmrgdnl    * the GNU Lesser General Public License as published by the Free
12*f81b1c5bSmrgdnl      Software Foundation; either version 3 of the License, or (at your
13*f81b1c5bSmrgdnl      option) any later version.
14*f81b1c5bSmrgdnl
15*f81b1c5bSmrgdnl  or
16*f81b1c5bSmrgdnl
17*f81b1c5bSmrgdnl    * the GNU General Public License as published by the Free Software
18*f81b1c5bSmrgdnl      Foundation; either version 2 of the License, or (at your option) any
19*f81b1c5bSmrgdnl      later version.
20*f81b1c5bSmrgdnl
21*f81b1c5bSmrgdnl  or both in parallel, as here.
22*f81b1c5bSmrgdnl
234a1767b4Smrgdnl  The GNU MP Library is distributed in the hope that it will be useful, but
244a1767b4Smrgdnl  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
25*f81b1c5bSmrgdnl  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
26*f81b1c5bSmrgdnl  for more details.
27*f81b1c5bSmrgdnl
28*f81b1c5bSmrgdnl  You should have received copies of the GNU General Public License and the
29*f81b1c5bSmrgdnl  GNU Lesser General Public License along with the GNU MP Library.  If not,
30*f81b1c5bSmrgdnl  see https://www.gnu.org/licenses/.
314a1767b4Smrg
324a1767b4Smrginclude(`../config.m4')
334a1767b4Smrg
344a1767b4SmrgC INPUT PARAMETERS
354a1767b4SmrgC res_ptr	$4
364a1767b4SmrgC s1_ptr	$5
374a1767b4SmrgC s2_ptr	$6
384a1767b4SmrgC size		$7
394a1767b4Smrg
404a1767b4SmrgASM_START()
41d25e02daSmrgPROLOGUE(mpn_add_nc)
42d25e02daSmrg	ld	$10,0($5)
43d25e02daSmrg	ld	$11,0($6)
44d25e02daSmrg
45d25e02daSmrg	daddiu	$7,$7,-1
46d25e02daSmrg	and	$9,$7,4-1	C number of limbs in first loop
47d25e02daSmrg	beq	$9,$0,.L0	C if multiple of 4 limbs, skip first loop
48d25e02daSmrg	 move	$2,$8
49d25e02daSmrg	b	.Loop0
50d25e02daSmrg	 dsubu	$7,$7,$9
51d25e02daSmrgEPILOGUE()
524a1767b4SmrgPROLOGUE(mpn_add_n)
534a1767b4Smrg	ld	$10,0($5)
544a1767b4Smrg	ld	$11,0($6)
554a1767b4Smrg
564a1767b4Smrg	daddiu	$7,$7,-1
574a1767b4Smrg	and	$9,$7,4-1	C number of limbs in first loop
584a1767b4Smrg	beq	$9,$0,.L0	C if multiple of 4 limbs, skip first loop
594a1767b4Smrg	 move	$2,$0
604a1767b4Smrg
614a1767b4Smrg	dsubu	$7,$7,$9
624a1767b4Smrg
634a1767b4Smrg.Loop0:	daddiu	$9,$9,-1
644a1767b4Smrg	ld	$12,8($5)
654a1767b4Smrg	daddu	$11,$11,$2
664a1767b4Smrg	ld	$13,8($6)
674a1767b4Smrg	sltu	$8,$11,$2
684a1767b4Smrg	daddu	$11,$10,$11
694a1767b4Smrg	sltu	$2,$11,$10
704a1767b4Smrg	sd	$11,0($4)
714a1767b4Smrg	or	$2,$2,$8
724a1767b4Smrg
734a1767b4Smrg	daddiu	$5,$5,8
744a1767b4Smrg	daddiu	$6,$6,8
754a1767b4Smrg	move	$10,$12
764a1767b4Smrg	move	$11,$13
774a1767b4Smrg	bne	$9,$0,.Loop0
784a1767b4Smrg	 daddiu	$4,$4,8
794a1767b4Smrg
804a1767b4Smrg.L0:	beq	$7,$0,.Lend
814a1767b4Smrg	 nop
824a1767b4Smrg
834a1767b4Smrg.Loop:	daddiu	$7,$7,-4
844a1767b4Smrg
854a1767b4Smrg	ld	$12,8($5)
864a1767b4Smrg	daddu	$11,$11,$10
874a1767b4Smrg	ld	$13,8($6)
884a1767b4Smrg	sltu	$8,$11,$10
894a1767b4Smrg	daddu	$11,$11,$2
904a1767b4Smrg	sltu	$2,$11,$2
914a1767b4Smrg	sd	$11,0($4)
924a1767b4Smrg	or	$2,$2,$8
934a1767b4Smrg
944a1767b4Smrg	ld	$10,16($5)
954a1767b4Smrg	daddu	$13,$13,$12
964a1767b4Smrg	ld	$11,16($6)
974a1767b4Smrg	sltu	$8,$13,$12
984a1767b4Smrg	daddu	$13,$13,$2
994a1767b4Smrg	sltu	$2,$13,$2
1004a1767b4Smrg	sd	$13,8($4)
1014a1767b4Smrg	or	$2,$2,$8
1024a1767b4Smrg
1034a1767b4Smrg	ld	$12,24($5)
1044a1767b4Smrg	daddu	$11,$11,$10
1054a1767b4Smrg	ld	$13,24($6)
1064a1767b4Smrg	sltu	$8,$11,$10
1074a1767b4Smrg	daddu	$11,$11,$2
1084a1767b4Smrg	sltu	$2,$11,$2
1094a1767b4Smrg	sd	$11,16($4)
1104a1767b4Smrg	or	$2,$2,$8
1114a1767b4Smrg
1124a1767b4Smrg	ld	$10,32($5)
1134a1767b4Smrg	daddu	$13,$13,$12
1144a1767b4Smrg	ld	$11,32($6)
1154a1767b4Smrg	sltu	$8,$13,$12
1164a1767b4Smrg	daddu	$13,$13,$2
1174a1767b4Smrg	sltu	$2,$13,$2
1184a1767b4Smrg	sd	$13,24($4)
1194a1767b4Smrg	or	$2,$2,$8
1204a1767b4Smrg
1214a1767b4Smrg	daddiu	$5,$5,32
1224a1767b4Smrg	daddiu	$6,$6,32
1234a1767b4Smrg
1244a1767b4Smrg	bne	$7,$0,.Loop
1254a1767b4Smrg	 daddiu	$4,$4,32
1264a1767b4Smrg
1274a1767b4Smrg.Lend:	daddu	$11,$11,$2
1284a1767b4Smrg	sltu	$8,$11,$2
1294a1767b4Smrg	daddu	$11,$10,$11
1304a1767b4Smrg	sltu	$2,$11,$10
1314a1767b4Smrg	sd	$11,0($4)
1324a1767b4Smrg	j	$31
1334a1767b4Smrg	or	$2,$2,$8
134d25e02daSmrgEPILOGUE()
135