簡體   English   中英

GCC循環增量優化-O2及以上

[英]GCC Loop Increment Optimization -O2 and above

我一直在做一些涉及優化和循環展開的研究,並且一直在查看針對不同優化級別生成的匯編代碼。 我遇到了一個奇怪的優化策略,gcc 在 -O2 及以上使用。 我想知道是否有這個名字。 這是生成的匯編代碼:

mov    %rsi,(%rcx)
mov    %rsi,0x8(%rcx)
mov    %rsi,0x10(%rcx)
mov    %rsi,0x18(%rcx)
sub    $0xffffffffffffff80,%rcx // What is this called?
mov    %rsi,-0x60(%rcx)
mov    %rsi,-0x58(%rcx)
mov    %rsi,-0x50(%rcx)
mov    %rsi,-0x48(%rcx)
mov    %rsi,-0x38(%rcx)
mov    %rsi,-0x30(%rcx)
mov    %rsi,-0x28(%rcx)
mov    %rsi,-0x20(%rcx)
mov    %rsi,-0x18(%rcx)
mov    %rsi,-0x10(%rcx)
mov    %rsi,-0x8(%rcx)
cmp    %rdx,%r8

0xffffffffffffff80 在 64 位有符號整數中是 -128(我認為)。 RCX 是一個臨時寄存器,在這種情況下可能是從某種指針中使用的。 當它減去時,-128 變為 +128。 編譯器發出一組指令,通過 64 位跳轉減少偏移量。 這表明編譯器在 128 位塊上使用循環展開,其中包含一組非常具體的操作,所有這些操作都涉及減法,這在您的特定處理器上可能更快。 了解您的 CPU 類型和生成此程序集的源代碼會很有趣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM