x86内联yasm转换为x64



我有一个项目使用内联yasm来实现。现在,该项目使用openMP来并行任务,以获得更好的性能。在x86平台上,openMP无法运行,原因是x86环境没有足够的内存。所以我用x64环境编译它,它就可以运行了。但是当我使用yasm代码来优化性能时,它并不能很好地工作。(yasm的代码是由x86环境编写的。)

我搜索了所有关于它的信息,但找不到任何有用的信息来解决这个问题。

谁能告诉我解决这个问题的方法。我想看一些有关系信息的文件。

谢谢你的帮助。

如果没有您的代码,我的最佳猜测是您应该阅读AMD64 ABI的这篇文章,并参阅x64平台中的调用约定标准。我认为这应该对你有用。正如该文件所说,您必须按如下方式传递参数(请注意,您必须首先使用ABI标准中描述的方法对参数进行分类):

  1. 如果类是MEMORY,则在堆栈上传递参数
  2. 如果类是INTEGER,则使用序列%rdi%rsi%rdx%rcx%r8%r9的下一个可用寄存器
  3. 如果类是SSE,则使用下一个可用的矢量寄存器,寄存器按%xmm0%xmm7的顺序获取

最新更新