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

📄 cbrev.asm

📁 seed傅立叶变换程序
💻 ASM
字号:
;***********************************************************
; Version 2.20.01                                           
;***********************************************************
;*****************************************************************************
;  Function:	cbrev
;  Description: complex bit-reverse routine (C54x)
;
;  Copyright Texas instruments Inc, 1998
;-----------------------------------------------------------------------------
;  Revision History:
;  1.00  R. Piedra, 8/31/98. Original release.
;  1.10  A. Aboagye, 10/7/99  - Removed setting of sign extension mode bit
;*****************************************************************************

        .mmregs
	.if __far_mode
offset	.set 1
	.else
offset	.set 0
	.endif
					; stack description
	.asg	(0), ret_addr

					; x in A
	.asg	(3+ offset), arg_y
	.asg	(4+ offset), arg_n

					; register usage
					; ar0 : bit reversing idx
	.asg	ar2,ar_dst
	.asg	ar3,ar_src

	.global     _cbrev
        .text

_cbrev
        PSHM    ST0                                 ; 1 cycle
        PSHM    ST1                                 ; 1 cycle
        RSBX    OVA                                 ; 1 cycle
        RSBX    OVB                                 ; 1 cycle

	rsbx	sxm			;				(1)

; Get arguments
; -------------
	stlm	a, ar_src		; pointer to src		(1)
	mvdk	*sp(arg_y), *(ar_dst)	; pointer to dst (temporary)	(2)
	ld	*sp(arg_n), a		; a = n 			(1)
	stlm	a, AR0			; AR0 = n = 1/2 size of circ buffer (1)
	sub	#3,a			; a = n-3(by pass 1st and last elem)(2)

; Select in-place or off-place bit-reversing
; ------------------------------------------

	ldm	ar_src,b		; b = src_addr			(1)
	sub	*sp(arg_y),b		; b = src_addr - dst_addr	(1)

	bcd	in_place, beq		; if (ar_src==ar_dst)then in_place (2)
	stlm	a, brc			; brc = n-3			(1)
	nop				;				(1)

; Off-place bit-reversing
; -----------------------

off_place:
_start1:
					; unroll to fill delayed slots
	rptbd	off_place_end-1 	;				(2)
	mvdd	*ar_src+,*ar_dst+	; move real component		(1)
	mvdd	*ar_src-,*ar_dst+	; move Im component		(1)

      
	mar	*ar_src+0B		;				(1)
	mvdd	*ar_src+,*ar_dst+	; move real component		(1)
	mvdd	*ar_src-,*ar_dst+	; move Im component		(1)

off_place_end:
	mar	*ar_src+0B		;				(1)
	bd	end			;				(2)
	mvdd	*ar_src+,*ar_dst+	; move real component		(1)
	mvdd	*ar_src-,*ar_dst+	; move Im component		(1)


; In-place bit-reversing
; ----------------------

in_place:

	mar	*ar_src+0B		; bypass first and last element (1)
	mar	*+ar_dst(2)		;				(1)
_start2:
	rptbd	in_place_end-1		;				(2)
	ldm	ar_src,a		; b = src_addr			(1)
	ldm	ar_dst, b		; a = dst_addr			(1)



	sub	b,a			; a =  src_addr  - dst_addr	(1)
					; if >=0  bypass move just increment
	bcd	bypass, ageq		; if (src_addr>=dst_addr) then skip(2)
	ld	*ar_dst+, a		; a = Re dst element (preserve) (1)
	ld	*ar_dst-, b		; b = Im dst element (preserve) (1)

	mvdd	*ar_src+, *ar_dst+	; Re dst = Re src		(1)
	mvdd	*ar_src , *ar_dst-	; Im dst = Im src;point to Re	(1)
	stl	b, *ar_src-		; Im src = b = Im dst;point to Re (1)
	stl	a, *ar_src		; Re src = a = Re dst		(1)

bypass
	mar	*ar_src+0B		;				(1)
	mar	*+ar_dst(2)		;				(1)

	ldm	ar_src,a		; b = src_addr			(1)
	ldm	ar_dst, b		; a = dst_addr			(1)

in_place_end



; Return
; ------

_end:
end
        POPM    ST1                                 ; 1 cycle
        POPM    ST0                                 ; 1 cycle
	.if	__far_mode
	fretd
	.else
	retd
	.endif
	nop
	nop

;end of file. please do not remove. it is left here to ensure that no lines of code are removed by any editor

⌨️ 快捷键说明

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