rustc_codegen_gcc: Progress Report #2
What is rustc_codegen_gcc?
rustc_codegen_gcc is a GCC codegen for rustc, meaning that it can be loaded by the existing rustc frontend, but benefits from GCC by having more architectures supported and having access to GCC’s optimizations.
GCC patches status
In a previous article, I mentioned that rustc_codegen_gcc required a few patches in GCC. Today, I’m happy to tell you that the first one was merged in GCC. Now that I have write access to the GCC repo, it’s only a matter of time before my other patches are merged. The next one is waiting for approval and should get merged soon.
Status of merging into rustc
I opened a PR to merge rustc_codegen_gcc into rustc. Currently, it’s waiting for reviews and guidance to go forward. When it gets merged, we’ll be able to make some useful changes to make it easier to implement the gcc codegen and some required changes to implement some missing features in rustc_codegen_gcc.
Godbolt
Thanks to the amazing work of dkm, we can now test rustc_codegen_gcc in Godbolt: The Compiler Explorer. Here’s an example of using this Rust codegen.
(Please ignore the generated __gccGlobalInit*
functions as it’s
currently a workaround used because libgccjit does not properly
support global variable initialization for now. That will be fixed in
the future.)
State of rustc_codegen_gcc
Not much progress on this side: I implemented the popcount intrinsic
manually (because gcc would generate a call to some function, which
would not work in no-std
).
Apart from that, I fixed things to make it easier to add this gcc
codegen in godbolt and for my PR to merge it into rustc.
Thanks for your support!
I wanted to personally thank all the people that sponsor this project: your support is very much appreciated.
A special thanks to the following sponsors:
-
saethlin
-
embark-studios
-
TraverseResearch
-
Shnatsel
Also, a big thank you to the rest of my sponsors:
-
repi
-
nevi-me
-
Alovchin91
-
oleid
-
acshi
-
joshtriplett
-
djc
-
TimNN
-
steven-joruk
-
colelawrence
-
zmanian
-
alexkirsz
-
regiontog
-
berkus
-
gilescope
-
wezm
-
belzael
-
evanrichter
-
stuhood
-
yerke
-
bes
-
raymanfx
-
seanpianka
-
kkysen
-
messense
-
riking
-
rafaelcaricio
-
Lemmih
-
memoryruins
-
pthariensflame
-
senden9
-
Hofer-Julian
-
Jonas Platte
-
spike grobstein
-
Oliver Marshall
-
Sam Harrington
-
Cass
-
Jonas
-
Jeff Muizelaar
-
Robin Moussu
-
Chris Butler
-
Dakota Brink
-
sierrafiveseven
-
Joseph Garvin
-
Paul Ellenbogen
-
icewind
-
Sebastian Zivota
and a few others who preferred to stay anonymous.