[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[avr-gcc-list] Pointers below address 32
From: |
Björn Haase |
Subject: |
[avr-gcc-list] Pointers below address 32 |
Date: |
Tue, 10 May 2005 00:10:15 +0200 |
User-agent: |
KMail/1.7.1 |
Jörg Wunsch wrote:
>I'm not sure. On the AVR, memory address 0 is an alias for r0. Thus,
>by dereferencing a NULL pointer, you're touching whatever r0 (rather
>r0/r1) points to. As this can touch anywhere (including memory-mapped
>IO devices), the behaviour is completely undefined, and you should
>probably avoid that kind of program anyway.
I never tried it, but is it actually really possible to access registers by
using pointer expressions? If that's possible, one could possibly shorten the
function prologues and epilogues considerably when optimizing for size. E.g.
with a sequence like
ldi r30,26
ldi r31,0
ldi r27,12 ; Save 12 registers starting from r(26-1) == r25
loop:
ld __tmp_reg__,-z
push __tmp_reg__
dec r27
brne loop
Yours,
Björn
- [avr-gcc-list] Pointers below address 32,
Björn Haase <=