Ada banyak alasan seseorang akan memilih untuk mengimplementasikan CISC. Alasan yang paling menonjol adalah untuk kompatibilitas biner dengan set instruksi CISC yang ada. Sementara teknologi terjemahan biner perangkat lunak telah meningkat, kompatibilitas berbasis perangkat keras memiliki beberapa keunggulan teknis (dan juga kelemahan dari caching terjemahan yang lebih sedikit) dan keuntungan teknis yang kurang tampak lebih dapat diandalkan.
Kepadatan kode mungkin merupakan alasan terpenting kedua untuk memilih CISC. Renesas RX dirancang sebagai CISC khusus untuk kepadatan kode karena menargetkan mikrokontroler di mana ukuran memori kode merupakan faktor biaya yang signifikan. Instruksi panjang variabel, instruksi kompleks (terutama mode pengalamatan lebih banyak), operan implisit, dan register yang lebih rendah menghitung semua kepadatan kode manfaat.
Alasan historis (dan menurut saya salah arah) untuk memilih CISC adalah untuk menutup celah semantik antara programmer menggunakan bahasa tingkat yang lebih tinggi dan prosesor. Karena instruksi yang kompleks umumnya dapat diganti dengan urutan instruksi yang lebih sederhana, kompleksitas dari kompiler bahasa tingkat yang lebih tinggi untuk RISC tidak perlu jauh lebih kompleks daripada CISC yang cocok dengan bahasa. RISC menghindari "bentrokan semantik" (di mana instruksi prosesor bekerja lebih atau kurang berfungsi daripada pernyataan bahasa yang sesuai) dan memfasilitasi pengurangan kekuatan dan optimalisasi penjadwalan. (Lihat "Apa tradeoffs dalam upaya pengembangan compiler terkait dengan CISC vs RISC?" Untuk lebih jelasnya.)
Mungkin ada biaya tetap yang signifikan terkait dengan pelaksanaan instruksi. Ini mendorong penggunaan instruksi yang relatif kompleks untuk menyebarkan overhead ini pada pekerjaan yang lebih aktual; mengurangi jumlah instruksi dinamis dapat meningkatkan kinerja. Ketika biaya logika dan RAM jauh lebih besar daripada biaya ROM, insentif untuk instruksi kompleks menjadi signifikan karena instruksi diterjemahkan dengan melihat mikrokode.
Alasan untuk menggunakan CISC yang mungkin bertentangan dengan bukti historis adalah bahwa mikrokode dapat dioptimalkan untuk setiap mikroarsitektur sedangkan perpustakaan standar mungkin lambat untuk mengeksploitasi fitur dari implementasi baru. Tingkat optimisasi implementasi perangkat lunak dari memcopy dibandingkan dengan dari mikrokode untuk REP MOVSB menyiratkan bahwa perpustakaan bisa mendapatkan lebih banyak perhatian daripada mikrokode. Sebagian dari ini mungkin berasal dari vendor prosesor yang menargetkan basis pengguna yang lebih luas sehingga pembenaran upaya mungkin lebih sulit dibandingkan dengan open source atau perangkat lunak internal di mana kepentingan lokal pengembang atau pengguna dapat membiasakan upaya implementasi.
Mampu mengirimkan perpustakaan standar yang dioptimalkan dengan prosesor memang memiliki daya tarik yang signifikan. Penyimpanan dan eksekusi pustaka standar platform dapat dioptimalkan secara signifikan oleh perangkat lunak-perangkat kode. Perbedaan antara instruksi yang kompleks dan panggilan Platform Abstraction Layer bisa halus (atau tidak ada). Desain RISC dapat menggunakan teknik implementasi yang sama untuk menangani panggilan PAL seperti halnya CISC untuk instruksi yang kompleks, termasuk menggunakan operasi yang tidak disediakan dalam set instruksi umum dengan perangkat keras khusus, menggunakan caching dan decoding yang pintar, dan menentukan operan register (meskipun CISC akan sering menggunakan register khusus mirip dengan ABI per-fungsi). Model mental yang terkait dengan CISC dapat mendorong optimalisasi tersebut. Selain itu, pengguna mungkin kurang tersinggung oleh dimasukkannya paksa "
Decoding instruksi yang relatif kompleks dapat memiliki overhead yang lebih sedikit (dan mungkin lebih tepat benar dalam niat membedakan) daripada teknik RISC pengenalan idiom yang sebanding di mana urutan instruksi diakui sebagai unit semantik. Perbedaan overhead ini akan paling terlihat dalam implementasi yang lebih kecil, tetapi overhead untuk menggunakan informasi ini mengurangi pentingnya penghematan dekode.
Informasi kontekstual tambahan dapat memfasilitasi optimasi perangkat keras. Misalnya, ketika menambah nilai dalam memori, perangkat keras dapat mengenali bahwa alamat memori digunakan dua kali (untuk memuat dan menyimpan) memberikan peluang untuk memoisasi cara cache dan caching terjemahan. Instruksi kompleks dapat memberikan informasi semacam itu secara eksplisit. Dalam instruksi yang kompleks, nilai-nilai perantara memiliki masa pakai yang eksplisit (yaitu instruksi); dengan nilai register RISC tradisional harus secara eksplisit ditimpa untuk menunjukkan akhir kehidupan. (Catatan: RISC dapat menentukan register yang selalu di-zeroed setelah setiap kali digunakan, menyediakan cara untuk menentukan nilai sementara sekali pakai. Instruksi semacam itu akan cukup kompleks.)
Jika detail implementasi tidak tersembunyi di balik lapisan abstraksi, menjadi lebih sulit untuk menggunakan arsitektur mikro yang berbeda untuk mengoptimalkan pengorbanan yang berbeda. Mengungkap detail mikroarsitektur sebagai jaminan arsitektur mengunci mikroarsitektur ke dalam jaminan yang kompatibel. Sementara perangkat lunak PAL dapat dioptimalkan sama dengan instruksi yang kompleks, seperti membutuhkan tanda perangkat keras-perangkat lunak. Pemisahan dan keragaman organisasi membuat kode lebih sulit.
Instruksi kompleks dapat memberikan akses yang dijaga ke status istimewa. Sebagai contoh, instruksi yang kompleks seringkali berupa atom sehubungan dengan interupsi. Sementara set instruksi RISC dapat menyediakan mekanisme tingkat pengguna untuk menangguhkan interupsi sementara, bahkan mungkin sesuatu seperti tertaut-beban sehingga perangkat lunak secara eksplisit mencoba ulang operasi jika terganggu, menyediakan seperti itu tidak khas untuk RISC.
Demikian pula, instruksi yang kompleks dapat memberikan akses terkontrol dan / atau penggunaan informasi istimewa. Karena operasi yang dijalankan telah mengendalikan semantik, pelanggaran hak istimewa yang sebenarnya dapat dihindari. Alternatif berorientasi RISC termasuk kode PAL (yang biasanya memiliki overhead yang signifikan) dan akses tertutup ke register konfigurasi (atau salinan bayangan register) yang memiliki beberapa status istimewa. Memberikan solusi umum (RISC) lebih sulit daripada memberikan solusi untuk satu atau beberapa kasus khusus (CISC), tetapi lebih kuat dan kurang rentan terhadap akumulasi kasus khusus. Jika seseorang percaya bahwa kasus khusus yang penting sedikit, CISC bisa lebih menarik.
Instruksi kompleks juga dapat menyembunyikan status dari perangkat lunak. Salah satu keuntungan yang menonjol dari hal itu adalah untuk menyimpan dan memulihkan konteks. Dengan instruksi yang menyimpan dan memulihkan keadaan, arsitektur hanya perlu mengkomunikasikan ukuran konteks ke OS bukan mekanisme spesifik untuk mentransfer status ke memori. Ini memungkinkan aplikasi yang berjalan pada OS lama untuk menggunakan ekstensi ISA yang menambahkan status. (Sekali lagi, perangkat lunak PAL dapat menyediakan fungsionalitas yang sama.)
Sebagian besar kompleksitas x86 berasal dari kompatibilitas di banyak ekstensi. Dengan instruksi yang kompleks dan kurang ortogonal (berguna untuk kepadatan kode), menghapus beberapa pekerjaan yang ternyata tidak diperlukan secara umum, menghindari rantai ketergantungan yang tidak perlu (misalnya, hanya satu carry bit, hanya satu register jumlah shift dinamis), menambahkan beberapa pekerjaan yang berubah untuk digunakan secara umum dan yang dapat dioptimalkan dalam instruksi yang kompleks - semua ini membutuhkan penambahan instruksi baru dan membuat ISA kurang menyenangkan secara estetika.
Dalam banyak kasus, RISC tidak akan menghadapi masalah seperti itu karena instruksi sangat ortogonal dan primitif. Dalam beberapa kasus, RISC mungkin perlu menambahkan primitif baru tetapi biasanya akan berlaku untuk lebih dari satu penggunaan.
Selain itu, begitu infrastruktur tersedia untuk mendukung instruksi yang kompleks, hambatan dikurangi untuk instruksi tambahan yang rumit. Artinya, banyak dari biaya instruksi kompleks dalam non-berulang. ISA RISC yang sangat kuat mengalami hambatan untuk memperkenalkan fitur-fitur CISCy.
Frekuensi perpanjangan x86 mungkin juga sebagian dikaitkan dengan popularitasnya untuk komputasi tujuan umum dan model prosesor pedagang (ini juga meningkatkan pentingnya kompatibilitas biner). ISA RISC sering dikaitkan dengan vendor sistem yang mendorong fokus yang lebih sempit pada aplikasi dan kurangnya persaingan untuk implementasi RISC ISA tertentu agak mengecilkan penggunaan ekstensi set instruksi untuk pemasaran. Popularitas juga membuat biaya pengembangan ekstensi baru kurang signifikan (biaya tidak berulang kurang penting pada volume yang lebih tinggi).
Filosofi kompatibilitas x86 mungkin juga bias terhadap perluasan mekanisme yang ada daripada memberikan istirahat yang lebih bersih yang berarti bahwa fitur baru lebih dipengaruhi oleh fitur yang ada. Frekuensi ekstensi yang lebih tinggi juga mendorong lebih banyak perubahan bertahap, yang mendorong mekanisme penggunaan kembali, cenderung mengurangi ortogonalitas.
Membandingkan presentasi akademik MIPS klasik (yang merupakan bagian dari MIPS versi modern dan mengecualikan berbagai ekstensi ISA opsional) ke x86 modern (yang melacak kompatibilitas biner kembali ke 16-bit 8086 dan kompatibilitas kuasi tingkat perakitan lebih jauh ke belakang) dengan semua bagasi historisnya tidak memberikan kasus terbaik untuk CISC atau kasus realistis untuk RISC.