diff --git a/BUILD/check-cpu b/BUILD/check-cpu
index 24b76c7198d774479f24235eefe071661bf3a69c..d3d5b3734ccd5878252e5e8c89e24af8675780ba 100755
--- a/BUILD/check-cpu
+++ b/BUILD/check-cpu
@@ -164,26 +164,34 @@ check_cpu () {
 
   cc_ver=`$cc --version | sed 1q`
   cc_verno=`echo $cc_ver | sed -e 's/^.*gcc/gcc/g; s/[^0-9. ]//g;	 s/^ *//g; s/ .*//g'`
+  set -- `echo $cc_verno | tr '.' ' '`
+  cc_major=$1
+  cc_minor=$2
+  cc_patch=$3
+  cc_comp=`expr $cc_major '*' 100 '+' $cc_minor`
 
   case "$cc_ver--$cc_verno" in
     *GCC*)
         # different gcc backends (and versions) have different CPU flags
         case `gcc -dumpmachine` in
           i?86-*)
-                case "$cc_verno" in
-                      3.4*|3.5*|4.*)
-                            check_cpu_args='-mtune=$cpu_arg -march=$cpu_arg'
-                            ;;
-                      *)
-                            check_cpu_args='-mcpu=$cpu_arg -march=$cpu_arg'
-                            ;;
-            esac
+	    if test "$cc_comp" -lt 304
+            then
+                            check_cpu_args='-mcpu=$cpu_arg'
+            else
+                            check_cpu_args='-mtune=$cpu_arg'
+            fi
             ;;
           ppc-*)
                     check_cpu_args='-mcpu=$cpu_arg -mtune=$cpu_arg'
             ;;
           x86_64-*)
-                    check_cpu_args='-mtune=$cpu_arg'
+	    if test "$cc_comp" -lt 304
+            then
+                            check_cpu_args='-mcpu=$cpu_arg'
+            else
+                            check_cpu_args='-mtune=$cpu_arg'
+            fi
             ;;
           *)
             check_cpu_cflags=""