美文网首页
gcc -fwrapv 参数的含义

gcc -fwrapv 参数的含义

作者: sarto | 来源:发表于2022-09-18 19:05 被阅读0次

    该问题参考stackoverflow

    该参数含义为:代码中存在溢出并已经考虑,编译器不要对可能溢出的情况进行优化。

    例如这段代码,我们可能由于编写失误,认为该函数将永远返回 1。在不带 fwrapv 的情况下,编译器将为我们默认规避掉这种失误,将代码优化为直接返回 1.

    而带 fwrapv 的情况下,明确告知编译器我们已经考虑了该情况,请不要进行该优化。则编译器将始终进行 i+1 和 i 的比较。

    int gt(int i )
    {
        return i+1>i;
    }
    

    在 loongarch64 平台上进行验证。可以看到,在不带 fwrapv 的情况下,汇编器直接将 1 作为返回值。
    而在携带 fwrapv 的情况下,汇编器始终将 i+1 和 i 进行比较,然后将结果返回。

    merore@merore-pc:~/wk/test$ gcc -S -Os a.c -o nowrapv.s
    merore@merore-pc:~/wk/test$ cat nowrapv.s 
    gt:
        addi.w  $r4,$r0,1           # 0x1
        jr  $r1
    
    
    merore@merore-pc:~/wk/test$ gcc -S -fwrapv -Os a.c -o wrapv.s
    merore@merore-pc:~/wk/test$ cat wrapv.s 
    gt:
        addi.w  $r12,$r4,1
        slt $r4,$r4,$r12
        jr  $r1
    

    相关文章

      网友评论

          本文标题:gcc -fwrapv 参数的含义

          本文链接:https://www.haomeiwen.com/subject/qmvportx.html