https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70677
Bug ID: 70677
Summary: Suboptimal cond on AVR: unneeded stack frame
Product: gcc
Version: 5.3.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: night_ghost at ykoctpa dot ru
Target Milestone: ---
here a lot of commands to deal with stack frame for only one byte
//(out of scope:
struct Point {
byte x;
byte y;
};
static boolean inline is_alt(point p){
return (p.y & 0x40);
}
//)
static void panVel(point p){
1e14: cf 93 push r28
1e16: df 93 push r29
1e18: 1f 92 push r1
1e1a: cd b7 in r28, 0x3d ; 61
1e1c: de b7 in r29, 0x3e ; 62
printSpeed(cnvGroundSpeed(),is_alt(p));
1e1e: 96 fb bst r25, 6
1e20: 22 27 eor r18, r18
1e22: 20 f9 bld r18, 0
1e24: 29 83 std Y+1, r18 ; 0x01
1e26: 0e 94 33 09 call 0x1266; 0x1266 <_ZL14cnvGroundSpeedv>
1e2a: ab 01 movw r20, r22
1e2c: bc 01 movw r22, r24
}
1e2e: 29 81 ldd r18, Y+1 ; 0x01
1e30: 87 e8 ldi r24, 0x87 ; 135
1e32: 92 e0 ldi r25, 0x02 ; 2
1e34: 0e 94 c6 0e call 0x1d8c; 0x1d8c <_ZL10printSpeedPKcfh>
1e38: 0f 90 pop r0
1e3a: df 91 pop r29
1e3c: cf 91 pop r28
1e3e: 08 95 ret
R18 can be PUSH'ed, moved to r28 or even calculated after call to x1266