x86 inline yasm转换为x64

时间:2015-02-09 06:22:02

标签: optimization assembly x86 64-bit yasm

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

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

谁能告诉我解决问题的方法。 我希望看到一些带有关系信息的文档。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

  
      
  1. 如果类是MEMORY,则在堆栈上传递参数。
  2.   
  3. 如果类是INTEGER,则序列%rdi%rsi%rdx%rcx%r8和{{1}的下一个可用寄存器使用。
  4.   
  5. 如果类是SSE,则使用下一个可用的向量寄存器,寄存器的顺序从%r9%xmm0
  6.   

...