1
0
mirror of https://github.com/google/cpu_features.git synced 2025-04-27 15:12:30 +02:00

[NFC] clang-format the code base

This commit is contained in:
Guillaume Chatelet 2023-09-25 07:35:53 +00:00
parent ec7d390a90
commit 8cfb520efb
11 changed files with 101 additions and 97 deletions

View File

@ -26,7 +26,7 @@ CPU_FEATURES_START_CPP_NAMESPACE
typedef struct { typedef struct {
// Base // Base
int CPUCFG : 1; // Instruction for Identify CPU Features int CPUCFG : 1; // Instruction for Identify CPU Features
// Extension // Extension
int LAM : 1; // Extension for Atomic Memory Access Instructions int LAM : 1; // Extension for Atomic Memory Access Instructions
@ -36,7 +36,8 @@ typedef struct {
int LASX : 1; // Extension for Loongson Advanced SIMD eXtension int LASX : 1; // Extension for Loongson Advanced SIMD eXtension
int CRC32 : 1; // Extension for Cyclic Redundancy Check Instructions int CRC32 : 1; // Extension for Cyclic Redundancy Check Instructions
int COMPLEX : 1; // Extension for Complex Vector Operation Instructions int COMPLEX : 1; // Extension for Complex Vector Operation Instructions
int CRYPTO : 1; // Extension for Encryption And Decryption Vector Instructions int CRYPTO : 1; // Extension for Encryption And Decryption Vector
// Instructions
int LVZ : 1; // Extension for Virtualization int LVZ : 1; // Extension for Virtualization
int LBT_X86 : 1; // Extension for X86 Binary Translation Extension int LBT_X86 : 1; // Extension for X86 Binary Translation Extension
int LBT_ARM : 1; // Extension for ARM Binary Translation Extension int LBT_ARM : 1; // Extension for ARM Binary Translation Extension
@ -69,7 +70,7 @@ typedef enum {
LoongArchInfo GetLoongArchInfo(void); LoongArchInfo GetLoongArchInfo(void);
int GetLoongArchFeaturesEnumValue(const LoongArchFeatures* features, int GetLoongArchFeaturesEnumValue(const LoongArchFeatures* features,
LoongArchFeaturesEnum value); LoongArchFeaturesEnum value);
const char* GetLoongArchFeaturesEnumName(LoongArchFeaturesEnum); const char* GetLoongArchFeaturesEnumName(LoongArchFeaturesEnum);
CPU_FEATURES_END_CPP_NAMESPACE CPU_FEATURES_END_CPP_NAMESPACE

View File

@ -21,20 +21,20 @@
CPU_FEATURES_START_CPP_NAMESPACE CPU_FEATURES_START_CPP_NAMESPACE
typedef struct { typedef struct {
int msa : 1; // MIPS SIMD Architecture int msa : 1; // MIPS SIMD Architecture
// https://www.mips.com/products/architectures/ase/simd/ // https://www.mips.com/products/architectures/ase/simd/
int eva : 1; // Enhanced Virtual Addressing int eva : 1; // Enhanced Virtual Addressing
// https://www.mips.com/products/architectures/mips64/ // https://www.mips.com/products/architectures/mips64/
int r6 : 1; // True if is release 6 of the processor. int r6 : 1; // True if is release 6 of the processor.
int mips16 : 1; // Compressed instructions int mips16 : 1; // Compressed instructions
int mdmx : 1; // MIPS Digital Media Extension int mdmx : 1; // MIPS Digital Media Extension
int mips3d : 1; // 3D graphics acceleration int mips3d : 1; // 3D graphics acceleration
// MIPS(r) Architecture for Programmers, Volume IV-c // MIPS(r) Architecture for Programmers, Volume IV-c
int smart : 1; // Smart-card cryptography int smart : 1; // Smart-card cryptography
// MIPS(r) Architecture for Programmers, Volume IV-d // MIPS(r) Architecture for Programmers, Volume IV-d
int dsp : 1; // Digital Signal Processing int dsp : 1; // Digital Signal Processing
// MIPS(r) Architecture for Programmers, Volume IV-e // MIPS(r) Architecture for Programmers, Volume IV-e
// https://www.mips.com/products/architectures/ase/dsp/ // https://www.mips.com/products/architectures/ase/dsp/
// Make sure to update MipsFeaturesEnum below if you add a field here. // Make sure to update MipsFeaturesEnum below if you add a field here.
} MipsFeatures; } MipsFeatures;

View File

@ -21,29 +21,29 @@
CPU_FEATURES_START_CPP_NAMESPACE CPU_FEATURES_START_CPP_NAMESPACE
typedef struct { typedef struct {
int esan3: 1; // instructions named N3, "backported" to esa-mode int esan3 : 1; // instructions named N3, "backported" to esa-mode
int zarch: 1; // z/Architecture mode active int zarch : 1; // z/Architecture mode active
int stfle: 1; // store-facility-list-extended int stfle : 1; // store-facility-list-extended
int msa: 1; // message-security assist int msa : 1; // message-security assist
int ldisp: 1; // long-displacement int ldisp : 1; // long-displacement
int eimm: 1; // extended-immediate int eimm : 1; // extended-immediate
int dfp: 1; // decimal floating point & perform floating point operation int dfp : 1; // decimal floating point & perform floating point operation
int edat: 1; // huge page support int edat : 1; // huge page support
int etf3eh: 1; // extended-translation facility 3 enhancement int etf3eh : 1; // extended-translation facility 3 enhancement
int highgprs: 1; // 64-bit register support for 31-bit processes int highgprs : 1; // 64-bit register support for 31-bit processes
int te: 1; // transactional execution int te : 1; // transactional execution
int vx: 1; // vector extension facility int vx : 1; // vector extension facility
int vxd: 1; // vector-packed-decimal facility int vxd : 1; // vector-packed-decimal facility
int vxe: 1; // vector-enhancement facility 1 int vxe : 1; // vector-enhancement facility 1
int gs: 1; // guarded-storage facility int gs : 1; // guarded-storage facility
int vxe2: 1; // vector-enhancements facility 2 int vxe2 : 1; // vector-enhancements facility 2
int vxp: 1; // vector-packed-decimal-enhancement facility int vxp : 1; // vector-packed-decimal-enhancement facility
int sort: 1; // enhanced-sort facility int sort : 1; // enhanced-sort facility
int dflt: 1; // deflate-conversion facility int dflt : 1; // deflate-conversion facility
int vxp2: 1; // vector-packed-decimal-enhancement facility 2 int vxp2 : 1; // vector-packed-decimal-enhancement facility 2
int nnpa: 1; // neural network processing assist facility int nnpa : 1; // neural network processing assist facility
int pcimio: 1; // PCI mio facility int pcimio : 1; // PCI mio facility
int sie: 1; // virtualization support int sie : 1; // virtualization support
// Make sure to update S390XFeaturesEnum below if you add a field here. // Make sure to update S390XFeaturesEnum below if you add a field here.
} S390XFeatures; } S390XFeatures;
@ -55,11 +55,11 @@ typedef struct {
S390XInfo GetS390XInfo(void); S390XInfo GetS390XInfo(void);
typedef struct { typedef struct {
char platform[64]; // 0 terminated string char platform[64]; // 0 terminated string
} S390XPlatformTypeStrings; } S390XPlatformTypeStrings;
typedef struct { typedef struct {
int num_processors; // -1 if N/A int num_processors; // -1 if N/A
S390XPlatformTypeStrings type; S390XPlatformTypeStrings type;
} S390XPlatformStrings; } S390XPlatformStrings;
@ -95,7 +95,8 @@ typedef enum {
S390X_LAST_, S390X_LAST_,
} S390XFeaturesEnum; } S390XFeaturesEnum;
int GetS390XFeaturesEnumValue(const S390XFeatures* features, S390XFeaturesEnum value); int GetS390XFeaturesEnumValue(const S390XFeatures* features,
S390XFeaturesEnum value);
const char* GetS390XFeaturesEnumName(S390XFeaturesEnum); const char* GetS390XFeaturesEnumName(S390XFeaturesEnum);

View File

@ -109,8 +109,8 @@ typedef struct {
int fs_rep_stosb : 1; // Fast short REP STOSB int fs_rep_stosb : 1; // Fast short REP STOSB
int fs_rep_cmpsb_scasb : 1; // Fast short REP CMPSB/SCASB int fs_rep_cmpsb_scasb : 1; // Fast short REP CMPSB/SCASB
int lam: 1; // Intel Linear Address Mask int lam : 1; // Intel Linear Address Mask
int uai: 1; // AMD Upper Address Ignore int uai : 1; // AMD Upper Address Ignore
// Make sure to update X86FeaturesEnum below if you add a field here. // Make sure to update X86FeaturesEnum below if you add a field here.
} X86Features; } X86Features;

View File

@ -60,7 +60,8 @@ Aarch64Info GetAarch64Info(void) {
info.features.crc32 = GetDarwinSysCtlByName("hw.optional.armv8_crc32"); info.features.crc32 = GetDarwinSysCtlByName("hw.optional.armv8_crc32");
info.features.atomics = GetDarwinSysCtlByName("hw.optional.arm.FEAT_LSE"); info.features.atomics = GetDarwinSysCtlByName("hw.optional.arm.FEAT_LSE");
info.features.fphp = GetDarwinSysCtlByName("hw.optional.arm.FEAT_FP16"); info.features.fphp = GetDarwinSysCtlByName("hw.optional.arm.FEAT_FP16");
info.features.asimdhp = GetDarwinSysCtlByName("hw.optional.arm.AdvSIMD_HPFPCvt"); info.features.asimdhp =
GetDarwinSysCtlByName("hw.optional.arm.AdvSIMD_HPFPCvt");
info.features.asimdrdm = GetDarwinSysCtlByName("hw.optional.arm.FEAT_RDM"); info.features.asimdrdm = GetDarwinSysCtlByName("hw.optional.arm.FEAT_RDM");
info.features.jscvt = GetDarwinSysCtlByName("hw.optional.arm.FEAT_JSCVT"); info.features.jscvt = GetDarwinSysCtlByName("hw.optional.arm.FEAT_JSCVT");
info.features.fcma = GetDarwinSysCtlByName("hw.optional.arm.FEAT_FCMA"); info.features.fcma = GetDarwinSysCtlByName("hw.optional.arm.FEAT_FCMA");

View File

@ -124,7 +124,6 @@ Aarch64Info GetAarch64Info(void) {
info.features.atomics = GetWindowsIsProcessorFeaturePresent( info.features.atomics = GetWindowsIsProcessorFeaturePresent(
PF_ARM_V81_ATOMIC_INSTRUCTIONS_AVAILABLE); PF_ARM_V81_ATOMIC_INSTRUCTIONS_AVAILABLE);
bool is_crypto_available = GetWindowsIsProcessorFeaturePresent( bool is_crypto_available = GetWindowsIsProcessorFeaturePresent(
PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE); PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE);
info.features.aes = is_crypto_available; info.features.aes = is_crypto_available;

View File

@ -22,19 +22,19 @@
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// Definitions for introspection. // Definitions for introspection.
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
#define INTROSPECTION_TABLE \ #define INTROSPECTION_TABLE \
LINE(LOONGARCH_CPUCFG, CPUCFG, "cfg", HWCAP_LOONGARCH_CPUCFG, 0) \ LINE(LOONGARCH_CPUCFG, CPUCFG, "cfg", HWCAP_LOONGARCH_CPUCFG, 0) \
LINE(LOONGARCH_LAM, LAM, "lam", HWCAP_LOONGARCH_LAM, 0) \ LINE(LOONGARCH_LAM, LAM, "lam", HWCAP_LOONGARCH_LAM, 0) \
LINE(LOONGARCH_UAL, UAL, "ual", HWCAP_LOONGARCH_UAL, 0) \ LINE(LOONGARCH_UAL, UAL, "ual", HWCAP_LOONGARCH_UAL, 0) \
LINE(LOONGARCH_FPU, FPU, "fpu", HWCAP_LOONGARCH_FPU, 0) \ LINE(LOONGARCH_FPU, FPU, "fpu", HWCAP_LOONGARCH_FPU, 0) \
LINE(LOONGARCH_LSX, LSX, "lsx", HWCAP_LOONGARCH_LSX, 0) \ LINE(LOONGARCH_LSX, LSX, "lsx", HWCAP_LOONGARCH_LSX, 0) \
LINE(LOONGARCH_LASX, LASX, "lasx", HWCAP_LOONGARCH_LASX, 0) \ LINE(LOONGARCH_LASX, LASX, "lasx", HWCAP_LOONGARCH_LASX, 0) \
LINE(LOONGARCH_CRC32, CRC32, "crc32", HWCAP_LOONGARCH_CRC32, 0) \ LINE(LOONGARCH_CRC32, CRC32, "crc32", HWCAP_LOONGARCH_CRC32, 0) \
LINE(LOONGARCH_COMPLEX, COMPLEX, "complex", HWCAP_LOONGARCH_COMPLEX, 0) \ LINE(LOONGARCH_COMPLEX, COMPLEX, "complex", HWCAP_LOONGARCH_COMPLEX, 0) \
LINE(LOONGARCH_CRYPTO, CRYPTO, "crypto", HWCAP_LOONGARCH_CRYPTO, 0) \ LINE(LOONGARCH_CRYPTO, CRYPTO, "crypto", HWCAP_LOONGARCH_CRYPTO, 0) \
LINE(LOONGARCH_LVZ, LVZ, "lvz", HWCAP_LOONGARCH_LVZ, 0) \ LINE(LOONGARCH_LVZ, LVZ, "lvz", HWCAP_LOONGARCH_LVZ, 0) \
LINE(LOONGARCH_LBT_X86, LBT_X86, "lbt_x86", HWCAP_LOONGARCH_LBT_X86, 0) \ LINE(LOONGARCH_LBT_X86, LBT_X86, "lbt_x86", HWCAP_LOONGARCH_LBT_X86, 0) \
LINE(LOONGARCH_LBT_ARM, LBT_ARM, "lbt_arm", HWCAP_LOONGARCH_LBT_ARM, 0) \ LINE(LOONGARCH_LBT_ARM, LBT_ARM, "lbt_arm", HWCAP_LOONGARCH_LBT_ARM, 0) \
LINE(LOONGARCH_LBT_MIPS, LBT_MIPS, "lbt_mips", HWCAP_LOONGARCH_LBT_MIPS, 0) \ LINE(LOONGARCH_LBT_MIPS, LBT_MIPS, "lbt_mips", HWCAP_LOONGARCH_LBT_MIPS, 0) \
LINE(LOONGARCH_PTW, PTW, "ptw", HWCAP_LOONGARCH_PTW, 0) LINE(LOONGARCH_PTW, PTW, "ptw", HWCAP_LOONGARCH_PTW, 0)
#define INTROSPECTION_PREFIX LoongArch #define INTROSPECTION_PREFIX LoongArch
@ -53,7 +53,8 @@
static const LoongArchInfo kEmptyLoongArchInfo; static const LoongArchInfo kEmptyLoongArchInfo;
static bool HandleLoongArchLine(const LineResult result, LoongArchInfo* const info) { static bool HandleLoongArchLine(const LineResult result,
LoongArchInfo* const info) {
StringView line = result.line; StringView line = result.line;
StringView key, value; StringView key, value;
if (CpuFeatures_StringView_GetAttributeKeyValue(line, &key, &value)) { if (CpuFeatures_StringView_GetAttributeKeyValue(line, &key, &value)) {

View File

@ -69,7 +69,7 @@
LINE(PPC_SCV, scv, "scv", 0, PPC_FEATURE2_SCV) \ LINE(PPC_SCV, scv, "scv", 0, PPC_FEATURE2_SCV) \
LINE(PPC_HTM_NO_SUSPEND, htm_no_suspend, "htm-no-suspend", 0, \ LINE(PPC_HTM_NO_SUSPEND, htm_no_suspend, "htm-no-suspend", 0, \
PPC_FEATURE2_HTM_NO_SUSPEND) PPC_FEATURE2_HTM_NO_SUSPEND)
#undef PPC // Remove conflict with compiler generated preprocessor #undef PPC // Remove conflict with compiler generated preprocessor
#define INTROSPECTION_PREFIX PPC #define INTROSPECTION_PREFIX PPC
#define INTROSPECTION_ENUM_PREFIX PPC #define INTROSPECTION_ENUM_PREFIX PPC
#include "define_introspection_and_hwcaps.inl" #include "define_introspection_and_hwcaps.inl"

View File

@ -22,29 +22,29 @@
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// Definitions for introspection. // Definitions for introspection.
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
#define INTROSPECTION_TABLE \ #define INTROSPECTION_TABLE \
LINE(S390_ESAN3, esan3, "esan3", HWCAP_S390_ESAN3, 0) \ LINE(S390_ESAN3, esan3, "esan3", HWCAP_S390_ESAN3, 0) \
LINE(S390_ZARCH, zarch, "zarch", HWCAP_S390_ZARCH, 0) \ LINE(S390_ZARCH, zarch, "zarch", HWCAP_S390_ZARCH, 0) \
LINE(S390_STFLE, stfle, "stfle", HWCAP_S390_STFLE, 0) \ LINE(S390_STFLE, stfle, "stfle", HWCAP_S390_STFLE, 0) \
LINE(S390_MSA, msa, "msa", HWCAP_S390_MSA, 0) \ LINE(S390_MSA, msa, "msa", HWCAP_S390_MSA, 0) \
LINE(S390_LDISP, ldisp, "ldisp", HWCAP_S390_LDISP, 0) \ LINE(S390_LDISP, ldisp, "ldisp", HWCAP_S390_LDISP, 0) \
LINE(S390_EIMM, eimm, "eimm", HWCAP_S390_EIMM, 0) \ LINE(S390_EIMM, eimm, "eimm", HWCAP_S390_EIMM, 0) \
LINE(S390_DFP, dfp, "dfp", HWCAP_S390_DFP, 0) \ LINE(S390_DFP, dfp, "dfp", HWCAP_S390_DFP, 0) \
LINE(S390_EDAT, edat, "edat", HWCAP_S390_HPAGE, 0) \ LINE(S390_EDAT, edat, "edat", HWCAP_S390_HPAGE, 0) \
LINE(S390_ETF3EH, etf3eh, "etf3eh", HWCAP_S390_ETF3EH, 0) \ LINE(S390_ETF3EH, etf3eh, "etf3eh", HWCAP_S390_ETF3EH, 0) \
LINE(S390_HIGHGPRS, highgprs, "highgprs", HWCAP_S390_HIGH_GPRS, 0) \ LINE(S390_HIGHGPRS, highgprs, "highgprs", HWCAP_S390_HIGH_GPRS, 0) \
LINE(S390_TE, te, "te", HWCAP_S390_TE, 0) \ LINE(S390_TE, te, "te", HWCAP_S390_TE, 0) \
LINE(S390_VX, vx, "vx", HWCAP_S390_VXRS, 0) \ LINE(S390_VX, vx, "vx", HWCAP_S390_VXRS, 0) \
LINE(S390_VXD, vxd, "vxd", HWCAP_S390_VXRS_BCD, 0) \ LINE(S390_VXD, vxd, "vxd", HWCAP_S390_VXRS_BCD, 0) \
LINE(S390_VXE, vxe, "vxe", HWCAP_S390_VXRS_EXT, 0) \ LINE(S390_VXE, vxe, "vxe", HWCAP_S390_VXRS_EXT, 0) \
LINE(S390_GS, gs, "gs", HWCAP_S390_GS, 0) \ LINE(S390_GS, gs, "gs", HWCAP_S390_GS, 0) \
LINE(S390_VXE2, vxe2, "vxe2", HWCAP_S390_VXRS_EXT2, 0) \ LINE(S390_VXE2, vxe2, "vxe2", HWCAP_S390_VXRS_EXT2, 0) \
LINE(S390_VXP, vxp, "vxp", HWCAP_S390_VXRS_PDE, 0) \ LINE(S390_VXP, vxp, "vxp", HWCAP_S390_VXRS_PDE, 0) \
LINE(S390_SORT, sort, "sort", HWCAP_S390_SORT, 0) \ LINE(S390_SORT, sort, "sort", HWCAP_S390_SORT, 0) \
LINE(S390_DFLT, dflt, "dflt", HWCAP_S390_DFLT, 0) \ LINE(S390_DFLT, dflt, "dflt", HWCAP_S390_DFLT, 0) \
LINE(S390_VXP2, vxp2, "vxp2", HWCAP_S390_VXRS_PDE2, 0) \ LINE(S390_VXP2, vxp2, "vxp2", HWCAP_S390_VXRS_PDE2, 0) \
LINE(S390_NNPA, nnpa, "nnpa", HWCAP_S390_NNPA, 0) \ LINE(S390_NNPA, nnpa, "nnpa", HWCAP_S390_NNPA, 0) \
LINE(S390_PCIMIO, pcimio, "pcimio", HWCAP_S390_PCI_MIO, 0) \ LINE(S390_PCIMIO, pcimio, "pcimio", HWCAP_S390_PCI_MIO, 0) \
LINE(S390_SIE, sie, "sie", HWCAP_S390_SIE, 0) LINE(S390_SIE, sie, "sie", HWCAP_S390_SIE, 0)
#define INTROSPECTION_PREFIX S390X #define INTROSPECTION_PREFIX S390X
#define INTROSPECTION_ENUM_PREFIX S390X #define INTROSPECTION_ENUM_PREFIX S390X
@ -63,12 +63,13 @@
#include "internal/string_view.h" #include "internal/string_view.h"
static bool HandleS390XLine(const LineResult result, static bool HandleS390XLine(const LineResult result,
S390XPlatformStrings* const strings) { S390XPlatformStrings* const strings) {
StringView line = result.line; StringView line = result.line;
StringView key, value; StringView key, value;
if (CpuFeatures_StringView_GetAttributeKeyValue(line, &key, &value)) { if (CpuFeatures_StringView_GetAttributeKeyValue(line, &key, &value)) {
if (CpuFeatures_StringView_IsEquals(key, str("# processors"))) { if (CpuFeatures_StringView_IsEquals(key, str("# processors"))) {
strings->num_processors = CpuFeatures_StringView_ParsePositiveNumber(value); strings->num_processors =
CpuFeatures_StringView_ParsePositiveNumber(value);
} }
} }
return !result.eof; return !result.eof;

View File

@ -50,8 +50,8 @@ static void DetectFeaturesFromOs(X86Info* info, X86Features* features) {
features->sse4_2 = features->sse4_2 =
GetWindowsIsProcessorFeaturePresent(PF_SSE4_2_INSTRUCTIONS_AVAILABLE); GetWindowsIsProcessorFeaturePresent(PF_SSE4_2_INSTRUCTIONS_AVAILABLE);
// do not bother checking PF_AVX* // Do not bother checking PF_AVX* : AVX enabled processor will have their XCR0
// cause AVX enabled processor will have XCR0 be exposed and this function will be skipped at all // register exposed and this function will be skipped altogether.
} }
#endif // CPU_FEATURES_OS_WINDOWS #endif // CPU_FEATURES_OS_WINDOWS

View File

@ -212,14 +212,14 @@ DEFINE_ADD_FLAGS(GetMipsFeaturesEnumValue, GetMipsFeaturesEnumName,
DEFINE_ADD_FLAGS(GetPPCFeaturesEnumValue, GetPPCFeaturesEnumName, PPCFeatures, DEFINE_ADD_FLAGS(GetPPCFeaturesEnumValue, GetPPCFeaturesEnumName, PPCFeatures,
PPC_LAST_) PPC_LAST_)
#elif defined(CPU_FEATURES_ARCH_S390X) #elif defined(CPU_FEATURES_ARCH_S390X)
DEFINE_ADD_FLAGS(GetS390XFeaturesEnumValue, GetS390XFeaturesEnumName, S390XFeatures, DEFINE_ADD_FLAGS(GetS390XFeaturesEnumValue, GetS390XFeaturesEnumName,
S390X_LAST_) S390XFeatures, S390X_LAST_)
#elif defined(CPU_FEATURES_ARCH_RISCV) #elif defined(CPU_FEATURES_ARCH_RISCV)
DEFINE_ADD_FLAGS(GetRiscvFeaturesEnumValue, GetRiscvFeaturesEnumName, RiscvFeatures, DEFINE_ADD_FLAGS(GetRiscvFeaturesEnumValue, GetRiscvFeaturesEnumName,
RISCV_LAST_) RiscvFeatures, RISCV_LAST_)
#elif defined(CPU_FEATURES_ARCH_LOONGARCH) #elif defined(CPU_FEATURES_ARCH_LOONGARCH)
DEFINE_ADD_FLAGS(GetLoongArchFeaturesEnumValue, GetLoongArchFeaturesEnumName, LoongArchFeatures, DEFINE_ADD_FLAGS(GetLoongArchFeaturesEnumValue, GetLoongArchFeaturesEnumName,
LOONGARCH_LAST_) LoongArchFeatures, LOONGARCH_LAST_)
#endif #endif
// Prints a json string with characters escaping. // Prints a json string with characters escaping.
@ -436,11 +436,11 @@ static Node* CreateTree(void) {
AddMapEntry(root, "arch", CreateString("risc-v")); AddMapEntry(root, "arch", CreateString("risc-v"));
AddMapEntry(root, "vendor", CreateString(info.vendor)); AddMapEntry(root, "vendor", CreateString(info.vendor));
AddMapEntry(root, "microarchitecture", CreateString(info.uarch)); AddMapEntry(root, "microarchitecture", CreateString(info.uarch));
AddFlags(root, &info.features); AddFlags(root, &info.features);
#elif defined(CPU_FEATURES_ARCH_LOONGARCH) #elif defined(CPU_FEATURES_ARCH_LOONGARCH)
const LoongArchInfo info = GetLoongArchInfo(); const LoongArchInfo info = GetLoongArchInfo();
AddMapEntry(root, "arch", CreateString("loongarch")); AddMapEntry(root, "arch", CreateString("loongarch"));
AddFlags(root, &info.features); AddFlags(root, &info.features);
#endif #endif
return root; return root;
} }