From f618ffb4f8bb20309812cac2b4db0bc83bde5a28 Mon Sep 17 00:00:00 2001 From: CyrIng Date: Sat, 21 Jun 2025 10:55:45 +0200 Subject: [PATCH] [UI] Optimize `POWERED()` macro with branchless 3-state array lookup --- x86_64/corefreq-cli-rsc-en.h | 1 + x86_64/corefreq-cli-rsc-fr.h | 1 + x86_64/corefreq-cli-rsc.c | 1 + x86_64/corefreq-cli-rsc.h | 1 + x86_64/corefreq-cli.c | 54 ++++++++++++++++++------------------ x86_64/corefreq-cli.h | 8 ++++-- 6 files changed, 37 insertions(+), 29 deletions(-) diff --git a/x86_64/corefreq-cli-rsc-en.h b/x86_64/corefreq-cli-rsc-en.h index 40d6152..41ea534 100644 --- a/x86_64/corefreq-cli-rsc-en.h +++ b/x86_64/corefreq-cli-rsc-en.h @@ -1117,6 +1117,7 @@ #define RSC_UNABLE_CODE_EN "Unable" #define RSC_MISSING_CODE_EN "Missing" #define RSC_PRESENT_CODE_EN "Capable" +#define RSC_UNKNOWN_CODE_EN "Unknown" #define RSC_VARIANT_CODE_EN "Variant" #define RSC_INVARIANT_CODE_EN "Invariant" #define RSC_FEATURES_1GB_PAGES_CODE_EN "1 GB Pages Support" diff --git a/x86_64/corefreq-cli-rsc-fr.h b/x86_64/corefreq-cli-rsc-fr.h index be16c11..d850800 100644 --- a/x86_64/corefreq-cli-rsc-fr.h +++ b/x86_64/corefreq-cli-rsc-fr.h @@ -593,6 +593,7 @@ do echo -en "$h$l\t""\xc3""\x$h$l""\t"; done; done;echo #define RSC_UNABLE_CODE_FR "Indispo" #define RSC_MISSING_CODE_FR "Absent" #define RSC_PRESENT_CODE_FR "Capable" +#define RSC_UNKNOWN_CODE_FR "Inconnu" #define RSC_VARIANT_CODE_FR "Variant" #define RSC_INVARIANT_CODE_FR "Invariant" #define RSC_FEATURES_1GB_PAGES_CODE_FR "1 GB Pages Support" diff --git a/x86_64/corefreq-cli-rsc.c b/x86_64/corefreq-cli-rsc.c index 1aaac85..808453b 100644 --- a/x86_64/corefreq-cli-rsc.c +++ b/x86_64/corefreq-cli-rsc.c @@ -1013,6 +1013,7 @@ RESOURCE_ST Resource[] = { LDT(RSC_UNABLE), LDT(RSC_MISSING), LDT(RSC_PRESENT), + LDT(RSC_UNKNOWN), LDT(RSC_VARIANT), LDT(RSC_INVARIANT), LDQ(RSC_XAPIC), diff --git a/x86_64/corefreq-cli-rsc.h b/x86_64/corefreq-cli-rsc.h index 84a6471..6a60016 100644 --- a/x86_64/corefreq-cli-rsc.h +++ b/x86_64/corefreq-cli-rsc.h @@ -816,6 +816,7 @@ enum { RSC_UNABLE, RSC_MISSING, RSC_PRESENT, + RSC_UNKNOWN, RSC_VARIANT, RSC_INVARIANT, RSC_XAPIC, diff --git a/x86_64/corefreq-cli.c b/x86_64/corefreq-cli.c index 59dbc23..3522bad 100644 --- a/x86_64/corefreq-cli.c +++ b/x86_64/corefreq-cli.c @@ -5127,77 +5127,77 @@ REASON_CODE SysInfoPerfMon( Window *win, RO(Shm)->Proc.Features.MWait.EDX.SubCstate_MWAIT6, RO(Shm)->Proc.Features.MWait.EDX.SubCstate_MWAIT7 ); - bix = RO(Shm)->Proc.Features.MWait.ECX.EMX_MWAIT == 1 ? 2 : 0; + bix = RO(Shm)->Proc.Features.MWait.ECX.EMX_MWAIT == 1; - PUT( SCANKEY_NULL, attrib[bix], width, 3, "%s%.*s%s [%7s]", - RSC(PERF_MON_MWAIT_EMX_MWAIT).CODE(), + PUT( SCANKEY_NULL, attrib[bix ? 2 : 0], width, 3, + "%s%.*s%s [%7s]", RSC(PERF_MON_MWAIT_EMX_MWAIT).CODE(), width - (OutFunc == NULL ? 21 : 19 ) - RSZ(PERF_MON_MWAIT_EMX_MWAIT), hSpace, RSC(PERF_LABEL_EMX).CODE(), POWERED(bix) ); - bix = RO(Shm)->Proc.Features.MWait.ECX.IBE_MWAIT == 1 ? 2 : 0; + bix = RO(Shm)->Proc.Features.MWait.ECX.IBE_MWAIT == 1; - PUT( SCANKEY_NULL, attrib[bix], width, 3, "%s%.*s%s [%7s]", - RSC(PERF_MON_MWAIT_IBE_MWAIT).CODE(), + PUT( SCANKEY_NULL, attrib[bix ? 2 : 0], width, 3, + "%s%.*s%s [%7s]", RSC(PERF_MON_MWAIT_IBE_MWAIT).CODE(), width - (OutFunc == NULL ? 21 : 19 ) - RSZ(PERF_MON_MWAIT_IBE_MWAIT), hSpace, RSC(PERF_LABEL_IBE).CODE(), POWERED(bix) ); /* Section Mark */ bix = (RO(Shm)->Proc.Features.PerfMon.EBX.CoreCycles == 0) - || (RO(Shm)->Proc.Features.PerfMon.EAX.VectorSz > 0) ? 2 : 0; + || (RO(Shm)->Proc.Features.PerfMon.EAX.VectorSz > 0); - PUT( SCANKEY_NULL, attrib[bix], width, 2, + PUT( SCANKEY_NULL, attrib[bix ? 2 : 0], width, 2, "%s%.*s[%7s]", RSC(PERF_MON_CORE_CYCLE).CODE(), width - 12 - RSZ(PERF_MON_CORE_CYCLE), hSpace, POWERED(bix) ); bix = (RO(Shm)->Proc.Features.PerfMon.EBX.InstrRetired == 0) - || (RO(Shm)->Proc.Features.PerfMon.EAX.VectorSz >= 1) ? 2 : 0; + || (RO(Shm)->Proc.Features.PerfMon.EAX.VectorSz >= 1); - PUT( SCANKEY_NULL, attrib[bix], width, 2, + PUT( SCANKEY_NULL, attrib[bix ? 2 : 0], width, 2, "%s%.*s[%7s]", RSC(PERF_MON_INST_RET).CODE(), width - 12 - RSZ(PERF_MON_INST_RET), hSpace, POWERED(bix) ); bix = (RO(Shm)->Proc.Features.PerfMon.EBX.RefCycles == 0) - || (RO(Shm)->Proc.Features.PerfMon.EAX.VectorSz >= 2) ? 2 : 0; + || (RO(Shm)->Proc.Features.PerfMon.EAX.VectorSz >= 2); - PUT( SCANKEY_NULL, attrib[bix], width, 2, + PUT( SCANKEY_NULL, attrib[bix ? 2 : 0], width, 2, "%s%.*s[%7s]", RSC(PERF_MON_REF_CYCLE).CODE(), width - 12 - RSZ(PERF_MON_REF_CYCLE), hSpace, POWERED(bix) ); bix = (RO(Shm)->Proc.Features.PerfMon.EBX.LLC_Ref == 0) - || (RO(Shm)->Proc.Features.PerfMon.EAX.VectorSz >= 3) ? 2 : 0; + || (RO(Shm)->Proc.Features.PerfMon.EAX.VectorSz >= 3); - PUT( SCANKEY_NULL, attrib[bix], width, 2, + PUT( SCANKEY_NULL, attrib[bix ? 2 : 0], width, 2, "%s%.*s[%7s]", RSC(PERF_MON_REF_LLC).CODE(), width - 12 - RSZ(PERF_MON_REF_LLC), hSpace, POWERED(bix) ); if (RO(Shm)->Proc.Features.Info.Vendor.CRC == CRC_INTEL) { bix = (RO(Shm)->Proc.Features.PerfMon.EBX.LLC_Misses == 0) - || (RO(Shm)->Proc.Features.PerfMon.EAX.VectorSz >= 4) ? 2 : 0; + || (RO(Shm)->Proc.Features.PerfMon.EAX.VectorSz >= 4); - PUT( SCANKEY_NULL, attrib[bix], width, 2, + PUT( SCANKEY_NULL, attrib[bix ? 2 : 0], width, 2, "%s%.*s[%7s]", RSC(PERF_MON_MISS_LLC).CODE(), width - 12 - RSZ(PERF_MON_MISS_LLC), hSpace, POWERED(bix) ); bix = (RO(Shm)->Proc.Features.PerfMon.EBX.BranchRetired == 0) - || (RO(Shm)->Proc.Features.PerfMon.EAX.VectorSz >= 5) ? 2 : 0; + || (RO(Shm)->Proc.Features.PerfMon.EAX.VectorSz >= 5); - PUT( SCANKEY_NULL, attrib[bix], width, 2, + PUT( SCANKEY_NULL, attrib[bix ? 2 : 0], width, 2, "%s%.*s[%7s]", RSC(PERF_MON_BRANCH_RET).CODE(), width - 12 - RSZ(PERF_MON_BRANCH_RET), hSpace, POWERED(bix) ); bix = (RO(Shm)->Proc.Features.PerfMon.EBX.BranchMispred == 0) - || (RO(Shm)->Proc.Features.PerfMon.EAX.VectorSz >= 6) ? 2 : 0; + || (RO(Shm)->Proc.Features.PerfMon.EAX.VectorSz >= 6); - PUT( SCANKEY_NULL, attrib[bix], width, 2, + PUT( SCANKEY_NULL, attrib[bix ? 2 : 0], width, 2, "%s%.*s[%7s]", RSC(PERF_MON_BRANCH_MIS).CODE(), width - 12 - RSZ(PERF_MON_BRANCH_MIS), hSpace, POWERED(bix) ); bix = (RO(Shm)->Proc.Features.PerfMon.EBX.TopdownSlots == 0) - || (RO(Shm)->Proc.Features.PerfMon.EAX.VectorSz >= 7) ? 2 : 0; + || (RO(Shm)->Proc.Features.PerfMon.EAX.VectorSz >= 7); - PUT( SCANKEY_NULL, attrib[bix], width, 2, + PUT( SCANKEY_NULL, attrib[bix ? 2 : 0], width, 2, "%s%.*s[%7s]", RSC(PERF_MON_TOPDOWN_SLOTS).CODE(), width - 12 - RSZ(PERF_MON_TOPDOWN_SLOTS), hSpace, POWERED(bix)); } @@ -5212,22 +5212,22 @@ REASON_CODE SysInfoPerfMon( Window *win, ], RSC(PERF_MON_UNIT_BIT).CODE(), width - 18 - RSZ(PERF_MON_TSC) - RSZ(PERF_MON_UNIT_BIT), - hSpace, POWERED(2) ); + hSpace, POWERED(1) ); } else { PUT( SCANKEY_NULL, attrib[0], width, 2, "%s%.*s[%7s]", RSC(PERF_MON_TSC).CODE(), width - 12 - RSZ(PERF_MON_TSC), hSpace, POWERED(0) ); } - bix = RO(Shm)->Proc.Features.ExtInfo.ECX.PerfNB == 1 ? 2 : 0; + bix = RO(Shm)->Proc.Features.ExtInfo.ECX.PerfNB == 1; - PUT( SCANKEY_NULL, attrib[bix], width, 2, + PUT( SCANKEY_NULL, attrib[bix ? 2 : 0], width, 2, "%s%.*s[%7s]", RSC(PERF_MON_NB_DF).CODE(), width - 12 - RSZ(PERF_MON_NB_DF), hSpace, POWERED(bix) ); - bix = RO(Shm)->Proc.Features.ExtInfo.ECX.PerfCore == 1 ? 2 : 0; + bix = RO(Shm)->Proc.Features.ExtInfo.ECX.PerfCore == 1; - PUT( SCANKEY_NULL, attrib[bix], width, 2, + PUT( SCANKEY_NULL, attrib[bix ? 2 : 0], width, 2, "%s%.*s[%7s]", RSC(PERF_MON_CORE).CODE(), width - 12 - RSZ(PERF_MON_CORE), hSpace, POWERED(bix) ); } diff --git a/x86_64/corefreq-cli.h b/x86_64/corefreq-cli.h index cec86f7..8033630 100644 --- a/x86_64/corefreq-cli.h +++ b/x86_64/corefreq-cli.h @@ -893,8 +893,12 @@ int CheckDuplicateKey(void) \ #define CHECK_DUPLICATE_KEY(_val) #endif /* FEAT_DBG */ -#define POWERED(bit) ( (bit) ? (char*) RSC(PRESENT).CODE() \ - : (char*) RSC(MISSING).CODE() ) +#define _F4(bit) ((!!((bit) & (~1U))) << 1) | ((bit) & 0b1) + +#define POWERED(bit) ( (char*[]) { (char*) RSC(MISSING).CODE(), \ + (char*) RSC(PRESENT).CODE(), \ + (char*) RSC(UNKNOWN).CODE(), \ + (char*) RSC(UNKNOWN).CODE() })[_F4(bit)] #define ENABLED(bit) ( (bit) ? (char*) RSC(ON).CODE() \ : (char*) RSC(OFF).CODE() )