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