【问题标题】:Converting inline ASM to Intrinsic将内联 ASM 转换为内部
【发布时间】:2011-11-29 20:08:13
【问题描述】:

我接到了一项任务,将一小段 asm 转换为内在函数以测试性能。 我从来没有为任何一个开发过任何代码,但我了解 asm 和 c,并阅读了内在语法。但我找不到有关内在如何处理访问寄存器的信息。我找到了 2 个功能:

getReg() 和 setReg()

getReg() 带有一个包含不同注册表及其 ID/编号的表: -通用整数寄存器 -应用程序寄存器 -控制寄存器 - 间接寄存器 但它们似乎都没有对应于 rax、rdi 等 asm 寄存器。

如何在内部寻址寄存器,例如 rcx、rdi 等? 或者换句话说,我该如何转换:

mov %0, %rcx

内在等价物?

【问题讨论】:

    标签: assembly cpu-registers intrinsics


    【解决方案1】:

    您错过了内在函数的要点 - 使用内在函数时无需担心寄存器分配(在某些情况下可能访问特殊寄存器的情况除外)。一般的想法是让编译器为你处理所有这些低级的内务。要将原始 asm 移植到内在函数,您需要首先对 asm 代码进行逆向工程,以便您了解它的含义,然后使用内在函数重新实现等效代码。如果您发布一些实际代码,那么您可能会得到更具体的建议。

    【讨论】:

    • 非常感谢,我很关心性能,因为内在和 asm 都将进行基准测试以查看它们的性能。
    • 用内部函数编写的代码通常应该与原始 asm 一样快,并且在某些情况下可能会更快,因为编译器通常可以比人类更好地完成指令调度和寄存器分配。
    【解决方案2】:

    看看你是否可以使用这些:
    海合会:X86 Built-in Functions
    MSVC++:Alphabetical Listing of Intrinsic Functions

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-20
      • 2013-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-18
      相关资源
      最近更新 更多