ARM linux gcc 中C与汇编的混合编译问题

爱是一种信仰 2010-01-13 05:29:59
最近在做AMR语音编码的优化,在ARM9+Linux环境下跑
其中需要对计算函数做一些优化,在优化L_mac时遇到了比较挠头的问题
int t0;
Word32 L_mac (Word32 L_var3, Word16 var1, Word16 var2)
{
Word32 L_var_out;
Word32 L_product;
__asm__ volatile(
"mov R3, R0\n\t"
"mul R14, R1, R2\n\t"
"mov R12, R14, lsl #1\n\t"
"add R0, R3, R12\n\t"
"mrs %[t], cpsr"
:[t]"=r"(t0)
:
);
/*
L_product = ((Word32) var1 * var2)<<1;
L_var_out = L_var3 + L_product;
*/

if (((L_var3 ^ L_product) & MIN_32) == 0)
{
if ((L_var_out ^ L_var3) & MIN_32)
{
L_var_out = (L_var3 < 0) ? MIN_32 : MAX_32;
Overflow = 1;
}
}
return (L_var_out);
}
我用内嵌汇编替代了被屏蔽的几句,之后这段代码:
if (((L_var3 ^ L_product) & MIN_32) == 0)
{
if ((L_var_out ^ L_var3) & MIN_32)
{
L_var_out = (L_var3 < 0) ? MIN_32 : MAX_32;
Overflow = 1;
}
}
应该是对溢出的判断。
我的想法是通过监控cpsr来对溢出做判断处理,从而减少耗时,
但捕获到的值都显示cpsr的c和v没有置位。

请教资深高手linux应用程序里能读cpsr能捕获到真实值吗,这种通过cpsr来判断溢出是否可行呢?
如果可行我应该怎么做呢?是要通过终端服务程序来处理溢出?谢谢!~~~
...全文
268 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
大熊猫侯佩 2010-01-13
  • 打赏
  • 举报
回复
做了优化了么???如果优化后失败,恢复原来的逻辑,然后小范围替换。

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