瀏覽代碼

makefile: use -fno_strict-overflow on gcc 4.2+

For gcc versions >= 4.2, use the -fno_strict_overflow compile
option. This is needed to avoid gcc optimizations that assume
signed overflow is undefined and does not wrap around (some parts
of the code assume using two complement arithmetic and
-fstrict-overflow might break them).
Andrei Pelinescu-Onciul 16 年之前
父節點
當前提交
9558980b90
共有 1 個文件被更改,包括 98 次插入4 次删除
  1. 98 4
      Makefile.defs

+ 98 - 4
Makefile.defs

@@ -69,6 +69,7 @@
 #  2009-03-10  replaced DEFS with C_DEFS and INCLUDES with C_INCLUDES (DEFS
 #  2009-03-10  replaced DEFS with C_DEFS and INCLUDES with C_INCLUDES (DEFS
 #              and INCLUDES are now used only for "temporary" defines/includes
 #              and INCLUDES are now used only for "temporary" defines/includes
 #              inside modules or libs) (andrei)
 #              inside modules or libs) (andrei)
+#  2009-09-20  for gcc 4.2+ use -fno-strict-overflow (andrei)
 
 
 
 
 # check if already included/exported
 # check if already included/exported
@@ -305,8 +306,9 @@ ifneq (,$(findstring gcc, $(CC_LONGVER)))
 				 sed -e 's/[^0-9]*-\(.*\)/\1/'| \
 				 sed -e 's/[^0-9]*-\(.*\)/\1/'| \
 				 sed -e 's/2\.9.*/2.9x/' -e 's/3\.[0-3]\..*/3.0/' -e \
 				 sed -e 's/2\.9.*/2.9x/' -e 's/3\.[0-3]\..*/3.0/' -e \
 				 	's/3\.[0-3]/3.0/' -e 's/3\.[4-9]\..*/3.4/' -e \
 				 	's/3\.[0-3]/3.0/' -e 's/3\.[4-9]\..*/3.4/' -e \
-					's/3\.[4-9]/3.4/' -e 's/4\.[0-9]\..*/4.x/' -e \
-					's/4\.[0-9]/4.x/' )
+					's/3\.[4-9]/3.4/' -e 's/4\.[0-1]\..*/4.x/' -e \
+					's/4\.[0-1]/4.x/' -e 's/4\.[2-9]\..*/4.2+/' -e \
+					's/4\.[2-9]$$/4.2+/')
 endif
 endif
 
 
 ifneq (, $(findstring Sun, $(CC_LONGVER)))
 ifneq (, $(findstring Sun, $(CC_LONGVER)))
@@ -670,6 +672,15 @@ ifeq		($(CC_NAME), gcc)
 				C_DEFS+=-DCC_GCC_LIKE_ASM
 				C_DEFS+=-DCC_GCC_LIKE_ASM
 				#common stuff
 				#common stuff
 				CFLAGS=-g -O9 -funroll-loops  -Wcast-align $(PROFILE)
 				CFLAGS=-g -O9 -funroll-loops  -Wcast-align $(PROFILE)
+			#if gcc 4.2+
+ifeq			($(CC_SHORTVER), 4.2+)
+					CPU ?= athlon64
+					CFLAGS+=-minline-all-stringops \
+							-falign-loops \
+							-ftree-vectorize \
+							-fno-strict-overflow \
+							-mtune=$(CPU)
+else
 			#if gcc 4.0+
 			#if gcc 4.0+
 ifeq			($(CC_SHORTVER), 4.x)
 ifeq			($(CC_SHORTVER), 4.x)
 					CPU ?= athlon64
 					CPU ?= athlon64
@@ -707,6 +718,7 @@ endif			# CC_SHORTVER, 2.9x
 endif			# CC_SHORTVER, 3.0
 endif			# CC_SHORTVER, 3.0
 endif			# CC_SHORTVER, 3.4
 endif			# CC_SHORTVER, 3.4
 endif			# CC_SHORTVER, 4.x
 endif			# CC_SHORTVER, 4.x
+endif			# CC_SHORTVER, 4.2+
 
 
 else		# CC_NAME, gcc
 else		# CC_NAME, gcc
 ifeq		($(CC_NAME), icc)
 ifeq		($(CC_NAME), icc)
