1! SPARC v9 64-bit VIS3 __mpn_sub_n -- Subtract two limb vectors of the same length > 0 2! and store difference 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_sub_n_vis3) 35 subcc sz, 1, sz 36 be .Lfinal_limb 37 cmp %g0, 1 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 xnor tmp1, %g0, tmp1 49 addxccc tmp1, tmp2, tmp1 50 stx tmp1, [res_ptr - 0x10] 51 xnor tmp3, %g0, tmp3 52 addxccc tmp3, tmp4, tmp3 53 brgz sz, .Lloop 54 stx tmp3, [res_ptr - 0x08] 55 56 brlz,pt sz, .Lfinish 57 nop 58 59.Lfinal_limb: 60 ldx [s2_ptr + 0x00], tmp1 61 ldx [s1_ptr + 0x00], tmp2 62 xnor tmp1, %g0, tmp1 63 addxccc tmp1, tmp2, tmp1 64 stx tmp1, [res_ptr + 0x00] 65 66.Lfinish: 67 clr %o0 68 retl 69 movcc %xcc, 1, %o0 70END(__mpn_sub_n_vis3) 71