Pok-13-wyk-Slajd12
Generacja kodu – idiomy maszynowe(1)
Stosując idiomy maszynowe nie należy całkowicie ulegać rutynie – czasami może się okazać, że modyfikowanie kodu jest bezcelowe. Powróćmy do przykładu z zerowaniem rejestru akumulatora przyjmując, że zawartość rejestru stanu procesora nie jest dla nas istotna.
Operacja załadowania argumentu natychmiastowego trwa co prawda dokładnie tyle samo co obliczenie różnicy symetrycznej i takie same są możliwości parowania jej w potokach procesora, ale jest ona zdecydowanie dłuższa – lepiej wybrać krótszą instrukcję, bo większe jest prawdopodobieństwo, że kod zmieści się w pamięci notatnikowej procesora (w praktyce, generując kod wynikowy powinniśmy znać pojemności i organizację wszystkich poziomów pamięci podręcznej procesora docelowego).
Do wyzerowania rejestru możemy wykorzystać jeszcze jeden rozkaz – odejmowanie, ale operacja różnicy symetrycznej powinna być efektywniejsza od odjęcia rejestru od siebie. Powinna – ponieważ jest operacją logiczną i nie jest konieczne generowanie przeniesień między bitami – w przeciwieństwie do operacji odejmowania. W procesorze X86 jednak nie jest – obydwa rozkazy trwają dokładnie tyle samo i tak samo mogą być parowane.