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

📄 example 3-19.asm

📁 《基于TI DSP的通用算法实现》程序代码
💻 ASM
📖 第 1 页 / 共 2 页
字号:
||      ADD2    .S2X    B7,A13,B7       ; X[i]+X[i+N2] & Y[i]+Y[i+N2]
||[!B2] SUB             B9,B14,B9       ;* reset load X[i] & Y[i] ptrs

        MPYHL   .M1     A9,A5,A14       ; (C)*(YT)
||      STW     .D2     B7,*B4++[B10]   ; XY[i] = X[i]+X[i+N2] & Y[i]+Y[i+N2]
;-
        MPYLH   .M1     A9,A5,A15       ; (S)*XT
||      LDW     .D2     *B9++[B10],B7   ;** X[i] & Y[i]
||[!B2] MV      .L2X    A2,B2           ;** reset twiddle factor counter
||[!B2] LDW     .D1     *A6++[A2],A5    ;** CS = W[IA] & W[IA+1]
||      SUB     .L1X    B4,A0,A4        ; set store X[i+N2] ptr
||      MPY     .M2     B2,1,B0         ;* move to next iteration
||[!B2] SUB             A3,A8,A3        ;* reset load X[i+N2] & Y[i+N2] ptrs
;-
        MPY     .M1     A9,A10,A13      ; (C)*XT
||[!B0] SUB             B4,B14,B4       ; reset store X[i] & Y[i] ptrs
||[ B2] SUB             B2,1,B2         ;** decrement twiddle factor counter
||      LDW     .D1     *A3++[A7],A13   ;** X[i+N2] & Y[i+N2]

        MPYH    .M1     A9,A10,A14      ; (S)*(YT)
||      SUB2    .S1X    A13,B7,A9       ;* XYT = X[i]-X[i+N2] & Y[i]-Y[i+N2]
||      ADD2    .S2X    B7,A13,B7       ;* X[i]+X[i+N2] & Y[i]+Y[i+N2]
||[!B2] SUB             B9,B14,B9       ;** reset load X[i] & Y[i] ptrs
;-
        SUB     .S1     A14,A15,A15     ; Y[i+N2] = C*YT - S*XT
||      MPYHL   .M1     A9,A5,A14       ;* (C)*(YT)
||      STW     .D2     B7,*B4++[B10]   ;* XY[i] = X[i]+X[i+N2] & Y[i]+Y[i+N2]
||[!B2] SUB     .D1     A3,A8,A3        ;** reset load X[i+N2] & Y[i+N2] ptrs
||      MV      .L2X    A4,B6           ; set store X[i+N2] ptr
||      MV      .S2     B13,B1          ; set inner loop counter
||      MV      .L1     A5,A10          ;* move to other file

        B       .S2     LOOP            ; for (i=j; i < N; i += N1)
||      ADD     .S1     A14,A13,A13     ; X[i+N2] = C*XT + S*YT
||      MPYLH   .M1     A9,A5,A15       ;* (S)*XT
||      LDW     .D2     *B9++[B10],B7   ;*** X[i] & Y[i]
||[!B2] MV      .L2X    A2,B2           ;*** reset twiddle factor counter
||[!B2] LDW     .D1     *A6++[A2],A5    ;*** CS = W[IA] & W[IA+1]
||      SUB     .L1X    B4,A0,A4        ;* set store X[i+N2] ptr
||      MPY     .M2     B2,1,B0         ;** move to next iteration

        SHR     .S2X    A13,15,B5       ; scale X[i+N2]
||      SHR     .S1     A15,15,A11      ; scale Y[i+N2]
||      MPY     .M1     A9,A10,A13      ;* (C)*XT
||[!B0] SUB     .L2     B4,B14,B4       ;* reset store X[i] & Y[i] ptrs
||[ B2] SUB     .D2     B2,1,B2         ;*** decrement twiddle factor counter
||      LDW     .D1     *A3++[A7],A13   ;*** X[i+N2] & Y[i+N2]
||      ADD     .L1X    B6,2,A12        ; set store Y[i+N2] ptr

LOOP:
        STH     .D2     B5,*B6          ; X[i+N2] = C*YT + S*XT
