1
[gccのフラグ:-O3 -funsigned-CHAR] [asm explorer]回転パラメータが符号なしのcharである場合、GCC 7.1は完全に回転を最適化しません。これは妥当ですか?
//partially optimized to: and, rol
unsigned int rol(unsigned int x, unsigned char r)
{
r &= 31; return (x << r) | (x >> (32-r));
}
//optimized to single: rol
unsigned int rol(unsigned int x, unsigned int r)
{
r &= 31; return (x << r) | (x >> (32-r));
}
あなたのゴッドボルトのリンクが壊れています。 「それは妥当ですか」とはどういう意味ですか?生成されたasmとあなたがあなたの質問に期待するものを表示してください。 –
'r == 0'のコードには未定義の動作があることに注意してください。 –
c標準x >> 32によれば、gccは警告を出しますが、結果の式は "x | 0"、 "x | x"と評価され、両方が "x"に等しいので最終結果は明確に定義されている。 –