Random standard-conforming known things that should be added to pcc:
- Currently all known usable C99 stuff is added.
Cleanup prototype parsing and checking.
Ensure that the instruction matcher do not assume that it will reclaim a register if a direct match of something else than a register is done as a leg node. This may require additions to visit and su fields in table and node.
Teach the register allocator how to allocate multiple registers at once. This is not the same as register pairs; pairing is handled as a separate register class. This is used for example when a type is not supported by the underlying hardware, like long long on i386 or long on pdp11.
Support structs and unions in TEMPs, so that their members can be optimized.
Do stack space allocations using graph coloring to minimize stack usage on small-memory machines.
Use a special STACK TEMP node when registers are spilled in pass2.
Allow for target to decide where a spilled node should end up.
Add a clever c2 pass to handle instruction interleaving.
Make parameter passing common code.
Let register allocator coalesce registers with multiple classes if they carry the same type.
Make the Sethi-Ullman computation clever enough to understand paired registers, like long long on i386. This will help on targets with few registers. The SU calculations should also be better in understanding specific instruction needs. Use pre-calculated values in external.c?
PCC has GCC compatibility enabled by default, but there are a number of language constructs that may not be fully implemented, like attributes.
There's similar work needed in the C preprocessor area. #pragmas are the first thing that comes to mind.
The i386 and amd64 are now stable enough to build most C programs, including PCC itself. More work is needed to make it available in other platforms, especially MIPS and ARM.
Testing PCC in more recent versions of supported operating systems, especially the BSD flavors.