LLVM Bugzilla is read-only and represents the historical archive of all LLVM issues filled before November 26, 2021. Use github to submit LLVM bugs

Bug 52215 - Missing register aliases for AVR for compatibility with gcc-avr's inline assembly
Summary: Missing register aliases for AVR for compatibility with gcc-avr's inline asse...
Status: NEW
Alias: None
Product: libraries
Classification: Unclassified
Component: Backend: AVR (show other bugs)
Version: 12.0
Hardware: Other other
: P enhancement
Assignee: Unassigned LLVM Bugs
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2021-10-19 06:15 PDT by Marian Buschsieweke
Modified: 2021-10-19 06:15 PDT (History)
1 user (show)

See Also:
Fixed By Commit(s):


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Marian Buschsieweke 2021-10-19 06:15:18 PDT
E.g. the avr-libc but also other AVR code written for gcc-avr heavily uses the following aliases:

__tmp_reg__
__SREG__
__zero_reg__
__SP_H__
__SP_L__

also the aliases __RAMPZ__ and __EIND__ are occasionally used.

See [1] for their definitions.

This is the first time I looked into the LLVM source code, so I might be talking nonsense here. I tried to fix this by amending lib/Target/AVR/AVRRegisterInfo.td like this:

-def R0  : AVRReg<0,  "r0">,  DwarfRegNum<[0]>;
-def R1  : AVRReg<1,  "r1">,  DwarfRegNum<[1]>;
+def R0  : AVRReg<0,  "r0", [], ["__tmp_reg__"]>,  DwarfRegNum<[0]>;
+def R1  : AVRReg<1,  "r1", [], ["__zero_reg__"]>,  DwarfRegNum<[1]>;

etc. - but to no avail.

I also tried to just emit assignments for the alias via `void AVRAsmPrinter::emitStartOfAsmFile(Module &M)`, but this didn't work for me either.

I think that adding the aliases should be relatively trivial for someone with same basic understanding of the LLVM code - which I sadly lack.

Also note that according to [1] the AVRtiny family has a different mapping (e.g. __tmp_reg__ usually is r0, but on AVRtiny it is r16).

https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=libgcc/config/avr/lib1funcs.S;h=ac101b49f03e340e93e16283eb47146ef47290c2;hb=HEAD