idigitvecmultadd.s

来自「Arithmetic for integers of almost unlimi」· S 代码 · 共 41 行

S
41
字号
#include <config.h>/*  Alpha assembly support for libI  Written by Thomas Papanikolaou, June 2 1998  internal version for John Cremona*/	.set noreorder        .set noat.text	.align 3	.globl DigitVecMultAdd	.ent DigitVecMultAddDigitVecMultAdd:	.frame $30,0,$26,0	.prologue 0	bis $31,$31,$0		# carry = 0	ble $19,.Lend		# if (l < 0) return carry	.align 5.Loop:	ldq $4,0($17)		# $4 = aa = *a	mulq $4,$18,$2		# $2 = lo = low_digit(a * m)	addq $17,8,$17		# a++	ldq $1,0($16)		# $1 = x = *res	subl $19,1,$19		# l--;	addq $2,$0,$2		# lo += carry	cmpult $2,$0,$3		# tmp = (lo < carry)	addq $2,$1,$2		# lo += x;	stq $2,0($16)		# *res = x	addq $16,8,$16		# res++	cmpult $2,$1,$2		# lo = (lo < x);	umulh $4,$18,$1		# x = high_digit(a * m)	addq $1,$3,$0		# carry = x + (lo < carry)	addq $0,$2,$0		# carry = x + (lo < carry) + (lo < x) 	bgt $19,.Loop		# if (l > 0) goto .Loop.Lend:	ret $31,($26),1	.end DigitVecMultAdd

⌨️ 快捷键说明

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