Фрагмент исходного кода.
Код
r = (r << 1) + (r << 3);
Преобразуется в умножение на 10, с использованием кода откуда-то из libgcc. В результате получаю.
Код
s2f.o: In function `f2s':
s2f.c:(.text+0xac): undefined reference to `__muluhisi3'
Использовать стартап код и умножения из libgcc не планирую. Проблема решается с -O2, однако хочется указать -Os.
Код
$ avr-gcc --version
avr-gcc (Gentoo 4.7.2 p1.1, pie-0.5.5) 4.7.2
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Сейчас собираю с такими ключами.
Код
CFLAGS = -mmcu=atmega88
CFLAGS += -fconserve-stack
CFLAGS += -fno-strict-aliasing
CFLAGS += -fno-tree-loop-ivcanon
CFLAGS += -fno-builtin
CFLAGS += -std=c99 -pipe -Wall -O2
AFLAGS = -mmcu=atmega88
LFLAGS = -m avr4 -T linker.ld
Какие варианты решения?
p.s. наверно проще всего написать свою умножалку на 10 через mul, может даже быстрее будет.