Istnieje wiele powodów, dla których warto wybrać wdrożenie CISC. Najważniejszym powodem jest zgodność binarna z istniejącym zestawem instrukcji CISC. Podczas gdy oprogramowanie do tłumaczenia binarnego oprogramowania uległo poprawie, kompatybilność sprzętowa ma pewne zalety techniczne (a także wadę mniejszego buforowania tłumaczeń) i mniejszą zaletę techniczną polegającą na tym, że wydaje się bardziej niezawodna.
Gęstość kodu jest prawdopodobnie drugim najważniejszym powodem wyboru CISC. Renesas RX został zaprojektowany jako CISC specjalnie pod kątem gęstości kodu, ponieważ jest przeznaczony dla mikrokontrolerów, w których rozmiar pamięci kodu jest znaczącym czynnikiem kosztowym. Instrukcje o zmiennej długości, instrukcje złożone (głównie więcej trybów adresowania), niejawne operandy i niższy rejestr liczą wszystkie gęstości kodu korzyści.
Historycznym (i moim zdaniem błędnym) powodem wyboru CISC było zlikwidowanie semantycznej luki między programistami używającymi języka wyższego poziomu a procesorem. Ponieważ złożone instrukcje można ogólnie zastąpić sekwencją prostszych instrukcji, złożoność kompilatora języka wyższego poziomu dla RISC nie musi być znacznie bardziej złożona niż dla CISC dopasowanego do języka. RISC unika „kolizji semantycznej” (gdy instrukcja procesora działa mniej więcej niż odpowiednia instrukcja języka) i ułatwia redukcję siły i optymalizację planowania. (Aby uzyskać więcej szczegółów, zobacz „Jakie są kompromisy w pracach rozwojowych kompilatora nad CISC vs. RISC?” ).
Wykonywanie instrukcji może wiązać się ze znacznymi kosztami stałymi. Zachęca to do stosowania stosunkowo skomplikowanych instrukcji w celu rozłożenia tego obciążenia na bardziej rzeczywistą pracę; zmniejszenie liczby instrukcji dynamicznych może poprawić wydajność. Kiedy koszt logiki i pamięci RAM był znacznie większy niż koszt pamięci ROM, zachęta do wykonywania złożonych instrukcji była znacząca, ponieważ instrukcja została zdekodowana przez wyszukanie mikrokodu.
Powodem użycia CISC, któremu być może zaprzeczają dowody historyczne, jest fakt, że mikrokod może być zoptymalizowany dla każdej mikroarchitektury, podczas gdy standardowe biblioteki mogą powoli wykorzystywać funkcje nowej implementacji. Poziom optymalizacji implementacji oprogramowania memcopy w porównaniu z poziomem mikrokodu dla REP MOVSB oznacza, że biblioteki mogą zwrócić większą uwagę niż mikrokod. Część tego może pochodzić od dostawcy procesora ukierunkowanego na szerszą bazę użytkowników, więc uzasadnienie wysiłku może być trudniejsze w porównaniu z oprogramowaniem open source lub wewnętrznym, w którym zlokalizowane zainteresowania deweloperów lub użytkowników mogą wpływać na wysiłki związane z wdrożeniem.
Możliwość dostarczenia zoptymalizowanej biblioteki standardowej z procesorem ma znaczące zalety. Przechowywanie i wykonywanie standardowej biblioteki platformy można znacznie zoptymalizować dzięki oprogramowaniu sprzętowemu. Różnica między złożoną instrukcją a wywołaniem warstwy abstrakcji platformy może być subtelna (lub nieistniejąca). Projekt RISC mógłby wykorzystywać te same techniki implementacji do obsługi wywołań PAL, jak CISC w przypadku złożonych instrukcji, w tym za pomocą operacji nie dostarczonych w ogólnym zestawie instrukcji ze specjalistycznym sprzętem, używając sprytnego buforowania i dekodowania oraz określania operandów rejestru (chociaż CISC często używają dedykowanych rejestrów podobnych do ABI dla każdej funkcji). Model mentalny związany z CISC może zachęcać do takich optymalizacji. Ponadto użytkownicy mogą być mniej obrażeni przez wymuszone włączenie „
Dekodowanie stosunkowo skomplikowanych instrukcji może mieć mniejszy narzut (i być może bardziej niezawodnie poprawne w dostrzeganiu intencji) niż porównywalna technika rozpoznawania idiomu RISC, w której sekwencja instrukcji jest rozpoznawana jako jednostka semantyczna. Ta różnica narzutu byłaby najbardziej zauważalna w mniejszej implementacji, ale narzut związany z wykorzystaniem tych informacji zmniejsza znaczenie oszczędności na dekodowaniu.
Dodatkowe informacje kontekstowe mogą ułatwić optymalizację sprzętu. Na przykład podczas zwiększania wartości w pamięci sprzęt może rozpoznać, że adres pamięci jest używany dwukrotnie (dla obciążenia i magazynu), co daje możliwość zapamiętywania w pamięci podręcznej i buforowania translacji. Złożone instrukcje mogą zawierać takie informacje w sposób jawny. W instrukcji złożonej wartości pośrednie mają jawny czas życia (czas trwania instrukcji); z tradycyjnym rejestrem RISC wartości muszą zostać wyraźnie nadpisane, aby wskazać koniec ożywienia. (Uwaga: RISC może określić rejestr, który jest zawsze zerowany po każdym użyciu, zapewniając sposób na określenie wartości tymczasowej jednorazowego użytku. Takie instrukcje byłyby umiarkowanie bardziej złożone).
Jeśli szczegóły implementacji nie są ukryte za warstwą abstrakcji, trudniej jest użyć różnych mikroarchitektur w celu optymalizacji pod kątem różnych kompromisów. Ujawnienie szczegółów mikroarchitekturalnych jako gwarancji architektonicznych zamyka mikroarchitekturę w gwarancję kompatybilności. Chociaż oprogramowanie PAL można zoptymalizować tak samo, jak skomplikowane instrukcje, wymaga to znakowania sprzętowo-programowego. Separacja organizacyjna i różnorodność utrudniają kodowanie.
Złożone instrukcje mogą zapewnić bezpieczny dostęp do uprzywilejowanego stanu. Na przykład złożone instrukcje są często atomowe w odniesieniu do przerwań. Chociaż zestaw instrukcji RISC może zapewnić mechanizm na poziomie użytkownika do tymczasowego zawieszania przerwań, być może nawet coś w rodzaju obciążenia połączonego, tak że oprogramowanie wyraźnie ponawia operację, jeśli zostanie przerwane, pod warunkiem, że nie jest to typowe dla RISC.
Podobnie złożona instrukcja może zapewnić kontrolowany dostęp i / lub wykorzystanie uprzywilejowanych informacji. Ponieważ wykonywana operacja kontroluje semantykę, faktycznego naruszenia uprawnień można uniknąć. Alternatywy zorientowane na RISC obejmują kod PAL (który zwykle ma znaczny narzut) i zamaskowany dostęp do rejestrów konfiguracji (lub ukrytych kopii rejestrów), które mają pewien uprzywilejowany stan. Zapewnienie rozwiązania ogólnego (RISC) jest trudniejsze niż rozwiązanie jednego lub kilku szczególnych przypadków (CISC), ale jest silniejsze i mniej podatne na gromadzenie się szczególnych przypadków. Jeśli ktoś uważa, że ważnych szczególnych przypadków jest niewiele, CISC może być bardziej atrakcyjny.
Złożone instrukcje mogą również ukrywać stan przed oprogramowaniem. Jedną z wyraźnych zalet takiego rozwiązania byłoby zapisywanie i przywracanie kontekstu. Dzięki instrukcjom zapisującym i przywracającym stan architektura musi jedynie przekazać rozmiar kontekstu do systemu operacyjnego, a nie konkretne mechanizmy przenoszenia stanu do pamięci. Dzięki temu aplikacje działające w starszym systemie operacyjnym mogą korzystać z rozszerzeń ISA, które dodają stan. (Ponownie oprogramowanie PAL może zapewniać tę samą funkcjonalność).
Znaczna część złożoności x86 wynika z kompatybilności wielu rozszerzeń. Dzięki złożonym i mniej ortogonalnym instrukcjom (przydatnym do zagęszczenia kodu), usuwanie niektórych prac, które okazały się niepotrzebne, unikanie niepotrzebnych łańcuchów zależności (np. Tylko jeden bit przenoszenia, tylko jeden rejestr wielkości przesunięcia dynamicznego), dodawanie pewnej pracy, która się zmieniła powszechnie stosowane i które można zoptymalizować w ramach złożonej instrukcji - każda z nich wymagałaby dodania nowej instrukcji i uczynienia ISA mniej estetycznym.
W wielu przypadkach RISC nie napotkałby takich problemów, ponieważ instrukcje są wysoce ortogonalne i prymitywne. W niektórych przypadkach RISC może wymagać dodania nowych prymitywów, ale zwykle dotyczy to więcej niż jednego zastosowania.
Ponadto, gdy infrastruktura jest gotowa do obsługi złożonych instrukcji, bariery są zmniejszane w przypadku dodatkowych złożonych instrukcji. Oznacza to, że znaczna część kosztów złożonych instrukcji w przypadku braku powtarzalności. Silnie RISC ISA mają dodatkową przeszkodę we wprowadzaniu funkcji CISCy.
Częstotliwość rozszerzenia x86 można również częściowo przypisać jego popularności w obliczeniach ogólnego zastosowania i modelu procesora handlowego (zwiększają również znaczenie zgodności binarnej). RISC ISA często wiązano z dostawcami systemów, co zachęca do węższego skupienia się na aplikacjach, a brak konkurencji dla implementacji konkretnego RISC ISA nieco zniechęca do stosowania rozszerzeń zestawu instrukcji do celów marketingowych. Popularność powoduje również, że koszty opracowywania nowych rozszerzeń są mniej znaczące (jednorazowe wydatki są mniej ważne przy większym wolumenie).
Filozofia kompatybilności z x86 prawdopodobnie również przesuwa się w kierunku rozszerzenia istniejących mechanizmów, a nie zapewnia bardziej czystej przerwy, co oznacza, że na nowe funkcje mają większy wpływ istniejące funkcje. Wyższa częstotliwość wydłużania zachęca również do wprowadzania bardziej stopniowych zmian, co zachęca do ponownego wykorzystywania mechanizmów, dążąc do zmniejszenia ortogonalności.
Porównanie akademickiej prezentacji klasycznego MIPS (który jest podzbiorem nowoczesnych wersji MIPS i wyklucza różne opcjonalne rozszerzenia ISA) z nowoczesnym x86 (który śledzi zgodność binarną z powrotem do 16-bitowego 8086 i quasi-kompatybilność na poziomie zespołu nawet jeszcze dalej) z całym swoim historycznym bagażem nie przedstawia najlepszego przypadku dla CISC ani realistycznego przypadku dla RISC.