From d233de8194db9c7ce5042bb809c88a0b6cb02c83 Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Wed, 23 Feb 2022 10:17:47 -0800 Subject: cpu_detect: Compact capability fields As this structure gets more explicit, bools can be bitfields and small enums can use smaller types for their span of values. --- src/common/x64/cpu_detect.h | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) (limited to 'src/common/x64/cpu_detect.h') diff --git a/src/common/x64/cpu_detect.h b/src/common/x64/cpu_detect.h index e3b63302e..e4f90bee1 100644 --- a/src/common/x64/cpu_detect.h +++ b/src/common/x64/cpu_detect.h @@ -1,12 +1,13 @@ -// Copyright 2013 Dolphin Emulator Project / 2015 Citra Emulator Project -// Licensed under GPLv2 or any later version -// Refer to the license.txt file included. +// Copyright 2013 Dolphin Emulator Project / 2015 Citra Emulator Project / 2022 Yuzu Emulator +// Project Project Licensed under GPLv2 or any later version Refer to the license.txt file included. #pragma once +#include "common/common_types.h" + namespace Common { -enum class Manufacturer : u32 { +enum class Manufacturer : u8 { Intel = 0, AMD = 1, Hygon = 2, @@ -18,25 +19,25 @@ struct CPUCaps { Manufacturer manufacturer; char cpu_string[0x21]; char brand_string[0x41]; - bool sse; - bool sse2; - bool sse3; - bool ssse3; - bool sse4_1; - bool sse4_2; - bool lzcnt; - bool avx; - bool avx2; - bool avx512; - bool bmi1; - bool bmi2; - bool fma; - bool fma4; - bool aes; - bool invariant_tsc; u32 base_frequency; u32 max_frequency; u32 bus_frequency; + bool sse : 1; + bool sse2 : 1; + bool sse3 : 1; + bool ssse3 : 1; + bool sse4_1 : 1; + bool sse4_2 : 1; + bool lzcnt : 1; + bool avx : 1; + bool avx2 : 1; + bool avx512 : 1; + bool bmi1 : 1; + bool bmi2 : 1; + bool fma : 1; + bool fma4 : 1; + bool aes : 1; + bool invariant_tsc : 1; }; /** -- cgit v1.2.3 From ec5f3351b69b6427d1e411fcc849e98705a044c3 Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Wed, 23 Feb 2022 19:41:27 -0800 Subject: cpu_detect: Refactor cpu/manufacturer identification Set the zero-enum value to Unknown Move the Manufacterer enum into the CPUCaps structure namespace Add "ParseManufacturer" utility-function Fix cpu/brand string buffer sizes(!) --- src/common/x64/cpu_detect.h | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) (limited to 'src/common/x64/cpu_detect.h') diff --git a/src/common/x64/cpu_detect.h b/src/common/x64/cpu_detect.h index e4f90bee1..3e6d808f3 100644 --- a/src/common/x64/cpu_detect.h +++ b/src/common/x64/cpu_detect.h @@ -3,25 +3,32 @@ #pragma once +#include #include "common/common_types.h" namespace Common { -enum class Manufacturer : u8 { - Intel = 0, - AMD = 1, - Hygon = 2, - Unknown = 3, -}; - /// x86/x64 CPU capabilities that may be detected by this module struct CPUCaps { + + enum class Manufacturer : u8 { + Unknown = 0, + Intel = 1, + AMD = 2, + Hygon = 3, + }; + + static Manufacturer ParseManufacturer(std::string_view brand_string); + Manufacturer manufacturer; - char cpu_string[0x21]; - char brand_string[0x41]; + char brand_string[13]; + + char cpu_string[48]; + u32 base_frequency; u32 max_frequency; u32 bus_frequency; + bool sse : 1; bool sse2 : 1; bool sse3 : 1; -- cgit v1.2.3