Ci sono molte ragioni per cui si sceglierebbe di implementare un CISC. Il motivo principale è la compatibilità binaria con un set di istruzioni CISC esistente. Mentre la tecnologia di traduzione binaria del software è migliorata, la compatibilità basata su hardware presenta alcuni vantaggi tecnici (oltre allo svantaggio di una minore memorizzazione nella cache di traduzione) e il vantaggio meno tecnico di sembrare più affidabile.
La densità del codice è forse il secondo motivo più significativo per la scelta del CISC. Renesas RX è stato progettato come CISC appositamente per la densità del codice in quanto si rivolge ai microcontrollori in cui la dimensione della memoria del codice è un fattore di costo significativo. Le istruzioni a lunghezza variabile, le istruzioni complesse (principalmente più modalità di indirizzamento), gli operandi impliciti e il registro inferiore contano tutta la densità del codice di beneficio.
Un motivo storico (e secondo me errato) per la scelta del CISC è stato quello di colmare il divario semantico tra i programmatori che utilizzano un linguaggio di livello superiore e il processore. Poiché le istruzioni complesse possono generalmente essere sostituite da una sequenza di istruzioni più semplici, la complessità di un compilatore di linguaggio di livello superiore per un RISC non deve essere molto più complessa rispetto a un CISC corrispondente alla lingua. RISC evita lo "scontro semantico" (in cui un'istruzione del processore funziona più o meno rispetto a una corrispondente istruzione linguistica) e facilita la riduzione della forza e l'ottimizzazione della pianificazione. (Vedi "Quali sono i compromessi nello sforzo di sviluppo del compilatore relativo a CISC vs. RISC?" Per maggiori dettagli.)
Ci può essere un costo fisso significativo associato all'esecuzione di un'istruzione. Questo incoraggia l'uso di istruzioni relativamente complesse per diffondere questo sovraccarico su lavori più effettivi; ridurre il conteggio dinamico delle istruzioni può migliorare le prestazioni. Quando il costo della logica e della RAM era molto maggiore del costo della ROM, l'incentivo per istruzioni complesse era significativo poiché un'istruzione veniva decodificata cercando il microcodice.
Un motivo per usare il CISC, forse contraddetto da prove storiche, è che il microcodice può essere ottimizzato per ogni microarchitettura mentre le librerie standard possono essere lente nello sfruttare le funzionalità di una nuova implementazione. Il livello di ottimizzazione delle implementazioni software della memcopia rispetto a quello del microcodice per REP MOVSB implica che le biblioteche possono ottenere più attenzione del microcodice. Parte di ciò può provenire dal fornitore del processore indirizzato a una base di utenti più ampia, quindi la giustificazione dello sforzo può essere più difficile rispetto al software open source o interno in cui gli interessi localizzati di sviluppatori o utenti possono distorcere lo sforzo di implementazione.
Essere in grado di spedire una libreria standard ottimizzata con il processore ha notevoli attrattive. L'archiviazione e l'esecuzione di una libreria standard della piattaforma possono essere notevolmente ottimizzate mediante la progettazione di codici hardware-software. La distinzione tra un'istruzione complessa e una chiamata del livello di astrazione della piattaforma può essere sottile (o inesistente). Un progetto RISC potrebbe utilizzare le stesse tecniche di implementazione per la gestione delle chiamate PAL di un CISC per istruzioni complesse, incluso l'uso di operazioni non fornite nel set di istruzioni generale con hardware specializzato, l'utilizzo di cache e decodifica intelligenti e la specifica di operandi di registro (sebbene un CISC lo farebbe spesso usano registri dedicati simili a un ABI per funzione). Il modello mentale associato al CISC può incoraggiare tali ottimizzazioni. Inoltre, gli utenti potrebbero essere meno offesi dall'inclusione forzata di un "
La decodifica di istruzioni relativamente complesse può avere un sovraccarico minore (e forse essere più affidabile nel caso di intenti discernenti) rispetto alla tecnica RISC comparabile di riconoscimento del linguaggio in cui una sequenza di istruzioni è riconosciuta come unità semantica. Questa differenza generale sarebbe più evidente in un'implementazione più piccola, ma il sovraccarico per usare queste informazioni riduce il significato dei risparmi di decodifica.
Ulteriori informazioni contestuali possono facilitare l'ottimizzazione dell'hardware. Ad esempio, quando si incrementa un valore in memoria, l'hardware è in grado di riconoscere che l'indirizzo di memoria viene utilizzato due volte (per il carico e l'archivio), offrendo l'opportunità di memorizzare nella cache la memorizzazione di memorie e memorizzazione nella cache. Istruzioni complesse possono fornire tali informazioni in modo esplicito. In un'istruzione complessa, i valori intermedi hanno una durata esplicita (quella dell'istruzione); con un registro RISC tradizionale i valori devono essere sovrascritti esplicitamente per indicare la fine della vivacità. (Nota: un RISC potrebbe specificare un registro che è sempre azzerato dopo ogni utilizzo, fornendo un mezzo per specificare un valore temporaneo monouso. Tali istruzioni sarebbero moderatamente più complesse.)
Se i dettagli dell'implementazione non sono nascosti dietro un livello di astrazione, diventa più difficile utilizzare diverse microarchitettura per ottimizzare diversi compromessi. Esporre i dettagli microarchitetturali come garanzie architettoniche blocca la microarchitettura nella garanzia di compatibilità. Mentre il software PAL potrebbe essere ottimizzato come le istruzioni complesse, tale richiede un design dei codici hardware-software. La separazione organizzativa e la diversità rendono più difficile la progettazione di codici.
Istruzioni complesse possono fornire un accesso protetto allo stato privilegiato. Ad esempio, istruzioni complesse sono spesso atomiche rispetto agli interrupt. Mentre un set di istruzioni RISC potrebbe fornire un meccanismo a livello di utente per sospendere temporaneamente gli interrupt, possibilmente anche qualcosa come il caricamento collegato in modo che il software ripeti esplicitamente l'operazione se interrotto, purché ciò non sia tipico dei RISC.
Allo stesso modo, un'istruzione complessa potrebbe fornire accesso controllato e / o uso di informazioni privilegiate. Poiché l'operazione eseguita ha controllato la semantica, è possibile evitare l'effettiva violazione dei privilegi. Le alternative orientate al RISC includono il codice PAL (che in genere ha un notevole sovraccarico) e l'accesso mascherato ai registri di configurazione (o copie shadow dei registri) che presentano uno stato privilegiato. Fornire una soluzione generale (RISC) è più difficile che fornire una soluzione a uno o pochi casi speciali (CISC), ma è più potente e meno vulnerabile all'accumulo di casi speciali. Se si ritiene che i casi speciali importanti siano pochi, il CISC può essere più attraente.
Istruzioni complesse possono anche nascondere lo stato al software. Un vantaggio importante di questo sarebbe il salvataggio e il ripristino del contesto. Con le istruzioni che salvano e ripristinano lo stato, l'architettura deve solo comunicare la dimensione del contesto al sistema operativo e non i meccanismi specifici per il trasferimento dello stato in memoria. Ciò consente alle applicazioni in esecuzione su un sistema operativo legacy di utilizzare estensioni ISA che aggiungono stato. (Ancora una volta, il software PAL potrebbe fornire la stessa funzionalità.)
Gran parte della complessità di x86 deriva dalla compatibilità con molte estensioni. Con istruzioni complesse e meno ortogonali (utili per la densità del codice), la rimozione di alcuni lavori che non si sono rivelati comunemente necessari, evitando catene di dipendenze non necessarie (ad esempio, solo un bit di trasporto, solo un registro di quantità di spostamento dinamico), aggiungendo un lavoro che si è trasformato per essere comunemente usato e che può essere ottimizzato all'interno dell'istruzione complessa - ognuno di questi richiederebbe l'aggiunta di una nuova istruzione e rendere l'ISA meno piacevole esteticamente.
In molti casi un RISC non incontrerebbe tali problemi perché le istruzioni sono altamente ortogonali e primitive. In alcuni casi, un RISC potrebbe dover aggiungere nuovi primitivi, ma in genere sarebbe applicabile a più di un uso.
Inoltre, una volta creata l'infrastruttura per supportare istruzioni complesse, le barriere vengono ridotte per ulteriori istruzioni complesse. Cioè, gran parte del costo di istruzioni complesse in non ricorrenti. Gli ISA fortemente RISC subiscono un ostacolo complementare all'introduzione delle funzionalità CISCy.
La frequenza di estensione di x86 può anche essere parzialmente attribuita alla sua popolarità per il calcolo per scopi generici e il modello di processore mercantile (aumentano anche l'importanza della compatibilità binaria). Gli ISA RISC sono stati spesso legati ai fornitori di sistemi che incoraggiano una maggiore attenzione alle applicazioni e alla mancanza di concorrenza per le implementazioni di uno specifico ISA RISC scoraggia in qualche modo l'uso di estensioni di set di istruzioni per il marketing. La popolarità rende anche il costo dello sviluppo di nuove estensioni meno significativo (le spese non ricorrenti sono meno importanti a volume maggiore).
La filosofia di compatibilità x86 probabilmente tende anche ad estendere i meccanismi esistenti piuttosto che fornire una pausa più pulita, il che significa che le nuove funzionalità sono più influenzate dalle funzionalità esistenti. Una maggiore frequenza di estensione incoraggia anche cambiamenti più incrementali, il che incoraggia a riutilizzare i meccanismi, tendendo a ridurre l'ortogonalità.
Confronto tra una presentazione accademica del MIPS classico (che è un sottoinsieme delle versioni moderne del MIPS ed esclude varie estensioni ISA opzionali) al moderno x86 (che ripercorre la compatibilità binaria con l'8086 a 16 bit e la quasi-compatibilità a livello di assembly ancora più indietro) con tutto il suo bagaglio storico non presenta il caso migliore per CISC né un caso realistico per RISC.