From: SourceForge.net <no...@so...> - 2009-11-30 10:23:30
|
Bugs item #2905895, was opened at 2009-11-30 13:23 Message generated for change (Tracker Item Submitted) made by i501-q You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=520074&aid=2905895&group_id=68108 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: GCC Group: None Status: Open Resolution: None Priority: 5 Private: No Submitted By: Ilya Potrepalov (i501-q) Assigned to: Nobody/Anonymous (nobody) Summary: use -ffixed-reg registers Initial Comment: In GCC manual "3.18 Options for Code Generation Conventions": -ffixed-reg Treat the register named reg as a fixed register; generated code should never refer to it (except perhaps as a stack pointer, frame pointer or in some other fixed role). reg must be the name of a register. The register names accepted are machine-specific and are defined in the REGISTER_NAMES macro in the machine description macro file. Code: main.c ----------------- long bug( long a, long b, long c ); register unsigned char reg16 asm( "r16" ); register unsigned char reg17 asm( "r17" ); int main( void ) { long t = bug( 1, 2, 3 ); } ----------------- bug.c: ----------------- long bug( long a, long b, long c ) { return a + b + c; } ----------------- make.bat: ----------------- avr-gcc -ffixed-r16 -ffixed-r17 -mmcu=atmega64 main.c bug.c avr-objdump -S a.out > dis.lst ----------------- dis.lst (only intresting part): ----------------- 000000a4 <main>: a4: ef 92 push r14 a6: ff 92 push r15 a8: df 93 push r29 aa: cf 93 push r28 .... c6: 0f 2e mov r0, r31 c8: f3 e0 ldi r31, 0x03 ; 3 ca: ef 2e mov r14, r31 cc: f0 e0 ldi r31, 0x00 ; 0 ce: ff 2e mov r15, r31 d0: f0 e0 ldi r31, 0x00 ; 0 d2: 0f 2f mov r16, r31 d4: f0 e0 ldi r31, 0x00 ; 0 d6: 1f 2f mov r17, r31 d8: f0 2d mov r31, r0 da: 0e 94 80 00 call 0x100 ; 0x100 <bug> ... fe: 08 95 ret ----------------- GCC use registers r16, r17 (and it did not save them). GCC must not use registers that list in -ffixed-reg options. GCC use registers r18, r19 in bultin functions when r18, r19 list in -ffixed-reg option. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=520074&aid=2905895&group_id=68108 |