首页 > 编程知识 正文

arm指令集和x86指令集(armv8 neon)

时间:2023-05-03 17:03:02 阅读:71131 作者:4027

ARM处理器指令集一. 苹果模拟器指令集:指令集分析i386intel通用微处理器32架构用x86_64x86架构用64位处理器i386|x86_64 x86_64是用于x86体系结构的64位处理器。 模拟器不执行arm代码,软件编译成x86可以执行的指令。 因此,生成静态库时,它会变成两个. a,一个用于在模拟器上运行,另一个用于在实际设备上运行,然后在命令中将两个. a合并为一个。

二.苹果设备指令集相关位数量指令集32位ARMARMv6、armv7、armv7s64位ARMarm64、armv8applea7处理器包括32位arm指令集(armv6

第一代、第二代iPod Touch

armv7设备iPhone3GS、iPhone4、iPhone4S;

iPad、iPad2、ipad3(thenewipad )、iPad mini;

iPod Touch 3G,iPod Touch4

armv7s设备iPhone5、iPhone5C、

ipad4(ipadwithRetinadisplay )。

http://www.Sina.com/http://www.Sina.com /设备iPhone5S、iphone6s(plus )、iPhoneSE、iphone6s(plus ) )。

iPad Air,ipad mini2(ipadminiwithretinadisplay )。

3358www.Sina.com/,ARMv8指令集arm64模拟器装置三. 苹果模拟器

(i386,x86_64 )。

设备

(armv6、armv7、armv7s、armv8、armv64 )

使用iOS模拟器时会遇到i386|x86_64。 iOS模拟器没有arm指令集,编译和执行的是x86指令集。 因此,仅在iOS设备上执行与该设备对应的arm指令集。

四.生成XCode指令集XCode二进制软件包指令集的设置为:

图. xcode设置

Xcode配置项定义注意事项Architecture是指您希望支持的指令集。 此选项指定是否编译为工程支持的指令集。

如果支持多个指令集,则会编译包含多个指令集代码的包,最终编译生成的包会变大。

Valid Architectures即将编译的指令集此选项指定可支持的指令集。 此Valid architectures列表与architectures列表的交叉点是Xcode最终生成的二进制包支持的指令集

限制可能支持的指令集的范围

33558 www.Sina.com/: valid architectures设置的支持arm的指令集为“armv7/armv7s/arm64”,对应的architectures设置的支持arm的指令集为“armv7s”

Build Active Architecture Only此编译项用于设置是否仅编译与当前使用的设备相对应的arm指令集。 使用总结:

其值设定为是;

XCode已成功连接到调试设备(必须同时满足才能正常工作)对于Xcode,请参阅x86

如果设置为Yes,则编译速度加快,仅编译当前的architecture版本

如果设置为no,则编译速度变慢,编译所有版本

arm:如果此选项设置为“是”,则即使是上一个armv7指令集设备(iPhone5、5c ),Valid Architectures和armv7

:我们将Build Active Architecture Only的值设置为YES,同时Xcode连接到手机iPhone5S以匹配指令集arm64 )。 以下五种情况总结如下。

状况architecturesvalidarchitectures结果分析状况armv7、

armv7s、

arm64armv6、

armv7s、

arm64arm64在:处取交叉ar

m64和 armv7s,但iPhone5S匹配指令集arm64,

所以:为arm64

情况②armv6、
armv7、
armv7sarmv6、
armv7s、
arm64armv7s

因为:取交集armv6和armv7s,但iPhone5S匹配指令集arm64,但同时支持armv7s,同时XCode4.5开始,就不再支持armv6指令集

所以:为arm64

情况③armv6
armv7armv6、
armv7s、
arm64armv7无交集。但是因为:ValidArchitectures支持armv7s则必然支持armv7,Architectures支持armv7,从XCode4.5开始,就不再支持armv6指令集。所以:最终生成二进制指令集armv7情况④armv6armv6、
armv7s、
arm64<br />无响应

虽然编译成功了,但是并没有任何目标生成。

因为从XCode4.5开始,就不再支持armv6指令集,所以列表中写了也是白写。

情况⑤armv7、
armv7s、
arm64armv7、
armv7serror报错生成二进制包支持的指令集编译出错error信息:

No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=arm64, VALID_ARCHS=armv7分析:当Build Active Architecture Only起作用时:连接的手机指令集匹配是由高到低(arm64 > armv7s > armv7)依次匹配的。指令集都是可以向下兼容的
比如,你的设备是armv7s指令集,那么它也可以兼容运行比armv7s版本低的指令集:armv7、armv6
xcode对armv6指令集的支持Xcode4.5起不再支持armv6。

如何选择支持的指令集

如果你的软件对安装包大小非常敏感,你可以减少安装包中的指令集数据包,而且这能达到立竿见影的效果。

很久前xcode支持的指令集是armv7/armv7s,后来改成只支持armv7后,比原来小了10MB左右。目前AppStore上的一些知名应用,比如百度地图、腾讯地图通过反汇编工具查看后,也都只支持armv7指令集。

根据向下兼容原则,armv7指令集的应用是可以正常在支持armv7s/arm64指令集的机器上运行的。

不过对于armv7s/arm64指令集设备来说,使用运行armv7应用是会有一定的性能损失,不过这种损失有多大缺乏权威统计数据,不会影响用户体验的。

建议:Valid Architectures通常Debug模式设置值为Yes,Release模式设置为No

参考链接:

1.armv6, armv7, armv7s的区别
2.Apple移动设备处理器指令集 armv6、armv7、armv7s及arm64
3.Xcode设置项之Architectures和Valid Architectures
4.iOS工程如何支持64-bit

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。