@@ -732,6 +744,15 @@ ifeq		($(CC_NAME), gcc)
 				#common stuff
 				#common stuff
 				CFLAGS=-m64 -g -O9 -funroll-loops  -Wcast-align $(PROFILE)
 				CFLAGS=-m64 -g -O9 -funroll-loops  -Wcast-align $(PROFILE)
 				LDFLAGS+=-m64
 				LDFLAGS+=-m64
+			#if gcc 4.2+
+ifeq			($(CC_SHORTVER), 4.2+)
+					CPU ?= opteron
+					CFLAGS+=-minline-all-stringops \
+							-falign-loops \
+							-ftree-vectorize \
+							-fno-strict-overflow \
+							-mtune=$(CPU)
+else
 			#if gcc 4.0+
 			#if gcc 4.0+
 ifeq			($(CC_SHORTVER), 4.x)
 ifeq			($(CC_SHORTVER), 4.x)
 					CPU ?= opteron
 					CPU ?= opteron
@@ -769,6 +790,7 @@ endif			# CC_SHORTVER, 2.9x
 endif			# CC_SHORTVER, 3.0
 endif			# CC_SHORTVER, 3.0
 endif			# CC_SHORTVER, 3.4
 endif			# CC_SHORTVER, 3.4
 endif			# CC_SHORTVER, 4.x
 endif			# CC_SHORTVER, 4.x
+endif			# CC_SHORTVER, 4.2+
 
 
 else		# CC_NAME, gcc
 else		# CC_NAME, gcc
 ifeq		($(CC_NAME), icc)
 ifeq		($(CC_NAME), icc)
@@ -800,6 +822,15 @@ ifeq		($(CC_NAME), gcc)
 				# -m32 for 32 bit (default on solaris),
 				# -m32 for 32 bit (default on solaris),
 				# nothing for arch. default
 				# nothing for arch. default
 				LDFLAGS+=-m64
 				LDFLAGS+=-m64
+				#if gcc 4.2+
+ifeq			($(CC_SHORTVER), 4.2+)
+					CPU ?= ultrasparc
+					#use 32bit for now
+					CFLAGS+=-mcpu=ultrasparc  \
+							-mtune=$(CPU) \
+							-fno-strict-overflow \
+							-ftree-vectorize
+else
 				#if gcc 4.x
 				#if gcc 4.x
 ifeq			($(CC_SHORTVER), 4.x)
 ifeq			($(CC_SHORTVER), 4.x)
 					CPU ?= ultrasparc
 					CPU ?= ultrasparc
@@ -849,6 +880,7 @@ endif			#CC_SHORTVER, 2.9x
 endif			#CC_SHORTVER, 3.0
 endif			#CC_SHORTVER, 3.0
 endif			#CC_SHORTVER, 3.4
 endif			#CC_SHORTVER, 3.4
 endif			#CC_SHORTVER, 4.x
 endif			#CC_SHORTVER, 4.x
+endif			#CC_SHORTVER, 4.2+
 	
 	
 else		#CC_NAME, gcc
 else		#CC_NAME, gcc
 ifeq		($(CC_NAME), suncc)
 ifeq		($(CC_NAME), suncc)
@@ -872,6 +904,15 @@ ifeq		($(CC_NAME), gcc)
 				CFLAGS=-g -O9 -funroll-loops  $(PROFILE) \
 				CFLAGS=-g -O9 -funroll-loops  $(PROFILE) \
 					#-Wcast-align \
 					#-Wcast-align \
 					#-Wmissing-prototypes 
 					#-Wmissing-prototypes 
+				#if gcc 4.2+
+ifeq			($(CC_SHORTVER), 4.2+)
+					CPU ?= v8 
+					#use 32bit for now
+					CFLAGS+= -minline-all-stringops \
+							-mtune=$(CPU) \
+							-fno-strict-overflow \
+							-ftree-vectorize
+else
 				#if gcc 4.x
 				#if gcc 4.x
 ifeq			($(CC_SHORTVER), 4.x)
 ifeq			($(CC_SHORTVER), 4.x)
 					CPU ?= v8 
 					CPU ?= v8 
