2011-10-03 83 views
1

为了测试性能,我已经给了一个任务来将小块asm转换为内在。 我从来没有开发任何一个代码,但我理解asm和c,并阅读内在的语法。但我无法找到有关内存访问寄存器的信息。我发现2个功能:将内联ASM转换为内部

getReg()和setReg()

getReg()带有不同的寄存器表的表和他们的ID /数: - 通用整数寄存器 - 应用寄存器 - 控制寄存器 - 间接寄存器 但他们都没有对应像rax,rdi等asm寄存器。

我该如何处理寄存器,例如rcx,rdi等等? 或者换句话说我如何转换这一点:

MOV%0%RCX

内在相同呢?

回答

4

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

+0

非常感谢,我很关心性能,因为内在的和ASM将基准,看看他们的表现如何。 – GoTTimw

+0

使用intrinsics编写的代码应该与原始asm一样快,并且在某些情况下可能会更快,因为编译器通常可以比人类更好地执行指令调度和寄存器分配。 –