📄 cfft32c.lst
字号:
1 00000088 1E8A MOVL *--XAR2,ACC ; QR':=(PR-QI)/2 PI QR
1 00000089 DA02 ADDB XAR2,#2 ; PI QI
1
1 0000008a 06C6 MOVL ACC,*XAR6 ; ACC:=PI PI QI
1 0000008b FF40 SFR ACC,#1 ; ACC:=PI/2 PI QI
1 0000008c A0AB MOVL P,XAR5 ; P=QR PI QI
1 0000008d 11AC SUBL ACC,P<<PM ; ACC=(PI-QR)/2 PI QI
1 0000008e 1E86 MOVL *XAR6++,ACC ; ACC:=(PI-QR)/2 PR+1 QI
1 0000008f 07AB ADDL ACC,P ; ACC:=(PI+QR)/2 PR+1 QI
TMS320C2000 COFF Assembler PC Version 3.06 Fri Nov 07 10:50:04 2003
Tools Copyright (c) 1996-2002 Texas Instruments Incorporated
cfft32c.asm PAGE 12
1 00000090 1E82 MOVL *XAR2++,ACC ; QI':=(PI+QR)/2 PR+1 QR+1
1
480 00000091 P3BY4I ; AR7 at end, Use *0+ modify
1 ; - PR QR
1 00000091 06C6 MOVL ACC,*XAR6 ; ACC=PR - PR QR
1 00000092 FF40 SFR ACC,#1 ; ACC=PR/2 - PR QR
1 00000093 5667 QMPYL P,XT,*XAR2 ; PREG=W*QR/2 W*QR/2 PR QR
00000094 00C2
1 00000095 07AB ADDL ACC,P ; ACC=(PR+W*QR)/2 W*QR/2 PR QR
1 00000096 A9A5 MOVL XAR5,P ; XAR5=W*QR/2 W*QR/2 PR QR
1 00000097 5667 QMPYL P,XT,*+XAR2[2] ; ACC=(PR+W*QR)/2 W*QI/2 PR QR
00000098 00D2
1 00000099 03AB SUBL ACC,P ; ACC=(PR-W*QI+W*QR)/2 W*QI/2 PR QR
1 0000009a 1E82 MOVL *XAR2++,ACC ; QR'=(PR-W*QI+W*QR)/2 W*QI/2 PR QI
1 0000009b FF54 NEG ACC ; ACC=-(PR-W*QI+W*QR)/2 W*QI/2 PR QI
1 0000009c 5601 ADDL *XAR6++,ACC ; PR'=(PR+W*QI-W*QR)/2 W*QI/2 PI QI
0000009d 0086
1
1 0000009e 06C6 MOVL ACC,*XAR6 ; ACC=PI W*QI/2 PI QI
1 0000009f FF40 SFR ACC,#1 ; ACC=PI/2 W*QI/2 PI QI
1 000000a0 07AB ADDL ACC,P ; ACC=(PR+W*QI)/2 W*QI/2 PI QI
1 000000a1 07A5 ADDL ACC,XAR5 ; ACC=(PI+W*QI+W*QR)/2 W*QR/2 PI QI
1 000000a2 77B2 NOP *,ARP2
1 000000a3 1EBB MOVL *0++,ACC ; QI'=(PI+W*QI+W*QR)/2 W*QR/2 PI QR+1
1 000000a4 FF54 NEG ACC ; ACC=-(PI+W*QI+W*QR)/2 W*QR/2 PI QR+1
1 000000a5 5601 ADDL *XAR6,ACC ; PI'=(PI-W*QI-W*QR)/2 W*QR/2 PI QR+1
000000a6 00C6
1 000000a7 77BB NOP *0++ ; W*QR/2 PR+1 QR+1
481 000000a8 0009 BANZ STAGE3_LP,AR1--
000000a9 FFB6
482
483 ;--------------------------------------------------------
484 ; Stage 4 to LOG2(N) - Using BFLY Macro
485 ;--------------------------------------------------------
486 ; Initialisation
487 ; 1. Initialise the Butterfly loop(BLC), Group loop(GLC) & Stage loop counter(SLC)
488 ; 2. Initialise the Data offset(DOST) and twiddle factor offset (TOST)
489 000000aa 5603 MOV ACC,*+XAR7[4]<<12 ; AH=(N/16)
000000ab 0CE7
490 000000ac 9741 MOV *-SP[GLCB],AH ; GLCB=N/16
491 000000ad 9743 MOV *-SP[GLC],AH ; GLC=N/16
492 000000ae 56BF MOVB *-SP[BLC],#8,UNC; BLC=8
000000af 0842
493
494 ; Twiddle factor offset
495 000000b0 FF30 LSL ACC,#1
496 000000b1 2DA8 MOV T,AH ; T=N/8
497 000000b2 DF0D ADDB XAR7,#13
498 000000b3 12C7 MPY ACC,T,*XAR7 ; ACC=ratio*N/8
499 000000b4 DF8D SUBB XAR7,#13
500 000000b5 9645 MOV *-SP[TOST],AL ; TOST=ratio*N/8
501
502 000000b6 85EF MOV ACC,*+XAR7[5] ; ACC=nrstage
503 000000b7 1903 SUB ACC,#3 ; ACC=nrstage-3
504 000000b8 9644 MOV *-SP[SLC],AL ; SLC=nrState-3
TMS320C2000 COFF Assembler PC Version 3.06 Fri Nov 07 10:50:04 2003
Tools Copyright (c) 1996-2002 Texas Instruments Incorporated
cfft32c.asm PAGE 13
505 000000b9 56BF MOVB *-SP[DOST],#32,UNC ; DOST=32
000000ba 2046
506
507 000000bb 5603 MOV ACC,*+XAR7[4]<<15 ; AH=N/2
000000bc 0FE7
508 000000bd DF0D ADDB XAR7,#13
509 000000be 2DC7 MOV T,*XAR7 ; T=ratio
510 000000bf DF8D SUBB XAR7,#13
511 000000c0 12A8 MPY ACC,T,AH ; ACC=ratio*N/2
512 000000c1 07D7 ADDL ACC,*+XAR7[2] ;
513 000000c2 1E49 MOVL *-SP[WRWIOST],ACC ; WRWIOST=tfptr+ratio*N/2 ----> COS(Angle)
514
515
516 000000c3 SLP: ; Stage loop
517 000000c3 C4C7 MOVL XAR6,*XAR7 ; XAR6=ipcbptr -----> P
518 000000c4 06C7 MOVL ACC,*XAR7 ; ACC=ipcbptr
519 000000c5 8146 ADD ACC,*-SP[DOST] ; ACC=ipcbptr+DOST
520 000000c6 86A9 MOVL XAR2,ACC ; XAR2->ipcbptr+DOST -----> Q
521
522 000000c7 5845 MOVZ AR0,*-SP[TOST] ; AR0=TOST
523
524
525 000000c8 GLP: ; Group loop
526 000000c8 8249 MOVL XAR3,*-SP[WRWIOST]
527 000000c9 8AD7 MOVL XAR4,*+XAR7[2] ; XAR4=tfptr ---> SIN(Angle)
528
529 000000ca 5942 MOVZ AR1,*-SP[BLC] ; AR1=BLC
530 000000cb D981 SUBB XAR1,#1
531 000000cc BLP: ; Butterfly loop
532 000000cc BFLY 7
1 ; - PR QR WR WI
1 000000cc 87C3 MOVL XT,*XAR3 ; XT=WR WR PR QR WR WI
1 000000cd 77BB NOP *0++ ; WR PR QR WR+n WI
1 000000ce 5667 QMPYL P,XT,*XAR2++ ; P=QR*WR WR PR QI WR+n WI
000000cf 0082
1 000000d0 5663 QMPYL ACC,XT,*,ARP4 ; ACC=QI*WR WR PR QI WR+n WI
000000d1 00B4
1 000000d2 A948 MOVL *-SP[TEMP],P ; TEMP=QR*WR WR PR QI WR+n WI
1
1 000000d3 87BB MOVL XT,*0++ ; XT=WI WR PR QI WR+n WI+n
1 000000d4 5667 QMPYL P,XT,*--XAR2 ; P=WI*QR WR PR QR WR+n WI+n
000000d5 008A
1 000000d6 03AB SUBL ACC,P ; ACC=(QI*WR-QR*WI) WR PR QR WR+n WI+n
1
1 .if(TF_QFMAT==Q30)
1 000000d7 FF30 LSL ACC,#1 ; ACC=(QI*WR-QR*WI) (Q30)
1 .endif
1
1 000000d8 83A9 MOVL XAR5,ACC ; XAR5=(QI*WR-QR*WI) (Q30)
1
1 000000d9 5663 QMPYL ACC,XT,*+XAR2[2]; ACC=WI*QI WR PR QR WR+n WI+n
000000da 00D2
1 000000db 0748 ADDL ACC,*-SP[TEMP] ; ACC=(QR*WR+QI*WI) WR PR QR WR+n WI+n
1
1 .if(TF_QFMAT==Q30)
TMS320C2000 COFF Assembler PC Version 3.06 Fri Nov 07 10:50:04 2003
Tools Copyright (c) 1996-2002 Texas Instruments Incorporated
cfft32c.asm PAGE 14
1 000000dc FF30 LSL ACC,#1 ; ACC=(QR*WR+QI*WI) in Q30
1 .endif
1
1 000000dd A3C6 MOVL P,*XAR6 ; P=PR WR PR QR WR+n WI+n
1 000000de 10AC ADDL ACC,P<<PM ; ACC=(PR+QR*WR+QI*WI)/2 WR PR QR WR+n WI+n
1 000000df 1E86 MOVL *XAR6++,ACC ; PR'=(PR+QR*WR+QI*WI)/2 WR PI QR WR+n WI+n
1
1 000000e0 5641 SUBL P,ACC ; P=(PR-QR*WR-QI*WI)/2 WR PI QR WR+n WI+n
000000e1 00AB
1 000000e2 A982 MOVL *XAR2++,P ; QR'=(PR-QR*WR-QI*WI)/2 WR PI QI WR+n WI+n
1
1 000000e3 A0A9 MOVL ACC,XAR5 ; ACC=(QI*WR-QR*WI)/2 WR PI QI WR+n WI+n
1 000000e4 A3C6 MOVL P,*XAR6 ; P=PI WR PI QI WR+n WI+n
1 000000e5 10AC ADDL ACC,P<<PM ; ACC=(PI+QI*WR-QR*WI)/2 WR PI QI WR+n WI+n
1 000000e6 1E86 MOVL *XAR6++,ACC ; (PI+QI*WR-QR*WI)/2 WR PR+1 QI WR+n WI+n
1
1 000000e7 5641 SUBL P,ACC ; P=(PI-QI*WR+QR*WI)/2 WR PR+1 QI WR+n WI+n
000000e8 00AB
1 000000e9 A982 MOVL *XAR2++,P ; QI'=(PI-QI*WR+QR*WI)/2 WR PR+1 QR+1 WR+n WI+n
533 000000ea 0009 BANZ BLP,AR1-- ; Butterfly loop
000000eb FFE2
534
535 ; Operations performed between the group
536 ; 1. Manuplating the P & Q pointer to point to the next group
537 ; 2. Reinitialising the WI and WR twiddle factor pointer
538 ; 3. Decrementing the Group Count by 1, till all the group in the stage is computed
539 ; 4. Reinitialising the Butterfly loop index for next group
540 ; ARP=AR2
541 000000ec 0E46 MOVU ACC,*-SP[DOST] ; ACC=DOST
542 000000ed 5601 ADDL XAR6,ACC
000000ee 00A6
543 000000ef 5601 ADDL XAR2,ACC
000000f0 00A2
544 000000f1 0B43 DEC *-SP[GLC]
545 000000f2 EDD6 BF GLP,NEQ ; Group Loop
546
547 ; Operation Performed, between the stage
548 ; 1. Mutiply the data offset by 2
549 ; 2. Divide the Group count by 2
550 ; 3. Divide the Twiddle offset by 2
551 ; 4. Multiply the butterfly count by 2
552 ; 5. Decrementing the stage count by 1, till all the stage gets over
553 ; 6. Reinitialising the P & Q data pointer to the first group of next stage
554 000000f3 5603 MOV ACC,*-SP[DOST]<<1
000000f4 0146
555 000000f5 9646 MOV *-SP[DOST],AL ; DOST=DOST*2
556
557 000000f6 5603 MOV ACC,*-SP[BLC]<<1
000000f7 0142
558 000000f8 9642 MOV *-SP[BLC],AL ; BLC=BLC*2
559
560 000000f9 5603 MOV ACC,*-SP[TOST]<<15
000000fa 0F45
561 000000fb 9745 MOV *-SP[TOST],AH ; TOST=TOST/2
562
TMS320C2000 COFF Assembler PC Version 3.06 Fri Nov 07 10:50:04 2003
Tools Copyright (c) 1996-2002 Texas Instruments Incorporated
cfft32c.asm PAGE 15
563 000000fc 5603 MOV ACC,*-SP[GLCB]<<15
000000fd 0F41
564 000000fe 9741 MOV *-SP[GLCB],AH ; GLCB=GLCB/2
565 000000ff 9743 MOV *-SP[GLC],AH ; GLC=GLCB/2
566
567 00000100 0B44 DEC *-SP[SLC]
568 00000101 EDC2 BF SLP,NEQ ; Stage loop
569
570 00000102 FF69 SPM 0 ; SPM set to 0
571
572 00000103 FE8A SUBB SP,#FFT_LOCAL_FRAME ; Clear local frame
573 00000104 82BE POP XAR3 ; Context Restore
574 00000105 86BE POP XAR2
575 00000106 8BBE POP XAR1
576 00000107 0006 LRETR
577
578
579
580
No Assembly Errors, No Assembly Warnings
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -