首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从c调用的程序集函数被忽略。

从c调用的程序集函数被忽略。
EN

Stack Overflow用户
提问于 2018-01-14 06:31:03
回答 2查看 116关注 0票数 0

我正在调用一个名为fpow的函数,该函数在ARM汇编中实现。

代码语言:javascript
复制
extern float fpow(float x, float y);

int main()
{
    //...
    R = fpow(x, y);
    //...
}

问题是R在调用后包含x。看起来这个函数什么也没做,因为r0是返回寄存器,所以看起来像是fpow返回x。

以下是ARM组件的实现:

代码语言:javascript
复制
.globl fpow

fpow: 

  stmfd sp!, {r4, r5, r6, lr} 


  mov r4, r0 
  mov r5, r1 


  mov r1, #0 

  bl __aeabi_fcmpeq 
  ...      
  bl __aeabi_fmul 
  bl pow2 
  ldmfd sp!, {r4, r5, r6, pc} 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-14 07:43:05

你用什么选项来编译你的C语言?您使用的是-mfloat-abi=hard还是soft

如果为soft,C编译器将期望fpow返回值作为r0中的float (IEEE binary32)位模式。

调用约定不匹配将解释将第一个arg视为返回值:

如果C编译器的asm使用hard float-ABI,则第一个FP参数传递寄存器(s0)也是FP单精度返回值寄存器。如果您的手写asm是为soft float ABI编写的,它将不会修改s0

票数 2
EN

Stack Overflow用户

发布于 2018-01-14 06:40:29

你的extern声明了powf,但是你调用了(看起来实现了fpow)。修复它,使所有三个都匹配,现在我怀疑(尽管不确定)你遇到了C处理未声明函数的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48244891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档