@@ -907,6 +948,7 @@ endif			#CC_SHORTVER, 2.9x
 endif			#CC_SHORTVER, 3.0
 endif			#CC_SHORTVER, 3.0
 endif			#CC_SHORTVER, 3.4
 endif			#CC_SHORTVER, 3.4
 endif			#CC_SHORTVER, 4.x
 endif			#CC_SHORTVER, 4.x
+endif			#CC_SHORTVER, 4.2+
 	
 	
 else		#CC_NAME, gcc
 else		#CC_NAME, gcc
 ifeq		($(CC_NAME), suncc)
 ifeq		($(CC_NAME), suncc)
@@ -927,6 +969,11 @@ ifeq		($(CC_NAME), gcc)
 				C_DEFS+=-DCC_GCC_LIKE_ASM
 				C_DEFS+=-DCC_GCC_LIKE_ASM
 				#common stuff
 				#common stuff
 				CFLAGS=-O9 -funroll-loops $(PROFILE)
 				CFLAGS=-O9 -funroll-loops $(PROFILE)
+			#if gcc 4.2+
+ifeq			($(CC_SHORTVER), 4.2+)
+					CFLAGS+= -ftree-vectorize -fno-strict-overflow
+					# not supported on arm: -minline-all-stringops 
+else
 			#if gcc 4.x+
 			#if gcc 4.x+
 ifeq			($(CC_SHORTVER), 4.x)
 ifeq			($(CC_SHORTVER), 4.x)
 					CFLAGS+= -ftree-vectorize
 					CFLAGS+= -ftree-vectorize
