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