||      STH     .D1     A11,*A12        ; Y[i+N2] = C*YT - S*XT
||      MPYH    .M1     A9,A10,A14      ;* (S)*(YT)
||      SUB2    .S1X    A13,B7,A9       ;** XYT = X[i]-X[i+N2] & Y[i]-Y[i+N2]
||      MV      .L1     A5,A10          ;** move to other file
||      ADD2    .S2X    B7,A13,B7       ;** X[i]+X[i+N2] & Y[i]+Y[i+N2]
||[!B2] SUB     .L2     B9,B14,B9       ;*** reset load X[i] & Y[i] ptrs

        SUB     .D1     A14,A15,A15     ;* Y[i+N2] = C*YT - S*XT
||      MV      .L2X    A4,B6           ;* set store X[i+N2] ptr
||[ B1] SUB     .S2     B1,1,B1         ;** dec i lp cntr
||      MPYHL   .M1     A9,A5,A14       ;** (C)*(YT)
||      STW     .D2     B7,*B4++[B10]   ;** XY[i] = X[i]+X[i+N2] & Y[i]+Y[i+N2]
||[!B2] SUB     .S1     A3,A8,A3        ;*** reset load X[i+N2] & Y[i+N2] ptrs

  [ B1] B       .S2     LOOP            ;* for (i=j; i < N; i += N1)
||      ADD     .S1     A13,A14,A13     ;* X[i+N2] = C*XT + S*YT
||      MPYLH   .M1     A9,A5,A15       ;** (S)*XT
||      SUB     .L1X    B4,A0,A4        ;** set store X[i+N2] ptr
||      LDW     .D2     *B9++[B10],B7   ;**** X[i] & Y[i]
||[!B2] MV      .L2X    A2,B2           ;**** reset twiddle factor counter
||[!B2] LDW     .D1     *A6++[A2],A5    ;**** CS = W[IA] & W[IA+1]
||      MPY     .M2     B2,1,B0         ;*** move to next iteration

        SHR     .S2X    A13,15,B5       ;* scale X[i+N2]
||      SHR     .S1     A15,15,A11      ;* scale Y[i+N2]
||      ADD     .L1X    B6,2,A12        ;* set store Y[i+N2] ptr
||[!B0] SUB     .L2     B4,B14,B4       ;** reset store X[i] & Y[i] ptrs
||      MPY     .M1     A9,A10,A13      ;** (C)*XT
||[ B2] SUB     .D2     B2,1,B2         ;**** decrement twiddle factor counter
||      LDW     .D1     *A3++[A7],A13   ;**** X[i+N2] & Y[i+N2]
; - - - - - - - - - - - - - - - - - - - ; LOOP ENDS HERE
;-
        STH     .D2     B5,*B6          ; X[i+N2] = C*YT + S*XT
||      STH     .D1     A11,*A12        ; Y[i+N2] = C*YT - S*XT
||      MPYH    .M1     A9,A10,A14      ;* (S)*(YT)
||      SUB2    .S1X    A13,B7,A9       ;** XYT = X[i]-X[i+N2] & Y[i]-Y[i+N2]
||      MV      .L1     A5,A10          ;** move to other file
||      ADD2    .S2X    B7,A13,B7       ;** X[i]+X[i+N2] & Y[i]+Y[i+N2]
||      MV      .L2     B11,B9          ; set up load ptr to X[0] & Y[0]
;-
        SUB     .D1     A14,A15,A15     ;* Y[i+N2] = C*YT - S*XT
||      MV      .L2X    A4,B6           ;* set store X[i+N2] ptr
||      MPYHL   .M1     A9,A5,A14       ;** (C)*(YT)
||      STW     .D2     B7,*B4++[B10]   ;** XY[i] = X[i]+X[i+N2] & Y[i]+Y[i+N2]
||      SHL     .S1     A2,1,A2         ; IE << 1
||      SUB     .L1     A1,1,A1         ; decrement outer loop counter
;-
        ADD     .D1     A14,A13,A13     ;* X[i+N2] = C*XT + S*YT
