/arch (x86)

为代码生成指定体系结构在 x86。 另请参见 /arch (x64)/arch (ARM)

/arch:[IA32|SSE|SSE2|AVX]

实参

  • /arch:IA32
    未指定增强的命令并为浮点计算指定 x87。

  • /arch:SSE
    允许使用 SSE 命令。

  • /arch:SSE2
    允许使用 SSE2 指令。 如果 /arch 选项未指定,这是在 x86 平台的默认值命令。

  • /arch:AVX
    允许使用 Intel 高级矢量扩展命令。

备注

SSE 和 SSE2 指令在各种 Intel 和 AMD 处理器中均存在。 Intel 浅桥处理器和 AMD Bulldozer 处理器上存在 AVX 说明。

_M_IX86_FP 宏指示哪些,如果存在,/arch 使用了编译器选项。 有关更多信息,请参见预定义的宏

在指定 /arch 时,优化程序将选择何时以及如何使用 SSE 和 SSE2 指令。 对于某些标量浮点计算使用 SSE 和 SSE2 指令,则认为是更快使用 SSE/SSE2 命令和注册而不是 x87 浮点寄存器堆栈。 因此,您的代码实际上将混合使用 x87 和 SSE/SSE2 来进行浮点计算。 此外,对于 /arch:SSE2,SSE2 指令可用于某些 64 位整数运算使用。

除了使用 SSE 和 SSE2 指令之外,编译器还使用在支持 SSE 和 SSE2 的处理器修订版上提供的其他指令。 例如,在 Intel 处理器的 Pentium Pro 修订版中首次出现的 CMOV 指令。

当您使用 /clr 生成时,/arch 没有对代码生成的角色管理的功能。 /arch 仅影响本机函数的代码生成。

/arch/QIfist 不能用于同一编辑。 具体而言,则使用 _controlfp 修改 FP 控制字,则运行时启动代码设置 x87 FPU 控制字精度控件字段设置为 53 位。 因此,每个浮点和二进制文件操作在表达式中使用 53 位 significand 和 15 位指数。 但是,每 SSE 单精度操作使用 24 位 significand 和 8 位指数,并且,将双精度操作使用 53 位 significand 和 11 位指数。 有关更多信息,请参见_control87, _controlfp, __control87_2。 在单个表达式树中可能会出现这些差异,而在每一子表达式后存在用户赋值的情况下则不会。 请考虑下列事项:

    r = f1 * f2 + d;  // Different results are possible on SSE/SSE2.

相对于:

   t = f1 * f2;   // Do f1 * f2, round to the type of t.
   r = t + d;     // This should produce the same overall result 
                  // whether x87 stack is used or SSE/SSE2 is used.

controlfp 不更改 MXCSR 控制位。 因此,与 /arch:SSE2,取决于所使用 controlfp 的所有功能将中断。

在 Visual Studio 中设置 SSE 或 SSE2 的此编译器选项

  1. 打开项目的**“属性页”**对话框。 有关更多信息,请参见如何:打开项目属性页

  2. 选择 C/C++ 文件夹。

  3. 选择**“代码生成”**属性页。

  4. 修改**“启用增强指令集”**属性。

在 Visual Studio 中设置 /arch:AVX 编译器选项

  1. 打开项目的**“属性页”**对话框。 有关更多信息,请参见如何:打开项目属性页

  2. 选择 C/C++ 文件夹。

  3. 选择 命令行 属性页。

  4. 在**“附加选项”**框中添加 /arch:AVX。

以编程方式设置此编译器选项

请参见

参考

/arch(最小 CPU 体系结构)

编译器选项

设置编译器选项