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

📄 cifft_32.asm

📁 CCS3.3自带的TI 5400系列DSP的dsplib文件。文档说明可以在TI公司网站上下载。
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;***********************************************************
; Version 2.20.01                                           
;***********************************************************
;============================================================================
;  Description:   32-bit Complex Inverse FFT
;
;  Target Processor: C54x
;
;  Author:  Mike Hannah,  Texas Instruments, Inc.,  May 14, 1998
;
;=============================================================================

		.global Itempdw1
		.global Itempdw2
		.global IfftStage1and2
		.global IfftStage3
		.global IfftStageX
		.global IfftButterfly

        .mmregs
        .bss Itempdw1,1*2,1,1  ;temporary dword
        .bss Itempdw2,1*2,1,1  ;temporary dword

        .text
;=============================================================================
; Function:     IfftStage1and2
;
; Description:  Combined stage 1 and 2 of Complex Inverse FFT (double precision)
;
; Inputs:       None
;
; Outputs:      None
;
; Assumptions:  Output will be in place of input.
;
;=============================================================================
IfftStage1and2:
	.if	__far_mode
	ld	*sp(8), A
        .else
        ld      *sp(6), A
        .endif
	bcd	NoScale, AEQ
	ld	#0, ASM
	nop
	ld	#-2, ASM

        rptb    Stg1and2End    ;(N/4)*28+3
        dld     *ar2, B         ;B=R1                           R1
        dsub    *ar3, B         ;B=R1-R2                        R2
        dld     *ar2, A         ;A=R1                           R1
        dadd    *ar3, A         ;A=R1+R2                        R2
        sth     B, ASM, *ar3+   ;R2H=R1-R2/4                    R2
        stl     B, ASM, *ar3-   ;R2L=R1-R2/4                    R2
        dld     *ar4, B         ;B=R3                           R3
        dadd    *ar5, B         ;B=R3+R4
        add     B, A            ;A=(R1+R2)+(R3+R4)
        sth     A, ASM, *ar2+   ;R1H'=((R1+R2)+(R3+R4))/4       R1
        stl     A, ASM, *ar2+   ;R1L'=((R1+R2)+(R3+R4))/4       I1
        sub     B, 1, A         ;A=(R1+R2)-(R3+R4)
        dld     *ar4, B         ;B=R3                           R3
        dsub    *ar5, B         ;B=R3-R4                        R4
        sth     A, ASM, *ar4+   ;R3H'=((R1+R2)-(R3+R4))/4       I3
        stl     A, ASM, *ar4+   ;R3L'=((R1+R2)-(R3+R4))/4       I3
        dld     *ar3, A         ;A=(R1-R2)/4                    R2
        sth     B, ASM, *ar5+   ;R4H=(R3-R4)/4                  R4
        stl     B, ASM, *ar5+   ;R4L=(R3-R4)/4                  I4
        dld     *ar4, B         ;B=I3                           I3
        dsub    *ar5-, B        ;B=I3-I4                        R4
        sub     B, ASM, A       ;A=((R1-R2)-(I3-I4))/4
        dst     A, *ar3+        ;R2'=((R1-R2)-(I3-I4))/4        I2
        add     B, -1, A        ;A=((R1-R2)+(I3-I4))/4
        dld     *ar5, B         ;B=(R3-R4)/4                    R4
        dst     A, *ar5+        ;R4'=((R1-R2)+(I3-I4))/4        I4
        dld     *ar4, A         ;A=I3                           I3
        dadd    *ar5, A         ;A=I3+I4                        I4
        sth     A, ASM, *ar4+   ;I3H=(I3+I4)/4                  I3
        stl     A, ASM, *ar4-   ;I3L=(I3+I4)/4                  I3
        dld     *ar2, A         ;A=I1                           I1
        dsub    *ar3, A         ;A=I1-I2                        I2
        sub     B, 2, A         ;A=(I1-I2)-(r3-r4)
        sth     A, ASM,*ar5+    ;I4H'=((I1-I2)-(r3-r4))/4       I4
        stl     A, ASM,*ar5+0   ;I4H'=((I1-I2)-(r3-r4))/4       next R4
        add     B, 3, A         ;A=(I1-I2)+(r3-r4)
        dld     *ar2, B         ;B=I1                           I1
        dadd    *ar3, B         ;B=I1-I2                        I2
        sth     A, ASM, *ar3+   ;I2H'=(I1-I2)+(R3-R4)/4         I2
        stl     A, ASM, *ar3+0  ;I2H'=(I1-I2)+(R3-R4)/4         next R2
        dld     *ar4, A         ;A=(I3+I4)/4                    I3
        add     A, 2, B         ;B=(I1+I2)+(I3+I4)
        sth     B, ASM, *ar2+   ;I1H'=(I1+I2)+(I3+I4)/4         I1
        stl     B, ASM, *ar2+0  ;I1H'=(I1+I2)+(I3+I4)/4         next R1
        sub     A, 3, B         ;B=(I1+I2)-(I3+I4)
        sth     B, ASM, *ar4+   ;I3'=((I1+I2)-(I3+I4))/4        I3
