Eliminate some lameness when writing out hwcaps.


git-svn-id: svn://svn.valgrind.org/vex/trunk@2586 8f6e269a-dfd6-0310-a8e1-e2731360e62c
diff --git a/priv/main_main.c b/priv/main_main.c
index b295bea..2fdf49f 100644
--- a/priv/main_main.c
+++ b/priv/main_main.c
@@ -1261,49 +1261,38 @@
 static const HChar* show_hwcaps_s390x ( UInt hwcaps )
 {
    static const HChar prefix[] = "s390x";
-   static const HChar facilities[][7] = {
-     { "ldisp" },
-     { "eimm" },
-     { "gie" },
-     { "dfp" },
-     { "fgx" },
-     { "stfle" },
-     { "etf2" },
-     { "etf3" },
-     { "stckf" },
-     { "fpext" },
-     { "lscond" },
+   static const struct {
+      UInt  hwcaps_bit;
+      HChar name[6];
+   } hwcaps_list[] = {
+      { VEX_HWCAPS_S390X_LDISP, "ldisp" },
+      { VEX_HWCAPS_S390X_EIMM,  "eimm" },
+      { VEX_HWCAPS_S390X_GIE,   "gie" },
+      { VEX_HWCAPS_S390X_DFP,   "dfp" },
+      { VEX_HWCAPS_S390X_FGX,   "fgx" },
+      { VEX_HWCAPS_S390X_STFLE, "stfle" },
+      { VEX_HWCAPS_S390X_ETF2,  "etf2" },
+      { VEX_HWCAPS_S390X_ETF3,  "etf3" },
+      { VEX_HWCAPS_S390X_STCKF, "stckf" },
+      { VEX_HWCAPS_S390X_FPEXT, "fpext" },
+      { VEX_HWCAPS_S390X_LSC,   "lsc" },
    };
-   static HChar buf[sizeof facilities + sizeof prefix + 1];
-   static HChar *p;
+#define NUM_HWCAPS (sizeof hwcaps_list / sizeof hwcaps_list[0])
+   static HChar buf[sizeof prefix + 
+                    NUM_HWCAPS * (sizeof hwcaps_list[0].name + 1) +
+                    1];  // '\0'
+   HChar *p;
+   UInt i;
 
    if (buf[0] != '\0') return buf;  /* already constructed */
 
    hwcaps = VEX_HWCAPS_S390X(hwcaps);
 
    p = buf + vex_sprintf(buf, "%s", prefix);
-   if (hwcaps & VEX_HWCAPS_S390X_LDISP)
-     p = p + vex_sprintf(p, "-%s", facilities[0]);
-   if (hwcaps & VEX_HWCAPS_S390X_EIMM)
-     p = p + vex_sprintf(p, "-%s", facilities[1]);
-   if (hwcaps & VEX_HWCAPS_S390X_GIE)
-     p = p + vex_sprintf(p, "-%s", facilities[2]);
-   if (hwcaps & VEX_HWCAPS_S390X_DFP)
-     p = p + vex_sprintf(p, "-%s", facilities[3]);
-   if (hwcaps & VEX_HWCAPS_S390X_FGX)
-     p = p + vex_sprintf(p, "-%s", facilities[4]);
-   if (hwcaps & VEX_HWCAPS_S390X_STFLE)
-     p = p + vex_sprintf(p, "-%s", facilities[5]);
-   if (hwcaps & VEX_HWCAPS_S390X_ETF2)
-     p = p + vex_sprintf(p, "-%s", facilities[6]);
-   if (hwcaps & VEX_HWCAPS_S390X_ETF3)
-     p = p + vex_sprintf(p, "-%s", facilities[7]);
-   if (hwcaps & VEX_HWCAPS_S390X_STCKF)
-     p = p + vex_sprintf(p, "-%s", facilities[8]);
-   if (hwcaps & VEX_HWCAPS_S390X_FPEXT)
-     p = p + vex_sprintf(p, "-%s", facilities[9]);
-   if (hwcaps & VEX_HWCAPS_S390X_LSC)
-     p = p + vex_sprintf(p, "-%s", facilities[10]);
+   for (i = 0 ; i < NUM_HWCAPS; ++i) {
+      if (hwcaps & hwcaps_list[i].hwcaps_bit)
+         p = p + vex_sprintf(p, "-%s", hwcaps_list[i].name);
+   }
 
    /* If there are no facilities, add "zarch" */
    if (hwcaps == 0)