DSP汇编中的结构体参数传入及使用、双条件操作

2019-03-26 15:48发布

DSP汇编中的结构体参数传入及使用、双条件操作 我的板子是c6740,开发中遇到几个汇编问题求教:
1. 结构体参数传入及使用
比如一个实现简单游程编码的测试程序,如下:
struct _STREAM
{
    BYTE *buffer;
    int  size; //buffer长度
}
void encode(BYTE *pSrc, datasize, STREAM *pDstStream)
在DSP汇编中,A4接收pSrc,B4接收datasize, 问题:
--那哪个寄存器接收*pDstStream?是正常的A6接收,还是有特殊的寄存器?
--如何对结构体成员操作,如把数据存到buffer、size++等 2. 在汇编中如何写双条件判断语句啊?
如下面源程序中的!input && datasize?
while(!input && datasize)
{
    numZeros++;
    GetNextInput(input);
} 3.优化
如实现上面功能的汇编程序,因为程序需要一个字节一个字节去判断,然后进行操作,程序中有比较多的循环操作,
所以,在汇编中会出现比较多的NOP指令,这样程序性能会比较低吧?请问应该如何去提高程序性能呢? [ 本帖最后由 breeze505 于 2012-5-9 11:04 编辑 ] 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
breeze505
1楼-- · 2019-03-28 06:44
您好!我按照您的指导修改了代码如下,但是运行还是不行,麻烦帮忙再看下我哪里出错了?非常感谢
* ===================== LOOP KERNEL ============================== *
        MV                .L1                A6, A_loopcount
loop:
           LDB         .D1T1         *A4++[1], A_x1
        LDB         .D2T2         *B4++[1], B_y1
        SUB                .L1                A_loopcount, 1, A_loopcount
       
        CMPGT        .L1                A_loopcount, 6, A_tmp
        [A_tmp]        B        .S2        condition1
        [A_tmp]ADDKPC loop, B3, 4
        NOP        4       
       
        CMPGT        .L1                A_loopcount, 3, A_tmp
        [A_tmp]        B        .S2        condition2
        [A_tmp]ADDKPC loop, B3, 4
        NOP 4        
       
        CMPGT        .L1                A_loopcount, 0, A_tmp
        [A_tmp]B        .S2        condition3
        [A_tmp]ADDKPC loop, B3, 4
        NOP 4       
       
*===================== LOOP EPILOG ============================== *

        [!A_loopcount]B .S2 B3   ;return
||        MVK .S1 1,A4 ;return 1
        NOP 4

* ================= LOOP PROLOG ============================ *
condition1:
        ADD                .S1X        A_x1, B_y1, A_sum
        STB                .D2T1        A_sum, *B_s++[1]       
        [A_loopcount]         B .S2 B3
        nop        5
condition2:
        SUB                .S1X        A_x1, B_y1, A_sum
        STB                .D2T1        A_sum, *B_s++[1]
        [A_loopcount]         B .S2 B3        
        nop        5       
condition3:
        MPY                .M1x                A_x1, B_y1, A_sum       
        nop 1
        STB                .D2T1        A_sum, *B_s++[1]
        [A_loopcount]         B .S2 B3        
        nop        5       
        .end
carrotchen
2楼-- · 2019-03-28 10:33
 精彩回答 2  元偷偷看……
breeze505
3楼-- · 2019-03-28 12:41
谢谢!
因为这只是我的测试程序,我的正式程序比较长,所以写了个测试程序验证下这个结构是否能正常的执行。
DR小辛
4楼-- · 2019-03-28 17:25
_fir_bv_l:
;** --------------------------------------------------------------------------*
           MV      .L2X    A4,B23            ; |50|

           SUB     .L1X    A6,B4,A4          ; |55|
