b1dca6
commit 76d5b2f002a1243ddba06bd646249553353f4322
b1dca6
Author: H.J. Lu <hjl.tools@gmail.com>
b1dca6
Date:   Thu May 21 13:36:54 2020 -0700
b1dca6
b1dca6
    x86: Update Intel Atom processor family optimization
b1dca6
    
b1dca6
    Enable Intel Silvermont optimization for Intel Goldmont Plus.  Detect more
b1dca6
    Intel Airmont processors.  Optimize Intel Tremont like Intel Silvermont
b1dca6
    with rep string instructions.
b1dca6
b1dca6
diff --git a/sysdeps/x86/cpu-features.c b/sysdeps/x86/cpu-features.c
b1dca6
index c432d646ce6806a6..2a801e1856cfe1b3 100644
b1dca6
--- a/sysdeps/x86/cpu-features.c
b1dca6
+++ b/sysdeps/x86/cpu-features.c
b1dca6
@@ -347,18 +347,23 @@ init_cpu_features (struct cpu_features *cpu_features)
b1dca6
 	    case 0x57:
b1dca6
 	      /* Knights Landing.  Enable Silvermont optimizations.  */
b1dca6
 
b1dca6
+	    case 0x7a:
b1dca6
+	      /* Unaligned load versions are faster than SSSE3
b1dca6
+		 on Goldmont Plus.  */
b1dca6
+
b1dca6
 	    case 0x5c:
b1dca6
 	    case 0x5f:
b1dca6
 	      /* Unaligned load versions are faster than SSSE3
b1dca6
 		 on Goldmont.  */
b1dca6
 
b1dca6
 	    case 0x4c:
b1dca6
+	    case 0x5a:
b1dca6
+	    case 0x75:
b1dca6
 	      /* Airmont is a die shrink of Silvermont.  */
b1dca6
 
b1dca6
 	    case 0x37:
b1dca6
 	    case 0x4a:
b1dca6
 	    case 0x4d:
b1dca6
-	    case 0x5a:
b1dca6
 	    case 0x5d:
b1dca6
 	      /* Unaligned load versions are faster than SSSE3
b1dca6
 		 on Silvermont.  */
b1dca6
@@ -369,6 +374,19 @@ init_cpu_features (struct cpu_features *cpu_features)
b1dca6
 		    | bit_arch_Slow_SSE4_2);
b1dca6
 	      break;
b1dca6
 
b1dca6
+	    case 0x86:
b1dca6
+	    case 0x96:
b1dca6
+	    case 0x9c:
b1dca6
+	      /* Enable rep string instructions, unaligned load, unaligned
b1dca6
+	         copy, pminub and avoid SSE 4.2 on Tremont.  */
b1dca6
+	      cpu_features->feature[index_arch_Fast_Rep_String]
b1dca6
+		|= (bit_arch_Fast_Rep_String
b1dca6
+		    | bit_arch_Fast_Unaligned_Load
b1dca6
+		    | bit_arch_Fast_Unaligned_Copy
b1dca6
+		    | bit_arch_Prefer_PMINUB_for_stringop
b1dca6
+		    | bit_arch_Slow_SSE4_2);
b1dca6
+	      break;
b1dca6
+
b1dca6
 	    default:
b1dca6
 	      /* Unknown family 0x06 processors.  Assuming this is one
b1dca6
 		 of Core i3/i5/i7 processors if AVX is available.  */