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

📄 mult32.asm

📁 包含几个高效的矢量运算的数学函数
💻 ASM
字号:
	.include "ccall.asm"
	
;; Vectorized and modified by: Jeff Axelrod
;; Original Version:	Alex Tessarolo
	.def _ti_mult32
_ti_mult32:
; Begin C Preprocessing
	pre_ccall 7,AR_X,AR_XEXP,AR_Y,AR_YEXP,AR_Z,AR_ZEXP,AR_N
	
	; Modify any registers needed
	SETC	SXM		; Sign extension mode ON
	; Note: Overflow mode is off in C.
	sar AR_XEXP,*
	lacc *
	sar AR_YEXP,*
	add *,AR_ZEXP
	sacl *,AR_N

; End C Preprocessing
	banz LOOP,AR_X
	b DONE
LOOP:
	spm #3
;	LT		XL  
	lt *+,AR_Y
;	MPYU    YL
	mpyu *+,AR_STACK	
;	SPH		TEMP
	sph *
;	LACL	TEMP	; ACC = XL*YL >> 16
	lacl *,AR_Y
	
;	MPY		YH
	mpy *-,AR_X
;	LTP		XH      ; Was LTA
	ltp *,AR_Y
;	MPY		YL
	mpy *
	apac 			; ACC += XL*YH + XH*YL
	
;	BIT		YL,0
	bit *+,0,AR_X
	bcnd	SKIP1,NTC
;	ADD		XH,16	; If bit 15 of YL=1, ACC += XH<<16
	add *,16-6
SKIP1:
;	BIT		XL,0
	mar *-
	bit *,0
	adrk #2
	
	bcnd SKIP2,NTC
;	ADD		YH,16	; If bit 15 of XL=1, ACC += YH<<16
	mar *,AR_Y
	add *,16-6
	
SKIP2:
;	ADD		#04000h	; Round ACC

	; ACC >>= 15

;;;	SFL

	mar *,AR_STACK
;	SACH	TEMP


; rpt #15-7
	sfr
	sfr
	sfr
	sfr
	sfr
	sfr
	sfr
	sfr
	sfr
;	sach *
	
;	LACL	#0
;	ADDC	TEMP
;;;	addc *,AR_Y
;	lacc *,1,AR_Y

	mar *,AR_Y
	SPM		#1		; Set product shift mode to << 1 to 
					; recover redundant sign bit.
	
	; T == XH
;	MPY		YH
	mpy *+,AR_Z
	APAC			; ACC += XH*YH
;	SACH	WH
;	SACL	WL
	sacl *+
	sach *+,AR_N
	banz LOOP,AR_X

; Begin C Post Processing
DONE:
	; Restore any other registers modified
	; Note: Overflow mode is off in C.
	spm 0
	post_ccall 7

⌨️ 快捷键说明

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