[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[avr-gcc-list] Wrong excution order in 4.1.1, but not 3.4.5, regression?
From: |
Bob Paddock |
Subject: |
[avr-gcc-list] Wrong excution order in 4.1.1, but not 3.4.5, regression? |
Date: |
Mon, 19 Feb 2007 16:49:14 -0500 |
User-agent: |
Opera Mail/9.10 (Win32) |
I'm seeing something in 4.1.1 that is not making
sense. The code produced is clearly the wrong
order, in 4.1.1. Code from 3.4.5 is the correct order.
Optimization in both cases is set for -Os;
I'm using the same source code/Makfile and
pointing at different versions of WINAVR,
between 4.1.1 and 3.4.5.
I've looked at the known problem list, but
I could not related this to any of those.
http://www.nongnu.org/avr-libc/bugs.html
I can't seem to get a good cut down example
that produces the error. The code
effectively looks like this:
static volatile PGM_UP pattern_flash_ptr_u8_v; /* IRQ updates PORTB */
static volatile PGM_UP pattern_flash_ptr_reload_u8_v;
[PGM_UP is unsigned version of PGM_P.]
do{
pattern_flash_ptr_u8_v = pattern_flash_ptr_reload_u8_v = (PGM_UP)
pgm_read_word( &pattern_table[ 0 ] );
}while( mode_button_press_count_u8 < max_button_presses_u8 );
In the real code 'mode_button_press_count_u8' actually could
change its value inside of the do{}while(),
and the pattern_table[ 0 ] index would
be a variable. I made these changes to the real code,
and the problem persists.
For:
pattern_flash_ptr_u8_v = pattern_flash_ptr_reload_u8_v = (PGM_UP)
pgm_read_word( &pattern_table[ 0 ] );
4.1.1 produces:
3ca: e6 e8 ldi r30, 0x86 ; 134 [Address of pattern_table]
3cc: f0 e0 ldi r31, 0x00 ; 0
3ce: c8 95 lpm
3d0: c0 2d mov r28, r0
3d2: 31 96 adiw r30, 0x01 ; 1
3d4: c8 95 lpm
3d6: d0 2d mov r29, r0
3d8: 0c 2f mov r16, r28 [Missed optimization, but that is
separate matter for an other time. r16/r17 was loaded above only to be
overwritten here, and not needed below.]
3da: 1d 2f mov r17, r29
3dc: ff 20 and r15, r15
3de: c9 f6 brne .-78 ; 0x392 <main+0x74> [Jump to
do{]
3e0: 10 93 7b 00 sts 0x007B, r17 [This is outside of the do{}while() so
the code fails.]
3e4: 00 93 7a 00 sts 0x007A, r16
3e8: d0 93 7d 00 sts 0x007D, r29
3ec: c0 93 7c 00 sts 0x007C, r28
3.4.5 produces this, correct code:
pattern_flash_ptr_u8_v = pattern_flash_ptr_reload_u8_v =
(PGM_UP) pgm_read_word( &pattern_table[ 0 ] );
3ec: ef e3 ldi r30, 0x3F ; 63 [Address of pattern_table]
3ee: f0 e0 ldi r31, 0x00 ; 0
3f0: c8 95 lpm
3f2: 80 2d mov r24, r0
3f4: 31 96 adiw r30, 0x01 ; 1
3f6: c8 95 lpm
3f8: 90 2d mov r25, r0
3fa: 90 93 80 00 sts 0x0080, r25 [This is inside the do{}while(), code
works. Doesn't have optimization issues either.]
3fe: 80 93 7f 00 sts 0x007F, r24
402: 90 93 7e 00 sts 0x007E, r25
406: 80 93 7d 00 sts 0x007D, r24
}
}while( mode_button_press_count_u8 < max_button_presses_u8 );
40a: 90 91 79 00 lds r25, 0x0079
40e: 80 91 60 00 lds r24, 0x0060
412: 98 17 cp r25, r24
414: 08 f4 brcc .+2 ; 0x418 <main+0xdc> [Exit
do{}while]
416: c5 cf rjmp .-118 ; 0x3a2 <main+0x66> [Jump to
do{]
- [avr-gcc-list] Wrong excution order in 4.1.1, but not 3.4.5, regression?,
Bob Paddock <=
- RE: [avr-gcc-list] Wrong excution order in 4.1.1, but not 3.4.5,regression?, Eric Weddington, 2007/02/19
- Re: [avr-gcc-list] Wrong excution order in 4.1.1, but not 3.4.5, regression?, Bob Paddock, 2007/02/19
- Re: [avr-gcc-list] Wrong excution order in 4.1.1, but not 3.4.5, regression?, David Brown, 2007/02/20
- Re: [avr-gcc-list] Wrong excution order in 4.1.1, but not 3.4.5,regression?, Graham Davies, 2007/02/20
- Re: [avr-gcc-list] Wrong excution order in 4.1.1, but not 3.4.5, regression?, Dave Hansen, 2007/02/20
- Re: [avr-gcc-list] Wrong excution order in 4.1.1, but not 3.4.5, regression?, David Brown, 2007/02/20
- Re: [avr-gcc-list] Wrong excution order in 4.1.1, but not 3.4.5,regression?, Graham Davies, 2007/02/20
- Re: [avr-gcc-list] Wrong excution order in 4.1.1, but not 3.4.5, regression?, David Brown, 2007/02/21
- Re: [avr-gcc-list] Wrong excution order in 4.1.1, but not 3.4.5, regression?, Joerg Wunsch, 2007/02/20
- Re: [avr-gcc-list] Wrong excution order in 4.1.1, but not 3.4.5, regression?, Bob Paddock, 2007/02/20