-3
我維護的代碼在很多地方都有以下類型的代碼。gcc優化代碼涉及位操作常量
x = x | ((0x1 & 0x3ff) << 16);
x |= (0x7 << 28);
y = y | (0x3 << 8);
我用-O3標誌編譯代碼。 編譯器(gcc)在優化過程中是否簡化並優化了涉及常量的位操作?
例如在1號線它應該做的
x = x | 0x3ff0000;
或3號線它應該做的
y = y | 0x300;
,而不是添加指令來執行實際位移位。
是的,這些常量表達式將在預編譯器階段展開。但是((0x1&0x3ff)<< 16)是0x10000,而不是0x3ff0000。 –
......即使沒有「-O3」或任何「-O」fwiw,它也會這樣做。 – spectras
你爲什麼不看看彙編代碼? – Olaf