将内联 ASM 转换为 Intrinsic

GoT*_*imw 1 assembly cpu-registers intrinsics

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

getReg() 和 setReg()

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

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

移动%0,%rcx

到内在等价物?

Pau*_*l R 5

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