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