||         MVK     .S1     640,A3            ; |55|
||         MVK     .S2     664,B6            ; |55|
||         SUB     .L2     B4,B23,B7         ; |55|
||         SUB     .D2     B23,B4,B8         ; |55|
||         ADD     .D1     4,A6,A16

           CMPLT   .L1     A4,A3,A4          ; |55|
||         SUB     .S2X    B4,A6,B5          ; |55|
||         CMPLT   .L2     B8,B6,B6          ; |55|
||         MVK     .S1     0x4000,A25
||         ADD     .D1     2,A6,A5

           CMPLT   .L2     B5,14,B5          ; |55|
||         CMPLT   .L1X    B7,A3,A3          ; |55|
||         MV      .S1     A25,A17

           AND     .L2X    B5,A4,B5
||         AND     .L1X    A3,B6,A3
||         MVK     .S1     0xa0,A4

           XOR     .L2     1,B5,B5
||         XOR     .L1     1,A3,A3

           MV      .L2X    A4,B6             ; |55|

           AND     .L1X    A3,B5,A0          ; |55|
||         MV      .L2     B23,B5

   [ A0]   B       .S2     $C$L4             ; |55|
||         MV      .L1X    B4,A3
||         MV      .S1     A0,A1             ; guard predicate rewrite
|| [!A0]   LDH     .D1T1   *+A6(10),A5

   [!A1]   MV      .L2X    A17,B22
|| [!A0]   LDH     .D1T2   *+A6(2),B21

   [!A0]   MV      .L2X    A3,B20
|| [!A0]   LDH     .D1T1   *A6,A7

   [!A0]   LDH     .D1T1   *A16,A8
   [!A0]   LDH     .D1T1   *+A16(2),A9
   [!A0]   LDH     .D1T1   *+A16(4),A16
           ; BRANCHCC OCCURS {$C$L4}         ; |55|
;** --------------------------------------------------------------------------*

           SUB     .L1X    B6,1,A0
||         LDH     .D1T1   *+A6(12),A6

;*----------------------------------------------------------------------------*
;*   SOFTWARE PIPELINE INFORMATION
;*
;*      Loop source line                 : 55
;*      Loop opening brace source line   : 56
;*      Loop closing brace source line   : 72
;*      Known Minimum Trip Count         : 160                    
;*      Known Maximum Trip Count         : 160                    
;*      Known Max Trip Count Factor      : 160
;*      Loop Carried Dependency Bound(^) : 25
;*      Unpartitioned Resource Bound     : 11
;*      Partitioned Resource Bound(*)    : 13
;*      Resource Partition:
;*                                A-side   B-side
;*      .L units                     1        6     
;*      .S units                     8        7     
;*      .D units                     0        5     
;*      .M units                    12        9     
;*      .X cross paths              13*      12     
;*      .T address paths             3        5     
;*      Long read paths              0        0     
;*      Long write paths             0        0     
;*      Logical  ops (.LS)           0       13     (.L or .S unit)
;*      Addition ops (.LSD)          0        0     (.L or .S or .D unit)
;*      Bound(.L .S .LS)             5       13*   
;*      Bound(.L .S .D .LS .LSD)     3       11     
;*
;*      Searching for software pipeline schedule at ...
;*         ii = 25 Did not find schedule
;*         ii = 26 Schedule found with 1 iterations in parallel
;*      Done
;*
;*      Loop is interruptible
;*      Collapsed epilog stages       : 0
;*      Collapsed prolog stages       : 0
;*
;*      Minimum safe trip count       : 1
;*----------------------------------------------------------------------------*
$C$L1:    ; PIPED LOOP PROLOG
;** --------------------------------------------------------------------------*
$C$L2:    ; PIPED LOOP KERNEL
           LDNDW   .D2T2   *-B23(8),B25:B24  ; |58| <0,0>  ^
           NOP             1
           LDNDW   .D2T2   *-B23(24),B17:B16 ; |58| <0,2>
           LDNDW   .D2T2   *-B23(16),B19:B18 ; |58| <0,3>
           NOP             1
           SMPYHL  .M2     B24,B22,B5        ; |71| <0,5>  ^

           SHR     .S2     B24,1,B6          ; |71| <0,6>
