Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is x86 ugly? Why is it considered inferior when compared to others? [closed]

I've been reading some SO archives and encountered statements against the x86 architecture.

  • Why do we need different CPU architecture for server & mini/mainframe & mixed-core? says
    "PC architecture is a mess, any OS developer would tell you that."

  • Is learning Assembly Language worth the effort? (archived) says
    "Realize that the x86 architecture is horrible at best"

  • Any easy way to learn x86 assembler? says
    "Most colleges teach assembly on something like MIPS because it's much simpler to understand, x86 assembly is really ugly"

and many more comments like

  • "Compared to most architectures, X86 sucks pretty badly."

  • "It's definitely the conventional wisdom that X86 is inferior to MIPS, SPARC, and PowerPC"

  • "x86 is ugly"

I tried searching but didn't find any reasons. I don't find x86 bad probably because this is the only architecture I'm familiar with.

Can someone kindly give me reasons for considering x86 ugly/bad/inferior compared to others.

like image 216
claws Avatar asked Apr 21 '10 02:04

claws


People also ask

Why is x86 so inefficient?

The main disadvantage of x86 is the variable length instruction encoding. That means that each instruction depends on the one before it. On most ARM flavors, instructions are 32 bits long, so to decode 3 instructions you fetch 96 bits.

How long does x86 have left?

Arguably, within the next 5-10 years, the x86 architecture will go obsolete. It seems extremely hard for Intel and AMD to turn this reality around. Instead, Intel and AMD seem to be in the same position, today, as Motorola and IBM were back in 1995 and 2005 when Apple decided to move its computers to Intel x86 CPUs.

Why is ARM so much more efficient than x86?

ARM chips, by design, are much more power-efficient than x86 CPUs. They're RISC processors, so they're simpler in design. Also, things like ARM's big. LITTLE configuration help battery life and overall efficiency greatly.

What do you mean by x86?

What Does X86 Mean? X86 is the term used to denote the microprocessor family based on the Intel 8086 and 8088 microprocessors. These microprocessors ensure backward compatibility for instruction set architectures. Initially x86 started with an 8-bit instruction set, but then grew to 16- and 32-bit instruction sets.


1 Answers

Couple of possible reasons for it:

  1. x86 is a relatively old ISA (its progenitors were 8086s, after all)
  2. x86 has evolved significantly several times, but hardware is required to maintain backwards compatibility with old binaries. For example, modern x86 hardware still contains support for running 16 bit code natively. Additionally, several memory-addressing models exist to allow older code to inter-operate on the same processor, such as real mode, protected mode, virtual 8086 mode, and (amd64) long mode. This can be confusing to some.
  3. x86 is a CISC machine. For a long time this meant it was slower than RISC machines like MIPS or ARM, because instructions have data interdependency and flags making most forms of instruction level parallelism difficult to implement. Modern implementations translate the x86 instructions into RISC-like instructions called "micro-ops" under the covers to make these kinds of optimizations practical to implement in hardware.
  4. In some respects, the x86 isn't inferior, it's just different. For example, input/output is handled as memory mapping on the vast majority of architectures, but not on the x86. (NB: Modern x86 machines typically have some form of DMA support, and communicate with other hardware through memory mapping; but the ISA still has I/O instructions like IN and OUT)
  5. The x86 ISA has a very few architectural registers, which can force programs to round-trip through memory more frequently than would otherwise be necessary. The extra instructions needed to do this take execution resources that could be spent on useful work, although efficient store-forwarding keeps the latency low. Modern implementations with register renaming onto a large physical register file can keep many instructions in flight, but lack of architectural registers was still a significant weakness for 32-bit x86. x86-64's increase from 8 to 16 integer and vector registers is one of the biggest factors in 64bit code being faster than 32-bit (along with the more efficient register-call ABI), not the increased width of each register. A further increase from 16 to 32 integer registers would help some, but not as much. (AVX512 does increase to 32 vector registers, though, because floating-point code has higher latency and often needs more constants.) (see comment)
  6. x86 assembly code is complicated because x86 is a complicated architecture with many features. An instruction listing for a typical MIPS machine fits on a single letter sized piece of paper. The equivalent listing for x86 fills several pages, and the instructions just do more, so you often need a bigger explanation of what they do than a listing can provide. For example, the MOVSB instruction needs a relatively large block of C code to describe what it does:

    if (DF==0)    *(byte*)DI++ = *(byte*)SI++;  else    *(byte*)DI-- = *(byte*)SI--; 

    That's a single instruction doing a load, a store, and two adds or subtracts (controlled by a flag input), each of which would be separate instructions on a RISC machine.

    While MIPS (and similar architectures) simplicity doesn't necessarily make them superior, for teaching an introduction to assembler class it makes sense to start with a simpler ISA. Some assembly classes teach an ultra-simplified subset of x86 called y86, which is simplified beyond the point of not being useful for real use (e.g. no shift instructions), or some teach just the basic x86 instructions.

  7. The x86 uses variable-length opcodes, which add hardware complexity with respect to the parsing of instructions. In the modern era this cost is becoming vanishingly small as CPUs become more and more limited by memory bandwidth than by raw computation, but many "x86 bashing" articles and attitudes come from an era when this cost was comparatively much larger.
    Update 2016: Anandtech has posted a discussion regarding opcode sizes under x64 and AArch64.

EDIT: This is not supposed to be a bash the x86! party. I had little choice but to do some amount of bashing given the way the question's worded. But with the exception of (1), all these things were done for good reasons (see comments). Intel designers aren't stupid -- they wanted to achieve some things with their architecture, and these are some of the taxes they had to pay to make those things a reality.

like image 91
Billy ONeal Avatar answered Sep 21 '22 21:09

Billy ONeal