As I head down the path of “My computers are working too darn well, better tweak them more!” in my endless quest to use computers to make other computers work better so I can use them to make the first computer work better, while never actually doing anything outside this increasingly circular environment:
I’ve been curious for a while about the various forms of the x32/ILP32 ABIs for (correspondingly) x86 and ARM. They’re weird little forks, with x32 being “mostly abandoned” and ILP32 being “… wtf is that?” grade, but they have the potential, at least, to rather substantially improve things on the low power machines I prefer using. He says, from the house desktop…
Typically, OSes and applications are either 32-bit or 64-bit (both on x86 and ARM). The 32-bit processor operating modes are older, generally more restricted in register count and processor features, and end up using less memory. The newer, 64-bit operating modes typically have more registers, fancier processor features to use, and end up using a lot more RAM because the pointers are 64-bit, not 32-bit.
But.
There’s this weird little fork that nobody cares about. It’s using a 64-bit processor mode, but 32-bit pointers. You get the benefits of 64-bit operating modes (more registers, more features), and most of the memory use of the 32-bit modes (some values will still be larger, but pointers, the common one, are half the size). The downside is only 4GB of virtual memory space per process, but… for end user stuff, especially as browser have moved to process based isolation, this isn’t the end of the world.
The upside is rather more “stuff” (in terms of number of data structures and the like) you can fit in the small processor caches. As low power x86 and low power ARM boxes tend to have small processor caches (well, really, after the M1 came out, everything else has small processor caches in comparison), this should lead to some performance benefits compared to 64-bit modes, and should improve performance over 32-bit modes (especially on x86) due to the increased register count.
Except, it’s not supported, and probably mostly broken. Which is where I fit in. Because I like that sort of stuff.
So, the short of it is that I have a Gentoo x32 build going right now in a VM, I plan to try and run Clank on x32 here at some point for testing and benchmarking, and once I work out how to build a Debian-type bootstrap from absolute scratch, I’d like to get an ILP32 ARM build going for some machines as well!
If it goes passably, I might even try to package some of it up for other people to mess with!