@@ -954,7 +1001,8 @@ $(warning			You are using an old and unsupported gcc \
 endif			# CC_SHORTVER, 2.9x
 endif			# CC_SHORTVER, 2.9x
 endif			# CC_SHORTVER, 3.0
 endif			# CC_SHORTVER, 3.0
 endif			# CC_SHORTVER, 3.4
 endif			# CC_SHORTVER, 3.4
-endif			# CC_SHORTVER, 4.0
+endif			# CC_SHORTVER, 4.x
+endif			# CC_SHORTVER, 4.2+
 	
 	
 else		# CC_NAME, gcc
 else		# CC_NAME, gcc
 				#other compilers
 				#other compilers
@@ -970,6 +1018,10 @@ ifeq		($(CC_NAME), gcc)
 				#common stuff
 				#common stuff
 				CFLAGS=-march=armv6 -O9 -funroll-loops \
 				CFLAGS=-march=armv6 -O9 -funroll-loops \
 						$(PROFILE)
 						$(PROFILE)
+			#if gcc 4.2+
+ifeq			($(CC_SHORTVER), 4.2+)
+					CFLAGS+= -ftree-vectorize -fno-strict-overflow
+else
 			#if gcc 4.x+
 			#if gcc 4.x+
 ifeq			($(CC_SHORTVER), 4.x)
 ifeq			($(CC_SHORTVER), 4.x)
 					CFLAGS+= -ftree-vectorize
 					CFLAGS+= -ftree-vectorize
@@ -996,7 +1048,8 @@ $(warning			You are using an old and unsupported gcc \
 endif			# CC_SHORTVER, 2.9x
 endif			# CC_SHORTVER, 2.9x
 endif			# CC_SHORTVER, 3.0
 endif			# CC_SHORTVER, 3.0
 endif			# CC_SHORTVER, 3.4
 endif			# CC_SHORTVER, 3.4
-endif			# CC_SHORTVER, 4.0
+endif			# CC_SHORTVER, 4.x
+endif			# CC_SHORTVER, 4.2+
 	
 	
 else		# CC_NAME, gcc
 else		# CC_NAME, gcc
 				#other compilers
 				#other compilers
@@ -1011,6 +1064,11 @@ ifeq		($(CC_NAME), gcc)
 				C_DEFS+=-DCC_GCC_LIKE_ASM
 				C_DEFS+=-DCC_GCC_LIKE_ASM
 				#common stuff
 				#common stuff
 				CFLAGS=-O9 -funroll-loops  $(PROFILE)
 				CFLAGS=-O9 -funroll-loops  $(PROFILE)
+			#if gcc 4.2+
+ifeq			($(CC_SHORTVER), 4.2+)
+					CFLAGS+=-march=r3000 -minline-all-stringops \
+							-ftree-vectorize -fno-strict-overflow
+else
 			#if gcc 4.0+
 			#if gcc 4.0+
 ifeq			($(CC_SHORTVER), 4.x)
 ifeq			($(CC_SHORTVER), 4.x)
 					CFLAGS+=-march=r3000 -minline-all-stringops \
 					CFLAGS+=-march=r3000 -minline-all-stringops \
@@ -1038,6 +1096,7 @@ endif			# CC_SHORTVER, 2.9x
 endif			# CC_SHORTVER, 3.0
 endif			# CC_SHORTVER, 3.0
 endif			# CC_SHORTVER, 3.4
 endif			# CC_SHORTVER, 3.4
 endif			# CC_SHORTVER, 4.x
 endif			# CC_SHORTVER, 4.x
+endif			# CC_SHORTVER, 4.2+
 	
 	
 else		# CC_NAME, gcc
 else		# CC_NAME, gcc
 				#other compilers
 				#other compilers
@@ -1052,6 +1111,11 @@ ifeq		($(CC_NAME), gcc)
 				C_DEFS+=-DCC_GCC_LIKE_ASM
 				C_DEFS+=-DCC_GCC_LIKE_ASM
 				#common stuff
 				#common stuff
 				CFLAGS= -mips2 -O9 -funroll-loops $(PROFILE)
 				CFLAGS= -mips2 -O9 -funroll-loops $(PROFILE)
+			#if gcc 4.2+
+ifeq			($(CC_SHORTVER), 4.2+)
+					CFLAGS+=-minline-all-stringops -ftree-vectorize \
+							-fno-strict-overflow
+else
 			#if gcc 4.0+
 			#if gcc 4.0+
 ifeq			($(CC_SHORTVER), 4.x)
 ifeq			($(CC_SHORTVER), 4.x)
 					CFLAGS+=-minline-all-stringops -ftree-vectorize
 					CFLAGS+=-minline-all-stringops -ftree-vectorize
@@ -1077,6 +1141,7 @@ endif			# CC_SHORTVER, 2.9x
 endif			# CC_SHORTVER, 3.0
 endif			# CC_SHORTVER, 3.0
 endif			# CC_SHORTVER, 3.4
 endif			# CC_SHORTVER, 3.4
 endif			# CC_SHORTVER, 4.x
 endif			# CC_SHORTVER, 4.x
+endif			# CC_SHORTVER, 4.2+
 	
 	
 else		# CC_NAME, gcc
 else		# CC_NAME, gcc
 				#other compilers
 				#other compilers
@@ -1091,6 +1156,11 @@ ifeq		($(CC_NAME), gcc)
 				C_DEFS+=-DCC_GCC_LIKE_ASM
 				C_DEFS+=-DCC_GCC_LIKE_ASM
 				#common stuff
 				#common stuff
 				CFLAGS= -mips64 -O9 -funroll-loops $(PROFILE)
 				CFLAGS= -mips64 -O9 -funroll-loops $(PROFILE)
+			#if gcc 4.2+
+ifeq			($(CC_SHORTVER), 4.2+)
+					CFLAGS+=-minline-all-stringops -ftree-vectorize \
+							-fno-strict-overflow
+else
 			#if gcc 4.0+
 			#if gcc 4.0+
 ifeq			($(CC_SHORTVER), 4.x)
 ifeq			($(CC_SHORTVER), 4.x)
 					CFLAGS+=-minline-all-stringops -ftree-vectorize
 					CFLAGS+=-minline-all-stringops -ftree-vectorize
@@ -1116,6 +1186,7 @@ endif			# CC_SHORTVER, 2.9x
 endif			# CC_SHORTVER, 3.0
 endif			# CC_SHORTVER, 3.0
 endif			# CC_SHORTVER, 3.4
 endif			# CC_SHORTVER, 3.4
 endif			# CC_SHORTVER, 4.x
 endif			# CC_SHORTVER, 4.x
+endif			# CC_SHORTVER, 4.2+
 	
 	
 else		# CC_NAME, gcc
 else		# CC_NAME, gcc
 				#other compilers
 				#other compilers
@@ -1130,6 +1201,11 @@ ifeq		($(CC_NAME), gcc)
 				C_DEFS+=-DCC_GCC_LIKE_ASM
 				C_DEFS+=-DCC_GCC_LIKE_ASM
 				#common stuff
 				#common stuff
 				CFLAGS= -O9 -funroll-loops $(PROFILE)
 				CFLAGS= -O9 -funroll-loops $(PROFILE)
+			#if gcc 4.2+
+ifeq			($(CC_SHORTVER), 4.2+)
+					CFLAGS+= -fno-strict-overflow
+					# not supported: -minline-all-stringops
+else
 			#if gcc 4.0+
 			#if gcc 4.0+
 ifeq			($(CC_SHORTVER), 4.x)
 ifeq			($(CC_SHORTVER), 4.x)
 					CFLAGS+= 
 					CFLAGS+= 
@@ -1156,6 +1232,7 @@ endif			# CC_SHORTVER, 2.9x
 endif			# CC_SHORTVER, 3.0
 endif			# CC_SHORTVER, 3.0
 endif			# CC_SHORTVER, 3.4
 endif			# CC_SHORTVER, 3.4
 endif			# CC_SHORTVER, 4.x
 endif			# CC_SHORTVER, 4.x
+endif			# CC_SHORTVER, 4.2+
 	
 	
 else		# CC_NAME, gcc
 else		# CC_NAME, gcc
 				#other compilers
 				#other compilers
@@ -1170,6 +1247,13 @@ ifeq		($(CC_NAME), gcc)
 				C_DEFS+=-DCC_GCC_LIKE_ASM
 				C_DEFS+=-DCC_GCC_LIKE_ASM
 				#common stuff
 				#common stuff
 				CFLAGS= -O9 -funroll-loops $(PROFILE)
 				CFLAGS= -O9 -funroll-loops $(PROFILE)
+			#if gcc 4.2+
+ifeq			($(CC_SHORTVER), 4.2+)
+					CPU ?= powerpc
+					CFLAGS+=-ftree-vectorize \
+							-fno-strict-overflow \
+							-mtune=$(CPU) -maltivec
+else
 			#if gcc 4.0+
 			#if gcc 4.0+
 ifeq			($(CC_SHORTVER), 4.x)
 ifeq			($(CC_SHORTVER), 4.x)
 					CPU ?= powerpc
 					CPU ?= powerpc
@@ -1197,6 +1281,7 @@ endif			# CC_SHORTVER, 2.9x
 endif			# CC_SHORTVER, 3.0
 endif			# CC_SHORTVER, 3.0
 endif			# CC_SHORTVER, 3.4
 endif			# CC_SHORTVER, 3.4
 endif			# CC_SHORTVER, 4.x
 endif			# CC_SHORTVER, 4.x
+endif			# CC_SHORTVER, 4.2+
 	
 	
 else		# CC_NAME, gcc
 else		# CC_NAME, gcc
 				#other compilers
 				#other compilers
@@ -1211,6 +1296,14 @@ ifeq		($(CC_NAME), gcc)
 				C_DEFS+=-DCC_GCC_LIKE_ASM
 				C_DEFS+=-DCC_GCC_LIKE_ASM
 				#common stuff
 				#common stuff
 				CFLAGS= -O9 -funroll-loops $(PROFILE)
 				CFLAGS= -O9 -funroll-loops $(PROFILE)
+			#if gcc 4.2+
+ifeq			($(CC_SHORTVER), 4.2+)
+					CPU ?= powerpc64
+					CFLAGS+=-ftree-vectorize \
+							-fno-strict-overflow \
+							-mtune=$(CPU) -maltivec
+else
+			#if gcc 4.0+
 ifeq			($(CC_SHORTVER), 4.x)
 ifeq			($(CC_SHORTVER), 4.x)
 					CPU ?= powerpc64
 					CPU ?= powerpc64
 					CFLAGS+=-ftree-vectorize \
 					CFLAGS+=-ftree-vectorize \
@@ -1237,6 +1330,7 @@ endif			# CC_SHORTVER, 2.9x
 endif			# CC_SHORTVER, 3.0
 endif			# CC_SHORTVER, 3.0
 endif			# CC_SHORTVER, 3.4
 endif			# CC_SHORTVER, 3.4
 endif			# CC_SHORTVER, 4.x
 endif			# CC_SHORTVER, 4.x
+endif			# CC_SHORTVER, 4.2+
 	
 	
 else		# CC_NAME, gcc
 else		# CC_NAME, gcc
 				#other compilers
 				#other compilers