Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ARM64在iOS上使用gas?_Android_Ios_Assembly_Gnu Assembler_Arm64 - Fatal编程技术网

Android ARM64在iOS上使用gas?

Android ARM64在iOS上使用gas?,android,ios,assembly,gnu-assembler,arm64,Android,Ios,Assembly,Gnu Assembler,Arm64,我已经将一些汇编函数移植到64位ARM上,它们在Android上运行良好,但当我尝试在Xcode中编译相同的文件时,我发现clang使用了不同的语法(与官方ARM文档不同) 我发现一些脚本可以将源文件从一种格式转换为另一种格式,但这不是理想的解决方案(当源文件包含预处理器定义时,这些脚本似乎不起作用) 我可以简单地在Xcode中使用gas,或者配置clang来接受gas语法吗?如果没有,那么clang汇编程序文档在哪里? 更新-2015年9月 这个问题似乎通过XCode 7(新的clang版

我已经将一些汇编函数移植到64位ARM上,它们在Android上运行良好,但当我尝试在Xcode中编译相同的文件时,我发现clang使用了不同的语法(与官方ARM文档不同)

我发现一些脚本可以将源文件从一种格式转换为另一种格式,但这不是理想的解决方案(当源文件包含预处理器定义时,这些脚本似乎不起作用)

我可以简单地在Xcode中使用gas,或者配置clang来接受gas语法吗?如果没有,那么clang汇编程序文档在哪里?

更新-2015年9月


这个问题似乎通过XCode 7(新的clang版本?)解决了:现在我可以导入为Android编写的程序集源文件,并且它们在编译时没有任何更改。

你很幸运。Libav团队支持一个工具,该工具接受gas语法并为苹果的汇编程序输出汇编程序。您可以在这里找到工具:

让我们用我的答案作为在Android和iOS上编写ARM64代码的一般指南。首先,我们将从寄存器()开始:

X0-X7-参数和返回值(易失性)
X8=间接结果(结构)位置(或临时注册表)
X9-X15=临时(易失性)
X16-X17-介绍调用使用寄存器(PLT、连接器)或临时寄存器
X18-平台特定用途(TLS)
X19-X28-被叫方保存的寄存器(非易失性)
X29-帧指针
X30-链路寄存器(LR)
SP-堆栈指针和零(XZR)
V0-V7、V16-V31-挥发性氖和FP寄存器
V8-V15-被调用方保存的寄存器(非易失性,编译器用于临时变量)

接下来是正确创建代码“段”的汇编程序指令:

安卓
.cpu通用+fp+simd
.text
对于每个函数,添加这3行
.section.text.MyFunctionName,“ax”,%progbits
.align 2
.键入MyFunctionName,%function

iOS(除了align指令之外,实际上不需要任何东西)
.align 2

声明公共(全局)标签

安卓
.全局MyFunctionName

iOS

.globl\u MyFunctionName这是我无法使用的脚本,它似乎只能处理没有预处理器宏的程序集源文件,我被困在第一个PRFM中:PLDL1KEEP对于Android是一个完全有效的令牌,但Xcode不喜欢它,我遇到了同样的问题;我找不到适用于iOS的有效预取语法。显然,它只区分大小写。pldl1keep小写可以。好的,我的具体问题解决了。尽管如此,我仍然找不到任何描述clang汇编程序语法的文档。Mille grazie,caro。它非常古老,也不是特定于铿锵的:“OSX汇编程序参考”,是的,它非常古老,但铿锵团队告诉我它仍然有效。这些函数必须是内联的还是真正意义上的C函数?我正在研究是否可以将汇编函数划分为一个单独的编译单元,这样您就可以使用GCC将程序集构建到一个静态库,然后仅链接到它。这些函数在一个外部源文件中定义,扩展名为.S
  adrp  x0, MyDataTable
  add   x0, x0, #:lo12:MyDataTable
  adrp  x0,MyDataTable@PAGE
  add   x0,x0,MyDataTable@PAGEOFF
  fmov d0,x30   // preserve LR
  <some code which makes function calls>
  fmov x30,d0   // restore LR