Re: push r1, pop r0
Szikra Istvan <[email protected]> Tue, 7 Nov 2017 22:17:10 +0100
| Newsgroups | gmane.comp.hardware.avr.gcc |
|---|---|
| Message-ID | <CAESJyvjvCppfu+Cgw-Fhke8gMZ6qme3o5Yaww_2VvgmV0vsZvA@mail.gmail.com> |
Hi Matthijs, I believe you are right, that makes sense. (I should have realized that, but it was a quite a while ago I read/wrote AVR asm... well you learn something new every day;) Thank you. It was compiled with -O1. Compiling with -Os does not seem to make a difference. Best regards, Szikra Istvan On Tue, Nov 7, 2017 at 9:48 PM, Matthijs Kooijman <[email protected]> wrote: > Hi Szikra, > > I believe these pushes and pops are just meant to allocate 2 bytes on > the stack. > > > 222: cd b7 in r28, 0x3d ; 61 > > 224: de b7 in r29, 0x3e ; 62 > This loads Y with SP, so the location of the 2 pushed bytes > > > 226: 2e b7 in r18, 0x3e ; 62 > > 228: 8d b7 in r24, 0x3d ; 61 > > 22a: 90 e0 ldi r25, 0x00 ; 0 > > 22c: 92 2b or r25, r18 > This is the load SP from your code variable > > > 22e: 89 83 std Y+1, r24 ; 0x01 > > 230: 9a 83 std Y+2, r25 ; 0x02 > This stores SP to your sp variable on the stack > > > 232: 89 81 ldd r24, Y+1 ; 0x01 > > 234: 9a 81 ldd r25, Y+2 ; 0x02 > This loads your sp variable into the return value > > I wonder why this even forces the value onto the stack, since that's > really not needed at all. Perhaps the "volatile" on your "sp" variable > causes this, or perhaps you're compiling without optimization? > > Gr. > > Matthijs > _______________________________________________ AVR-GCC-list mailing list [email protected] https://lists.nongnu.org/mailman/listinfo/avr-gcc-list