我正在将使用 SSE 命令的内联汇编程序移植到内在函数。为汇编指令找到合适的内在函数需要做很多工作。我在互联网上的某个地方看到了一个简化工作的 Python 脚本,但现在找不到。
3 回答
我认为您不会对这样的脚本感到满意。
首先,在我看来,内在函数只对一个或两个班轮有用,如果你有更多的指令,最好有一个单独的汇编文件。此外,对于一长串汇编指令,您无论如何都必须控制结果,其中包括理解每条指令及其结果,这基本上意味着您可以同时再次编写它。
其次,我认为您正在寻找这样的东西,因为您想将一个软件从 32 位移植到 64 位,对吗?我的经验告诉我,如果你不看每一行代码,你会因为一些意想不到的类型转换而遇到一些奇怪的错误。
第三,你说的是 Visual Studio 吗?有没有其他支持内在函数的编译器?在使用内部函数移植我们的软件时,我们遇到了一些奇怪的错误,因为在使用内部函数时会出现一些丑陋的编译器错误,主要是因为弄乱了堆栈。我们在找到这些东西并最终用汇编程序编写这些函数时遇到了很多麻烦。
所以我的建议是小心内在函数!
我不知道有一个脚本可以完全按照您的要求执行。很多情况下也会将非 SSE 指令交错到汇编中,并且并非每条汇编指令都可以映射到内在或原始 C 操作。
我想您可能可以通过查找和替换来破解它。(这实际上可能没那么糟糕。你尝试移植多少代码?数千行?)
此外,VC++ 根本不允许在 64 位上进行内联汇编。所以一切都需要使用内在函数或完全独立的程序集文件来完成。
我不会说使用内部函数完全不如汇编(假设您知道自己在做什么),但是编写编译良好且运行速度与优化汇编一样快的良好内部代码本身就是一件艺术品. 但它保持了两个优点:可移植性和易用性(无需手动分配寄存器)。
我创建了自己的脚本来将内联汇编程序转换为内在函数。他做了很多粗活。 https://github.com/KindDragon/Asm2Intrinsics