https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109476
Bug ID: 109476
Summary: Missing optimization for 8bit/8bit multiplication /
regression
Product: gcc
Version: 12.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: klaus.doldinger64 at googlemail dot com
Target Milestone: ---
For avr-gcc > 4.6.4 the follwing function
uint16_t mul(const uint8_t a, const uint16_t b) {
return static_cast<uint8_t>((b >> 8) + 0) * a ;
}
produces suboptimal
mul(unsigned char, unsigned int):
mov r18,r23
ldi r19,0
mov r20,r24
mul r20,r18
movw r24,r0
mul r20,r19
add r25,r0
clr __zero_reg__
ret
whereas avr-gcc 4.6.4 produces optimal
mul(unsigned char, unsigned int):
mul r23,r24
movw r24,r0
clr r1
ret