• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 从 ARM 组装功能返回 float 到objective-c

[复制链接]
菜鸟教程小白 发表于 2022-12-11 17:42:06 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我编写了一个汇编函数,可以在 iPhone 4(32 位代码)和 iPhone 6s(64 位代码)上正常运行。我从 Objective-c 中的调用函数传入四个 float 。

这是我用于 4 个 float 的结构,下面是函数的原型(prototype) - 可以在我的 Objective-c 代码的顶部找到。

struct myValues{    // This is a structure.  It is used to conveniently group multiple data items logically.
    float A;        // I am using it here because i want to return multiple float values from my ASM code
    float B;        // They get passed in via S0, S1, S2 etc. and they come back out that way too
    float number;
    float divisor;  //gonna be 2.0
}myValues;

struct myValues my_asm(float e, float f, float g, float h);  //  Prototype for the ASM function

在我的 Objective-c 代码中,我这样调用我的汇编函数:

myValues = my_asm(myValues.A, myValues.B, myValues.number,myValues.divisor);   // ASM function

在 iPhone 6S 上运行时,代码运行起来就像一个冠军(64 位代码)。 4 个浮点值通过 ARM 单浮点寄存器 S0-S4 从 Objective-c 代码传递到汇编代码。返回的结果也通过 S0-S4 传递。

在 iPhone 4 上运行时,代码也可以正常运行(32 位代码)。 4 个浮点值通过 ARM 单浮点寄存器 S0、S2、S4 和 S6 从 obj-c 代码传递到汇编代码(不知道为什么会跳过奇数寄存器)。代码运行良好,但返回到我的 obj-c 结构的值是垃圾。

我在哪里/如何从 ARM 32 位代码中传递浮点值,以便它们返回到 obj-c 结构中?

谢谢, 中继器357

附言下面是我的 Xcode S 文件中的汇编代码。

.ios_version_min 9, 0
.globl  _my_asm
.align  2

#ifdef __arm__
.thumb_func _my_asm
.syntax unified
.code 16

_my_asm:                   // 32 bit code
// S0 = A, S2 = B, S4 = Number, S6 = 2.0   - parameters passed in when called by the function
vadd.f32 s0, s0, s2 
vdiv.f32 s0, s0, s6   
vdiv.f32 s1, s4, s0   
vcvt.u32.f32 r0,s0
bx lr
//ret

#else
_my_asm:                  // 64 bit code
//add W0, W0, W1
; S0 = A, S1 = B, S2 = Number, S3 = 2.0  parameters passed in when called by the function
fadd s0, s0, s1  
fdiv s0, s0, s3  
fdiv s1, s2, s0  
ret

#endif



Best Answer-推荐答案


您的两个函数都没有正确返回结构。您需要了解 ARM ABI。您可以先阅读 Apple 的 iOS ABI Function Call Guide .如果在学习 ABI 后您不明白,请提出一个新问题来说明您的尝试。

HTH

关于ios - 从 ARM 组装功能返回 float 到objective-c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39811742/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap