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

📄 macrosi.asm

📁 CCS3.3自带的TI 5400系列DSP的dsplib文件。文档说明可以在TI公司网站上下载。
💻 ASM
📖 第 1 页 / 共 2 页
字号:
*        PR'= PR + (W*QR - W*QI) = PR + W * QR - W * QI        (<- AR2)   *
*        QR'= PR - (W*QR - W*QI) = PR - W * QR + W * QI        (<- AR3)   *
*        PI'= PI + (W*QI + W*QR) = PI + W * QI + W * QR        (<- AR2+1) *
*        QI'= PI - (W*QI + W*QR) = PI - W * QI - W * QR        (<- AR3+2) *
*                                                                         *
*  version 0.99    from Manfred Christ     update: 2. May. 94             *
*                                                                         *
***************************************************************************

||    MPY   *Q+,A         ;A   =  QR*W                    PR   QI
      MVMM  AR4,AR0       ;Index = 2
      MAS   *Q-,A         ;A  := (W*QR - W*QI)            PR   QR
      ADD   *P,16,A,B     ;B  := (PR+(W*QR - W*QI))       PR   QR
      ST    B,*P    ;<<ASM;PR':= (PR+(W*QR - W*QI))/2     PR   QR
||    SUB   *P+,B         ;B  := (PR-(W*QR - W*QI))       PI   QR
      ST    B,*Q    ;<<ASM;QR':= (PR-(W*QR - W*QI))/2
||    MPY   *Q+,A         ;A  := W*QR                     PI   QI
      MAC   *Q,A          ;A  := (W*QI + W*QR)            PI   QI
      ADD   *P,16,A,B     ;B  := (PI+(W*QI + W*QR))       PI   QI
      ST    B,*P          ;PI':= (PI+(W*QI + W*QR))/2     PI   QI
||    SUB   *P+,B         ;B  := (PI-(W*QI + W*QR))       PR+1 QI
      ST    B,*Q+0%       ;QI':= (PI-(W*QI + W*QR))/2     PR+1 QI+1
***************************************************************************
*                                                                         *
*     MACRO 'PBY2I'    number of words/number of cycles: 6                *
*                                                                         *
*        PR'=(PR-QI)/2      PI'=(PI+QR)/2                                 *
*        QR'=(PR+QI)/2      QI'=(PI-QR)/2                                 *
*                                                                         *
*  version 0.99    from Manfred Christ     update:  2. May. 94            *
*                                                                         *
***************************************************************************
;                                         (contents of register after exec.)
;                                                     AR2      AR3
;                                                     ---      ---
||    LD    *P, A           ; A   :=     PR           PR       QI
; rmp ADD   *P,A,B	    ; B   := (PR+QI)	      PR       QR
; rmp: 8/31/98 corrected following ADD instruction
      SUB   *Q,16,A,B	    ; B   := (PR-QI)	      PR       QI
      ST    B,*P+           ; PR' := (PR-QI)/2        PI       QI
||    ADD   *Q-,B           ; B   := (PR+QI)          PI       QR
      ST    B,*Q            ; QR' := (PR+QI)/2        PI       QR
||    LD    *Q+,A           ; A   := QR               PI       QI

; rmp ADD   *P,A,B	    ; B   := (PI+QR)	      PI       QI
; rmp 8/31/98 corrected following ADD instruction

      ST    A,*Q	    ; Dummy Store
||    SUB   *P, B	    ; B   := (PI-QR)	      PI       QI
      ST    B,*Q+           ; QI' := (PI-QR)/2        PI       QR+1
||    ADD   *P,B            ; B   := (PI+QR)	      PI       QR+1

      ST    B,*P+           ; PI' := (PI+QR)/2        PR+1     QR+1

