From: Maarten B. <sou...@ds...> - 2024-06-25 20:17:21
|
Forest Darling wrote on 2024-06-25 15:00: > Hello all! > > I am new to using SDCC, and I am working with some legacy 8051 codebase > that is written in assembly. I would like to port one function at a > time > from assembly to C, eventually converting the entire codebase while > testing > it as I go. However, I need to be in control of how the C generated > code > uses registers/RAM. > > There are two main issues: > > 1. make the C code implement "callee" saving of registers, so that > the > calling assembly code doesn't have to be rewritten This is handled by the callee-saves pragma. See the manual. But beware that this option is not regression tested. It may even disappear in the future. > 2. make sure that the C functions do not clobber the existing global > internal RAM variables. I either need to reserve the known used > areas of > RAM (blacklist), explicitly define the RAM that is okay to use for > the > "overlay" section (whitelist), in my case using external RAM would > be > acceptable since the assembly doesn't use it except for external bus > peripherals. I could also forbid using global RAM altogether (like > the > reentrant option), but I think that might use too much stack... Either black listing or white listing will be ok. It is not possible to let the compiler use external RAM only. It will always need direct memory. But by using --stack-auto you can severely limit it. > I have tried Googling things, but I can't seem to find straightforward > documentation on function attributes that might be useful. Any insight > would be appreciated! > > Thanks, > > --Forest Maarten |