From 9b872ce0b2c2f25e86ee9040daddfc19d8c308fc Mon Sep 17 00:00:00 2001 From: Guillaume Chatelet Date: Tue, 13 Mar 2018 10:58:42 +0100 Subject: [PATCH] Add cx16 (cmpxchg16b) cpuid flag. Fixes #30 --- include/cpuinfo_x86.h | 2 ++ src/cpuinfo_x86.c | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/include/cpuinfo_x86.h b/include/cpuinfo_x86.h index ff30182..0123ddb 100644 --- a/include/cpuinfo_x86.h +++ b/include/cpuinfo_x86.h @@ -54,6 +54,7 @@ typedef struct { int smx : 1; int sgx : 1; + int cx16 : 1; // aka. CMPXCHG16B // Make sure to update X86FeaturesEnum below if you add a field here. } X86Features; @@ -138,6 +139,7 @@ typedef enum { X86_AVX512_4VBMI2, X86_SMX, X86_SGX, + X86_CX16, X86_LAST_, } X86FeaturesEnum; diff --git a/src/cpuinfo_x86.c b/src/cpuinfo_x86.c index 05258f7..390e8c9 100644 --- a/src/cpuinfo_x86.c +++ b/src/cpuinfo_x86.c @@ -96,6 +96,7 @@ static void ParseCpuId(const uint32_t max_cpuid_leaf, X86Info* info) { info->stepping = ExtractBitRange(leaf_1.eax, 3, 0); features->smx = IsBitSet(leaf_1.ecx, 6); + features->cx16 = IsBitSet(leaf_1.ecx, 13); features->aes = IsBitSet(leaf_1.ecx, 25); features->f16c = IsBitSet(leaf_1.ecx, 29); features->sgx = IsBitSet(leaf_7.ebx, 2); @@ -319,6 +320,8 @@ int GetX86FeaturesEnumValue(const X86Features* features, return features->smx; case X86_SGX: return features->sgx; + case X86_CX16: + return features->cx16; case X86_LAST_: break; } @@ -385,6 +388,8 @@ const char* GetX86FeaturesEnumName(X86FeaturesEnum value) { return "smx"; case X86_SGX: return "sgx"; + case X86_CX16: + return "cx16"; case X86_LAST_: break; }