新的ISA指令与i386

时间:2012-07-26 18:04:39

标签: isa

据我所知,今天编译的所有x86(i386)二进制文件,以及最新的编译器(GCC,Intel CC,VC等)将在Intel 386机器上运行(允许外部依赖,如OS功能等),这解释了为什么YouTube上有视频可以让Windows 7安装并运行在一台已有20年历史的计算机上。

但我不明白ISA扩展是如何工作的,例如MMX和SSE。如果程序的代码有扩展指令但处理器不支持该指令,那么程序肯定会崩溃(可能是处理器中断到OS中)。我能想到的唯一解决方案是程序的二进制检查以查看是否支持指令,如果没有,那么它执行保证每个平台都支持的最低公分母代码,但肯定可以使二进制文件非常好大的,那些扩展指令但现在几乎是标准的,如浮点运算?这是否意味着每个执行FP操作的i386二进制文件还包括软件FP模拟?

如果程序执行指令支持的检查,那么它在哪里执行?如果你有一个紧凑的循环,那么你不希望它在循环中执行检查。我不认为编译器足够聪明,不知道如何在每种情况下对其进行优化,因此缺乏可见的编译器选项是很奇怪的。

我在VC项目设置中找不到用于控制指令发射的编译器或链接器的任何设置或选项。有一些关于优化但没有任何东西可以提供我期望的控制。

AMD的“3DNow!”怎么样?延期? 3DNow应该是MMX之上的扩展,因此它有一些独特的指令和方面,但我在VC编译器或链接器设置中找不到任何引用,所以如果我正在编写代码如何我可以让我的编译器使用3DNow!说明(而不是MMX)?

另外,关于3DNow的维基百科文章指出AMD从他们的处理器中删除了一些3DNow指令 - 如果存在假设这些指令存在的代码将不再有效吗?

0 个答案:

没有答案