求助: 在DSP 线性汇编中可否调用C函数,如何调用?
例子:
原始C函数(经过简化)如下:
short compute(const short *x, int n)
{
int i;
sum = 0;
for (i=0;isum = sum + x[i]*x[i];
}
return sum/n;
}
除法函数如下;
short divi_compute(int a, short b){
return (short) a/b;
}
欲将其转化为汇编函数,由于汇编中没有专门的除法指令,故想在汇编函数中调用C函数,不知道可否行通,谢谢大家指点:
汇编函数如下:
.sect ".text:_compute"
.global _compute
_compute .cproc EXC, N
.no_mdep
.reg A_0, A_1, A_2, A_3, A_4, A_5, SUM, CNT_N
SHR N, 2, CNT_N
SUB CNT_N, 1, CNT_N
LOOP_compute: .trip CNT_N
LDDW *EXC++, A_1:A_0
MPY A_0, A_0, A_2
|| MPYH A_0, A_0, A_3
|| MPY A_1, A_1, A_4
|| MPYH A_1, A_1, A_5
ADD A_2, A_3, A_0
|| ADD A_4, A_5, A_1
ADD A_0, A_1, A_0
ADD SUM, A_0, SUM
[CNT_N] BDEC LOOP_compute, CNT_N
; 注:不知道如何实现 sum/n 这个功能,望大家指点
.return
.endproc