我有以下C文件

int foo (int input)
{
    if (input == 0)
        input = 1;
    
    return input;
}

当我使用gcc foo.c -m32 -Wa,-march=i486 -c创建对象文件时,一切都很顺利.但是,当我向命令添加-O3时,我收到以下错误:

/tmp/cc7br7gY.s: Assembler messages:
/tmp/cc7br7gY.s:12: Error: `cmove' is not supported on `i486'

我是否必须为汇编优化器提供一个额外的选项来告诉它我想要在i486上工作的指令?

gcc --version输出gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0.

推荐答案

您没有告诉编译器编译到ARCH,而是告诉汇编程序(我不确定您是否真的需要这样做).

如果您想要这样做,则传递一个普通的-m32 -march=i486(或者根据需要使用any other arch).

C++相关问答推荐

如何从TPS特定的TGPT_PUBLIC数据 struct 中以OpenSSL的EVP_PKEY

如何在C中通过转换为char * 来访问float的字节表示?

Zig将std.os.argv转换为C类型argv

在Windows上构建无聊的SSL x64

GCC:try 使用—WError或—pedantic using pragmas

在C语言中使用scanf()时我无法理解的警告

C中的指针增量和减量(*--*++p)

如何使用指向 struct 数组的指针并访问数组中特定索引处的 struct

使用sscanf获取零个或多个长度的字符串

S的这种管道实施有什么问题吗?

当内存来自Malloc时,将char*转换为另一个指针类型是否违反了严格的别名规则?

C堆栈(使用动态数组)realloc内存泄漏问题

如何将C中的两个字符串与从文件接收的字符串中的字符数进行比较

如果格式字符串的内存与printf的一个参数共享,会发生什么情况?

安全倒计时循环

当我用scanf(&Q;%S%S%S&Q;,单词0,单词1,单词2)输入多个单词时,除了最后一个单词外,每个单词的第一个字符都丢失了

c程序,让用户输入两类数字,并给出输出用户输入多少个数字

为什么一个在线编译器拒绝这个VLA代码,而本地的Apple clang却不拒绝;t?

Leet代码运行时错误:代码不会在Leet代码上编译,而是在其他编译器中编译,如netbeans和在线编译器

子进程不会修改父进程中的统计信息