https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66511
--- Comment #3 from Georg-Johann Lay <gjl at gcc dot gnu.org> --- (In reply to Matthijs Kooijman from comment #2) > So, IIUC, this is quite hard to fix? Either you use lib functions, which > prevents the optimizer from just relabeling or coyping registers to apply > shifting, or you don't and then more complex operations will become very > verbose and messy? avr-gcc is using lib functions, but not as libcall but as transparent call instead. You'll find the implementation in avr-dimode.md. avr-gcc has no proper DImode support. For reasoning cf. the comments in the head of that file.