【发布时间】:2012-11-30 16:48:39
【问题描述】:
由于优化原因,我考虑直接调用(使用内联汇编程序) 到函数“fldl”和“拳头”。遗憾的是我不知道如何运行它,因为我不是汇编程序中的神。
我没有比这更进一步:
double* input;
long long output;
__asm fldl input;
__asm fist output;
【问题讨论】:
-
如果您对汇编程序不够熟练,无法调用函数,那么您可能应该让编译器进行优化。您必须在汇编方面非常优秀且经验丰富,才能通过手动调优超越现代优化编译器。
-
与编译器相比,我真的怀疑手动将 double 转换为 long int 会导致任何优化。这是一个如此简单的操作,它可能更可能导致更差的性能——因为编译器通常可以“查看”每条指令之外的内容。 (是需要的结果,存放在哪个寄存器中;放在xmm寄存器等会更好吗?)
-
@H2CO3:我会说,甚至可能是那个上帝。
-
@AkiSuihkonen,已知从 double 到 integer 的转换在留给编译器时是次优的,因为它无法做出任何简化假设。请参阅stackoverflow.com/questions/78619/…,尽管这可能已经过时:msdn.microsoft.com/en-us/library/z8dh4h17.aspx
-
这可能是真的。还是例如gcc 4.6.3 允许自己做出一些假设并简单地写
cvttsd2siq %xmm0, %rax(是的,不幸的是附近没有 x86 系统,只有 x64)
标签: c++ visual-studio-2005 x86 inline-assembly