||         SMPYHL  .M2     B25,B22,B4        ; |71| <0,6>  ^

           SMPYHL  .M1X    B16,A6,A21        ; |71| <0,7>
||         SMPYHL  .M2     B25,B21,B6        ; |71| <0,7>
||         SHR     .S2     B25,1,B5          ; |71| <0,7>
||         SSUB    .L2     B6,B5,B7          ; |71| <0,7>  ^

           SMPYHL  .M1X    B17,A5,A3         ; |71| <0,8>
||         SHR     .S2     B16,1,B25         ; |71| <0,8>
||         SMPYHL  .M2     B19,B22,B8        ; |71| <0,8>
||         SSUB    .L2     B5,B4,B4          ; |71| <0,8>  ^

           SMPYHL  .M1X    B24,A8,A4         ; |71| <0,9>
||         SHR     .S2     B19,1,B4          ; |71| <0,9>
||         SMPY    .M2     B21,B4,B5         ; |71| <0,9>  ^

           LDW     .D2T2   *B23++,B7         ; |71| <0,10>
||         SHR     .S2     B18,1,B8          ; |71| <0,10>
||         SMPYHL  .M2     B18,B22,B4        ; |71| <0,10>
||         SSUB    .L2     B4,B8,B9          ; |71| <0,10>
||         SMPY    .M1X    A8,B7,A17         ; |71| <0,10>  ^

           SMPYHL  .M1X    B19,A9,A18        ; |71| <0,11>
||         SHR     .S2     B5,15,B5          ; |71| <0,11>  ^

           SMPYHL  .M2     B17,B22,B6        ; |71| <0,12>
||         SSUB    .L2     B8,B4,B4          ; |71| <0,12>
||         SMPY    .M1X    A9,B9,A17         ; |71| <0,12>
||         SADD    .S2     B6,B5,B5          ; |71| <0,12>  ^
||         SHR     .S1     A17,15,A19        ; |71| <0,12>  ^

           SMPYHL  .M1X    B18,A16,A20       ; |71| <0,13>
||         SHR     .S2     B17,1,B8          ; |71| <0,13>
||         SMPYHL  .M2     B16,B22,B9        ; |71| <0,13>
||         SADD    .L2X    B5,A4,B5          ; |71| <0,13>  ^

           SSUB    .L2     B8,B6,B5          ; |71| <0,14>
||         SMPY    .M1X    A16,B4,A4         ; |71| <0,14>
||         SHR     .S1     A17,15,A17        ; |71| <0,14>
||         SADD    .S2X    B5,A19,B4         ; |71| <0,14>  ^

           SHR     .S1X    B7,1,A18          ; |71| <0,15>
||         SSUB    .L2     B25,B9,B6         ; |71| <0,15>
||         SADD    .S2X    B4,A18,B4         ; |71| <0,15>  ^

           SMPYHL  .M2     B7,B22,B5         ; |71| <0,16>
||         SMPY    .M1X    A5,B5,A17         ; |71| <0,16>
||         SHR     .S1     A4,15,A4          ; |71| <0,16>
||         SADD    .L2X    B4,A17,B4         ; |71| <0,16>  ^

           SMPY    .M1X    A6,B6,A19         ; |71| <0,17>
||         SADD    .L2X    B4,A20,B4         ; |71| <0,17>  ^

           SMPYHL  .M1X    B7,A7,A4          ; |71| <0,18>
||         SHR     .S1     A17,15,A17        ; |71| <0,18>
||         SADD    .L2X    B4,A4,B4          ; |71| <0,18>  ^

           SSUB    .L1X    A18,B5,A3         ; |71| <0,19>
