From 0d33ff82c8b9436d83e6bf20a12de3d53c8ae591 Mon Sep 17 00:00:00 2001 From: Rob Austein Date: Sat, 17 Jun 2017 21:56:02 -0400 Subject: Fix optimization settings in HSM's build of libtfm. --- Makefile | 11 ++++++----- libraries/libtfm/Makefile | 31 +++++++++++++++++++++++++++---- 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/Makefile b/Makefile index d8c9593..e058edd 100644 --- a/Makefile +++ b/Makefile @@ -88,13 +88,14 @@ SIZE=$(PREFIX)size # The Alpha is a development platform, so set GCC optimization to a # level suitable for debugging. Recent versions of GCC have a special -# optimization setting -Og for exactly this purpose, so we use it, along -# with the flag to enable gdb symbols. +# optimization setting -Og for exactly this purpose, so we use it, +# along with the flag to enable gdb symbols. Note that some libraries +# (in particular, libtfm) may need different optimization settings, +# which is why this needs to remain a separate makefile variable. # -# If you really want optimization without debugging support, try -O2 or -# (maybe) -O3. +# If you really want optimization without debugging support, try -O2 +# or -O3. -#STM32_CFLAGS_OPTIMIZATION ?= -O2 STM32_CFLAGS_OPTIMIZATION ?= -ggdb -Og # whew, that's a lot of cflags diff --git a/libraries/libtfm/Makefile b/libraries/libtfm/Makefile index 6da552d..ceb8541 100644 --- a/libraries/libtfm/Makefile +++ b/libraries/libtfm/Makefile @@ -10,10 +10,33 @@ BITS := 8192 HDR := ${LIBTFM_SRC}/tomsfastmath/src/headers/tfm.h LIB := tomsfastmath/libtfm.a -#CFLAGS += -DTFM_X86 -#CFLAGS += -DTFM_NO_ASM - -CFLAGS += -fPIC -Wall -W -Wshadow -I${LIBTFM_SRC}/tomsfastmath/src/headers -g3 -DFP_MAX_SIZE="(${BITS}*2+(8*DIGIT_BIT))" +# See sw/thirdparty/libtfm/Makefile for compilation options. Note +# that libtfm platform-specific assembly code has opinions on the +# optimization level (and appears to be best tested with -O3). + +# Using $(subst...) here is a kludge. A cleaner approach might be for +# sw/stm32/Makefile to build up the non-variant parts of CFLAGS in a +# different variable before merging the variant and non-variant parts +# into CFLAGS, which would give us a clean copy of the non-variant +# parts to use when constructing our own CFLAGS. Later. + +# The ARM assembly code in libtfm still generates a lot of warnings of the form: +# +# warning: matching constraint does not allow a register [enabled by default] +# +# This is just a warning, the resulting library appears to work +# correctly, and the fix appears to require a nasty intervention in +# the guts of the libtfm assembly code, so we live with the warning +# for now, at least until we confirm that it hasn't already been fixed +# in a newer version of libtfm. + +STM32_LIBTFM_CFLAGS_OPTIMIZATION := -O3 -funroll-loops -fomit-frame-pointer + +CFLAGS := $(subst ${STM32_CFLAGS_OPTIMIZATION},${STM32_LIBTFM_CFLAGS_OPTIMIZATION},${CFLAGS}) +CFLAGS += -DTFM_ARM -Dasm=__asm__ -Wa,-mimplicit-it=thumb +CFLAGS += -I${LIBTFM_SRC}/tomsfastmath/src/headers +CFLAGS += -DFP_MAX_SIZE="(${BITS}*2+(8*DIGIT_BIT))" +CFLAGS += -Wall -W -Wshadow TARGETS := $(notdir ${HDR} ${LIB}) -- cgit v1.2.3