Pok-13-wyk-Slajd11
Generacja kodu – idiomy maszynowe
Uważny dobór instrukcji kodu maszynowego pozwala uzyskać istotną poprawę jakości kodu wynikowego. Najlepiej efekty wykorzystania specjalnych postaci ogólnych rozkazów (tzw. idiomów maszynowych) można zademonstrować na procesorach o złożonej liście rozkazowej, tzw. architekturze CISC (np. Intel X86), w którym:
- rozkazy mają różną długość
- ten sam efekt można uzyskać za pomocą różnych rozkazów
- ta sama operacja wykonywana w różnych rejestrach ma inną długość i czas wykonania
- niektóre rozkazy (np. mnożenie) mogą zostać wykonane tylko w określonych rejestrach.
Jeżeli chcemy wyzerować rejestr możemy do tego celu użyć najbardziej oczywistego rozwiązania – rozkazu załadowania do niego wartości natychmiastowej. Ten sam efekt możemy uzyskać obliczając różnicę symetryczną z nim samym, która ma krótszy kod i jest potencjalnie szybsza. Rozkazy te jednak nie są dokładnie równoważne – załadowanie argumentu natychmiastowego nie niszczy zawartości rejestru stanu procesora w przeciwieństwie do obliczenia różnicy symetrycznej.
Czasami ta sama operacja może mieć różny koszt w zależności od rejestru, na którym jest wykonywana – załadowanie argumentu natychmiastowego do akumulatora ma krótszy kod niż załadowanie tego samego argumentu do innego rejestru.