||         SHR     .S1     A19,15,A18        ; |71| <0,19>
||         SADD    .L2X    B4,A3,B4          ; |71| <0,19>  ^

           SMPY    .M1     A7,A3,A3          ; |71| <0,20>
||         SADD    .L2X    B4,A17,B4         ; |71| <0,20>  ^
|| [ A0]   BDEC    .S1     $C$L2,A0          ; |55| <0,20>

           SADD    .L2X    B4,A21,B4         ; |71| <0,21>  ^

           SHR     .S1     A3,15,A3          ; |71| <0,22>
||         SADD    .L2X    B4,A18,B4         ; |71| <0,22>  ^

           SADD    .L2X    B4,A4,B4          ; |71| <0,23>  ^
           SADD    .L2X    B4,A3,B4          ; |71| <0,24>  ^
           STW     .D2T2   B4,*B20++         ; |71| <0,25>  ^
;** --------------------------------------------------------------------------*
$C$L3:    ; PIPED LOOP EPILOG
;** --------------------------------------------------------------------------*
           BNOP    .S1     $C$L8,5           ; |55|
           ; BRANCH OCCURS {$C$L8}           ; |55|
;** --------------------------------------------------------------------------*
$C$L4:   

           SUB     .L1     A4,1,A3
||         LDH     .D1T1   *+A5(10),A22

;*----------------------------------------------------------------------------*
$C$L5:    ; PIPED LOOP PROLOG

           SPLOOPD 11      ;33               ; (P)
||         LDH     .D1T2   *+A5(6),B22
||         SUB     .L1X    B5,8,A26
||         MVC     .S2X    A3,ILC

;** --------------------------------------------------------------------------*
$C$L6:    ; PIPED LOOP KERNEL
           LDNDW   .D1T1   *A26++(4),A17:A16 ; |57| (P) <0,0>

           SPMASK          D1
||         LDH     .D1T2   *+A5(4),B21

           SPMASK          D1
||         LDH     .D1T2   *+A5(2),B20

           SPMASK          D1,D2
||         LDH     .D1T1   *A5,A24
||         SUB     .D2     B5,16,B17

           LDNDW   .D2T2   *B17++(4),B19:B18 ; |58| (P) <0,4>

           SPMASK          D1
||         LDH     .D1T1   *A6,A23
||         SHR     .S1     A17,1,A6          ; |71| (P) <0,5>

           SPMASK          L1,D1
||         LDH     .D1T1   *+A5(8),A21
||         MV      .L1X    B5,A4
||         SHR     .S1     A16,1,A7          ; |71| (P) <0,6>
||         SMPYHL  .M1     A17,A25,A5        ; |71| (P) <0,6>

           SPMASK          D1
||         SUB     .D1     A4,24,A19
||         SMPYHL  .M2X    A16,B20,B6        ; |71| (P) <0,7>
||         SMPYHL  .M1     A16,A25,A4        ; |71| (P) <0,7>

           SMPYHL  .M1     A17,A24,A4        ; |71| (P) <0,8>
||         SSUB    .L1     A6,A5,A5          ; |71| (P) <0,8>
||         LDNDW   .D1T1   *A19++(4),A9:A8   ; |58| (P) <0,8>

           SHR     .S2     B19,1,B7          ; |71| (P) <0,9>
||         SSUB    .L1     A7,A4,A3          ; |71| (P) <0,9>

           SPMASK          L1
||         MV      .L1X    B4,A20
||         SMPYHL  .M2     B19,B21,B4        ; |71| (P) <0,10>

           SMPY    .M1     A24,A5,A5         ; |71| (P) <0,11>

           SMPYHL  .M2X    B18,A25,B16       ; |71| (P) <0,12>
||         SHR     .S2     B18,1,B9          ; |71| (P) <0,12>

           SMPYHL  .M2X    B19,A25,B9        ; |71| (P) <0,13>
