[UI] Optimize POWERED() macro with branchless 3-state array lookup

This commit is contained in:
CyrIng
2025-06-21 10:55:45 +02:00
parent 743135c206
commit f618ffb4f8
6 changed files with 37 additions and 29 deletions

View File

@@ -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"

View File

@@ -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"

View File

@@ -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),

View File

@@ -816,6 +816,7 @@ enum {
RSC_UNABLE,
RSC_MISSING,
RSC_PRESENT,
RSC_UNKNOWN,
RSC_VARIANT,
RSC_INVARIANT,
RSC_XAPIC,

View File

@@ -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) );
}

View File

@@ -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() )