⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sub_n.s

📁 Glibc 2.3.2源代码(解压后有100多M)
💻 S
字号:
 # Alpha __mpn_sub_n -- Subtract two limb vectors of the same length > 0 and # store difference in a third limb vector. # Copyright (C) 1995 Free Software Foundation, Inc. # This file is part of the GNU MP Library. # The GNU MP 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 MP 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 MP Library; see the file COPYING.LIB.  If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, # MA 02111-1307, USA. # INPUT PARAMETERS # res_ptr	$16 # s1_ptr	$17 # s2_ptr	$18 # size		$19	.set	noreorder	.set	noat.text	.align	3	.globl	__mpn_sub_n	.ent	__mpn_sub_n__mpn_sub_n:	.frame	$30,0,$26,0	or	$31,$31,$25		# clear cy	subq	$19,4,$19		# decr loop cnt	blt	$19,.Lend2		# if less than 4 limbs, goto 2nd loop # Start software pipeline for 1st loop	ldq	$0,0($18)	ldq	$1,8($18)	ldq	$4,0($17)	ldq	$5,8($17)	addq	$17,32,$17		# update s1_ptr	ldq	$2,16($18)	subq	$4,$0,$20		# 1st main sub	ldq	$3,24($18)	subq	$19,4,$19		# decr loop cnt	ldq	$6,-16($17)	cmpult	$4,$20,$25		# compute cy from last sub	ldq	$7,-8($17)	addq	$1,$25,$28		# cy add	addq	$18,32,$18		# update s2_ptr	subq	$5,$28,$21		# 2nd main sub	cmpult	$28,$25,$8		# compute cy from last add	blt	$19,.Lend1		# if less than 4 limbs remain, jump # 1st loop handles groups of 4 limbs in a software pipeline	.align	4.Loop:	cmpult	$5,$21,$25		# compute cy from last add	ldq	$0,0($18)	or	$8,$25,$25		# combine cy from the two adds	ldq	$1,8($18)	addq	$2,$25,$28		# cy add	ldq	$4,0($17)	subq	$6,$28,$22		# 3rd main sub	ldq	$5,8($17)	cmpult	$28,$25,$8		# compute cy from last add	cmpult	$6,$22,$25		# compute cy from last add	stq	$20,0($16)	or	$8,$25,$25		# combine cy from the two adds	stq	$21,8($16)	addq	$3,$25,$28		# cy add	subq	$7,$28,$23		# 4th main sub	cmpult	$28,$25,$8		# compute cy from last add	cmpult	$7,$23,$25		# compute cy from last add	addq	$17,32,$17		# update s1_ptr	or	$8,$25,$25		# combine cy from the two adds	addq	$16,32,$16		# update res_ptr	addq	$0,$25,$28		# cy add	ldq	$2,16($18)	subq	$4,$28,$20		# 1st main sub	ldq	$3,24($18)	cmpult	$28,$25,$8		# compute cy from last add	ldq	$6,-16($17)	cmpult	$4,$20,$25		# compute cy from last add	ldq	$7,-8($17)	or	$8,$25,$25		# combine cy from the two adds	subq	$19,4,$19		# decr loop cnt	stq	$22,-16($16)	addq	$1,$25,$28		# cy add	stq	$23,-8($16)	subq	$5,$28,$21		# 2nd main sub	addq	$18,32,$18		# update s2_ptr	cmpult	$28,$25,$8		# compute cy from last add	bge	$19,.Loop # Finish software pipeline for 1st loop.Lend1:	cmpult	$5,$21,$25		# compute cy from last add	or	$8,$25,$25		# combine cy from the two adds	addq	$2,$25,$28		# cy add	subq	$6,$28,$22		# 3rd main sub	cmpult	$28,$25,$8		# compute cy from last add	cmpult	$6,$22,$25		# compute cy from last add	stq	$20,0($16)	or	$8,$25,$25		# combine cy from the two adds	stq	$21,8($16)	addq	$3,$25,$28		# cy add	subq	$7,$28,$23		# 4th main sub	cmpult	$28,$25,$8		# compute cy from last add	cmpult	$7,$23,$25		# compute cy from last add	or	$8,$25,$25		# combine cy from the two adds	addq	$16,32,$16		# update res_ptr	stq	$22,-16($16)	stq	$23,-8($16).Lend2:	addq	$19,4,$19		# restore loop cnt	beq	$19,.Lret # Start software pipeline for 2nd loop	ldq	$0,0($18)	ldq	$4,0($17)	subq	$19,1,$19	beq	$19,.Lend0 # 2nd loop handles remaining 1-3 limbs	.align	4.Loop0:	addq	$0,$25,$28		# cy add	ldq	$0,8($18)	subq	$4,$28,$20		# main sub	ldq	$1,8($17)	addq	$18,8,$18	cmpult	$28,$25,$8		# compute cy from last add	addq	$17,8,$17	stq	$20,0($16)	cmpult	$4,$20,$25		# compute cy from last add	subq	$19,1,$19		# decr loop cnt	or	$8,$25,$25		# combine cy from the two adds	addq	$16,8,$16	or	$1,$31,$4	bne	$19,.Loop0.Lend0:	addq	$0,$25,$28		# cy add	subq	$4,$28,$20		# main sub	cmpult	$28,$25,$8		# compute cy from last add	cmpult	$4,$20,$25		# compute cy from last add	stq	$20,0($16)	or	$8,$25,$25		# combine cy from the two adds.Lret:	or	$25,$31,$0		# return cy	ret	$31,($26),1	.end	__mpn_sub_n

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -