在哪里可以找到将VC ++内联汇编程序转换为内在函数的脚本?

时间:2011-09-02 12:29:45

标签: c++ visual-c++ assembly intrinsics

我正在移植使用SSE命令进行内在函数的内联汇编程序。为汇编程序指令找到合适的内在函数需要做很多工作。在互联网上的某个地方,我看到了一个Python脚本,它简化了工作,但现在找不到它。

3 个答案:

答案 0 :(得分:1)

我认为你不会对这样的剧本感到满意。

首先,在我看来,内在函数只适用于一个或两个内联,如果你有更多的指令,最好有一个单独的汇编程序文件。还有很长的汇编程序指令列表,你必须控制结果,包括理解每条指令及其结果,这基本上意味着你可以在同一时间再次编写它。

其次,我认为你正在寻找类似的东西,因为你想将一个软件从32位移植到64位,对吧?我的经验告诉我,如果你没有查看每一行代码,你会遇到一些奇怪的错误,因为有一些意外的类型转换。

第三,你在谈论Visual Studio吗?有没有其他编译器支持内在函数?在使用内在函数移植我们的软件时,我们遇到了一些奇怪的错误,因为在使用内在函数时存在一些丑陋的编译器错误,主要是通过搞乱堆栈。我们在找到这些东西并最终在汇编程序中编写这些函数时遇到了很多麻烦。

所以我的建议是要小心内在函数!

答案 1 :(得分:1)

我不知道一个脚本会完全按照你的要求行事。很多情况下也会将非SSE指令交错到程序集中,并不是每个汇编指令都可以映射到内部或原始C操作。

我想你可能会通过find-and-replace破解你。 (这实际上可能不是那么糟糕。您尝试移植多少代码?成千上万行?)

此外,VC ++根本不允许在64位上进行内联汇编。所以一切都需要使用内在函数或完全独立的汇编文件来完成。

我不会说使用内在函数完全不如汇编(假设你知道自己在做什么),但编写良好的内部代码,编译得很好并且运行速度与优化程序集一样快是一件艺术品在其自己的。但它保留了两个优点:可移植性和易用性(无需手动分配寄存器)。

答案 2 :(得分:1)

我创建了自己的脚本,将内联汇编程序转换为内在函数。他做了很多艰苦的工作。 https://github.com/KindDragon/Asm2Intrinsics