Extend CPUFeatures to support Armv8.4.

Change-Id: I9ad2541b4e570414dbf59c20134c8342076caec9
diff --git a/src/cpu-features.h b/src/cpu-features.h
index f94b955..9dac583 100644
--- a/src/cpu-features.h
+++ b/src/cpu-features.h
@@ -56,6 +56,8 @@
   V(kLORegions,           "LORegions",              NULL)                      \
   /* Rounding doubling multiply add/subtract: SQRDMLAH and SQRDMLSH.        */ \
   V(kRDM,                 "RDM",                    "asimdrdm")                \
+  /* Scalable Vector Extension.                                             */ \
+  V(kSVE,                 "SVE",                    "sve")                     \
   /* SDOT and UDOT support (in NEON).                                       */ \
   V(kDotProduct,          "DotProduct",             "asimddp")                 \
   /* Half-precision (FP16) support for FP and NEON, respectively.           */ \
@@ -78,12 +80,21 @@
   V(kPAuthGeneric,        "PAuthGeneric",           NULL)                      \
   /* Generic authentication uses QARMA.                                     */ \
   V(kPAuthGenericQARMA,   "PAuthGenericQARMA",      NULL)                      \
-  /* JavaScript-style FP <-> integer conversion instruction: FJCVTZS.       */ \
+  /* JavaScript-style FP -> integer conversion instruction: FJCVTZS.        */ \
   V(kJSCVT,               "JSCVT",                  "jscvt")                   \
+  /* Complex number support for NEON: FCMLA and FCADD.                      */ \
+  V(kFcma,                "Fcma",                   "fcma")                    \
   /* RCpc-based model (for weaker release consistency): LDAPR and variants. */ \
   V(kRCpc,                "RCpc",                   "lrcpc")                   \
-  /* Complex number support for NEON: FCMLA and FCADD.                      */ \
-  V(kFcma,                "Fcma",                   "fcma")
+  V(kRCpcImm,             "RCpc (imm)",             "ilrcpc")                  \
+  /* Flag manipulation instructions: SETF{8,16}, CFINV, RMIF.               */ \
+  V(kFlagM,               "FlagM",                  "flagm")                   \
+  /* Unaligned single-copy atomicity.                                       */ \
+  V(kUSCAT,               "USCAT",                  "uscat")                   \
+  /* FP16 fused multiply-add or -subtract long: FMLAL{2}, FMLSL{2}.         */ \
+  V(kFHM,                 "FHM",                    "asimdfhm")                \
+  /* Data-independent timing (for selected instructions).                   */ \
+  V(kDIT,                 "DIT",                    "dit")
 // clang-format on
 
 
diff --git a/test/test-api.cc b/test/test-api.cc
index 56861ef..9b3454e 100644
--- a/test/test-api.cc
+++ b/test/test-api.cc
@@ -386,9 +386,11 @@
       // Armv8.1
       "Atomics, LORegions, RDM, "
       // Armv8.2
-      "DotProduct, FPHalf, NEONHalf, RAS, DCPoP, SHA3, SHA512, SM3, SM4, "
+      "SVE, DotProduct, FPHalf, NEONHalf, RAS, DCPoP, SHA3, SHA512, SM3, SM4, "
       // Armv8.3
-      "PAuth, PAuthQARMA, PAuthGeneric, PAuthGenericQARMA, JSCVT, RCpc, Fcma",
+      "PAuth, PAuthQARMA, PAuthGeneric, PAuthGenericQARMA, JSCVT, Fcma, RCpc, "
+      // Armv8.4
+      "RCpc (imm), FlagM, USCAT, FHM, DIT",
       CPUFeatures::All());
 }