(06-01-2020, 12:04 PM)lunatic Wrote: It can be good to offer a common architecture across a wide range of systems. Sun did that very successfully. What you describe was very common I think.
Even though the R4000 was technically a 64bit CPU, hardly anyone used that and ran a true 64bit kernel with 64bit pointers. The only machine I can remember at the moment is the SGI Challenge/Onyx (IP19 with IRIX >= 6). The smaller SGIs didn't, DEC didn't, Sony didn't, even MIPS didn't.
Well, you have to consider the timing, and go back to ~ 1992 for a moment. Back to the days when RISC would take over the world and replace the PC
10/91: Introduction of the R4000, the first general purpose 64bit RISC CPU if I'm not mistaken. At the time many RISC vendors were racing to get their 64bit products to market.
01/92: Introduction of the Crimson. Crimson was an interesting hack: a new R4000 CPU board for an existing 32bit architecture to reduce time to market. Unfortunately, the PowerPath bus of the PowerSeries would hold back the R4000 too much, so main memory had to be on the CPU board. No MP R4000 system was possible. Software was IRIX 4.0.x. People start asking for a 64bit OS (for this system, limited to 256MB RAM).
01/93: Introduction of the Challenge / Onyx, MP R4000 systems. Even though these systems supported > 2GB RAM, IRIX 5.0 did not support it. In fact, IRIX 5.0 was a bit of a disaster that nobody used unless you were the sucker who bought an Onyx, the rest was on IRIX 4.0.5. IRIX 5.0 introducted many new things: ELF binaries, what we now call the O32 ABI, large parts of IndigoMagic rewritten in the then-new and not yet standardized C++ language. Many bugs and memory leaks. There's an
infamous leaked internal memo that describes it better.
07/93: Introduction of the Indy, running IRIX 5.1. You still had to reboot it weekly due to memory leaks. The IRIX 5 software was using so much memory that a joke doing the rounds said "The Indy was the Indigo without the
go".
06/94: Introduction of the R8000 PowerChallenge and IRIX 6.0 (forked from IRIX 5.2). First OS with 64bit kernel, introduction of the 64bit ABI and a new set of compilers which later became MIPSpro. Again, this was something you didn't use unless you had no other option. The compilers were a disaster, mis-compiling valid code, and lacking instrumentation to detect portability errors in exiting code. Life was not good, but only people doing numeric simulation on big iron were suffering.
11/94: IRIX 5.3. After nearly 2 years this plugged most of the bugs in early IRIX 5. This was finally a stable and usable system. So at this moment we have a 32bit platform (IRIX 5.3) capable of running ELF-O32 binaries and a IRIX 6.0/6.1 which ran ELF-64 as well.
03/96: IRIX 6.2. The "all platforms" release: basically every system with an R4000 or better CPU will run it. But unless you had a Challenge with multiple memory boards there still was no need for 64bit pointers. Actually, most Indys shipped with only 32MB RAM. A compromise was made: entry level systems shipped a 32bit kernel, big iron (and the PowerIndigo2) a 64bit kernel. The N32 ABI was introduced which had better been called 64bit-lite or something because really, it's the best of both worlds for 64bit capable systems with < 4GB RAM. By them the MIPSpro compilers more or less worked. Life was good again.
As you can see it took a good 4 years between the introduction of the first 64bit system, and a stable OS that would bring 64bit operations to all supported systems, without wasting performance on 64bit pointers where it didn't make sense. Since IRIX 6.2, you basically have the N32 and 64bit ABIs to choose from, and O32 is legacy. You could argue that O32 should never have existed but hindsight is always 20/20 I guess.