This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于DSP线性汇编的问题



各位高手帮忙看一下吧,有关线性汇编的问题,谢谢啦

基本的C程序如下,实现的功能为读取length长度的value数据,寻找最大值,将其其存至value数据的第一个数。为冒泡排序的一部分。

void Sorting(UInt8 value[], int length)

{

       int cntr;

       UInt8    maxValue;

       maxValue = value[0];

       for (cntr = 1; cntr < length; cntr++)

       {

              if (value[cntr] > maxValue)

              {

                     maxValue = value[cntr];

              }

       }

       value[0] = maxValue;

}

线性汇编程序为:

       .sect     ".text:_sortingASMNew"

       .global   _sortingASMNew

_sortingASMNew:   .cproc  value, length

              .no_mdep

              .reg tempvalue, absvalue, maxvalue

              .reg cntr, ifvalue, addr, tempmax

                                   length, cntr

              MV               value, addr

              LDB             *addr++, maxvalue

              ABS             maxvalue, maxvalue

              MV               maxvalue, tempmax

LOOP:  .trip        100

              LDB.D1              *addr++, tempvalue

              CMPGT.L1  maxvalue, tempvalue , ifvalue

              NOP

              [ifvalue] MV.L1        tempvalue, maxvalue

              [cntr]     ADD.L2       -1, cntr, cntr

              [cntr]     B.S2             LOOP

              STB              maxvalue, *value++

       .endproc

在循环中,.L1单元使用了两次 ,所以最小迭代间隔为2

我希望能将最小迭代间隔变为1,想到的方法有两种

(1) MV指令也可以使用.S和.D运算单元,将线性汇编中[ifvalue] MV.L1     tempvalue, maxvalue语句变为[ifvalue] MV.S1      tempvalue, maxvalue希望使最小迭代间隔变为1。但是查看相关的.asm文件,获得的流水信息和loop kernel的信息此语句并没有使用.S1运算单元,仍然使用的.L1运算单元,不知道为什么?

(2) 使用MPY指令代替MV运算指令,使用.M1,将线性汇编中[ifvalue] MV.L1     tempvalue, maxvalue语句变为[ifvalue] MPY.M1        tempvalue, 1, maxvalue希望能使用.M1运算单元,使最小迭代间隔变为1。但是查看相关的.asm文件,A side使用了2个.X交叉通路,最小迭代间隔反而变成了3,不知道这里的交叉通路是怎么造成的?

想问一下各路高手这个问题怎么解决的,谢谢啦!

附件是相关图和更加详细的编译信息,供参考

线性汇编问题.docx