This introduces no semantic changes to the file. Signed-off-by: Tim Wiederhake <twied...@redhat.com> --- target/i386/feature_word_info.c.inc | 2 + target/i386/feature_word_info.py | 62 +++++++++++++++++++++++++++++ target/i386/feature_word_info.yaml | 2 + 3 files changed, 66 insertions(+) create mode 100755 target/i386/feature_word_info.py
diff --git a/target/i386/feature_word_info.c.inc b/target/i386/feature_word_info.c.inc index 5bac4aaeba..fb699528a6 100644 --- a/target/i386/feature_word_info.c.inc +++ b/target/i386/feature_word_info.c.inc @@ -1,3 +1,5 @@ +/* This file is generated by feature_word_info.py. */ + FeatureWordInfo feature_word_info[FEATURE_WORDS] = { [FEAT_1_EDX] = { .type = CPUID_FEATURE_WORD, diff --git a/target/i386/feature_word_info.py b/target/i386/feature_word_info.py new file mode 100755 index 0000000000..e5773c8dbf --- /dev/null +++ b/target/i386/feature_word_info.py @@ -0,0 +1,62 @@ +#!/bin/env python3 + +import os +import yaml + + +def write_feature_word(f, data): + f.write(" [{}] = {{\n".format(data["index"])) + f.write(" .type = {},\n".format(data["type"])) + f.write(" .feat_names = {\n") + for index in range(64): + name = data.get("feat_names", {}).get(index) + name = "NULL" if name is None else "\"" + name + "\"" + if index % 4 == 0: + f.write(" " * 11) + f.write(" " + str(name) + ",") + if index % 4 == 3: + f.write("\n") + f.write(" },\n") + if "cpuid" in data: + cpuid = data["cpuid"] + f.write(" .cpuid = {\n") + f.write(" .eax = {},\n".format(cpuid["eax"])) + if "ecx" in cpuid: + f.write(" .needs_ecx = true,\n") + f.write(" .ecx = {},\n".format(cpuid["ecx"])) + f.write(" .reg = {},\n".format(cpuid["reg"])) + f.write(" },\n") + if "msr" in data: + f.write(" .msr = {\n") + f.write(" .index = {},\n".format(data["msr"])) + f.write(" },\n") + if "tcg_features" in data: + f.write(" .tcg_features = {},\n".format(data["tcg_features"])) + if "unmigratable_flags" in data: + f.write(" .unmigratable_flags = {},\n".format( + data["unmigratable_flags"])) + if "migratable_flags" in data: + f.write(" .migratable_flags = {},\n".format( + data["migratable_flags"])) + if "no_autoenable_flags" in data: + f.write(" .no_autoenable_flags = {},\n".format( + data["no_autoenable_flags"])) + f.write(" },\n") + + +def main(): + dirname = os.path.dirname(__file__) + + with open(os.path.join(dirname, "feature_word_info.yaml"), "tr") as f: + feature_words = yaml.safe_load(f) + + with open(os.path.join(dirname, "feature_word_info.c.inc"), "tw") as f: + f.write("/* This file is generated by feature_word_info.py. */\n\n") + f.write("FeatureWordInfo feature_word_info[FEATURE_WORDS] = {\n") + for feature_word in feature_words: + write_feature_word(f, feature_word) + f.write("};\n") + + +if __name__ == "__main__": + main() diff --git a/target/i386/feature_word_info.yaml b/target/i386/feature_word_info.yaml index cd6cdc8053..79914a0ece 100644 --- a/target/i386/feature_word_info.yaml +++ b/target/i386/feature_word_info.yaml @@ -1,3 +1,5 @@ +# Run `feature_word_info.py` when you make changes to this file. + - index: FEAT_1_EDX cpuid: eax: '1' -- 2.39.2