Just a quick note since I haven’t put any commits up in a while.
After my previous post about abandoning the JIT case in favor of a quick static compiler with a distributed type system, I spent some time in December adapting the TCC codebase to run on Viridis infrastructure. I was finishing up with that, but hadn’t gotten to testing when the holidays hit, and then I left IBM at the end of January to start at AMD and so I sort of avoided freetime programming with the knowledge that soon I’d be knee deep in establishing a new project.
The good news is that I’m paid to hack on x86 now instead of PowerPC and, once again, I owe a new job to experience gained with Viridis. In a lot of ways I’m far more familiar with x86 anyway. I was paid to write PowerPC assembly on occasion, and I was intimately familiar with the guts of the architecture thanks to being conversant in Linux
/arch/powerpc and the programmer’s manual, but that’s quite different than actually sitting down and writing that support from scratch like I’ve done on x86. I hit the ground running at AMD, and firing up QEMU to debug on x86 makes me think of Viridis every time.
Anyway, the bottom line is that I expect to start hacking again soon, even though it’s going to be a while before code actually hits the public repo. My next step is to learn how TCC generates assembly in memory and how I’m going to link that assembly to the kernel and potentially other libraries/programs. My immediate goal is to be able to compile some C source into a program that can use kernel syscalls in the Linux fashion. After that, I can begin the more experimental stage of development, modifying TCC to have a “user mode” setting that accepts input in a C dialect without memory explicit pointers or unrestricted type casting, including giving consideration to the structure of the program fragments and how they’ll be scheduled below the task level.