Stg1and2End
        stl     B, ASM, *ar4+0  ;I3'=((I1+I2)-(I3+I4))/4        next R3
	.if	__far_mode
        fret
        .else
        ret
        .endif

NoScale:
        rptb    NoScaleEnd      ;(N/4)*28+3
        dld     *ar2, B         ;B=R1                           R1
        dsub    *ar3, B         ;B=R1-R2                        R2
        dld     *ar2, A         ;A=R1                           R1
        dadd    *ar3, A         ;A=R1+R2                        R2
        sth     B, ASM, *ar3+   ;R2H=R1-R2                      R2
        stl     B, ASM, *ar3-   ;R2L=R1-R2                      R2
        dld     *ar4, B         ;B=R3                           R3
        dadd    *ar5, B         ;B=R3+R4
        add     B, A            ;A=(R1+R2)+(R3+R4)
        sth     A, ASM, *ar2+   ;R1H'=((R1+R2)+(R3+R4))         R1
        stl     A, ASM, *ar2+   ;R1L'=((R1+R2)+(R3+R4))         I1
        sub     B, 1, A         ;A=(R1+R2)-(R3+R4)
        dld     *ar4, B         ;B=R3                           R3
        dsub    *ar5, B         ;B=R3-R4                        R4
        sth     A, ASM, *ar4+   ;R3H'=((R1+R2)-(R3+R4))         I3
        stl     A, ASM, *ar4+   ;R3L'=((R1+R2)-(R3+R4))         I3
        dld     *ar3, A         ;A=(R1-R2)                      R2
        sth     B, ASM, *ar5+   ;R4H=(R3-R4)                    R4
        stl     B, ASM, *ar5+   ;R4L=(R3-R4)                    I4
        dld     *ar4, B         ;B=I3                           I3
        dsub    *ar5-, B        ;B=I3-I4                        R4
        sub     B, ASM, A       ;A=((R1-R2)-(I3-I4))
        dst     A, *ar3+        ;R2'=((R1-R2)-(I3-I4))          I2
        add     B, 1, A         ;A=((R1-R2)+(I3-I4)) 
        dld     *ar5, B         ;B=(R3-R4)                      R4
        dst     A, *ar5+        ;R4'=((R1-R2)+(I3-I4))          I4
        dld     *ar4, A         ;A=I3                           I3
        dadd    *ar5, A         ;A=I3+I4                        I4
        sth     A, ASM, *ar4+   ;I3H=(I3+I4)                    I3
        stl     A, ASM, *ar4-   ;I3L=(I3+I4)                    I3
        dld     *ar2, A         ;A=I1                           I1
        dsub    *ar3, A         ;A=I1-I2                        I2
        sub     B, A            ;A=(I1-I2)-(r3-r4)
        sth     A, ASM,*ar5+    ;I4H'=((I1-I2)-(r3-r4))         I4
        stl     A, ASM,*ar5+0   ;I4H'=((I1-I2)-(r3-r4))         next R4
        add     B, 1, A         ;A=(I1-I2)+(r3-r4)
        dld     *ar2, B         ;B=I1                           I1
        dadd    *ar3, B         ;B=I1+I2                        I2
        sth     A, ASM, *ar3+   ;I2H'=(I1-I2)+(R3-R4)           I2
        stl     A, ASM, *ar3+0  ;I2H'=(I1-I2)+(R3-R4)           next R2
        dld     *ar4, A         ;A=(I3+I4)                      I3
        add     A, B            ;B=(I1+I2)+(I3+I4)
        sth     B, ASM, *ar2+   ;I1H'=(I1+I2)+(I3+I4)           I1
        stl     B, ASM, *ar2+0  ;I1H'=(I1+I2)+(I3+I4)           next R1
        sub     A, 1, B         ;B=(I1+I2)-(I3+I4)
        sth     B, ASM, *ar4+   ;I3'=((I1+I2)-(I3+I4))          I3
NoScaleEnd
        stl     B, ASM, *ar4+0  ;I3'=((I1+I2)-(I3+I4))          next R3
	.if	__far_mode
        fret
        .else
        ret
        .endif
