Add FAC_BIT macro to simplify correct testing for facility bits.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12919 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/tests/s390x_features.c b/tests/s390x_features.c
index 837d83e..36305fa 100644
--- a/tests/s390x_features.c
+++ b/tests/s390x_features.c
@@ -190,6 +190,11 @@
return model;
}
+
+/* Convenience macro that maps the facility bit number as given in the
+ Principles of Ops "facility indications" section to a bit mask */
+#define FAC_BIT(x) (1ULL << (63 - (x)))
+
static int go(char *feature, char *cpu)
{
unsigned long long facilities;
@@ -200,25 +205,25 @@
facilities = stfle();
if (strcmp(feature, "s390x-zarch") == 0 ) {
- match = (facilities & (1ULL << 62) && (facilities & (1ULL << 61)));
+ match = (facilities & FAC_BIT(1)) && (facilities & FAC_BIT(2));
} else if (strcmp(feature, "s390x-n3") == 0 ) {
- match = (facilities & (1ULL << 63));
+ match = facilities & FAC_BIT(0);
} else if (strcmp(feature, "s390x-stfle") == 0 ) {
- match = (facilities & (1ULL << 56));
+ match = facilities & FAC_BIT(7);
} else if (strcmp(feature, "s390x-ldisp") == 0 ) {
- match = (facilities & (1ULL << 45) && (facilities & (1ULL << 44)));
+ match = (facilities & FAC_BIT(18)) && (facilities & FAC_BIT(19));
} else if (strcmp(feature, "s390x-eimm") == 0 ) {
- match = (facilities & (1ULL << 42));
+ match = facilities & FAC_BIT(21);
} else if (strcmp(feature, "s390x-stckf") == 0 ) {
- match = (facilities & (1ULL << 38));
+ match = facilities & FAC_BIT(25);
} else if (strcmp(feature, "s390x-genins") == 0 ) {
- match = (facilities & (1ULL << 29));
+ match = facilities & FAC_BIT(34);
} else if (strcmp(feature, "s390x-exrl") == 0 ) {
- match = (facilities & (1ULL << 28));
+ match = facilities & FAC_BIT(35);
} else if (strcmp(feature, "s390x-etf3") == 0 ) {
- match = (facilities & (1ULL << (63 - 30)));
+ match = facilities & FAC_BIT(30);
} else {
- return 2; // Unrecognised feature.
+ return 2; // Unrecognised feature.
}
if (match == 0) return 1; // facility not provided