***************************************************************************
*                                                                         *
*     MACRO requires   number of words/number of cycles: 9.5              *
*                                                                         *
*  version 0.99    from: Manfred Christ   update:  2. May. 94             *
*                                                                         *
*   ENTRANCE IN THE MACRO: AR2->PR,PI                                     *
*                          AR3->QR,QI                                     *
*                          TREG=W=COS(45)=SIN(45)                         *
*                                                                         *
*       EXIT OF THE MACRO: AR2->PR+1,PI+1                                 *
*                          AR3->QR+1,QI+1                                 *
*                                                                         *
*        PR'= PR - (W*QR + W*QI) = PR - W * QR - W * QI        (<- AR1)   *
*        QR'= PR + (W*QR + W*QI) = PR + W * QR + W * QI        (<- AR2)   *
*        PI'= PI - (W*QI - W*QR) = PI - W * QI + W * QR        (<- AR1+1) *
*        QI'= PI + (W*QI - W*QR) = PI + W * QI - W * QR        (<- AR1+2) *
*                                                                         *
* BK==0 !!!!!                                                             *
*                                                                         *
***************************************************************************
;                                                           AR2  AR3
;                                                           ---  ---
||    MPY   *Q+, A       ;A  :=  W*QR                     PR   QI
      MVMM  AR1,AR0        ;Index = 9
      MAC   *Q-,A          ;A  := (W*QR + W*QI)             PR   QR
      ADD   *P,16,A,B      ;B  := (PR+(W*QR + W*QI))        PR   QR
      ST    B,*Q+     ;<<ASM;QR':= (PR+(W*QR + W*QI))/2     PR   QI
||    SUB   *P,B           ;B  := (PR-(W*QR + W*QI))	    PR   QI
      ST    B,*P+    ;<<ASM;PR':= (PR-(W*QR + W*QI))/2      PI   QI
||    MPY   *Q,B           ;B  := W*QI,  		    PI   QI
      SUB   B,1,A          ;A  := (W*QR - W*QI)             PI   QI
      ADD   *P,16,A,B      ;B  := (PI+(W*QR - W*QI))        PI   QI
      ST    B,*P      ;<ASM;PI':= (PI+(W*QR - W*QI))/2      PI   QI
||    SUB   *P+0%,B        ;B  := (PI-(W*QR - W*QI))        PR+1 QI
      STH   B,ASM,*Q+0%    ;QI':= (PI-(W*QR - W*QI))/2      PR+1 QR+1
end?  .set  $-1


      STM   #-2,AR0        ;Index used in stdmacro macro



      .endm

;****************************************************************************
; macro : laststag
;----------------------------------------------------------------------------

laststag .macro  stage,sin,cos
;         .global STAGE:stage:,end?
STAGE:stage: .set $

	ld	*sp(DATA),a
	stlm	a, ar2		; ar2 -> DATA
	add	#N,a
	stlm	a, ar3		; ar3 -> DATA+(offset=N)
      stm   #cos,ar4         ; start of cosine in stage 'stg'
      stm   #sin,ar5         ; start of sine in stage   'stg'
      buttfly N/2            ; execute N/2 butterflies
      .endm

;***************************************************************************
; macro : stdmacro
;---------------------------------------------------------------------------

stdmacro .macro  stage,l1,l2,idx,sin,cos
;         .global STAGE:stage:,end?
STAGE:stage: .set $

	ld	*sp(DATA),a
	stlm	a,ar2		; ar2 -> DATA
	add	#idx,a		; ar3 -> DATA+(offset=idx)
	stlm	a,ar3

      stm   #l1-1,ar1        ; outer loop counter
      stm   #cos,ar6         ; start of cosine in stage 'stg'
      stm   #sin,ar7         ; start of sine in stage 'stg'

loop? mvmm  ar6,ar4          ; start of cosine in stage 'stg'
      mvmm  ar7,ar5          ; start of sine in stage 'stg'

      buttfly l2             ; execute l2 butterflies

      mar   *+ar2(idx)
      banzd loop?,*ar1-
      mar   *+ar3(idx)
      .endm

;***************************************************************************
; macro: buttfly
;
; Improved radix-2 butterfly code from 9 to 8 cycles per iteration. The new
; butterfly uses AR0 for indexing and the loop is unrolled such that one butterfly
; is implemented outside the loop.
;---------------------------------------------------------------------------

buttfly .macro num          ;             (contents of register after exec.)

      .asg  AR2, P
      .asg  AR3, Q
      .asg  AR4,WR
      .asg  AR5,WI
      
;X    STM  #-2,AR0          ; index = -2
      STM  #:num:-3,BRC     ; execute startup + num-3 times general BUTTFLY
;                                                         AR2  AR3  AR4  AR5
; takes 17 words-/cycles (including RPTB)                 ---  ---  ---  ---
      LD   *P,16,A        ;A  :=  PR                      PR   QR   WR   WI
      SUB  *Q,16,A,B      ;B  :   PR-QR                   PR   QR   WR   WI
      ST   B,*Q     ;<<ASM;QR':= (PR-QR)/2
