Reese Riverson
Administrator
- Messages
- 40,314
- Tings
- 534,217
Yeah, that's pretty much what makes the Intel fiasco pretty outrageous, more so with the shady bullshittery they're doing.
Can’t we juste create an executable format where we pad every instruction with 0x90 so they’re all of equal length, then tell the decoder about this? A single word from you and I’m patenting the shit out of this.From what I've heard, the complexity and inefficiency in designing a modern x86 processor comes from the variable-length instructions, which mean the decoder can't process multiple instructions in parallel, without fully understanding each one to find out where the next one is.
Well, on newer processors, you don't even need to spam 0x90, as there are several multi-byte NOP instructions available: https://stackoverflow.com/questions...-commonly-understood-macros-or-other-notationCan’t we juste create an executable format where we pad every instruction with 0x90 so they’re all of equal length, then tell the decoder about this? A single word from you and I’m patenting the shit out of this.From what I've heard, the complexity and inefficiency in designing a modern x86 processor comes from the variable-length instructions, which mean the decoder can't process multiple instructions in parallel, without fully understanding each one to find out where the next one is.![]()
If memory serves x86 came from the fact that the ISA had come from the Intel 8086 right? (Also if memory serves I think that was a 16-bit CPU as well)
Correctamundo!I suppose for convenience they ended up keeping that naming scheme, but I've always taken x64 to be shorthand for the "x86-64" title, as it's the 64-bit variant of the original x86 ISA.
Well, the 8086 (which like you said was 16-bit) was followed by the 80186, 80286, 80386 and 80486, and each one brought new features. When you're targetting some subset of those features, but it's not really relevant which, it's basically 80x86, as in, the middle digit doesn't matter. Then that's shortened to just x86!If memory serves x86 came from the fact that the ISA had come from the Intel 8086 right? (Also if memory serves I think that was a 16-bit CPU as well)
Correctamundo, the i386 brought in 32-bit registers and addressing, and most importantly, paged virtual memory!Yeah, I think 32-bit came around with the 386, if I remember correctly?
Yup. IA-32 is Intel Architecture 32, which refers to the mainstream 32-bit architecture introduced with the 386. They were originally hoping that IA-64, the Itanium, would supersede it, since it included an x86 compatibility layer. But AMD outflanked them with their 64-bit extensions to x86, which gained way more mainstream acceptance, since they worked much better for most usecases.They do sometimes call x86 x32 (rare) or ia32. The latter is confusing because ia64 is a whole different architecture - not x86_64. And I've also seen nomenclatures like i386/i686.
So i386 refers to the baseline 32-bit architecture introduced by the 386 processor, which includes paged virtual memory, 32-bit addressing, etc. Then i486 and i586 are supersets of that using features introduced with the 486 and Pentium respectively.I've seen i686 mentioned on Linux before yeah, and I remember Windows XP having the i386 folder on the disc.
Oh, I remember Geoff Chappell had a post or a series of posts on the subject. Turns out it was actually enabled pre-WinXP-SP1, and then they disabled it. Their excuse was that it's a stability guard against third-party PAE-unaware drivers as you say, and then Geoff discovered, that the only actual "offending" drivers are those coming from Microsoft itself.However, Microsoft disabled this extension on desktop Windows, to prevent PAE-unaware third-party drivers from crashing the system. So in practice only 32-bit Linux can address 64 GiB, not 32-bit Windows…
Ah, thanks for linking that, it's very insightful and interesting! Yes, I knew about the server builds, so it makes more sense that it's a "product grade" thing rather than about dodgy drivers, but I guessed they hoped people would believe that there are more faulty drivers at the consumer level (probably impossible to prove or disprove). I must say, after reading all that, it sounds a bit shadier than I had thought!Oh, I remember Geoff Chappell had a post or a series of posts on the subject. Turns out it was actually enabled pre-WinXP-SP1, and then they disabled it. Their excuse was that it's a stability guard against third-party PAE-unaware drivers as you say, and then Geoff discovered, that the only actual "offending" drivers are those coming from Microsoft itself.![]()
According to Microsoft's own nomenclature, this was actually a matter of licensing. Because 32-bit editions of Windows Server builds (as long as they existed) have supported PAE and >4GB of RAM.
IIRC Intel are finally gonna fix this (for the few people who still carePluMGMK said:Oh man… Let me get this straight:
100% cursed indeed! I guess this is why people advocate for open-source hardware as well as software…
- Intel messed up the IRET instruction for returning from privileged 32-bit code to unprivileged 16-bit code in the i386, and nobody seemed to notice
- AMD messed it up in the same way in the Am386 (were they an official manufacturer of 386es at the time, and that's why they were bug-for-bug equivalent?)
- In the two decades that followed, even with all the microarchitecture updates / redesigns, this bug never got fixed by Intel or AMD
- As the years went by, people noticed there was funky stuff going on and started trying to work around it
- Eventually, when the 64-bit processors came out, it became abundantly clear what the bug was, and it took almost another decade to get a satisfactory workaround into Linux (whereas Microsoft said screw it)
- And this is just one of many such bugs that screwed up kernel functionality…