||      MPYLH   .M1     A9,A5,A15       ;** (S)*XT
||      SUB     .L1X    B4,A0,A4        ;** set store X[i+N2] ptr
||      SHR     .S1     A15,15,A11      ;* scale Y[i+N2]

        SHR     .S2X    A13,15,B5       ;* scale X[i+N2]
||      ADD     .L1X    B6,2,A12        ;* set store Y[i+N2] ptr
||      MPY     .M1     A9,A10,A13      ;** (C)*XT
||[ A1] B       .S1     OUTLOOP         ; branch to next stage
;-
        STH     .D2     B5,*B6          ; X[i+N2] = C*YT + S*XT
||      STH     .D1     A11,*A12        ; Y[i+N2] = C*YT - S*XT
||      MPYH    .M1     A9,A10,A10      ;* (S)*(YT)
||      SHR     .S2     B10,1,B10       ; load index >> 1
||      SHR     .S1     A0,1,A0         ; N2 >> 1
||      MV      .L1X    B12,A6          ; reset W ptr
||      MV      .L2X    A2,B2           ; reset twiddle factor counter
;-
        MV      .L2X    A4,B6           ;* set store X[i+N2] ptr
||      LDW     .D2     *B9++[B10],B7   ; X[i] & Y[i]
||      ADD     .L1X    A7,B9,A3        ; set up load ptr to X[N2] & Y[N2]
||      LDW     .D1     *A6++[A2],A5    ; CS = W[IA] & W[IA+1]
||      SHR     .S1     A7,1,A7         ; load index >> 1
||[B2]  SUB     .S2     B2,1,B2         ; decrement twiddle factor counter
;-
        ADD     .L1     A10,A13,A13     ;* X[i+N2] = C*XT + S*YT
||      SUB     .S1     A14,A15,A15     ;* Y[i+N2] = C*YT - S*XT
||[ A1] LDW     .D1     *A3++[A7],A13   ; X[i+N2] & Y[i+N2]
||[!B2] SUB     .L2     B9,B14,B9       ; reset load X[i] & Y[i] ptrs

        SHR     .S2X    A13,15,B5       ;* scale X[i+N2]
||      SHR     .S1     A15,15,A11      ;* scale Y[i+N2]
||      ADD     .L1X    B6,2,A12        ;* set store Y[i+N2] ptr
||[!B2] SUB             A3,A8,A3        ; reset load X[i+N2] & Y[i+N2] ptrs
;-
        STH     .D2     B5,*B6          ; X[i+N2] = C*YT + S*XT
||      STH     .D1     A11,*A12        ; Y[i+N2] = C*YT - S*XT
||      SHL     .S1     A7,1,A0         ; calculating reset offset
||      MV      .S2     B11,B4          ; set up store ptr to X[0] & Y[0]
; - - - - - - - - - - - - - - - - - - - ; OUTLOOP ENDS HERE

        LDW     .D2T2   *+B15[1],  B0   ; pop CSR from SP[ 1]
||      MV              B15, A15

        LDW     .D1T1   *+A15[11], A10  ; pop A10 from SP[11]
||      LDW     .D2T2   *+B15[10], B10  ; pop B10 from SP[10]
;-
        LDW     .D1T1   *+A15[9],  A11  ; pop A11 from SP[ 9]
||      LDW     .D2T2   *+B15[8],  B11  ; pop B11 from SP[ 8]

        LDW     .D1T1   *+A15[7],  A12  ; pop A12 from SP[ 7]
||      LDW     .D2T2   *+B15[6],  B12  ; pop B12 from SP[ 6]

        LDW     .D1T1   *+A15[5],  A13  ; pop A13 from SP[ 5]
||      LDW     .D2T2   *+B15[4],  B13  ; pop B13 from SP[ 4]
;-
        LDW     .D2T2   *+B15[2],  B14  ; pop B14 from SP[ 2]
||      LDW     .D1T1   *+A15[3],  A14  ; pop A14 from SP[ 3]
||      B               B3

        LDW     .D2T1   *++B15[12],A15  ; pop A15 from SP[12]

        MVC             B0, CSR

        NOP             3
;-

* ========================================================================= *
*    End of file: dsp_radix2.asm                                            *
* ------------------------------------------------------------------------- *

⌨️ 快捷键说明

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