Bazı C programlarının sökülmesiyle oluşturulan bazı montajlara bakıyorum ve sık sık tekrar gördüğüm tek bir optimizasyonla karıştırıldım.Neden GCC çıkarma için "alt" yerine "lea" yayar?
Ben GCC derleyicisi üzerinde hiçbir optimizasyonunuz çıkarma için subl
talimatı kullanır, ancak ben ne zaman optimizasyonlar derleyici yerine çıkarma bir leal
talimatı kullanır (kesin olmak üzere -O3
) açık, aşağıda örnek:
olmadan optimizasyonları: optimizasyonlarla
83 e8 01 subl $0x1, %eax
8d 6f ff leal -0x1(%edi), %ebp
Bu yönergelerin her ikisi de 3 bayt uzunluğundadır, bu yüzden burada bir optimizasyon görmüyorum. Birisi bana yardım eder ve derleyicinin seçimini açıklamaya çalışır mı?
Herhangi bir yardım için teşekkür ederiz.
Bu bakış açısıyla değerlendirmedim, çünkü optimize edilmemiş sürüm yalnızca çıkarmalarda anlık değerler kullanıyor. Teşekkürler, bu çok yardımcı oldu. –