1! SPARC v9 64-bit VIS3 __mpn_add_n -- Add two limb vectors of the same length > 0 and 2! store sum in a third limb vector. 3! 4! Copyright (C) 2013-2022 Free Software Foundation, Inc. 5! This file is part of the GNU C Library. 6! 7! The GNU C Library is free software; you can redistribute it and/or 8! modify it under the terms of the GNU Lesser General Public 9! License as published by the Free Software Foundation; either 10! version 2.1 of the License, or (at your option) any later version. 11! 12! The GNU C Library is distributed in the hope that it will be useful, 13! but WITHOUT ANY WARRANTY; without even the implied warranty of 14! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15! Lesser General Public License for more details. 16! 17! You should have received a copy of the GNU Lesser General Public 18! License along with the GNU C Library; if not, see 19! <https://www.gnu.org/licenses/>. 20 21#include <sysdep.h> 22 23#define res_ptr %o0 24#define s1_ptr %o1 25#define s2_ptr %o2 26#define sz %o3 27#define tmp1 %g1 28#define tmp2 %g2 29#define tmp3 %g3 30#define tmp4 %o4 31 32 .register %g2,#scratch 33 .register %g3,#scratch 34ENTRY(__mpn_add_n_vis3) 35 subcc sz, 1, sz 36 be .Lfinal_limb 37 cmp %g0, 0 38 39.Lloop: 40 ldx [s2_ptr + 0x00], tmp1 41 add s2_ptr, 0x10, s2_ptr 42 ldx [s1_ptr + 0x00], tmp2 43 add s1_ptr, 0x10, s1_ptr 44 ldx [s2_ptr - 0x08], tmp3 45 add res_ptr, 0x10, res_ptr 46 ldx [s1_ptr - 0x08], tmp4 47 sub sz, 2, sz 48 addxccc tmp1, tmp2, tmp1 49 stx tmp1, [res_ptr - 0x10] 50 addxccc tmp3, tmp4, tmp3 51 brgz sz, .Lloop 52 stx tmp3, [res_ptr - 0x08] 53 54 brlz,pt sz, .Lfinish 55 nop 56 57.Lfinal_limb: 58 ldx [s2_ptr + 0x00], tmp1 59 ldx [s1_ptr + 0x00], tmp2 60 addxccc tmp1, tmp2, tmp1 61 stx tmp1, [res_ptr + 0x00] 62 63.Lfinish: 64 retl 65 addxc %g0, %g0, %o0 66END(__mpn_add_n_vis3) 67