implement ADD_FEATURES similar to EXCLUDE_FEATURES
it allows to add any feature to selected pre-defined CPUID model
This commit is contained in:
parent
35001a23ae
commit
0c33c6153e
@ -145,6 +145,12 @@
|
|||||||
# sapphire_rapids Intel(R) Xeon(R) w9-3475X (Sappire Rapids)
|
# sapphire_rapids Intel(R) Xeon(R) w9-3475X (Sappire Rapids)
|
||||||
# arrow_lake 15th Gen Intel(R) Core(TM) Ultra 5 245K (ArrowLake)
|
# arrow_lake 15th Gen Intel(R) Core(TM) Ultra 5 245K (ArrowLake)
|
||||||
#
|
#
|
||||||
|
# ADD_FEATURES:
|
||||||
|
# Enable one of more CPU feature in the CPU configuration selected by MODEL.
|
||||||
|
# Could be useful for testing CPU with newer imaginary configurations by
|
||||||
|
# adding a specific feature or set of features to existing MODEL. The list
|
||||||
|
# of features to add supplied through space or comma separated string.
|
||||||
|
#
|
||||||
# EXCLUDE_FEATURES:
|
# EXCLUDE_FEATURES:
|
||||||
# Disable one of more CPU feature from CPU configuration selected by MODEL.
|
# Disable one of more CPU feature from CPU configuration selected by MODEL.
|
||||||
# Could be useful for testing CPU without a specific feature or set of
|
# Could be useful for testing CPU without a specific feature or set of
|
||||||
|
@ -7,7 +7,7 @@ Brief summary :
|
|||||||
- Implemented AMX-TF32 ISA extension
|
- Implemented AMX-TF32 ISA extension
|
||||||
- Added initial support for AVX10_1 ISA extension and AVX10 CPUID leaf 0x24 (to be enabled in Xeon Granite Rapids)
|
- Added initial support for AVX10_1 ISA extension and AVX10 CPUID leaf 0x24 (to be enabled in Xeon Granite Rapids)
|
||||||
- CPUID: Added Arrow Lake CPU definition
|
- CPUID: Added Arrow Lake CPU definition
|
||||||
- CPUID: Support for disabling of one of more CPU feature from CPUID configuration (see "exclude_features" in bochsrc sample and documentation)
|
- CPUID: Support for enabling/disabling of one of more CPU features from CPUID configuration (see "add_features" and "exclude_features" in bochsrc sample and documentation)
|
||||||
- Bugfixes for CPU emulation correctness (critical bugfixes for WAITPKG, LASS, XSAVEC/XSAVES, CPUID and SHA1 ISA implementation)
|
- Bugfixes for CPU emulation correctness (critical bugfixes for WAITPKG, LASS, XSAVEC/XSAVES, CPUID and SHA1 ISA implementation)
|
||||||
- USB: Added the USB Debugger support for xHCI and UHCI
|
- USB: Added the USB Debugger support for xHCI and UHCI
|
||||||
- Added USB boot option (requires BIOS from https://github.com/fysnet/i440fx)
|
- Added USB boot option (requires BIOS from https://github.com/fysnet/i440fx)
|
||||||
@ -29,7 +29,7 @@ Detailed change log :
|
|||||||
- CPUID:
|
- CPUID:
|
||||||
- Added Arrow Lake CPU definition
|
- Added Arrow Lake CPU definition
|
||||||
- Features AVX-VNNI, AVX-IFMA, AVX-VNNI-INT8, AVX-VNNI-INT16, AVX_NE_CONVERT, GFNI, VAES/VPCLMULQDQ, SHA512, SM3/SM4, CMPCCXADD, LASS, SERIALIZE, UINTR
|
- Features AVX-VNNI, AVX-IFMA, AVX-VNNI-INT8, AVX-VNNI-INT16, AVX_NE_CONVERT, GFNI, VAES/VPCLMULQDQ, SHA512, SM3/SM4, CMPCCXADD, LASS, SERIALIZE, UINTR
|
||||||
- Support for disabling of one of more CPU feature from CPUID configuration (see "exclude_features" in bochsrc sample and documentation)
|
- Support for enabling/disabling of one of more CPU features from CPUID configuration (see "add_features" and "exclude_features" in bochsrc sample and documentation)
|
||||||
|
|
||||||
- Configure and compile
|
- Configure and compile
|
||||||
- Fixed compilation of plugin version with debugger enabled on Windows
|
- Fixed compilation of plugin version with debugger enabled on Windows
|
||||||
|
@ -33,6 +33,7 @@ cpuid
|
|||||||
level
|
level
|
||||||
family
|
family
|
||||||
model
|
model
|
||||||
|
add_features
|
||||||
exclude_features
|
exclude_features
|
||||||
stepping
|
stepping
|
||||||
vendor_string
|
vendor_string
|
||||||
|
@ -613,10 +613,17 @@ void bx_init_options()
|
|||||||
"Choose pre-defined CPU configuration",
|
"Choose pre-defined CPU configuration",
|
||||||
cpu_names, 0, 0);
|
cpu_names, 0, 0);
|
||||||
|
|
||||||
|
new bx_param_string_c(cpu_param,
|
||||||
|
"add_features",
|
||||||
|
"Add these features to selected pre-defined CPU configuration",
|
||||||
|
"Choose features to add to selected pre-defined CPU configuration",
|
||||||
|
"",
|
||||||
|
BX_PATHNAME_LEN);
|
||||||
|
|
||||||
new bx_param_string_c(cpu_param,
|
new bx_param_string_c(cpu_param,
|
||||||
"exclude_features",
|
"exclude_features",
|
||||||
"Exclude these features from CPU configuration",
|
"Exclude these features from selected pre-defined CPU configuration",
|
||||||
"Choose features to exclude from selected CPU configuration",
|
"Choose features to exclude from selected pre-defined CPU configuration",
|
||||||
"",
|
"",
|
||||||
BX_PATHNAME_LEN);
|
BX_PATHNAME_LEN);
|
||||||
|
|
||||||
|
@ -1385,7 +1385,7 @@ public: // for now...
|
|||||||
~BX_CPU_C();
|
~BX_CPU_C();
|
||||||
|
|
||||||
void initialize(void);
|
void initialize(void);
|
||||||
void exclude_cpuid_features(const char *feature_list);
|
void add_remove_cpuid_features(const char *feature_list, bool add);
|
||||||
void init_statistics(void);
|
void init_statistics(void);
|
||||||
void after_restore_state(void);
|
void after_restore_state(void);
|
||||||
void register_state(void);
|
void register_state(void);
|
||||||
|
@ -115,7 +115,7 @@ static bx_cpuid_t *cpuid_factory(BX_CPU_C *cpu)
|
|||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
void BX_CPU_C::exclude_cpuid_features(const char *input)
|
void BX_CPU_C::add_remove_cpuid_features(const char *input, bool add)
|
||||||
{
|
{
|
||||||
// Use as delimiters: space, tab, newline, and comma
|
// Use as delimiters: space, tab, newline, and comma
|
||||||
static const char *delimiters = " \t\n,";
|
static const char *delimiters = " \t\n,";
|
||||||
@ -130,8 +130,12 @@ void BX_CPU_C::exclude_cpuid_features(const char *input)
|
|||||||
if (i > start) {
|
if (i > start) {
|
||||||
std::string feature_name(input + start, input + i);
|
std::string feature_name(input + start, input + i);
|
||||||
int feature = match_cpu_feature(feature_name.c_str());
|
int feature = match_cpu_feature(feature_name.c_str());
|
||||||
if (feature >= 0)
|
if (feature >= 0) {
|
||||||
BX_CPU_THIS_PTR cpuid->disable_cpu_extension(feature);
|
if (add)
|
||||||
|
BX_CPU_THIS_PTR cpuid->enable_cpu_extension(feature);
|
||||||
|
else
|
||||||
|
BX_CPU_THIS_PTR cpuid->disable_cpu_extension(feature);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
BX_PANIC(("CPUID: unknown feature name \"%s\" cannot be disabled", feature_name.c_str()));
|
BX_PANIC(("CPUID: unknown feature name \"%s\" cannot be disabled", feature_name.c_str()));
|
||||||
}
|
}
|
||||||
@ -161,7 +165,10 @@ void BX_CPU_C::initialize(void)
|
|||||||
BX_INFO(("initialized CPU model %s", cpu_model_name));
|
BX_INFO(("initialized CPU model %s", cpu_model_name));
|
||||||
|
|
||||||
const char* features_to_exclude = SIM->get_param_string(BXPN_CPU_EXCLUDE_FEATURES)->getptr();
|
const char* features_to_exclude = SIM->get_param_string(BXPN_CPU_EXCLUDE_FEATURES)->getptr();
|
||||||
exclude_cpuid_features(features_to_exclude);
|
add_remove_cpuid_features(features_to_exclude, false);
|
||||||
|
|
||||||
|
const char* features_to_eadd = SIM->get_param_string(BXPN_CPU_ADD_FEATURES)->getptr();
|
||||||
|
add_remove_cpuid_features(features_to_exclude, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
BX_CPU_THIS_PTR cpuid->get_cpu_extensions(BX_CPU_THIS_PTR ia_extensions_bitmask);
|
BX_CPU_THIS_PTR cpuid->get_cpu_extensions(BX_CPU_THIS_PTR ia_extensions_bitmask);
|
||||||
|
@ -3411,6 +3411,13 @@ supported configurations. When this option is used and the value
|
|||||||
is different from 'bx_generic', the parameters of the <link linkend="bochsopt-cpuid">CPUID</link>
|
is different from 'bx_generic', the parameters of the <link linkend="bochsopt-cpuid">CPUID</link>
|
||||||
option have no effect anymore. See the <xref linkend="cpu-models"> for supported values.
|
option have no effect anymore. See the <xref linkend="cpu-models"> for supported values.
|
||||||
</para>
|
</para>
|
||||||
|
<para><command>add_features</command></para>
|
||||||
|
<para>
|
||||||
|
Enable one of more CPU feature in the CPU configuration selected by MODEL.
|
||||||
|
Could be useful for testing CPU with newer imaginary configurations by
|
||||||
|
adding a specific feature or set of features to existing MODEL. The list
|
||||||
|
of features to add supplied through space or comma separated string.
|
||||||
|
</para>
|
||||||
<para><command>exclude_features</command></para>
|
<para><command>exclude_features</command></para>
|
||||||
<para>
|
<para>
|
||||||
Disable one of more CPU feature from CPU configuration selected by MODEL.
|
Disable one of more CPU feature from CPU configuration selected by MODEL.
|
||||||
|
@ -136,6 +136,13 @@ supported configurations. When this option is used and the value
|
|||||||
is different from 'bx_generic', the parameters of the CPUID option
|
is different from 'bx_generic', the parameters of the CPUID option
|
||||||
have no effect anymore. See the bochsrc sample for supported values.
|
have no effect anymore. See the bochsrc sample for supported values.
|
||||||
|
|
||||||
|
add_features:
|
||||||
|
|
||||||
|
Enable one of more CPU feature in the CPU configuration selected by MODEL.
|
||||||
|
Could be useful for testing CPU with newer imaginary configurations by
|
||||||
|
adding a specific feature or set of features to existing MODEL. The list
|
||||||
|
of features to add supplied through space or comma separated string.
|
||||||
|
|
||||||
exclude_features:
|
exclude_features:
|
||||||
|
|
||||||
Disable one of more CPU feature from CPU configuration selected by MODEL.
|
Disable one of more CPU feature from CPU configuration selected by MODEL.
|
||||||
|
@ -39,6 +39,7 @@
|
|||||||
#define BXPN_CPU_NCORES "cpu.n_cores"
|
#define BXPN_CPU_NCORES "cpu.n_cores"
|
||||||
#define BXPN_CPU_NTHREADS "cpu.n_threads"
|
#define BXPN_CPU_NTHREADS "cpu.n_threads"
|
||||||
#define BXPN_CPU_MODEL "cpu.model"
|
#define BXPN_CPU_MODEL "cpu.model"
|
||||||
|
#define BXPN_CPU_ADD_FEATURES "cpu.add_features"
|
||||||
#define BXPN_CPU_EXCLUDE_FEATURES "cpu.exclude_features"
|
#define BXPN_CPU_EXCLUDE_FEATURES "cpu.exclude_features"
|
||||||
#define BXPN_IPS "cpu.ips"
|
#define BXPN_IPS "cpu.ips"
|
||||||
#define BXPN_SMP_QUANTUM "cpu.quantum"
|
#define BXPN_SMP_QUANTUM "cpu.quantum"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user