From c41f21121cac97bdb78e67d0ccd82cde5cc9e411 Mon Sep 17 00:00:00 2001 From: Satoshi Niwa Date: Thu, 14 Dec 2023 17:33:36 +0900 Subject: [PATCH] Add a new x86(_64) arch variant "goldmont-without-xsaves" Its target arch is goldmont, but without xsaves support. This ensures efficient execution on a broad range of Intel/AMD CPUs used in Chromebooks, including those lacking xsaves support. (e.g. Kaby Lake, Gemini Lake, Alder Lake and AMD Zen series) Bug: 314243939 Test: Build an image with TARGET_ARCH_VARIANT:=goldmont-without-xsaves Change-Id: I9963cc3356394815f068fc998a9708bdb30c8266 --- android/arch_list.go | 23 +++++++++++++++++++++++ cc/config/x86_64_device.go | 4 ++++ cc/config/x86_device.go | 4 ++++ rust/config/x86_64_device.go | 19 ++++++++++--------- rust/config/x86_device.go | 21 +++++++++++---------- 5 files changed, 52 insertions(+), 19 deletions(-) diff --git a/android/arch_list.go b/android/arch_list.go index ab644a4aa..801ac49c8 100644 --- a/android/arch_list.go +++ b/android/arch_list.go @@ -34,6 +34,11 @@ var archVariants = map[ArchType][]string{ "broadwell", "goldmont", "goldmont-plus", + // Target arch is goldmont, but without xsaves support. + // This ensures efficient execution on a broad range of Intel/AMD CPUs used + // in Chromebooks, including those lacking xsaves support. + // (e.g. Kaby Lake, Gemini Lake, Alder Lake and AMD Zen series) + "goldmont-without-xsaves", "haswell", "icelake", "ivybridge", @@ -52,6 +57,7 @@ var archVariants = map[ArchType][]string{ "broadwell", "goldmont", "goldmont-plus", + "goldmont-without-xsaves", "haswell", "icelake", "ivybridge", @@ -197,6 +203,15 @@ var androidArchFeatureMap = map[ArchType]map[string][]string{ "popcnt", "movbe", }, + "goldmont-without-xsaves": { + "ssse3", + "sse4", + "sse4_1", + "sse4_2", + "aes_ni", + "popcnt", + "movbe", + }, "haswell": { "ssse3", "sse4", @@ -358,6 +373,14 @@ var androidArchFeatureMap = map[ArchType]map[string][]string{ "aes_ni", "popcnt", }, + "goldmont-without-xsaves": { + "ssse3", + "sse4", + "sse4_1", + "sse4_2", + "aes_ni", + "popcnt", + }, "haswell": { "ssse3", "sse4", diff --git a/cc/config/x86_64_device.go b/cc/config/x86_64_device.go index e43848cc9..ff0a3b7b6 100644 --- a/cc/config/x86_64_device.go +++ b/cc/config/x86_64_device.go @@ -49,6 +49,10 @@ var ( "goldmont-plus": []string{ "-march=goldmont-plus", }, + "goldmont-without-xsaves": []string{ + "-march=goldmont", + "-mno-xsaves", + }, "haswell": []string{ "-march=core-avx2", }, diff --git a/cc/config/x86_device.go b/cc/config/x86_device.go index c826d3c45..08be8698c 100644 --- a/cc/config/x86_device.go +++ b/cc/config/x86_device.go @@ -56,6 +56,10 @@ var ( "goldmont-plus": []string{ "-march=goldmont-plus", }, + "goldmont-without-xsaves": []string{ + "-march=goldmont", + "-mno-xsaves", + }, "haswell": []string{ "-march=core-avx2", }, diff --git a/rust/config/x86_64_device.go b/rust/config/x86_64_device.go index c797eefe3..cc1670417 100644 --- a/rust/config/x86_64_device.go +++ b/rust/config/x86_64_device.go @@ -28,15 +28,16 @@ var ( x86_64LinkFlags = []string{} x86_64ArchVariantRustFlags = map[string][]string{ - "": []string{}, - "broadwell": []string{"-C target-cpu=broadwell"}, - "goldmont": []string{"-C target-cpu=goldmont"}, - "goldmont-plus": []string{"-C target-cpu=goldmont-plus"}, - "haswell": []string{"-C target-cpu=haswell"}, - "ivybridge": []string{"-C target-cpu=ivybridge"}, - "sandybridge": []string{"-C target-cpu=sandybridge"}, - "silvermont": []string{"-C target-cpu=silvermont"}, - "skylake": []string{"-C target-cpu=skylake"}, + "": []string{}, + "broadwell": []string{"-C target-cpu=broadwell"}, + "goldmont": []string{"-C target-cpu=goldmont"}, + "goldmont-plus": []string{"-C target-cpu=goldmont-plus"}, + "goldmont-without-xsaves": []string{"-C target-cpu=goldmont", "-C target-feature=-xsaves"}, + "haswell": []string{"-C target-cpu=haswell"}, + "ivybridge": []string{"-C target-cpu=ivybridge"}, + "sandybridge": []string{"-C target-cpu=sandybridge"}, + "silvermont": []string{"-C target-cpu=silvermont"}, + "skylake": []string{"-C target-cpu=skylake"}, //TODO: Add target-cpu=stoneyridge when rustc supports it. "stoneyridge": []string{""}, "tremont": []string{"-C target-cpu=tremont"}, diff --git a/rust/config/x86_device.go b/rust/config/x86_device.go index 822f281a8..e7b575cd5 100644 --- a/rust/config/x86_device.go +++ b/rust/config/x86_device.go @@ -26,16 +26,17 @@ var ( x86LinkFlags = []string{} x86ArchVariantRustFlags = map[string][]string{ - "": []string{}, - "atom": []string{"-C target-cpu=atom"}, - "broadwell": []string{"-C target-cpu=broadwell"}, - "goldmont": []string{"-C target-cpu=goldmont"}, - "goldmont-plus": []string{"-C target-cpu=goldmont-plus"}, - "haswell": []string{"-C target-cpu=haswell"}, - "ivybridge": []string{"-C target-cpu=ivybridge"}, - "sandybridge": []string{"-C target-cpu=sandybridge"}, - "silvermont": []string{"-C target-cpu=silvermont"}, - "skylake": []string{"-C target-cpu=skylake"}, + "": []string{}, + "atom": []string{"-C target-cpu=atom"}, + "broadwell": []string{"-C target-cpu=broadwell"}, + "goldmont": []string{"-C target-cpu=goldmont"}, + "goldmont-plus": []string{"-C target-cpu=goldmont-plus"}, + "goldmont-without-xsaves": []string{"-C target-cpu=goldmont", "-C target-feature=-xsaves"}, + "haswell": []string{"-C target-cpu=haswell"}, + "ivybridge": []string{"-C target-cpu=ivybridge"}, + "sandybridge": []string{"-C target-cpu=sandybridge"}, + "silvermont": []string{"-C target-cpu=silvermont"}, + "skylake": []string{"-C target-cpu=skylake"}, //TODO: Add target-cpu=stoneyridge when rustc supports it. "stoneyridge": []string{""}, "tremont": []string{"-C target-cpu=tremont"},