||         SHR     .S1     A5,15,A5          ; |71| (P) <0,13>

           SSUB    .L2     B9,B16,B8         ; |71| (P) <0,14>
||         SMPY    .M2X    B20,A3,B9         ; |71| (P) <0,14>
||         SADD    .S1     A4,A5,A5          ; |71| (P) <0,14>
||         SMPYHL  .M1     A9,A25,A28        ; |71| (P) <0,14>

           SHR     .S2X    A8,1,B8           ; |71| (P) <0,15>
||         SMPY    .M2     B22,B8,B9         ; |71| (P) <0,15>
||         SSUB    .L2     B7,B9,B7          ; |71| (P) <0,15>
||         SMPYHL  .M1     A8,A25,A27        ; |71| (P) <0,15>

           SPMASK          L1
||         MV      .L1X    B5,A18
||         SHR     .S2     B9,15,B5          ; |71| (P) <0,16>
||         SADD    .L2X    A5,B6,B6          ; |71| (P) <0,16>
||         SMPYHL  .M2     B18,B22,B5        ; |71| (P) <0,16>

           SADD    .L2     B6,B5,B7          ; |71| (P) <0,17>
||         SMPY    .M2     B21,B7,B7         ; |71| (P) <0,17>
||         SHR     .S2X    A9,1,B6           ; |71| (P) <0,17>

           SHR     .S2     B9,15,B9          ; |71| (P) <0,18>
||         SADD    .L2     B7,B4,B4          ; |71| (P) <0,18>
||         LDW     .D1T1   *A18++,A6         ; |71| (P) <0,18>

           SHR     .S2     B7,15,B7          ; |71| (P) <0,19>
||         SSUB    .L2X    B6,A28,B16        ; |71| (P) <0,19>

           SADD    .L2     B4,B7,B4          ; |71| (P) <0,20>
||         SMPY    .M2X    A21,B16,B5        ; |71| (P) <0,20>
||         SMPYHL  .M1     A9,A21,A17        ; |71| (P) <0,20>

           SADD    .S2     B4,B5,B8          ; |71| (P) <0,21>
||         SSUB    .L2X    B8,A27,B4         ; |71| (P) <0,21>
||         SMPYHL  .M1     A8,A22,A7         ; |71| (P) <0,21>

           SADD    .L2     B8,B9,B16         ; |71| <0,22>
||         SMPY    .M2X    A22,B4,B5         ; |71| <0,22>
||         SHR     .S2     B5,15,B8          ; |71| <0,22>

           SHR     .S1     A6,1,A16          ; |71| <0,23>
||         SMPYHL  .M1     A6,A25,A6         ; |71| <0,23>

           SADD    .L1X    B16,A17,A17       ; |71| <0,24>
||         SHR     .S2     B5,15,B5          ; |71| <0,24>
||         SMPYHL  .M1     A6,A23,A3         ; |71| <0,24>

           SADD    .L1X    A17,B8,A4         ; |71| <0,25>

           SADD    .S1     A4,A7,A6          ; |71| <0,26>
||         SSUB    .L1     A16,A6,A4         ; |71| <0,26>

           SADD    .L1X    A6,B5,A4          ; |71| <0,27>
||         SMPY    .M1     A23,A4,A3         ; |71| <0,27>

           SADD    .L1     A4,A3,A4          ; |71| <0,28>
           SHR     .S1     A3,15,A3          ; |71| <0,29>
           SADD    .S1     A4,A3,A3          ; |71| <0,30>

           SPKERNEL 1,10
||         STW     .D1T1   A3,*A20++         ; |71| <0,31>

;** --------------------------------------------------------------------------*
$C$L7:    ; PIPED LOOP EPILOG
;** --------------------------------------------------------------------------*
$C$L8:   
           RETNOP  .S2     B3,5              ; |75|
           ; BRANCH OCCURS {B3}              ; |75|


请问这个怎么优化.....................................

一周热门 更多>