||    ADD  *Q+,B          ;B  := (PR+QR)                  PR   QI   WR   WI
      ST   B,*P+    ;<<ASM;PR':= (PR+QR)/2
||    LD   *Q,A     ;<<16 ;A  :=  QI                      PI   QI   WR   WI
      ADD  *P,16,A,B      ;B  := (PI+QI)                  PI   QI   WR   WI
      ST   B,*P     ;<<ASM;PI':= (PI+QI)/2
||    SUB  *P+,B          ;B  := (PI-QI)                  PR+1 QR   WR   WI
      STH   B,ASM,*Q+     ;QI':= (PI-QI)/2                PR+1 QR+1 WR   WI

      MPY   *WR,*Q+,A     ;A  := QR*WR                    PR+1 QI+1 WR   WI
      MAS   *WI+,*Q-,A    ;A  := (QR*WR-QI*WI) || T=WI    PR+1 QR+1 WR   WI+1
      ADD   *P,16,A,B     ;B  := (PR+(QR*WR-QI*WI))       PR+1 QR+1 WR   WI+1
      ST    B,*P    ;<<ASM;PR':= (PR+(QR*WR-QI*WI))/2     
||    SUB   *P+,B         ;B  := (PR-(QR*WR-QI*WI))       PI+1 QR+1 WR   WI+1
      ST    B,*Q    ;<<ASM;QR':= (PR-(QR*WR-QI*WI))/2
||    MPY   *Q+,A         ;A  := QR*WI     [t=WI]         PI+1 QI+1 WR   WI+1
      MAC   *WR+,*Q,A     ;A  := (   (QR*WI+QI*WR))       PI+1 QI+1 WR+1 WI+1


      RPTBD end?-1        ;delayed block repeat
      ST    A,*Q+         ;dummy write
||    ADD   *P,B          ;B  := (PI+(QR*WI+QI*WR))       PI+1 QR+2 WR+1 WI+1
      ST    B,*P    ;<<ASM;PI':= (PI+(QR*WI+QI*WR))/2
||    SUB   *P+,B         ;B  := (PI-(QR*WI+QI*WR))       PR+2 QR+2 WR+1 WI+1
;                                                             
; Butterfly kernal with 8 instructions / 8 cycles
;
; rmp MPY   *WR,*Q+,A	  ;A  :=  QR*WR 		  PR+2 QI+2 WR+1 WI+1
; rmp reversed order in following MPY instruction



      MPY   *Q+,*WR,A	  ;A  :=  QR*WR 		  PR+2 QI+2 WR+1 WI+1
      MAS   *WI+,*Q+0%,A  ;A  := (QR*WR-QI*WI) || T=WI    PR+2 QI+1 WR+1 WI+2
      ST    B,*Q+    ;<<ASM;QI':= (PI-(QR*WI+QI*WR))/2
||    ADD   *P,B          ;B  := (PR+(QR*WR-QI*WI))       PR+2 QR+2 WR+1 WI+2
      ST    B,*P    ;<<ASM;PR':= (PR+(QR*WR-QI*WI))/2
||    SUB   *P+,B         ;B  := (PR-(QR*WR-QI*WI))       PI+2 QR+2 WR+1 WI+2
      ST    B,*Q    ;<<ASM;QR':= (PR-(QR*WR-QI*WI))/2
||    MPY   *Q+,A         ;A  := QR*WI     [t=WI]         PI+2 QI+2 WR+1 WI+2
; rmp MAS   *WR+,*Q,A	  ;A  := (   (QR*WI-QI*WR))	  PI+2 QI+2 WR+2 WI+2
; rmp reversed order in following MPY instruction
      MAC   *Q,*WR+,A	  ;A  := (   (QR*WI+QI*WR))	  PI+2 QI+2 WR+2 WI+2
      ST    A,*Q+         ;dummy write
||    ADD   *P,B          ;B  := (PI+(QR*WI+QI*WR))       PI+2 QR+3 WR+2 WI+2
      ST    B,*P    ;<<ASM;PI':= (PI+(QR*WI+QI*WR))/2
||    SUB   *P+,B         ;B  := (PI-(QR*WI+QI*WR))       PR+3 QR+3 WR+2 WI+2
end?
      MAR   *Q-
      STH   B,ASM,*Q+     ;QI':= (PI-(QR*WI+QI*WR))/2     PR+3 QR+3 WR+2 WI+2
      .endm


⌨️ 快捷键说明

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