I found the code generators for libfirm/cparser a lot easier to follow than gcc.
On Thu, Nov 12, 2020, 08:07 Philipp Klaus Krause <p...@spth.de> wrote: > Am 11.11.20 um 23:50 schrieb Bill Gaylord: > > Yes. I have no special purpose registers that you can directly access. > > The stack top register you have to use an instruction to actually look > > at or change. > > > > I can link to my horrible google sheets for my Instruction set if that > > helps at all. But basically all arithmetic logic types of instructions > > work directly on registers and can not touch the ram. You have to load > > and store from ram into the registers to access anything. > > > > I am not sure if SDCC is the best choice here: > > * You have many fully interchangeable registers. For this scenario, > Chaitin-style graph-coloring register allocators tend to be the best > choice in terms of compiler runtime vs. code quality. > * AFAIK, GCC and LLVM have Chaitin-style graph-coloring register > allocators. SDCC doesn't. > * SDCC has two registzer allocators: A linear range scan (used for > mcs51, ds390, pic14, pic16), which is fast, but doesn't generate very > good code, and the "new allocator" used for the other ports (by default, > some ports have an option to switch to the linear range scan one instead > to reduce compilation time). > * SDCC's "new allocator" can be optimal, and can deal even with highly > non-orthogonal architectures. Where there are many registers, it tends > to get slow. But it works quite well for the 9 8-bit registers used by > the z80. It has never been tried on more registers. > The allocator could be improved to be faster where registers are > interchangeable, but that has never been implemented (as the > architectures it is currently used for are non-orthogonal). > > I suspect that GCC would be the best match for your architecture. The > GCC avr port has shown that GCC can deal well with 8-bit architectures > that have many interchangeable registers. But GCC has a steep learning > curve. LLVM also might work well, but it tends to change interfaces > often, so there is quite some maintenance effort required to keep a port > current with LLVM. > > SDCC is still an option - its learning curve is less steep than that of > GCC, and interfaces are more stable than those of LLVM. But you'll have > to choose one of SDCC's register allocators (or implement a > Chaiting-style one, but that would be extra effort required). The linear > scan allocator will be fast, but give worse results than Chaitin. The > "new allocator" will be slow. It might give better results than Chaitin, > but we don't have data for that many registers. > > Philipp > > > _______________________________________________ > Sdcc-user mailing list > Sdcc-user@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/sdcc-user >
_______________________________________________ Sdcc-user mailing list Sdcc-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sdcc-user