;=============================================================================
; Function:     IfftStage3
;
; Description:  Stage 3 of Complex Inverse FFT (double precision)
;
; Inputs:       None
;
; Outputs:      None
;
; Assumptions:  Output will be in place of input.
;
;=============================================================================
IfftStage3:
	.if	__far_mode
	ld	*sp(8), A
        .else
        ld      *sp(6), A
        .endif
        ld      #-1,ASM         ;ASM=-1
	nop
	xc	1, AEQ
        ld      #0, ASM        ;ASM=0

        rptb    IfftStg3End-1   ;(N/8)*36+3

;!!!!! rptb occurs here
; Butterfly1
        dld     *ar3, A         ;A=QR                           QR
        dld     *ar2, B         ;B=PR                           PR
        dsub    *ar3, B         ;B=PR-QR                        QR
        sth     B, ASM, *ar3+   ;QRH=(PR-QR)/2                  QR
        stl     B, ASM, *ar3+   ;QRL=(PR-QR)/2                  QI
        add     A, 1, B         ;B=PR+QR
        sth     B, ASM, *ar2+   ;PRH=(PR+QR)/2                  PR
        stl     B, ASM, *ar2+   ;PRL=(PR+QR)/2                  PI
        dld     *ar3, A         ;A=QI                           QI
        dld     *ar3, B         ;B=QI                           QI
        dadd    *ar2, B         ;B=PI+QI                        PI
        sth     B, ASM, *ar2+   ;PI=(PI+QI)/2                   PI
        stl     B, ASM, *ar2+   ;PI=(PI+QI)/2                   PR+1
        sub     A, 1, B         ;B=PI-QI
        sth     B, ASM, *ar3+   ;QI=(PI-QI)/2                   QI
        stl     B, ASM, *ar3+   ;QI=(PI-QI)/2                   QR+1
; Butterfly2
;===== QR*W (Q31) =====
        ld      #0, A
        macsu   *ar4-, *ar3+, A ;QRH*WL                         QRL WH
        macsu   *ar3-, *ar4, A  ;QRH*WL + QRL*WH
        ld      A, -16, A       ;A>>16
        mac     *ar4+, *ar3+, A ;A=QR*W                         QR WL
        sth     A, *ar5+        ;Itempdw1=QR*W for later use
        stl     A, *ar5-
;======================
        mar     *ar3+           ;point to QI                    QI
;===== QI*W (Q31) =====
        ld      #0, B           ;QIH*WL                         QIL WH
        macsu   *ar4-, *ar3+, B ;QIH*WL + QIL*WH
        macsu   *ar3-, *ar4, B  ;A>>16
        ld      B, -16, B       ;A=QI*W                         QI WL
        mac     *ar4+, *ar3-, B ;A=QI*W                         QI
        sth     B, *ar6+        ;Itempdw2=QI*W for later use
        stl     B, *ar6-
;======================
        mar     *ar3-           ;point to QR again              QR
        sub     B, A            ;A=QR*W - QI*W
        dadd    *ar2, A         ;A=PR+(QR*W - QI*W)             PR
        dld     *ar2, B         ;B=PR                           PR
        sth     A, ASM, *ar2+   ;PRH'=(PR+(QR*W - QI*W))/2      PR
        stl     A, ASM, *ar2+   ;PRL'=(PR+(QR*W - QI*W))/2      PI
        sub     B, A            ;A=(QR*W - QI*W)
        sub     A, B            ;B=PR-(QR*W - QI*W)
        sth     B, ASM, *ar3+   ;QRH'=(PR-(QR*W - QI*W))/2      QR
        stl     B, ASM, *ar3+   ;QRL'=(PR-(QR*W - QI*W))/2      QI
        dld     *ar5, B         ;B=QR*W
        dadd    *ar6, B         ;B=QR*W + QI*W
        dadd    *ar2, B         ;B=PI+(QR*W + QI*W)             PI
        dld     *ar2, A         ;A=PI                           PI
        sth     B, ASM, *ar2+   ;PIH'=(PI+(QR*W + QI*W))/2      PI
        stl     B, ASM, *ar2+   ;PIH'=(PI+(QR*W + QI*W))/2      PR+1
        sub     A, B            ;B=(QR*W + QI*W)
        sub     B, A            ;A=PI-(QR*W + QI*W)
        sth     A, ASM, *ar3+   ;QIH'=(PI-(QR*W + QI*W))/2      QI
        stl     A, ASM, *ar3+   ;QIL'=(PI-(QR*W + QI*W))/2      QR+1
; Butterfly3
        dld     *ar3+, A        ;A=QR                           QI
        dld     *ar2+, B        ;B=PR                           PI
        dsub    *ar3, B         ;B=PR-QI                        QR
        dadd    *ar2-, A        ;A=PI+QR                        PR
        sth     B, ASM, *ar2+   ;PRH'=(PR-QI)/2                 PR
        stl     B, ASM, *ar2+   ;PRL'=(PR-QI)/2                 PI

⌨️ 快捷键说明

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