__qmpy32by16(long src32,int src16,int q)汇编源码如下:
long __qmpy32by16(long src32, int src16, int q);
CLRC OVM ;Extended precision DSP Q math. Different code is generated based on the value of q.
MOV T, src16 + 0
MPYXU P, T, src32 + 0
MPY P, T, src32 + 1
If q = 31, 30: SPM q − 30
SFR ACC, #46 − q
ADDL ACC, P
If q = 29 through 14: SPM 0
SFR ACC, #16
ADDL ACC, P
SFR ACC, #30 − q
If q = 13 through 0: SPM 0
SFR ACC, #16
ADDL ACC, P
SFR ACC, #16
SFR ACC, #14 – q
这里有一个疑问,就是这一句MPYXU P, T, src32 + 0,实际在CCS上看到的的汇编并不是P寄存器,而是ACC!相关的指令也对着指令集上的解释学习了,最后自己的理解是ACC=(ACC>>15)+(P<<1) ; 这里ACC=src32*src16, P=src16*(src32+1) ;为什么要加1???
但是实际上这个内部定义函数的结果不应该是Q15=Q0*Q30<<(46-31)吗???
在eQEP源码中q=31
求解答,我的理解是不是错的????谢谢!