| ▲ | Joker_vD 3 hours ago | |||||||||||||
Honestly, x86 is not nearly as CISC as those go. It just has a somewhat developed addressing modes comparing to the utterly anemic "register plus constant offset" one, and you are allowed to fold some load-arithmetic-store combinations into a single instruction. But that's it, no double- or triple-indexing or anything like what VAXen had.
And all it really takes to support this is just adding a second (smaller) ALU on your chip to do addressing calculations. | ||||||||||||||
| ▲ | jcranmer 42 minutes ago | parent | next [-] | |||||||||||||
One of my biggest bugbears in CS instruction is the overdue emphasis on RISC v CISC, especially as there aren't any really good models to show you what the differences are, given the winnowing of ISAs. In John Mashey's infamous posts [1] sort of delineating an ordered list from most RISCy to most CISCy, the architectures that are the most successful have been the ones that really crowded the RISC/CISC line--ARM and x86. It also doesn't help that, since x86 is the main goto example for CISC, people end up not having a strong grasp on what features of x86 make it actually CISC. A lot of people go straight to its prefix encoding structure or its ModR/M encoding structure, but honestly, the latter is pretty much just a "compressed encoding" of RISC-like semantics, and the former is far less insane than most people give it credit for. But x86 does have a few weird, decidedly-CISC instruction semantics in it--these are the string instructions like REP MOVSB. Honestly, take out about a dozen instructions, and you could make a solid argument that modern x86 is a RISC architecture! | ||||||||||||||
| ▲ | rocqua 2 hours ago | parent | prev | next [-] | |||||||||||||
There's also a lot of specialized instructions like AES ones. But the main thing that makes x86 CISC to me is not the actual instruction set, but the byte encoding, and the complexity there. | ||||||||||||||
| ||||||||||||||
| ▲ | andrepd 2 hours ago | parent | prev [-] | |||||||||||||
Would this matter for performance? You already have so many execution units that are actually difficult to keep fully fed even when decoding instructions and data at the speed of cache. | ||||||||||||||