Severin Gehwolf c295b90
diff --git openjdk.orig/jdk/make/lib/CoreLibraries.gmk openjdk/jdk/make/lib/CoreLibraries.gmk
Severin Gehwolf c295b90
--- openjdk.orig/jdk/make/lib/CoreLibraries.gmk
Severin Gehwolf c295b90
+++ openjdk/jdk/make/lib/CoreLibraries.gmk
Severin Gehwolf c295b90
@@ -37,21 +37,32 @@ ifeq ($(OPENJDK_TARGET_OS), solaris)
Severin Gehwolf c295b90
 endif
Severin Gehwolf c295b90
 
Severin Gehwolf c295b90
 ifeq ($(OPENJDK_TARGET_OS), linux)
Severin Gehwolf c295b90
-  ifeq ($(OPENJDK_TARGET_CPU), ppc64)
Severin Gehwolf c295b90
-    BUILD_LIBFDLIBM_OPTIMIZATION := HIGH
Severin Gehwolf c295b90
-  else ifeq ($(OPENJDK_TARGET_CPU), ppc64le)
Severin Gehwolf c295b90
-    BUILD_LIBFDLIBM_OPTIMIZATION := HIGH
Severin Gehwolf c295b90
-  else ifeq ($(OPENJDK_TARGET_CPU), aarch64)
Severin Gehwolf c295b90
-    BUILD_LIBFDLIBM_OPTIMIZATION := HIGH
Severin Gehwolf c295b90
-  endif
Severin Gehwolf c295b90
-endif
Severin Gehwolf c295b90
-
Severin Gehwolf c295b90
-ifneq ($(OPENJDK_TARGET_OS), macosx)
Severin Gehwolf c295b90
+  BUILD_LIBFDLIBM_OPTIMIZATION := HIGH
Severin Gehwolf c295b90
+  LIBFDLIBM_CFLAGS_LINUX := -ffp-contract=off
Severin Gehwolf c295b90
   # Unfortunately, '-ffp-contract' is only available since gcc 4.6. For ppc64le
Severin Gehwolf c295b90
   # that's no problem since ppc64le support only appeared in gcc 4.8.3. But on
Severin Gehwolf c295b90
   # ppc64 (big endian) we traditionally compiled with gcc 4.3 which only knows
Severin Gehwolf c295b90
   # '-mno-fused-madd'. However, that's still not enough to get the float
Severin Gehwolf c295b90
   # computations right - we additionally have to supply '-fno-strict-aliasing'.
Severin Gehwolf c295b90
+  #
Severin Gehwolf c295b90
+  #
Severin Gehwolf c295b90
+  ifeq ($(TOOLCHAIN_TYPE), gcc)
Severin Gehwolf c295b90
+    CC_VER_MAJOR := $(shell $(CC) -dumpversion | cut -d'.' -f1)
Severin Gehwolf c295b90
+    CC_VER_MINOR := $(shell $(CC) -dumpversion | cut -d'.' -f2)
Severin Gehwolf c295b90
+  endif
Severin Gehwolf c295b90
+  # Only GCC 4.6 and better have machine independent -ffp-contract=off.
Severin Gehwolf c295b90
+  # For other versions we need to explicitly set arch specific machine
Severin Gehwolf c295b90
+  # flags or keep optimization off.
Severin Gehwolf c295b90
+  ifeq "$(shell expr \( $(CC_VER_MAJOR) \> 4 \) \| \( \( $(CC_VER_MAJOR) = 4 \) \& \( $(CC_VER_MINOR) \>= 6 \) \))" "0"
Severin Gehwolf c295b90
+    ifeq ($(OPENJDK_TARGET_CPU), ppc64)
Severin Gehwolf c295b90
+      LIBFDLIBM_CFLAGS_LINUX := -mno-fused-madd -fno-strict-aliasing
Severin Gehwolf c295b90
+    else
Severin Gehwolf c295b90
+      BUILD_LIBFDLIBM_OPTIMIZATION := NONE
Severin Gehwolf c295b90
+    endif
Severin Gehwolf c295b90
+  endif
Severin Gehwolf c295b90
+endif
Severin Gehwolf c295b90
+
Severin Gehwolf c295b90
+ifneq ($(OPENJDK_TARGET_OS), macosx)
Severin Gehwolf c295b90
   $(eval $(call SetupNativeCompilation,BUILD_LIBFDLIBM, \
Severin Gehwolf c295b90
       STATIC_LIBRARY := fdlibm, \
Severin Gehwolf c295b90
       OUTPUT_DIR := $(JDK_OUTPUTDIR)/objs, \
Severin Gehwolf c295b90
@@ -62,9 +73,7 @@ ifneq ($(OPENJDK_TARGET_OS), macosx)
Severin Gehwolf c295b90
           -I$(JDK_TOPDIR)/src/share/native/java/lang/fdlibm/include, \
Severin Gehwolf c295b90
       CFLAGS_windows_debug := -DLOGGING, \
Severin Gehwolf c295b90
       CFLAGS_aix := -qfloat=nomaf, \
Severin Gehwolf c295b90
-      CFLAGS_linux_ppc64 := -mno-fused-madd -fno-strict-aliasing, \
Severin Gehwolf c295b90
-      CFLAGS_linux_ppc64le := -ffp-contract=off, \
Severin Gehwolf c295b90
-      CFLAGS_linux_aarch64 := -ffp-contract=off, \
Severin Gehwolf c295b90
+      CFLAGS_linux := $(LIBFDLIBM_CFLAGS_LINUX), \
Severin Gehwolf c295b90
       ARFLAGS := $(ARFLAGS), \
Severin Gehwolf c295b90
       OBJECT_DIR := $(JDK_OUTPUTDIR)/objs/libfdlibm, \
Severin Gehwolf c295b90
       DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES)))