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