Compilation 程序如何知道何时在扩展指令集中使用操作码?

Compilation 程序如何知道何时在扩展指令集中使用操作码?,compilation,opcode,instruction-set,Compilation,Opcode,Instruction Set,我知道在SSE4中,添加了一些有利于字符串搜索的指令,特别是xml解析。假设我写了一个利用这些指令的程序,当我把程序移到另一台没有SSE4指令集的旧处理器上时会发生什么?节目刚刚结束吗 我假设编译器生成哪些指令作为其优化过程的一部分使用,如果编译器在旧的i386上运行,但软件的目标是i486,我会丢失这六条指令吗 如果这就是它的工作原理,那么为什么我有一些音频制作软件,可以在我安装它的任何计算机上正常工作,但声称利用了这些扩展指令。这只是运行时检查和不同的代码路径吗 这对java字节码或msil

我知道在SSE4中,添加了一些有利于字符串搜索的指令,特别是xml解析。假设我写了一个利用这些指令的程序,当我把程序移到另一台没有SSE4指令集的旧处理器上时会发生什么?节目刚刚结束吗

我假设编译器生成哪些指令作为其优化过程的一部分使用,如果编译器在旧的i386上运行,但软件的目标是i486,我会丢失这六条指令吗

如果这就是它的工作原理,那么为什么我有一些音频制作软件,可以在我安装它的任何计算机上正常工作,但声称利用了这些扩展指令。这只是运行时检查和不同的代码路径吗


这对java字节码或msil等中间语言有何影响?

您需要做的是:

您可以为不同的指令集编写不同版本的代码。你不需要重写整个程序,但是你必须重写那些特定的区域。然后在程序执行时,检查支持的内容并进行适当的分支


因此,基本上您可以为没有此指令集的系统提供一个替代代码路径。

有多种方法。有些人生成两个版本并在运行时选择。如果CPU不支持这些指令,则其他系统会崩溃。JIT语言可以在JIT时间选择。您能描述一下您遇到的实际编程问题吗?如果性能非常关键,您甚至可能希望实现一个包装函数,并在运行时修补其调用目标以选择正确的版本。