The following five patches are the latest in my ongoing work to replace the hard-coded __int128 type with a more flexible __int<N> system that allows target-specific types that correspond to partial-int modes. Specifically, this will allow targets to have pointers that aren't powers-of-two in size. Tested on x86-64 with no regressions and msp430-elf with a few where I couldn't figure out how to fix the testsuite to properly detect the msp430's 20-bit pointer size (but the msp430 results had a lot more new passes with my patches ;)
I'm pretty sure I've addressed everyone's concerns, and once again I've manually split up the ChangeLog and patch into multiple posts for the convenience of review.... __intN patch 1/5: convert-move optimization A standalone patch that allows targets to provide a converter (trunc/extend) between *any* two modes. Needed for the msp430 patch. __intN patch 2/5: Fix assumptions about mode precisions Many places in gcc use TYPE_SIZE instead of TYPE_PRECISION. This patch set fixes many (I doubt I found *all* of them) such cases. __intN patch 3/5: main __int128 -> __intN conversion. This is the main part of the patch. Doesn't require the other patches for targets that only have power-of-two pointers. __intN patch 4/5: testsuite updates Some of the tests had their own assumption about pointer sizes :-P __intN patch 5/5: msp430-specific changes For completeness, this is the msp430-specific fixes and optimizations to fully support 20-bit pointers.