Worth the RISC 🚂


Credence is done. The ARM64 engineering has been both incredible and exhausting, but it's the last backend I planned to support. The work on x86-64 and ARM64 together has been remarkable to say the least:

It is my Magnum Opus

That's the 2025-2026 github commit graph. Many 8+ hours days, and a few too many sleepless nights. It is my Magnum Opus. A milestone of professional and personal research since the idea was first conceived. The first commit in the parser is about 7 years old. Since then, I've designed languages and even built compilers at my workplace.

AArch64 is the Future

The differences in CPU design, register file, and ISA between arm64 and x86-64 make me want to throw my $4000 PC away. It is eye-opening. No wonder Apple's M series laptops are so great.

ARM64 has 32 128-bit registers. And the "word" size is 64bits. You read that right, 32. They're available for vector instructions, SIMD, and SVE/SVE2. Truthfully, I don't think it matters how much money you spend on an x86-64 CPU - it will never compete due to historical compatibility. The word size in x86-64 is still 16 bits. That's two bytes.

I had to rewrite a lot of how things worked to make better use of arm64. I can't tell if I'm happy I started with x86-64 or not; almost everything changed.

For what it's worth, it led to some beautiful C++ code. I wanted to reuse as much as possible, so each backend roughly follows the same critical path. Each with a memory access mediator or "facade", specialized accessor and inserter types for data objects and algebraic operators, a pushdown stack, and the IR instruction visitor. You can read more about the backend overview here.

The RISC design of ARM allows you to do what would be 4 or 5 instructions in x84 in one. Including simple things like moving data across registers:

stp x0, x1, [sp, #-16]!   ; Push x0 and x1 to stack (pre-index)
ldp x0, x1, [sp], #16   ; Pop stack into x0 and x1 (post-index)


The arm64 ISA has no push or pop concept - and you clearly don't need it; moreover, the work is done in fewer cycles, to boot!


I'm exhausted, to say the least. My next project will be something completely different, something closer to hardware.

Robotics, maybe?