我有一个项目使用内联yasm来实现。现在,该项目使用openMP来并行任务,以获得更好的性能。在x86平台上,openMP无法运行,原因是x86环境没有足够的内存。所以我用x64环境编译它,它就可以运行了。但是当我使用yasm代码来优化性能时,它并不能很好地工作。(yasm的代码是由x86环境编写的。)
我搜索了所有关于它的信息,但找不到任何有用的信息来解决这个问题。
谁能告诉我解决这个问题的方法。我想看一些有关系信息的文件。
谢谢你的帮助。
如果没有您的代码,我的最佳猜测是您应该阅读AMD64 ABI的这篇文章,并参阅x64平台中的调用约定标准。我认为这应该对你有用。正如该文件所说,您必须按如下方式传递参数(请注意,您必须首先使用ABI标准中描述的方法对参数进行分类):
- 如果类是MEMORY,则在堆栈上传递参数
- 如果类是INTEGER,则使用序列
%rdi
、%rsi
、%rdx
、%rcx
、%r8
和%r9
的下一个可用寄存器- 如果类是SSE,则使用下一个可用的矢量寄存器,寄存器按
%xmm0
到%xmm7
的顺序获取