【问题标题】:x86 inline yasm convert to x64x86 内联 yasm 转换为 x64
【发布时间】:2015-02-09 06:22:02
【问题描述】:

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

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

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

感谢您的帮助。

【问题讨论】:

  • 听起来您必须重写该内联汇编代码。从您的问题中不清楚您到底遇到了什么问题。
  • 我正在寻找如何转换这个?
  • 有没有基础可以用x64项目调用x86 yasm?
  • 您不会在 x64 项目中调用 x86 代码。你不能这样做并不完全正确,但这样做是一种可怕的黑客行为,你真的不应该这样做。只需将其转换为 x64 代码,这并不难,除非您使用一些疯狂的弃用指令(例如 daa 及其朋友)。
  • 请在您的问题中添加您的代码

标签: optimization assembly x86 64-bit yasm


【解决方案1】:

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

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

...

【讨论】:

  • 我想在 intel 平台上使用 x64 yasm。你给我的指南是强制在 AMD64 上的。
  • AMD64 与 Intel64 非常相似,您可以在您的 intel 平台上使用它。我在所有项目中都这样做没有问题。
  • 哦,求你帮忙。我会试试的。
猜你喜欢
  • 1970-01-01
  • 2012-10-20
  • 1970-01-01
  • 2015-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-17
相关资源
最近更新 更多