RISC-V may have hastened its demise, but the writing was on the wall for a long time.
RISC-V may have hastened its demise, but the writing was on the wall for a long time.
https://www.jwhitham.org/2016/02/risc-instruction-sets-i-hav...
Sun opened the SPARC T2 a decade ago, and it certainly has not become popular:
https://www.oracle.com/technetwork/systems/opensparc/openspa...
It does seem that RISC-V corrects a number of these design eccentricities. SPARC did not move the market an inch with an open release - perhaps MIPS will fail just as spectacularly.
Future iterations of MIPS can be governed by a multi-stakeholder community, avoiding past mistakes and designing for future requirements, including AI/ML and other domain-specific use cases.
> Security and Hardening by Steven Barth - OpenWrt Summit
> Introducing new and ongoing security improvements to bleeding edge OpenWrt. This talk describes the new default toolchain featuring musl libc, enabled hardening including ASLR, SSP as well as OpenWrt's novel jailing (jailfs and seccomp) and package signing features (based on Curve25519).
> https://www.youtube.com/watch?v=DNYvIrI5Bbs
On the other hand, OpenWrt implemented full system-wide ASLR recently. NX and jailfs is still a WIP.
SPARC is beyond crazy (esp. with its delays), ARM hopelessly balkanized, Intel more than crazy, RISC-V immature. POWER is the only other pretty good assembly ISA, but too expensive.
The worst MIPS problem is the softfloat compiler crazyness (executable stack), but that's a gcc/binutils sin from a decade ago.
???
I disagree. I'm not really a MIPS user, but I've managed to encounter some branch delay slot issues, and, as an x86 system programmer, I can only imagine how unpleasant they must be. Here are some reasons:
- The program counter does not adequately describe the execution state of the CPU. In other words, starting or resuming execution with a given set of register values and a given address will do the wrong thing if you're resuming in a branch delay slot.
- Handling a fault due to an instruction in a branch delay slot seems highly problematic. Suppose you have a load in a delay slot and the load touches swapped-out memory. How is the operating system supposed to page in that memory and resume?
- Linux, and probably other operating systems, will emulate FPU instructions if the CPU doesn't support them. Emulating FPU branch instructions is deeply problematic because of delay slots.
The third one I imagine is a pain in the ass, but I've been lucky enough to always compile MIPS for the exact CPU I was running it on.
You have to make sure you can map two pages at once in case the branch/delay pair straddles a TLB boundary, but you have to screw up pretty bad to not allow that.
If you try this on hardware that also supports software single stepping (which x86 does, but MIPS seems not to by default), then you have to be extra creative to guarantee forward progress. The same issue arises if you have data breakpoints. And if the branch loads from MMIO space, you have a problem.
One is basically necessary to get decent code density (and thus better cache utilisation and memory bandwidth minimisation, something that x86 was winning at for a long time --- and one of the worst parts of traditional RISC), the other is purely syntactic sugar (see the horrible GAS/AT&T syntax) and an order which I find most sensible (especially considering comparison and subtraction, as well as the direction of the assignment operator in the majority of programming languages that exist.)
I'm not saying it would have become any more popular without this, but the fact that Oracle purchased Sun probably didn't help adoption here, at all.
At least with luck those features are coming to ARM v8.3+ as well.
What do you mean? That it includes protection modes which make C "safe"?
https://swisdev.oracle.com/_files/What-Is-ADI.html
https://swisdev.oracle.com/_files/M7_Preso.pdf
This is enabled by default in Solaris since version 11.
"Secure Software - Made Simple with Software in Silicon"
https://www.youtube.com/watch?v=krOhcjF5Fsw
https://lazytyped.blogspot.com/2016/12/hardware-buffer-overf...
ARM v8.5 memory tagging extensions aims to try to achieve parity with it.
https://www.youtube.com/watch?v=IbisEjzoxTY
Google is planning to make use of them on the native layer of Android when they eventually became available.
Meanwhile Intel has decided to remove MPX from x86/x64 because no one is adopting them on Intel/AMD CPUs.
EDIT: Got the ARM version wrong.
https://news.ycombinator.com/item?id=18705340
You need to be a bit comfortable with Solaris and enterprise web sites to dig it out.
In all likelihood, MIPS would have changed hands a few more times then been shelved indefinitely by an ultimate licensor that saw no further value in it.
In any case it's good news - MIPS support in Linux is already fairly decent so having multiple, credible open-source vendors in the space should be good for competition and adoption.