0

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

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

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

谢谢您的帮助。

4

1 回答 1

0

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

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

...

于 2015-02-09T18:13:03.300 回答