]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Add support for Armv8.2 SHA-512 instructions
authorDavid Benjamin <davidben@google.com>
Wed, 5 Jan 2022 05:22:30 +0000 (00:22 -0500)
committerPaul Floyd <pjfloyd@wanadoo.fr>
Sat, 18 May 2024 15:35:34 +0000 (17:35 +0200)
Fixes https://bugs.kde.org/show_bug.cgi?id=447989

.gitignore
VEX/priv/guest_arm64_defs.h
VEX/priv/guest_arm64_helpers.c
VEX/priv/guest_arm64_toIR.c
coregrind/m_initimg/initimg-linux.c
none/tests/arm64/Makefile.am
none/tests/arm64/sha512_v82.c [new file with mode: 0644]
none/tests/arm64/sha512_v82.stderr.exp [new file with mode: 0644]
none/tests/arm64/sha512_v82.stdout.exp [new file with mode: 0644]
none/tests/arm64/sha512_v82.vgtest [new file with mode: 0644]

index 232059dae77fd6a97b975da4a9d4a3f0e1d63a44..2736719bad0864769535c6cba033f9d671b01555 100644 (file)
 /none/tests/arm64/memory_test
 /none/tests/arm64/simd_dotprod
 /none/tests/arm64/simd_v81
+/none/tests/arm64/sha512_v82
 
 # /none/tests/darwin/
 /none/tests/darwin/*.dSYM
index 241dd36bab390c80b2535811d692c4bfc964701e..a83a4d9a7f26d92f6835e375b3ec5b71f398fe2d 100644 (file)
@@ -175,6 +175,19 @@ extern
 void arm64g_dirtyhelper_SHA256SU1 ( /*OUT*/V128* res, ULong dHi, ULong dLo,
                                     ULong nHi, ULong nLo,
                                     ULong mHi, ULong mLo );
+extern
+void arm64g_dirtyhelper_SHA512H2 ( /*OUT*/V128* res, ULong dHi, ULong dLo,
+                                   ULong nHi, ULong nLo, ULong mHi, ULong mLo );
+extern
+void arm64g_dirtyhelper_SHA512H ( /*OUT*/V128* res, ULong dHi, ULong dLo,
+                                  ULong nHi, ULong nLo, ULong mHi, ULong mLo );
+extern
+void arm64g_dirtyhelper_SHA512SU0 ( /*OUT*/V128* res, ULong dHi, ULong dLo,
+                                    ULong nHi, ULong nLo );
+extern
+void arm64g_dirtyhelper_SHA512SU1 ( /*OUT*/V128* res, ULong dHi, ULong dLo,
+                                    ULong nHi, ULong nLo,
+                                    ULong mHi, ULong mLo );
 
 
 /*---------------------------------------------------------*/
index 0db067d203ab8a17f09e7dbe80414f7f8e04c075..d75798b2b401b3174d484b106ffdd0aae66d3cec 100644 (file)
@@ -928,11 +928,6 @@ ULong arm64g_dirtyhelper_MRS_ID_AA64ISAR0_EL1 ( void )
    //     10
    //     109876543210
    w &= 0xF000F0FFFFFF;
-   /* Degredate SHA2 from b0010 to b0001*/
-   if ( (w >> 12) & 0x2 ) {
-      w ^= (0x2 << 12);
-      w |= (0x1 << 12);
-   }
 
    return w;
 #  else
@@ -1227,6 +1222,11 @@ static inline UInt ROR32 ( UInt x, UInt sh ) {
    return (x >> sh) | (x << (32 - sh));
 }
 
+static inline ULong ROR64 ( ULong x, ULong sh ) {
+   vassert(sh > 0 && sh < 64);
+   return (x >> sh) | (x << (64 - sh));
+}
+
 static inline UInt SHAchoose ( UInt x, UInt y, UInt z ) {
    return ((y ^ z) & x) ^ z;
 }
@@ -1460,6 +1460,70 @@ void arm64g_dirtyhelper_SHA256SU1 ( /*OUT*/V128* res, ULong dHi, ULong dLo,
    }
 }
 
+/* CALLED FROM GENERATED CODE */
+void arm64g_dirtyhelper_SHA512H2 ( /*OUT*/V128* res, ULong dHi, ULong dLo,
+                                   ULong nHi, ULong nLo, ULong mHi, ULong mLo )
+{
+   vassert(nHi == 0);
+   ULong X = nLo;
+   V128 Y; Y.w64[1] = mHi; Y.w64[0] = mLo;
+   V128 W; W.w64[1] = dHi; W.w64[0] = dLo;
+   ULong NSigma0 = ROR64(Y.w64[0], 28) ^ ROR64(Y.w64[0], 34)
+      ^ ROR64(Y.w64[0], 39);
+   res->w64[1] = (X & Y.w64[1]) ^ (X & Y.w64[0]) ^ (Y.w64[1] & Y.w64[0]);
+   res->w64[1] += NSigma0 + W.w64[1];
+   NSigma0 = ROR64(res->w64[1], 28) ^ ROR64(res->w64[1], 34)
+      ^ ROR64(res->w64[1], 39);
+   res->w64[0] = (res->w64[1] & Y.w64[0]) ^ (res->w64[1] & Y.w64[1])
+      ^ (Y.w64[0] & Y.w64[1]);
+   res->w64[0] += NSigma0 + W.w64[0];
+}
+
+/* CALLED FROM GENERATED CODE */
+void arm64g_dirtyhelper_SHA512H ( /*OUT*/V128* res, ULong dHi, ULong dLo,
+                                  ULong nHi, ULong nLo, ULong mHi, ULong mLo )
+{
+   V128 X; X.w64[1] = nHi; X.w64[0] = nLo;
+   V128 Y; Y.w64[1] = mHi; Y.w64[0] = mLo;
+   V128 W; W.w64[1] = dHi; W.w64[0] = dLo;
+   ULong MSigma1 = ROR64(Y.w64[1], 14) ^ ROR64(Y.w64[1], 18)
+      ^ ROR64(Y.w64[1], 41);
+   res->w64[1] = (Y.w64[1] & X.w64[0]) ^ (~Y.w64[1] & X.w64[1]);
+   res->w64[1] += MSigma1 + W.w64[1];
+   ULong tmp = res->w64[1] + Y.w64[0];
+   MSigma1 = ROR64(tmp, 14) ^ ROR64(tmp, 18) ^ ROR64(tmp, 41);
+   res->w64[0] = (tmp & Y.w64[1]) ^ (~tmp & X.w64[0]);
+   res->w64[0] += MSigma1 + W.w64[0];
+}
+
+/* CALLED FROM GENERATED CODE */
+void arm64g_dirtyhelper_SHA512SU0 ( /*OUT*/V128* res, ULong dHi, ULong dLo,
+                                    ULong nHi, ULong nLo )
+
+{
+   vassert(nHi == 0);
+   ULong X = nLo;
+   V128 W; W.w64[1] = dHi; W.w64[0] = dLo;
+   ULong sig0 = ROR64(W.w64[1], 1) ^ ROR64(W.w64[1], 8) ^ (W.w64[1] >> 7);
+   res->w64[0] = W.w64[0] + sig0;
+   sig0 = ROR64(X, 1) ^ ROR64(X, 8) ^ (X >> 7);
+   res->w64[1] = W.w64[1] + sig0;
+}
+
+/* CALLED FROM GENERATED CODE */
+void arm64g_dirtyhelper_SHA512SU1 ( /*OUT*/V128* res, ULong dHi, ULong dLo,
+                                    ULong nHi, ULong nLo,
+                                    ULong mHi, ULong mLo )
+{
+   V128 X; X.w64[1] = nHi; X.w64[0] = nLo;
+   V128 Y; Y.w64[1] = mHi; Y.w64[0] = mLo;
+   V128 W; W.w64[1] = dHi; W.w64[0] = dLo;
+   ULong sig1 = ROR64(X.w64[1], 19) ^ ROR64(X.w64[1], 61) ^ (X.w64[1] >> 6);
+   res->w64[1] = W.w64[1] + sig1 + Y.w64[1];
+   sig1 = ROR64(X.w64[0], 19) ^ ROR64(X.w64[0], 61) ^ (X.w64[0] >> 6);
+   res->w64[0] = W.w64[0] + sig1 + Y.w64[0];
+}
+
 
 /*---------------------------------------------------------------*/
 /*--- Flag-helpers translation-time function specialisers.    ---*/
index 062c0b3aac8d4679a08a7c120afdfd45cc4cac67..758b3970429afa52e0d1300952bb1396133be771 100644 (file)
@@ -14806,7 +14806,7 @@ Bool dis_AdvSIMD_crypto_aes(/*MB_OUT*/DisResult* dres, UInt insn)
 static
 Bool dis_AdvSIMD_crypto_three_reg_sha(/*MB_OUT*/DisResult* dres, UInt insn)
 {
-   /* 31   28   23 21 20 15 14  11 9 4
+   /* 31   27   23 21 20 15 14  11 9 4
       0101 1110 sz 0  m  0  opc 00 n d
       Decode fields are: sz,opc
    */
@@ -14910,7 +14910,7 @@ Bool dis_AdvSIMD_crypto_three_reg_sha(/*MB_OUT*/DisResult* dres, UInt insn)
 static
 Bool dis_AdvSIMD_crypto_two_reg_sha(/*MB_OUT*/DisResult* dres, UInt insn)
 {
-   /* 31   28   23 21    16  11 9 4
+   /* 31   27   23 21    16  11 9 4
       0101 1110 sz 10100 opc 10 n d
       Decode fields are: sz,opc
    */
@@ -15000,6 +15000,142 @@ Bool dis_AdvSIMD_crypto_two_reg_sha(/*MB_OUT*/DisResult* dres, UInt insn)
 }
 
 
+static
+Bool dis_AdvSIMD_crypto_three_reg_sha512(/*MB_OUT*/DisResult* dres, UInt insn)
+{
+   /* 31   27   23  20 15 14 13 11  9 4
+      1100 1110 011 m  1  o  00 opc n d
+      Decode fields are: o,opc
+   */
+#  define INSN(_bMax,_bMin)  SLICE_UInt(insn, (_bMax), (_bMin))
+   if (INSN(31,21) != BITS11(1,1,0,0,1,1,1,0,0,1,1) || INSN(15,15) != 1
+       || INSN(13,12) != BITS2(0,0)) {
+      return False;
+   }
+   UInt mm   = INSN(20,16);
+   UInt bitO = INSN(14,14);
+   UInt opc  = INSN(11,10);
+   UInt nn   = INSN(9,5);
+   UInt dd   = INSN(4,0);
+   if (bitO == 0 && opc <= BITS2(1,0)) {
+      /* -------- 0,00 SHA512H   Qd,    Qn,    Vm.2D -------- */
+      /* -------- 0,01 SHA512H2  Qd,    Qn,    Vm.2D -------- */
+      /* -------- 0,10 SHA512SU1 Vd.2D, Vn.2D, Vm.2D -------- */
+      vassert(opc < 3);
+      const HChar* inames[3] = { "sha512h", "sha512h2", "sha512su1" };
+      void(*helpers[3])(V128*,ULong,ULong,ULong,ULong,ULong,ULong)
+         = { &arm64g_dirtyhelper_SHA512H,  &arm64g_dirtyhelper_SHA512H2,
+             &arm64g_dirtyhelper_SHA512SU1 };
+      const HChar* hnames[3]
+         = { "arm64g_dirtyhelper_SHA512H",  "arm64g_dirtyhelper_SHA512H2",
+             "arm64g_dirtyhelper_SHA512SU1" };
+      IRTemp vD   = newTemp(Ity_V128);
+      IRTemp vN   = newTemp(Ity_V128);
+      IRTemp vM   = newTemp(Ity_V128);
+      IRTemp vDhi = newTemp(Ity_I64);
+      IRTemp vDlo = newTemp(Ity_I64);
+      IRTemp vNhi = newTemp(Ity_I64);
+      IRTemp vNlo = newTemp(Ity_I64);
+      IRTemp vMhi = newTemp(Ity_I64);
+      IRTemp vMlo = newTemp(Ity_I64);
+      assign(vD,   getQReg128(dd));
+      assign(vN,   getQReg128(nn));
+      assign(vM,   getQReg128(mm));
+      assign(vDhi, unop(Iop_V128HIto64, mkexpr(vD)));
+      assign(vDlo, unop(Iop_V128to64,   mkexpr(vD)));
+      /* vNhi is initialized below. */
+      assign(vNlo, unop(Iop_V128to64,   mkexpr(vN)));
+      assign(vMhi, unop(Iop_V128HIto64, mkexpr(vM)));
+      assign(vMlo, unop(Iop_V128to64,   mkexpr(vM)));
+      /* SHA512H2 does not use the upper half of the N register. Mask it off so
+         that Memcheck doesn't complain unnecessarily. */
+      switch (opc) {
+         case BITS2(0,1):
+            assign(vNhi, mkU64(0));
+            break;
+         case BITS2(0,0): case BITS2(1,0):
+            assign(vNhi, unop(Iop_V128HIto64, mkexpr(vN)));
+            break;
+         default:
+            vassert(0);
+      }
+      IRTemp res = newTemp(Ity_V128);
+      IRDirty* di
+         = unsafeIRDirty_1_N( res, 0/*regparms*/, hnames[opc], helpers[opc],
+                              mkIRExprVec_7(
+                                 IRExpr_VECRET(),
+                                 mkexpr(vDhi), mkexpr(vDlo), mkexpr(vNhi),
+                                 mkexpr(vNlo), mkexpr(vMhi), mkexpr(vMlo)));
+      stmt(IRStmt_Dirty(di));
+      putQReg128(dd, mkexpr(res));
+      switch (opc) {
+         case BITS2(0,0): case BITS2(0,1):
+            DIP("%s q%u, q%u, v%u.2d\n", inames[opc], dd, nn, mm);
+            break;
+         case BITS2(1,0):
+            DIP("%s v%u.2d, v%u.2d, v%u.2d\n", inames[opc], dd, nn, mm);
+            break;
+         default:
+            vassert(0);
+      }
+      return True;
+   }
+
+   return False;
+#  undef INSN
+}
+
+
+static
+Bool dis_AdvSIMD_crypto_two_reg_sha512(/*MB_OUT*/DisResult* dres, UInt insn)
+{
+   /* 31   27   23   19   15   11  9 4
+      1100 1110 1100 0000 1000 opc n d
+      Decode fields are: opc
+   */
+#  define INSN(_bMax,_bMin)  SLICE_UInt(insn, (_bMax), (_bMin))
+   if (INSN(31,20) != BITS12(1,1,0,0,1,1,1,0,1,1,0,0)
+       || INSN(19,12) != BITS8(0,0,0,0,1,0,0,0)) {
+      return False;
+   }
+   UInt opc = INSN(11,10);
+   UInt nn  = INSN(9,5);
+   UInt dd  = INSN(4,0);
+   if (opc == BITS2(0,0)) {
+      /* -------- 00 SHA512SU0 Vd.2D, Vn.2D -------- */
+      IRTemp vD   = newTemp(Ity_V128);
+      IRTemp vN   = newTemp(Ity_V128);
+      IRTemp vDhi = newTemp(Ity_I64);
+      IRTemp vDlo = newTemp(Ity_I64);
+      IRTemp vNhi = newTemp(Ity_I64);
+      IRTemp vNlo = newTemp(Ity_I64);
+      assign(vD,   getQReg128(dd));
+      assign(vN,   getQReg128(nn));
+      /* SHA512SU0 ignores the upper half of the N register. Mask it off, so
+         that Memcheck doesn't complain unnecessarily. */
+      assign(vDhi, unop(Iop_V128HIto64, mkexpr(vD)));
+      assign(vDlo, unop(Iop_V128to64,   mkexpr(vD)));
+      assign(vNhi, mkU64(0));
+      assign(vNlo, unop(Iop_V128to64,   mkexpr(vN)));
+      IRTemp   res = newTemp(Ity_V128);
+      IRDirty* di  = unsafeIRDirty_1_N( res, 0/*regparms*/,
+                                        "arm64g_dirtyhelper_SHA512SU0",
+                                        &arm64g_dirtyhelper_SHA512SU0,
+                                        mkIRExprVec_5(
+                                           IRExpr_VECRET(),
+                                           mkexpr(vDhi), mkexpr(vDlo),
+                                           mkexpr(vNhi), mkexpr(vNlo)) );
+      stmt(IRStmt_Dirty(di));
+      putQReg128(dd, mkexpr(res));
+      DIP("sha512su0 v%u.2d, v%u.2d\n", dd, nn);
+      return True;
+   }
+
+   return False;
+#  undef INSN
+}
+
+
 static
 Bool dis_AdvSIMD_fp_compare(/*MB_OUT*/DisResult* dres, UInt insn)
 {
@@ -16135,6 +16271,10 @@ Bool dis_ARM64_simd_and_fp(/*MB_OUT*/DisResult* dres, UInt insn,
    if (UNLIKELY(ok)) return True;
    ok = dis_AdvSIMD_crypto_two_reg_sha(dres, insn);
    if (UNLIKELY(ok)) return True;
+   ok = dis_AdvSIMD_crypto_three_reg_sha512(dres, insn);
+   if (UNLIKELY(ok)) return True;
+   ok = dis_AdvSIMD_crypto_two_reg_sha512(dres, insn);
+   if (UNLIKELY(ok)) return True;
    ok = dis_AdvSIMD_fp_compare(dres, insn);
    if (UNLIKELY(ok)) return True;
    ok = dis_AdvSIMD_fp_conditional_compare(dres, insn, archinfo, sigill_diag);
index 5f35637d757d94b10e866ff7e18f5c638f7181de..c2101b15f11a4f38234a7c81add6af9007370d66 100644 (file)
@@ -734,6 +734,7 @@ Addr setup_client_stack( void*  init_sp,
                                | VKI_HWCAP_PMULL        \
                                | VKI_HWCAP_SHA1         \
                                | VKI_HWCAP_SHA2         \
+                               | VKI_HWCAP_SHA512       \
                                | VKI_HWCAP_CRC32        \
                                | VKI_HWCAP_FP           \
                                | VKI_HWCAP_ASIMD        \
index 1f5d95107b79b0ed8c0089dc6639963c7b7cd7c0..296000d391bcb108786e000a6c30b9ba3a307fc2 100644 (file)
@@ -22,7 +22,8 @@ EXTRA_DIST = \
        ldxp_stxp_basisimpl.stdout.exp ldxp_stxp_basisimpl.stderr.exp \
        ldxp_stxp_basisimpl.vgtest \
        ldxp_stxp_fallbackimpl.stdout.exp ldxp_stxp_fallbackimpl.stderr.exp \
-       ldxp_stxp_fallbackimpl.vgtest
+       ldxp_stxp_fallbackimpl.vgtest sha512_v82.stdout.exp sha512_v82.stderr.exp \
+       sha512_v82.vgtest
 
 check_PROGRAMS = \
        allexec \
@@ -44,7 +45,7 @@ if BUILD_ARMV81_TESTS
 endif
 
 if BUILD_ARMV82_TESTS
-  check_PROGRAMS += fp_and_simd_v82
+  check_PROGRAMS += fp_and_simd_v82 sha512_v82
 endif
 
 if HAVE_CXX17
@@ -70,13 +71,18 @@ simd_v81_CFLAGS    = $(AM_CFLAGS) -march=armv8.1-a+crypto
 simd_dotprod_CFLAGS    = $(AM_CFLAGS) -march=armv8.2-a+dotprod
 fp_and_simd_CFLAGS = $(AM_CFLAGS) -march=armv8-a+crypto
 fp_and_simd_v82_CFLAGS = $(AM_CFLAGS) -march=armv8.2-a+fp16+crypto
+# SHA-512 is not part of SHA-3, either as an algorithm or in Arm features, but
+# GCC lumps SHA-512 and SHA-3 extensions together as "sha3".
+sha512_v82_CFLAGS = $(AM_CFLAGS) -march=armv8.2-a+sha3
 frinta_frintn_SOURCES  = frinta_frintn.cpp
 frinta_frintn_CXXFLAGS = ${AM_CXXFLAGS} -std=c++17
 integer_CFLAGS     = $(AM_CFLAGS) -g -O0 -DTEST_BFM=0
 
 fp_and_simd_SOURCES     = fp_and_simd.c simd.h simd.c
 fp_and_simd_v82_SOURCES = fp_and_simd_v82.c simd.h simd.c
+sha512_v82_SOURCES      = sha512_v82.c simd.h simd.c
 
 fp_and_simd_LDADD  = -lm
 simd_v81_LDADD     = -lm
 fp_and_simd_v82_LDADD  = -lm
+sha512_v82_LDADD  = -lm
diff --git a/none/tests/arm64/sha512_v82.c b/none/tests/arm64/sha512_v82.c
new file mode 100644 (file)
index 0000000..8f74022
--- /dev/null
@@ -0,0 +1,298 @@
+
+#include <stdio.h>
+#include <assert.h>
+#include "simd.h"
+
+/* ---------------------------------------------------------------- */
+/* -- Tests, in the same order that they appear in main()        -- */
+/* -- The full list of instructions tested appear at the end of  -- */
+/* -- this file.                                                 -- */
+/* ---------------------------------------------------------------- */
+
+// SHA512H <Qd>, <Qn>, <Vm>.2D
+
+GEN_THREEVEC_TEST(sha512h_00_01_02, "sha512h q0, q1, v2.2d", 0, 1, 2)
+GEN_THREEVEC_TEST(sha512h_01_02_03, "sha512h q1, q2, v3.2d", 1, 2, 3)
+GEN_THREEVEC_TEST(sha512h_02_03_04, "sha512h q2, q3, v4.2d", 2, 3, 4)
+GEN_THREEVEC_TEST(sha512h_03_04_05, "sha512h q3, q4, v5.2d", 3, 4, 5)
+GEN_THREEVEC_TEST(sha512h_04_05_06, "sha512h q4, q5, v6.2d", 4, 5, 6)
+GEN_THREEVEC_TEST(sha512h_05_06_07, "sha512h q5, q6, v7.2d", 5, 6, 7)
+GEN_THREEVEC_TEST(sha512h_06_07_08, "sha512h q6, q7, v8.2d", 6, 7, 8)
+GEN_THREEVEC_TEST(sha512h_07_08_09, "sha512h q7, q8, v9.2d", 7, 8, 9)
+GEN_THREEVEC_TEST(sha512h_08_09_10, "sha512h q8, q9, v10.2d", 8, 9, 10)
+GEN_THREEVEC_TEST(sha512h_09_10_11, "sha512h q9, q10, v11.2d", 9, 10, 11)
+GEN_THREEVEC_TEST(sha512h_10_11_12, "sha512h q10, q11, v12.2d", 10, 11, 12)
+GEN_THREEVEC_TEST(sha512h_11_12_13, "sha512h q11, q12, v13.2d", 11, 12, 13)
+GEN_THREEVEC_TEST(sha512h_12_13_14, "sha512h q12, q13, v14.2d", 12, 13, 14)
+GEN_THREEVEC_TEST(sha512h_13_14_15, "sha512h q13, q14, v15.2d", 13, 14, 15)
+GEN_THREEVEC_TEST(sha512h_14_15_16, "sha512h q14, q15, v16.2d", 14, 15, 16)
+GEN_THREEVEC_TEST(sha512h_15_16_17, "sha512h q15, q16, v17.2d", 15, 16, 17)
+GEN_THREEVEC_TEST(sha512h_16_17_18, "sha512h q16, q17, v18.2d", 16, 17, 18)
+GEN_THREEVEC_TEST(sha512h_17_18_19, "sha512h q17, q18, v19.2d", 17, 18, 19)
+GEN_THREEVEC_TEST(sha512h_18_19_20, "sha512h q18, q19, v20.2d", 18, 19, 20)
+GEN_THREEVEC_TEST(sha512h_19_20_21, "sha512h q19, q20, v21.2d", 19, 20, 21)
+GEN_THREEVEC_TEST(sha512h_20_21_22, "sha512h q20, q21, v22.2d", 20, 21, 22)
+GEN_THREEVEC_TEST(sha512h_21_22_23, "sha512h q21, q22, v23.2d", 21, 22, 23)
+GEN_THREEVEC_TEST(sha512h_22_23_24, "sha512h q22, q23, v24.2d", 22, 23, 24)
+GEN_THREEVEC_TEST(sha512h_23_24_25, "sha512h q23, q24, v25.2d", 23, 24, 25)
+GEN_THREEVEC_TEST(sha512h_24_25_26, "sha512h q24, q25, v26.2d", 24, 25, 26)
+GEN_THREEVEC_TEST(sha512h_25_26_27, "sha512h q25, q26, v27.2d", 25, 26, 27)
+GEN_THREEVEC_TEST(sha512h_26_27_28, "sha512h q26, q27, v28.2d", 26, 27, 28)
+GEN_THREEVEC_TEST(sha512h_27_28_29, "sha512h q27, q28, v29.2d", 27, 28, 29)
+GEN_THREEVEC_TEST(sha512h_28_29_30, "sha512h q28, q29, v30.2d", 28, 29, 30)
+GEN_THREEVEC_TEST(sha512h_29_30_31, "sha512h q29, q30, v31.2d", 29, 30, 31)
+
+// SHA512H2 <Qd>, <Qn>, <Vm>.2D
+
+GEN_THREEVEC_TEST(sha512h2_00_01_02, "sha512h2 q0, q1, v2.2d", 0, 1, 2)
+GEN_THREEVEC_TEST(sha512h2_01_02_03, "sha512h2 q1, q2, v3.2d", 1, 2, 3)
+GEN_THREEVEC_TEST(sha512h2_02_03_04, "sha512h2 q2, q3, v4.2d", 2, 3, 4)
+GEN_THREEVEC_TEST(sha512h2_03_04_05, "sha512h2 q3, q4, v5.2d", 3, 4, 5)
+GEN_THREEVEC_TEST(sha512h2_04_05_06, "sha512h2 q4, q5, v6.2d", 4, 5, 6)
+GEN_THREEVEC_TEST(sha512h2_05_06_07, "sha512h2 q5, q6, v7.2d", 5, 6, 7)
+GEN_THREEVEC_TEST(sha512h2_06_07_08, "sha512h2 q6, q7, v8.2d", 6, 7, 8)
+GEN_THREEVEC_TEST(sha512h2_07_08_09, "sha512h2 q7, q8, v9.2d", 7, 8, 9)
+GEN_THREEVEC_TEST(sha512h2_08_09_10, "sha512h2 q8, q9, v10.2d", 8, 9, 10)
+GEN_THREEVEC_TEST(sha512h2_09_10_11, "sha512h2 q9, q10, v11.2d", 9, 10, 11)
+GEN_THREEVEC_TEST(sha512h2_10_11_12, "sha512h2 q10, q11, v12.2d", 10, 11, 12)
+GEN_THREEVEC_TEST(sha512h2_11_12_13, "sha512h2 q11, q12, v13.2d", 11, 12, 13)
+GEN_THREEVEC_TEST(sha512h2_12_13_14, "sha512h2 q12, q13, v14.2d", 12, 13, 14)
+GEN_THREEVEC_TEST(sha512h2_13_14_15, "sha512h2 q13, q14, v15.2d", 13, 14, 15)
+GEN_THREEVEC_TEST(sha512h2_14_15_16, "sha512h2 q14, q15, v16.2d", 14, 15, 16)
+GEN_THREEVEC_TEST(sha512h2_15_16_17, "sha512h2 q15, q16, v17.2d", 15, 16, 17)
+GEN_THREEVEC_TEST(sha512h2_16_17_18, "sha512h2 q16, q17, v18.2d", 16, 17, 18)
+GEN_THREEVEC_TEST(sha512h2_17_18_19, "sha512h2 q17, q18, v19.2d", 17, 18, 19)
+GEN_THREEVEC_TEST(sha512h2_18_19_20, "sha512h2 q18, q19, v20.2d", 18, 19, 20)
+GEN_THREEVEC_TEST(sha512h2_19_20_21, "sha512h2 q19, q20, v21.2d", 19, 20, 21)
+GEN_THREEVEC_TEST(sha512h2_20_21_22, "sha512h2 q20, q21, v22.2d", 20, 21, 22)
+GEN_THREEVEC_TEST(sha512h2_21_22_23, "sha512h2 q21, q22, v23.2d", 21, 22, 23)
+GEN_THREEVEC_TEST(sha512h2_22_23_24, "sha512h2 q22, q23, v24.2d", 22, 23, 24)
+GEN_THREEVEC_TEST(sha512h2_23_24_25, "sha512h2 q23, q24, v25.2d", 23, 24, 25)
+GEN_THREEVEC_TEST(sha512h2_24_25_26, "sha512h2 q24, q25, v26.2d", 24, 25, 26)
+GEN_THREEVEC_TEST(sha512h2_25_26_27, "sha512h2 q25, q26, v27.2d", 25, 26, 27)
+GEN_THREEVEC_TEST(sha512h2_26_27_28, "sha512h2 q26, q27, v28.2d", 26, 27, 28)
+GEN_THREEVEC_TEST(sha512h2_27_28_29, "sha512h2 q27, q28, v29.2d", 27, 28, 29)
+GEN_THREEVEC_TEST(sha512h2_28_29_30, "sha512h2 q28, q29, v30.2d", 28, 29, 30)
+GEN_THREEVEC_TEST(sha512h2_29_30_31, "sha512h2 q29, q30, v31.2d", 29, 30, 31)
+
+// SHA512SU0 <Vd>.2D, <Vn>.2D
+
+GEN_TWOVEC_TEST(sha512su0_00_01, "sha512su0 v0.2d, v1.2d", 0, 1)
+GEN_TWOVEC_TEST(sha512su0_01_02, "sha512su0 v1.2d, v2.2d", 1, 2)
+GEN_TWOVEC_TEST(sha512su0_02_03, "sha512su0 v2.2d, v3.2d", 2, 3)
+GEN_TWOVEC_TEST(sha512su0_03_04, "sha512su0 v3.2d, v4.2d", 3, 4)
+GEN_TWOVEC_TEST(sha512su0_04_05, "sha512su0 v4.2d, v5.2d", 4, 5)
+GEN_TWOVEC_TEST(sha512su0_05_06, "sha512su0 v5.2d, v6.2d", 5, 6)
+GEN_TWOVEC_TEST(sha512su0_06_07, "sha512su0 v6.2d, v7.2d", 6, 7)
+GEN_TWOVEC_TEST(sha512su0_07_08, "sha512su0 v7.2d, v8.2d", 7, 8)
+GEN_TWOVEC_TEST(sha512su0_08_09, "sha512su0 v8.2d, v9.2d", 8, 9)
+GEN_TWOVEC_TEST(sha512su0_09_10, "sha512su0 v9.2d, v10.2d", 9, 10)
+GEN_TWOVEC_TEST(sha512su0_10_11, "sha512su0 v10.2d, v11.2d", 10, 11)
+GEN_TWOVEC_TEST(sha512su0_11_12, "sha512su0 v11.2d, v12.2d", 11, 12)
+GEN_TWOVEC_TEST(sha512su0_12_13, "sha512su0 v12.2d, v13.2d", 12, 13)
+GEN_TWOVEC_TEST(sha512su0_13_14, "sha512su0 v13.2d, v14.2d", 13, 14)
+GEN_TWOVEC_TEST(sha512su0_14_15, "sha512su0 v14.2d, v15.2d", 14, 15)
+GEN_TWOVEC_TEST(sha512su0_15_16, "sha512su0 v15.2d, v16.2d", 15, 16)
+GEN_TWOVEC_TEST(sha512su0_16_17, "sha512su0 v16.2d, v17.2d", 16, 17)
+GEN_TWOVEC_TEST(sha512su0_17_18, "sha512su0 v17.2d, v18.2d", 17, 18)
+GEN_TWOVEC_TEST(sha512su0_18_19, "sha512su0 v18.2d, v19.2d", 18, 19)
+GEN_TWOVEC_TEST(sha512su0_19_20, "sha512su0 v19.2d, v20.2d", 19, 20)
+GEN_TWOVEC_TEST(sha512su0_20_21, "sha512su0 v20.2d, v21.2d", 20, 21)
+GEN_TWOVEC_TEST(sha512su0_21_22, "sha512su0 v21.2d, v22.2d", 21, 22)
+GEN_TWOVEC_TEST(sha512su0_22_23, "sha512su0 v22.2d, v23.2d", 22, 23)
+GEN_TWOVEC_TEST(sha512su0_23_24, "sha512su0 v23.2d, v24.2d", 23, 24)
+GEN_TWOVEC_TEST(sha512su0_24_25, "sha512su0 v24.2d, v25.2d", 24, 25)
+GEN_TWOVEC_TEST(sha512su0_25_26, "sha512su0 v25.2d, v26.2d", 25, 26)
+GEN_TWOVEC_TEST(sha512su0_26_27, "sha512su0 v26.2d, v27.2d", 26, 27)
+GEN_TWOVEC_TEST(sha512su0_27_28, "sha512su0 v27.2d, v28.2d", 27, 28)
+GEN_TWOVEC_TEST(sha512su0_28_29, "sha512su0 v28.2d, v29.2d", 28, 29)
+GEN_TWOVEC_TEST(sha512su0_29_30, "sha512su0 v29.2d, v30.2d", 29, 30)
+GEN_TWOVEC_TEST(sha512su0_30_31, "sha512su0 v30.2d, v31.2d", 30, 31)
+
+// SHA512SU1 <Vd>.2D, <Vn>.2D, <Vm>.2D
+
+GEN_THREEVEC_TEST(sha512su1_00_01_02, "sha512su1 v0.2d, v1.2d, v2.2d", 0, 1, 2)
+GEN_THREEVEC_TEST(sha512su1_01_02_03, "sha512su1 v1.2d, v2.2d, v3.2d", 1, 2, 3)
+GEN_THREEVEC_TEST(sha512su1_02_03_04, "sha512su1 v2.2d, v3.2d, v4.2d", 2, 3, 4)
+GEN_THREEVEC_TEST(sha512su1_03_04_05, "sha512su1 v3.2d, v4.2d, v5.2d", 3, 4, 5)
+GEN_THREEVEC_TEST(sha512su1_04_05_06, "sha512su1 v4.2d, v5.2d, v6.2d", 4, 5, 6)
+GEN_THREEVEC_TEST(sha512su1_05_06_07, "sha512su1 v5.2d, v6.2d, v7.2d", 5, 6, 7)
+GEN_THREEVEC_TEST(sha512su1_06_07_08, "sha512su1 v6.2d, v7.2d, v8.2d", 6, 7, 8)
+GEN_THREEVEC_TEST(sha512su1_07_08_09, "sha512su1 v7.2d, v8.2d, v9.2d", 7, 8, 9)
+GEN_THREEVEC_TEST(sha512su1_08_09_10, "sha512su1 v8.2d, v9.2d, v10.2d", 8, 9, 10)
+GEN_THREEVEC_TEST(sha512su1_09_10_11, "sha512su1 v9.2d, v10.2d, v11.2d", 9, 10, 11)
+GEN_THREEVEC_TEST(sha512su1_10_11_12, "sha512su1 v10.2d, v11.2d, v12.2d", 10, 11, 12)
+GEN_THREEVEC_TEST(sha512su1_11_12_13, "sha512su1 v11.2d, v12.2d, v13.2d", 11, 12, 13)
+GEN_THREEVEC_TEST(sha512su1_12_13_14, "sha512su1 v12.2d, v13.2d, v14.2d", 12, 13, 14)
+GEN_THREEVEC_TEST(sha512su1_13_14_15, "sha512su1 v13.2d, v14.2d, v15.2d", 13, 14, 15)
+GEN_THREEVEC_TEST(sha512su1_14_15_16, "sha512su1 v14.2d, v15.2d, v16.2d", 14, 15, 16)
+GEN_THREEVEC_TEST(sha512su1_15_16_17, "sha512su1 v15.2d, v16.2d, v17.2d", 15, 16, 17)
+GEN_THREEVEC_TEST(sha512su1_16_17_18, "sha512su1 v16.2d, v17.2d, v18.2d", 16, 17, 18)
+GEN_THREEVEC_TEST(sha512su1_17_18_19, "sha512su1 v17.2d, v18.2d, v19.2d", 17, 18, 19)
+GEN_THREEVEC_TEST(sha512su1_18_19_20, "sha512su1 v18.2d, v19.2d, v20.2d", 18, 19, 20)
+GEN_THREEVEC_TEST(sha512su1_19_20_21, "sha512su1 v19.2d, v20.2d, v21.2d", 19, 20, 21)
+GEN_THREEVEC_TEST(sha512su1_20_21_22, "sha512su1 v20.2d, v21.2d, v22.2d", 20, 21, 22)
+GEN_THREEVEC_TEST(sha512su1_21_22_23, "sha512su1 v21.2d, v22.2d, v23.2d", 21, 22, 23)
+GEN_THREEVEC_TEST(sha512su1_22_23_24, "sha512su1 v22.2d, v23.2d, v24.2d", 22, 23, 24)
+GEN_THREEVEC_TEST(sha512su1_23_24_25, "sha512su1 v23.2d, v24.2d, v25.2d", 23, 24, 25)
+GEN_THREEVEC_TEST(sha512su1_24_25_26, "sha512su1 v24.2d, v25.2d, v26.2d", 24, 25, 26)
+GEN_THREEVEC_TEST(sha512su1_25_26_27, "sha512su1 v25.2d, v26.2d, v27.2d", 25, 26, 27)
+GEN_THREEVEC_TEST(sha512su1_26_27_28, "sha512su1 v26.2d, v27.2d, v28.2d", 26, 27, 28)
+GEN_THREEVEC_TEST(sha512su1_27_28_29, "sha512su1 v27.2d, v28.2d, v29.2d", 27, 28, 29)
+GEN_THREEVEC_TEST(sha512su1_28_29_30, "sha512su1 v28.2d, v29.2d, v30.2d", 28, 29, 30)
+GEN_THREEVEC_TEST(sha512su1_29_30_31, "sha512su1 v29.2d, v30.2d, v31.2d", 29, 30, 31)
+
+/* ---------------------------------------------------------------- */
+/* -- main()                                                     -- */
+/* ---------------------------------------------------------------- */
+
+int main ( void )
+{
+   assert(sizeof(V128) == 16);
+
+   printf("\nSHA512H <Qd>, <Qn>, <Vm>.2D\n\n");
+
+   if (1) test_sha512h_00_01_02(TyD);
+   if (1) test_sha512h_01_02_03(TyD);
+   if (1) test_sha512h_02_03_04(TyD);
+   if (1) test_sha512h_03_04_05(TyD);
+   if (1) test_sha512h_04_05_06(TyD);
+   if (1) test_sha512h_05_06_07(TyD);
+   if (1) test_sha512h_06_07_08(TyD);
+   if (1) test_sha512h_07_08_09(TyD);
+   if (1) test_sha512h_08_09_10(TyD);
+   if (1) test_sha512h_09_10_11(TyD);
+   if (1) test_sha512h_10_11_12(TyD);
+   if (1) test_sha512h_11_12_13(TyD);
+   if (1) test_sha512h_12_13_14(TyD);
+   if (1) test_sha512h_13_14_15(TyD);
+   if (1) test_sha512h_14_15_16(TyD);
+   if (1) test_sha512h_15_16_17(TyD);
+   if (1) test_sha512h_16_17_18(TyD);
+   if (1) test_sha512h_17_18_19(TyD);
+   if (1) test_sha512h_18_19_20(TyD);
+   if (1) test_sha512h_19_20_21(TyD);
+   if (1) test_sha512h_20_21_22(TyD);
+   if (1) test_sha512h_21_22_23(TyD);
+   if (1) test_sha512h_22_23_24(TyD);
+   if (1) test_sha512h_23_24_25(TyD);
+   if (1) test_sha512h_24_25_26(TyD);
+   if (1) test_sha512h_25_26_27(TyD);
+   if (1) test_sha512h_26_27_28(TyD);
+   if (1) test_sha512h_27_28_29(TyD);
+   if (1) test_sha512h_28_29_30(TyD);
+   if (1) test_sha512h_29_30_31(TyD);
+
+   printf("\nSHA512H2 <Qd>, <Qn>, <Vm>.2D\n\n");
+
+   if (1) test_sha512h2_00_01_02(TyD);
+   if (1) test_sha512h2_01_02_03(TyD);
+   if (1) test_sha512h2_02_03_04(TyD);
+   if (1) test_sha512h2_03_04_05(TyD);
+   if (1) test_sha512h2_04_05_06(TyD);
+   if (1) test_sha512h2_05_06_07(TyD);
+   if (1) test_sha512h2_06_07_08(TyD);
+   if (1) test_sha512h2_07_08_09(TyD);
+   if (1) test_sha512h2_08_09_10(TyD);
+   if (1) test_sha512h2_09_10_11(TyD);
+   if (1) test_sha512h2_10_11_12(TyD);
+   if (1) test_sha512h2_11_12_13(TyD);
+   if (1) test_sha512h2_12_13_14(TyD);
+   if (1) test_sha512h2_13_14_15(TyD);
+   if (1) test_sha512h2_14_15_16(TyD);
+   if (1) test_sha512h2_15_16_17(TyD);
+   if (1) test_sha512h2_16_17_18(TyD);
+   if (1) test_sha512h2_17_18_19(TyD);
+   if (1) test_sha512h2_18_19_20(TyD);
+   if (1) test_sha512h2_19_20_21(TyD);
+   if (1) test_sha512h2_20_21_22(TyD);
+   if (1) test_sha512h2_21_22_23(TyD);
+   if (1) test_sha512h2_22_23_24(TyD);
+   if (1) test_sha512h2_23_24_25(TyD);
+   if (1) test_sha512h2_24_25_26(TyD);
+   if (1) test_sha512h2_25_26_27(TyD);
+   if (1) test_sha512h2_26_27_28(TyD);
+   if (1) test_sha512h2_27_28_29(TyD);
+   if (1) test_sha512h2_28_29_30(TyD);
+   if (1) test_sha512h2_29_30_31(TyD);
+
+   printf("\nSHA512SU0 <Vd>.2D, <Vn>.2D\n\n");
+
+   if (1) test_sha512su0_00_01(TyD);
+   if (1) test_sha512su0_01_02(TyD);
+   if (1) test_sha512su0_02_03(TyD);
+   if (1) test_sha512su0_03_04(TyD);
+   if (1) test_sha512su0_04_05(TyD);
+   if (1) test_sha512su0_05_06(TyD);
+   if (1) test_sha512su0_06_07(TyD);
+   if (1) test_sha512su0_07_08(TyD);
+   if (1) test_sha512su0_08_09(TyD);
+   if (1) test_sha512su0_09_10(TyD);
+   if (1) test_sha512su0_10_11(TyD);
+   if (1) test_sha512su0_11_12(TyD);
+   if (1) test_sha512su0_12_13(TyD);
+   if (1) test_sha512su0_13_14(TyD);
+   if (1) test_sha512su0_14_15(TyD);
+   if (1) test_sha512su0_15_16(TyD);
+   if (1) test_sha512su0_16_17(TyD);
+   if (1) test_sha512su0_17_18(TyD);
+   if (1) test_sha512su0_18_19(TyD);
+   if (1) test_sha512su0_19_20(TyD);
+   if (1) test_sha512su0_20_21(TyD);
+   if (1) test_sha512su0_21_22(TyD);
+   if (1) test_sha512su0_22_23(TyD);
+   if (1) test_sha512su0_23_24(TyD);
+   if (1) test_sha512su0_24_25(TyD);
+   if (1) test_sha512su0_25_26(TyD);
+   if (1) test_sha512su0_26_27(TyD);
+   if (1) test_sha512su0_27_28(TyD);
+   if (1) test_sha512su0_28_29(TyD);
+   if (1) test_sha512su0_29_30(TyD);
+   if (1) test_sha512su0_30_31(TyD);
+
+   printf("\nSHA512SU1 <Vd>.2D, <Vn>.2D, <Vm>.2D\n\n");
+
+   if (1) test_sha512su1_00_01_02(TyD);
+   if (1) test_sha512su1_01_02_03(TyD);
+   if (1) test_sha512su1_02_03_04(TyD);
+   if (1) test_sha512su1_03_04_05(TyD);
+   if (1) test_sha512su1_04_05_06(TyD);
+   if (1) test_sha512su1_05_06_07(TyD);
+   if (1) test_sha512su1_06_07_08(TyD);
+   if (1) test_sha512su1_07_08_09(TyD);
+   if (1) test_sha512su1_08_09_10(TyD);
+   if (1) test_sha512su1_09_10_11(TyD);
+   if (1) test_sha512su1_10_11_12(TyD);
+   if (1) test_sha512su1_11_12_13(TyD);
+   if (1) test_sha512su1_12_13_14(TyD);
+   if (1) test_sha512su1_13_14_15(TyD);
+   if (1) test_sha512su1_14_15_16(TyD);
+   if (1) test_sha512su1_15_16_17(TyD);
+   if (1) test_sha512su1_16_17_18(TyD);
+   if (1) test_sha512su1_17_18_19(TyD);
+   if (1) test_sha512su1_18_19_20(TyD);
+   if (1) test_sha512su1_19_20_21(TyD);
+   if (1) test_sha512su1_20_21_22(TyD);
+   if (1) test_sha512su1_21_22_23(TyD);
+   if (1) test_sha512su1_22_23_24(TyD);
+   if (1) test_sha512su1_23_24_25(TyD);
+   if (1) test_sha512su1_24_25_26(TyD);
+   if (1) test_sha512su1_25_26_27(TyD);
+   if (1) test_sha512su1_26_27_28(TyD);
+   if (1) test_sha512su1_27_28_29(TyD);
+   if (1) test_sha512su1_28_29_30(TyD);
+   if (1) test_sha512su1_29_30_31(TyD);
+
+   return 0;
+}
+
+/* ---------------------------------------------------------------- */
+/* -- List of instructions tested in order of execution.         -- */
+/* -- Useful strings when searching for blocks of test cases.    -- */
+/* ---------------------------------------------------------------- */
+/*
+   SHA512H <Qd>, <Qn>, <Vm>.2D SHA512 Hash update part 1
+   SHA512H2 <Qd>, <Qn>, <Vm>.2D SHA512 Hash update part 2
+   SHA512SU0 <Vd>.2D, <Vn>.2D SHA512 Schedule Update 0
+   SHA512SU1 <Vd>.2D, <Vn>.2D, <Vm>.2D SHA512 Schedule Update 1
+*/
diff --git a/none/tests/arm64/sha512_v82.stderr.exp b/none/tests/arm64/sha512_v82.stderr.exp
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/none/tests/arm64/sha512_v82.stdout.exp b/none/tests/arm64/sha512_v82.stdout.exp
new file mode 100644 (file)
index 0000000..920b671
--- /dev/null
@@ -0,0 +1,135 @@
+
+SHA512H <Qd>, <Qn>, <Vm>.2D
+
+sha512h q0, q1, v2.2d   5175e39d19c9ca1e98f24a4984175700  19a348215c3a67fd399182c2dbcc2d38  065d77195d623e6b842adc6450659e17  65c157bb2742444527af4f5e54907bd4  19a348215c3a67fd399182c2dbcc2d38  065d77195d623e6b842adc6450659e17 fpsr=00000000
+sha512h q1, q2, v3.2d   5ff85bc9535c191fd3a727d1a705f65d  d8bc5c6dee699597398e0039cf03663d  d182c916cebc2e17cfaff39be272ef40  b2745cbfdf9418ef5c8653a0b8c34f29  d8bc5c6dee699597398e0039cf03663d  d182c916cebc2e17cfaff39be272ef40 fpsr=00000000
+sha512h q2, q3, v4.2d   81f2a547be8d181184ededbc53239dcf  019963bf7459630b8d69483df7e8c6a9  f0350ca70523e0e45ba1ec54e87d39b3  2bc47dae37d3aafdb7990a2e959c7ada  019963bf7459630b8d69483df7e8c6a9  f0350ca70523e0e45ba1ec54e87d39b3 fpsr=00000000
+sha512h q3, q4, v5.2d   63483da65c8c49d096084deb9ed0411e  a81b6e33c572a86aacf29b0f395c98b4  61c82534e9bf6f37c9e25f72d82e582b  0980099290174acc65af9c7a5daac588  a81b6e33c572a86aacf29b0f395c98b4  61c82534e9bf6f37c9e25f72d82e582b fpsr=00000000
+sha512h q4, q5, v6.2d   36b2a38dcef18acf0e0f01a829ba3c66  65ce6d498492e7e796df010bf4b23b84  c5e48064a393c8e947a34273c10a3c47  bf4dbfa6c8ed0f4094b62487aabdb208  65ce6d498492e7e796df010bf4b23b84  c5e48064a393c8e947a34273c10a3c47 fpsr=00000000
+sha512h q5, q6, v7.2d   05a5c205c3659f388e17b17da2acb976  8b5fccbef0e1e256bc563e0c775bfaed  048612e51a468e36c51cdd8f87e12ab4  7ede50a38a78f61e5d9275ad3452041e  8b5fccbef0e1e256bc563e0c775bfaed  048612e51a468e36c51cdd8f87e12ab4 fpsr=00000000
+sha512h q6, q7, v8.2d   6489eab2c96df363d52c4330a7aae391  14575775bc3a12029d8e66ea90352a18  f9754842f9c9ba28f82a63b15c68b274  a8e5817fc509015dcdd3daa0de48e801  14575775bc3a12029d8e66ea90352a18  f9754842f9c9ba28f82a63b15c68b274 fpsr=00000000
+sha512h q7, q8, v9.2d   837be65197abe2686b1fba2604afb8d5  fbc4208894fdc0f55f706da71bf2425f  4e92f1b240a122141a366d352714867e  9cc4c17a9d2b81310369321a073198b0  fbc4208894fdc0f55f706da71bf2425f  4e92f1b240a122141a366d352714867e fpsr=00000000
+sha512h q8, q9, v10.2d   ac82c1007a7d3cd8f54b130cdaa89cef  627bb6e12d1f6d4651ef145cb9b83843  02dd0e32eecfc5fa2c3ffa1aebe6a4d2  0d5461f3aa5bd3297ba3286f254821a0  627bb6e12d1f6d4651ef145cb9b83843  02dd0e32eecfc5fa2c3ffa1aebe6a4d2 fpsr=00000000
+sha512h q9, q10, v11.2d   0088596389c893fd879d51d4c5c764db  47086cc3da642fa7130d662777beb4a9  16559ec50352a3d92d460a61a5dd0f6f  98a974fe552da7fd7d7813d76248edfb  47086cc3da642fa7130d662777beb4a9  16559ec50352a3d92d460a61a5dd0f6f fpsr=00000000
+sha512h q10, q11, v12.2d   9432a2e46543b956b819f459105730e9  5da3cfd6aea6558e0c28728e28dc3c9c  d2b3c4044ef23fb2e22093a48a9d2e0b  145376374691a788a1161985662bf97b  5da3cfd6aea6558e0c28728e28dc3c9c  d2b3c4044ef23fb2e22093a48a9d2e0b fpsr=00000000
+sha512h q11, q12, v13.2d   1755377e9a786f014a6592749579b0f4  5f2619b1a20662f012305efa0acd1475  7acb193b9abab2f9e1917689e3f6bf86  29103900a322a93aa16a9089d623d35d  5f2619b1a20662f012305efa0acd1475  7acb193b9abab2f9e1917689e3f6bf86 fpsr=00000000
+sha512h q12, q13, v14.2d   fa99500fef6024ba39dce32c239cf309  570037914d04ab3d05d75ec6f616ee9a  17a0dc273ba9f8030a52741849e54740  cdab1f3dab84001b37c2de5ddb4631c2  570037914d04ab3d05d75ec6f616ee9a  17a0dc273ba9f8030a52741849e54740 fpsr=00000000
+sha512h q13, q14, v15.2d   bc70c3b3ef84644b6295f64a4ce61473  e8c72e865de41295f2db8f44cbbf37e2  f34428d9c8833f5b78fb29445f3bc8d7  15914258d2148e49dcc054dd3c6a1b55  e8c72e865de41295f2db8f44cbbf37e2  f34428d9c8833f5b78fb29445f3bc8d7 fpsr=00000000
+sha512h q14, q15, v16.2d   ac8dd5bbc503330eb9dd5dab8e212ab7  4e94ec120b386f523bfcd80321664d3e  db43c391c6b69f3af17a6312e7c28d9a  e029424f32006b1ea2feca46cf7ff89e  4e94ec120b386f523bfcd80321664d3e  db43c391c6b69f3af17a6312e7c28d9a fpsr=00000000
+sha512h q15, q16, v17.2d   df411d2ee2e7467c38bb69a6e1e9a617  6f9f902235982fa010fd4e94e9c808f5  9e477892854b43e0beafe48541dc8da0  e757e10d60e10b1f9d3ae390642fc8b2  6f9f902235982fa010fd4e94e9c808f5  9e477892854b43e0beafe48541dc8da0 fpsr=00000000
+sha512h q16, q17, v18.2d   ef56701db49bea4ce52e79ce9700a7f7  200d17261638b12a2a6a07863ec28077  31005fb9ada2074bf63a63fedcb4d29c  4f8c50e6bfc6f87ebcb84d013930a111  200d17261638b12a2a6a07863ec28077  31005fb9ada2074bf63a63fedcb4d29c fpsr=00000000
+sha512h q17, q18, v19.2d   139832afee423c3d6930e0fad3ba39c4  4969e55289753f038f7980d1535979e5  80c745ef729f1792ccd7e987538166e1  4919c028d941eb3738ea15f007fbb6a2  4969e55289753f038f7980d1535979e5  80c745ef729f1792ccd7e987538166e1 fpsr=00000000
+sha512h q18, q19, v20.2d   e309aef8a605af130821eb96e737777e  b5a9377eb31749ef710cf757885d2728  1f1030333fb8fa4b2feb05cb92ed4f4d  62d44e5217748bd48fcdbda9272d123c  b5a9377eb31749ef710cf757885d2728  1f1030333fb8fa4b2feb05cb92ed4f4d fpsr=00000000
+sha512h q19, q20, v21.2d   bc36ca100a4a3a7d5127ba1c529aa0bf  9f043af6a1aed58f1ee978efa4b054d2  76f140aa4182b4e706a17746411ab40c  87a10c31cc2f7f1164c9324f18462cc1  9f043af6a1aed58f1ee978efa4b054d2  76f140aa4182b4e706a17746411ab40c fpsr=00000000
+sha512h q20, q21, v22.2d   61cd123e19cf1e2bb001f1161e946f5c  d5f13a9ab645e140698bec649583f5aa  5e86033374552e23ce8e2455e0205c58  967fd2154d7f52cd5f51fde1092ee9e9  d5f13a9ab645e140698bec649583f5aa  5e86033374552e23ce8e2455e0205c58 fpsr=00000000
+sha512h q21, q22, v23.2d   0760c299b42e1fdcc2e9e9cf82c7aff8  f76b8d9773b81b24de24e0a879648e11  7af177f11da748fc8b9145fe16d0390f  efcbd21e2b6f843bd5b646fd3f7a714e  f76b8d9773b81b24de24e0a879648e11  7af177f11da748fc8b9145fe16d0390f fpsr=00000000
+sha512h q22, q23, v24.2d   c50f1401e45b82d3086a7a39a1e6217d  b79cd058188318692112ca1cf9f1dd31  5842cbfee0f72e2ade18612787bc73e3  f9017aab6574b9b88cec7750672ca10c  b79cd058188318692112ca1cf9f1dd31  5842cbfee0f72e2ade18612787bc73e3 fpsr=00000000
+sha512h q23, q24, v25.2d   761b274ac4c4f0c7f31ed81010c417bc  1541139c8b1cd0d1a11d81326f4e7880  30c9028972f8733d11f7fa4450de2529  2fa72b8f8431d56591186a97a427f8b6  1541139c8b1cd0d1a11d81326f4e7880  30c9028972f8733d11f7fa4450de2529 fpsr=00000000
+sha512h q24, q25, v26.2d   35e7926e777aa43f56470887bfdd3daf  b2ed4ecc1e172df2d3a0a41fce854ae7  0e1d55b9c001d4c793aee0cffbdea09a  e3959be4b5a08ce301de1c99e1a2d013  b2ed4ecc1e172df2d3a0a41fce854ae7  0e1d55b9c001d4c793aee0cffbdea09a fpsr=00000000
+sha512h q25, q26, v27.2d   f0fdf0aee1dda4e888e2774acbc13287  f30110c432a534d0478d5d7e053a4e0c  9c86e5cb54c594021c25022200a7415e  2923fded370f8f0d8192f3e455eb8843  f30110c432a534d0478d5d7e053a4e0c  9c86e5cb54c594021c25022200a7415e fpsr=00000000
+sha512h q26, q27, v28.2d   b168a24af5479e7bc9f1d5f8e2de4bd3  894d9fe1f98d1aa0861ef69cf4e34e11  f2789356f1fb0d2b99885af4db13d1b7  992409fbeaa604d7d8260347a2bfc9a9  894d9fe1f98d1aa0861ef69cf4e34e11  f2789356f1fb0d2b99885af4db13d1b7 fpsr=00000000
+sha512h q27, q28, v29.2d   07121ecd88441b7dd2cc3eca9347d80f  6e1d4703bf5de53fd97270f257c73303  c501b4c64209aa2e0719232dba0b82d5  9340342530e39b0ead736c2ae3a33fdd  6e1d4703bf5de53fd97270f257c73303  c501b4c64209aa2e0719232dba0b82d5 fpsr=00000000
+sha512h q28, q29, v30.2d   462deabeada6093241150c7a1a4df892  89ad76dc21a1f8f15acd7ad9f991bada  2a1f00ed91e9071d79112f6f64f5079c  fd567810ac403088da34c3ef79caeeba  89ad76dc21a1f8f15acd7ad9f991bada  2a1f00ed91e9071d79112f6f64f5079c fpsr=00000000
+sha512h q29, q30, v31.2d   e76fcc086aeb0414a9cd126c0869c6a0  6fa194a173e020c0ede3baf27b7b85bb  8514e93e478d067a5a4ac156a6cb98bf  9e68fc5182482e71683912e7dd89c530  6fa194a173e020c0ede3baf27b7b85bb  8514e93e478d067a5a4ac156a6cb98bf fpsr=00000000
+
+SHA512H2 <Qd>, <Qn>, <Vm>.2D
+
+sha512h2 q0, q1, v2.2d   a20cab554a62dd2468a718ec4422710c  b330aadc8a7cbfaf26fbc229d962e2d7  c3ca90f22dec084fa9bca1cab4fdc2ba  bd91ccc14d45ed9d17d4c315ff13d668  b330aadc8a7cbfaf26fbc229d962e2d7  c3ca90f22dec084fa9bca1cab4fdc2ba fpsr=00000000
+sha512h2 q1, q2, v3.2d   45738ec585d726b8f4ecb95e02f1d179  af5de4ddb013d258a082f55bbf17ae91  5df79fd3324f914fb79f41ec172107e2  ab01e27cce5b9eb4e43839350cc5c5f6  af5de4ddb013d258a082f55bbf17ae91  5df79fd3324f914fb79f41ec172107e2 fpsr=00000000
+sha512h2 q2, q3, v4.2d   57d0e8a18b5417adc6b295b85f1c3056  e70216ec5cbcf49e8a09cb539549408a  182fa58322b1219295b48e6f81658922  1901b358c7c3c5aedc1b69052d670c34  e70216ec5cbcf49e8a09cb539549408a  182fa58322b1219295b48e6f81658922 fpsr=00000000
+sha512h2 q3, q4, v5.2d   d52f1cc78e47c9e383314ed9438203c8  aaba95edd88623fc68d5d5d393ccbadd  3b947b8f0a536415b779aada6ea680b0  d621fec8d4389ebd219306f2fdf0593f  aaba95edd88623fc68d5d5d393ccbadd  3b947b8f0a536415b779aada6ea680b0 fpsr=00000000
+sha512h2 q4, q5, v6.2d   b71315802c502c586d5043a8665c8797  d4eaedef93c21b55bdb0c6ce36392d36  8cf3c5a6e236ba0ab0c81fb7053f6b55  70b6ee7f1e61c410fdfc06eaa436a359  d4eaedef93c21b55bdb0c6ce36392d36  8cf3c5a6e236ba0ab0c81fb7053f6b55 fpsr=00000000
+sha512h2 q5, q6, v7.2d   4f80e2044f3a41cb6610e404623f3cac  45a92ebc1d99f6f68da34afe4ed3935a  0b0b9f6018e987aeba97106bb88dbd45  8c8d9cdeb4a5c59a4abce3b479d0741f  45a92ebc1d99f6f68da34afe4ed3935a  0b0b9f6018e987aeba97106bb88dbd45 fpsr=00000000
+sha512h2 q6, q7, v8.2d   1eca927d6d5eee012a6fe8ae3cfe5e6a  22d9446284e6ae8126fc5ee9b286181e  6ed9d5a9ea9b388090ffb3373b81451b  5e4b6c9d04c726f3c09607303d1a072b  22d9446284e6ae8126fc5ee9b286181e  6ed9d5a9ea9b388090ffb3373b81451b fpsr=00000000
+sha512h2 q7, q8, v9.2d   dc2316810c4e5ddd66c8f02281b3c8f2  b6d3ebd9407ecd6355d7239077cddd8e  1854ddf6d8b991ce01deaf4923243fc0  d6c681e11d9addc9d48fdc5825e09a24  b6d3ebd9407ecd6355d7239077cddd8e  1854ddf6d8b991ce01deaf4923243fc0 fpsr=00000000
+sha512h2 q8, q9, v10.2d   ee7d691b146130944d3d038a0b69312c  4df433720fd7245dafacd5bdced9cd88  685c54d57186f6e2a353dba0ead5df70  70176a39fbe6fbc560f62d8ddec388d1  4df433720fd7245dafacd5bdced9cd88  685c54d57186f6e2a353dba0ead5df70 fpsr=00000000
+sha512h2 q9, q10, v11.2d   5c979f40cdc58392364fbbe21b8d12fc  2d16a827667197b8d187cbb340606850  d04b750405c33deba68d8a6feefdf8d2  f8e4735776dddbd545a49f46ddfaee13  2d16a827667197b8d187cbb340606850  d04b750405c33deba68d8a6feefdf8d2 fpsr=00000000
+sha512h2 q10, q11, v12.2d   2af3bd4b509e6608a513cfe482162be8  6f8ae74d5f7960b4a01933ef595f6af1  ab09c2f3335970becb4d15989216cc28  0aca2d653b9255846e13bf605b2e49e4  6f8ae74d5f7960b4a01933ef595f6af1  ab09c2f3335970becb4d15989216cc28 fpsr=00000000
+sha512h2 q11, q12, v13.2d   b8d75a9620326a7d927f8ecd4a783d65  e3761d8b97fa553a6508ac365a886f48  470818041ac5e9b218db305838ff3248  2f9ca92156b455ba1e5ced346be0302e  e3761d8b97fa553a6508ac365a886f48  470818041ac5e9b218db305838ff3248 fpsr=00000000
+randV128: 256 calls, 353 iters
+sha512h2 q12, q13, v14.2d   ed8854faa096b85e32ad5a2818eb39be  85484a52397b894a4f49b178e95f7a8a  764f859cf68f4679dab3699f129680a9  1fbc7e4e2165204c93b64e58af89bdb4  85484a52397b894a4f49b178e95f7a8a  764f859cf68f4679dab3699f129680a9 fpsr=00000000
+sha512h2 q13, q14, v15.2d   92478e7f987ac472db7137e460cce35a  b16fe6d6a518c184b9abfaffa9c65e42  45aeabe876d3472e35c647934c948f3a  04eb73eeaacf77fbbc70d87049285f8a  b16fe6d6a518c184b9abfaffa9c65e42  45aeabe876d3472e35c647934c948f3a fpsr=00000000
+sha512h2 q14, q15, v16.2d   6597ea0af6727713e0401415c692d5dd  3795df08065206478d94b3ff795f1228  6c7f80e89ebd80a5e34bca20163ac21e  790651e0c65ac05cdf45d54693a41cd0  3795df08065206478d94b3ff795f1228  6c7f80e89ebd80a5e34bca20163ac21e fpsr=00000000
+sha512h2 q15, q16, v17.2d   190c026f4f4108bb97f152ac79a338e2  b87fb552d02120cc96fce910c815b7b5  a29325444ec512a939c5af18dc96719b  9bdd58b6802e4d8923b597220e3ef25f  b87fb552d02120cc96fce910c815b7b5  a29325444ec512a939c5af18dc96719b fpsr=00000000
+sha512h2 q16, q17, v18.2d   ba6d23fbddcfb6e48aa9987b39e47961  c38dbdaccabb5bcc988bec41d1f55876  c34a8a359bcdfb7cf3d1cf04bdfd4aa3  8808f403fddc316e73420952f75f61a6  c38dbdaccabb5bcc988bec41d1f55876  c34a8a359bcdfb7cf3d1cf04bdfd4aa3 fpsr=00000000
+sha512h2 q17, q18, v19.2d   2f76953322c0b8926a280fa06b4f801c  4a5c32cf23cea86930f00f8bcd9f5fac  8da998f88c8b32a6eaf8d1b431daa560  522e79080542cec37a47c370e1e2792e  4a5c32cf23cea86930f00f8bcd9f5fac  8da998f88c8b32a6eaf8d1b431daa560 fpsr=00000000
+sha512h2 q18, q19, v20.2d   8a8cc509a7178875c1b1aa5552bf7b54  313cbec68670df4e1ab8e17b2178e568  bafa353551a2546746b48a7dd8000fc0  b2f66672f2a0ba2be7ee9e10b81dac36  313cbec68670df4e1ab8e17b2178e568  bafa353551a2546746b48a7dd8000fc0 fpsr=00000000
+sha512h2 q19, q20, v21.2d   16da21aeefac01e48b55d9bb9a9e8466  ef3804f7e2035f7c3d1ff6252d13375a  0a452b2c674cbddfcbf508515b068b9e  664e61f08eeceed30203128b05a44ffc  ef3804f7e2035f7c3d1ff6252d13375a  0a452b2c674cbddfcbf508515b068b9e fpsr=00000000
+sha512h2 q20, q21, v22.2d   ddb98a28084c634f63bfc3013161828e  94e09c4d7a2fb98594259c37dc0df227  393d14b564cbe1d0c0b48a0655b1d345  30c9498b4dbb4284b2be59ef7fe49e97  94e09c4d7a2fb98594259c37dc0df227  393d14b564cbe1d0c0b48a0655b1d345 fpsr=00000000
+sha512h2 q21, q22, v23.2d   e6246ae1a4f77a426cd3657964fa47a9  2daf41013f9df44bce0cec2fcc6d1cbd  442729db00c06ec7a888afd71cbfd9a5  551c2c415bde9ec21a8989f4be091dcd  2daf41013f9df44bce0cec2fcc6d1cbd  442729db00c06ec7a888afd71cbfd9a5 fpsr=00000000
+sha512h2 q22, q23, v24.2d   0cd7c78555e44c4138f5b60885c215db  53a7ab02214be64e702ec38c9cf9ec6a  2e1c9d0c8757ad8f43446bb26e18386e  8dbe4ba15c4f21cc196b4ca135b19413  53a7ab02214be64e702ec38c9cf9ec6a  2e1c9d0c8757ad8f43446bb26e18386e fpsr=00000000
+sha512h2 q23, q24, v25.2d   bafd469c03bb81a72d0fa3c734a93060  b6a224a9b26dfb35eb12d4ad50bc53dc  e9dd4c503b8c78011defefc04a5c2f46  dc9e5b4b3416d51624efbc89c240cc3d  b6a224a9b26dfb35eb12d4ad50bc53dc  e9dd4c503b8c78011defefc04a5c2f46 fpsr=00000000
+sha512h2 q24, q25, v26.2d   f6d81f33742433f2cc7dd6bb9c2cca19  53ca44aebd31b5254262bdc16b771596  b0e63d866320c355ed98b4a9e8d6e4c1  7c45359c00d150a4fe63091790b829aa  53ca44aebd31b5254262bdc16b771596  b0e63d866320c355ed98b4a9e8d6e4c1 fpsr=00000000
+sha512h2 q25, q26, v27.2d   02471f026197d9cd943b5e67093fabba  3d42e9e6e5cb90a60fca48c537bd2658  95de8b5fc46113474bc49f812043d857  60839f99462842f1d7846d300079175e  3d42e9e6e5cb90a60fca48c537bd2658  95de8b5fc46113474bc49f812043d857 fpsr=00000000
+sha512h2 q26, q27, v28.2d   b0100d870c73d98e7631228f404d2c47  17a2fb4c94dd7be88c072223439e5525  83e142978babb4d3a4113b879f7ed584  531d408ef9928402340229447dbd2316  17a2fb4c94dd7be88c072223439e5525  83e142978babb4d3a4113b879f7ed584 fpsr=00000000
+sha512h2 q27, q28, v29.2d   f502195aa1a15db4a2a879a23d7c0ae2  2c2526cce3d22e428611c200d10412f6  168aaa5db77c1eb35895b6ea59c26bf2  ea795cb26eb4a118117c89276a4fa547  2c2526cce3d22e428611c200d10412f6  168aaa5db77c1eb35895b6ea59c26bf2 fpsr=00000000
+sha512h2 q28, q29, v30.2d   a0538e824a418418f0b95884e5242620  312ce5ddc92aa7904e2af939ce90c5a5  996a0d80bdc2740e452737c8cbeddc2b  0b2f3a11efb357589cef5efdd535ac18  312ce5ddc92aa7904e2af939ce90c5a5  996a0d80bdc2740e452737c8cbeddc2b fpsr=00000000
+sha512h2 q29, q30, v31.2d   db3648af097836cf4a5aca5a97e15cd2  643e888b037969929732973d033b649a  1438844d02a38f5943215d8ac5f35818  ee298eee1f87505c343036a200539371  643e888b037969929732973d033b649a  1438844d02a38f5943215d8ac5f35818 fpsr=00000000
+
+SHA512SU0 <Vd>.2D, <Vn>.2D
+
+sha512su0 v0.2d, v1.2d   e3b7188215a149fe53ac1abaaba25024  c5af844c56a6d2d3c616893fedf747e7  e8f89786cc6f0439e2ab702338909749  c5af844c56a6d2d3c616893fedf747e7 fpsr=00000000
+sha512su0 v1.2d, v2.2d   957f97690fcf998c647b85644dc3143d  078c20e1106551b53bb68b07cdad1dcc  67173587fe50134c2b7bd0718abab0a9  078c20e1106551b53bb68b07cdad1dcc fpsr=00000000
+sha512su0 v2.2d, v3.2d   87bf3870c9d1b02630e6b13676282f82  8ed3ed6fa5a46224d78477c55858ae69  0b79efebad966eec953e0ea76bdada45  8ed3ed6fa5a46224d78477c55858ae69 fpsr=00000000
+sha512su0 v3.2d, v4.2d   f76b95fa6844fb06cbc7d36dc1d5402f  650eb2968b4fd6a0532863cf4c4877ad  fbccdf3e6035de54487449b0fc6ff0bd  650eb2968b4fd6a0532863cf4c4877ad fpsr=00000000
+sha512su0 v4.2d, v5.2d   d8dc6e794dd364af37b3aa17a4931751  3fad6a0b2cb3893654bc5db73e9c4e61  a48058b693e0e89179bafda5d1d2df4b  3fad6a0b2cb3893654bc5db73e9c4e61 fpsr=00000000
+sha512su0 v5.2d, v6.2d   7490935e9f4d651fe1890b76e4653ab7  df175852ed423e44ab2d4b1812a6898d  cdfc65afc0b2147b875f0391906c9fd7  df175852ed423e44ab2d4b1812a6898d fpsr=00000000
+sha512su0 v6.2d, v7.2d   b9c7d9eb61d469d49e0a48b8c8011cc8  b59e4ea568df2b44ca89f0846cae958b  28e33c3f1cb7234f2733ed5855496518  b59e4ea568df2b44ca89f0846cae958b fpsr=00000000
+sha512su0 v7.2d, v8.2d   27e28a572897658ef2a6d6ae590f40fd  2ebbabf3470db8782ccb8833608433b6  c7f322d90e7afb1d90403963c6414c66  2ebbabf3470db8782ccb8833608433b6 fpsr=00000000
+sha512su0 v8.2d, v9.2d   e7f00989302dba7246518421715669c6  b6badcdef8a78c420365b8d34bfc9c8a  73a77c2a00500652472198ff749d15bd  b6badcdef8a78c420365b8d34bfc9c8a fpsr=00000000
+sha512su0 v9.2d, v10.2d   dea946e0b179bef5361cb20c2785c541  2ffdc2c55b0f87032db762c30b75b069  de56afa7722105d951540ac7a0f51afa  2ffdc2c55b0f87032db762c30b75b069 fpsr=00000000
+sha512su0 v10.2d, v11.2d   ed6e1ebb8cda5175a26641cf5aff34ce  77e43d084fa5891a8b20646381504fb2  e37b7158f106287e24e6ff4d65f77b17  77e43d084fa5891a8b20646381504fb2 fpsr=00000000
+sha512su0 v11.2d, v12.2d   f49e747ba1b053546a8f11cbec2196ce  9bfcc47ec746943556f6272c5eb0f887  211e7e7afd6c009e99e1aa6d485c902d  9bfcc47ec746943556f6272c5eb0f887 fpsr=00000000
+sha512su0 v12.2d, v13.2d   f71b72246ed821cc62b7f4350fa9ad03  fac199e95780c0368c621d512005ca47  77c11ab3d23b0d49194c88b96b892587  fac199e95780c0368c621d512005ca47 fpsr=00000000
+sha512su0 v13.2d, v14.2d   81e19ba751200b054e9e031d71f33fe9  5bdb13e5665fd76eee30ba9cd9b572f2  060ba8291ad071f31310f29cb356a588  5bdb13e5665fd76eee30ba9cd9b572f2 fpsr=00000000
+sha512su0 v14.2d, v15.2d   de05200cbf652c8e4966c11a56eab69e  3f0f2ce5b8203000a06e5a6e5dc91ac6  75dcbfe65b6802da29c76080a15defd0  3f0f2ce5b8203000a06e5a6e5dc91ac6 fpsr=00000000
+sha512su0 v15.2d, v16.2d   a5d2c97f7788bae1eca9a838c108ae44  748db6b4df58784ca3da435209d5ce30  05dc18ec6a79542b1eb0bc1cfb657303  748db6b4df58784ca3da435209d5ce30 fpsr=00000000
+sha512su0 v16.2d, v17.2d   a936258b9666b4d4f37549976fb022ff  c32cf63309e402406e9f5a58ac1a54d1  1032324e565fb96974d59242c73a14b6  c32cf63309e402406e9f5a58ac1a54d1 fpsr=00000000
+sha512su0 v17.2d, v18.2d   ec6d05a4b6a1a4cd9e88325743eb11d5  0937b3956de6fb929444b197ac07cce3  150b9abe259992f1d88a6833fa764260  0937b3956de6fb929444b197ac07cce3 fpsr=00000000
+sha512su0 v18.2d, v19.2d   4fd84b29b99a6b2dcd4345d71d165b24  270ecc3cebbd43a2f727286eebfe18c9  83634879805d797a577f9320c31df64f  270ecc3cebbd43a2f727286eebfe18c9 fpsr=00000000
+sha512su0 v19.2d, v20.2d   692a2afdae04a39e34e7a802b90e2f84  52bffb790361bc8206a61431e6f4cfcd  b7830b224f561e54df1613048afe8baf  52bffb790361bc8206a61431e6f4cfcd fpsr=00000000
+sha512su0 v20.2d, v21.2d   f70c3901ccb48a72302032998e011bb2  5015078bc002b309470f1546d9dbad27  7b5ad49e743c44d638bf3b657210b459  5015078bc002b309470f1546d9dbad27 fpsr=00000000
+sha512su0 v21.2d, v22.2d   9a04d2f816626c2c2f38a8db40b290ab  8dd9540466eef7d359b0d13fcfb80416  d4378ce4bdef36338fe50ce643be214d  8dd9540466eef7d359b0d13fcfb80416 fpsr=00000000
+sha512su0 v22.2d, v23.2d   03485ea08590e93c07700db0637e8eb7  23fa3e4706acddf45d393078afc3b5d8  f9c4320d63a2876e4512056406c5545c  23fa3e4706acddf45d393078afc3b5d8 fpsr=00000000
+sha512su0 v23.2d, v24.2d   a6a3c9f2c2e8f683fbfe73fd132e3739  15a929c7b1735a67b7d0887be445bb91  f1d3ff9840f709874db874a089617993  15a929c7b1735a67b7d0887be445bb91 fpsr=00000000
+sha512su0 v24.2d, v25.2d   e266a78d90ffdc91cea49ae5c06573d8  e5bad9f874f6c1ee4d9b6cfdcd38bc65  a581c35971caf4872fba93141f346205  e5bad9f874f6c1ee4d9b6cfdcd38bc65 fpsr=00000000
+sha512su0 v25.2d, v26.2d   1c7493622cfa2597b6855d5cd44e174a  868b2e22d97fdd69760648ac6426460c  540dc1f1f3b96f63cfa43161845633ef  868b2e22d97fdd69760648ac6426460c fpsr=00000000
+sha512su0 v26.2d, v27.2d   08eb890f505a9fef0fb2dc303e71375e  58f31949403befabe5870936cd45f720  5cd8968f8e4fd5787b1fd44cf84ed7b5  58f31949403befabe5870936cd45f720 fpsr=00000000
+sha512su0 v27.2d, v28.2d   29fec9e82973b95bac8519f59f2d04ab  d592cd65355229e856a34b7132ed6522  33a90a4d33953e997c0a81a3cbef4d11  d592cd65355229e856a34b7132ed6522 fpsr=00000000
+sha512su0 v28.2d, v29.2d   89dc3ea5a31f12c364df0e25357e07d6  913d502c107e9cd06a3eec76b56ecb74  cb7d73b56487e9aa6b53893674e8b02c  913d502c107e9cd06a3eec76b56ecb74 fpsr=00000000
+sha512su0 v29.2d, v30.2d   55324c696b018a9ded9a32b2b658bb9d  d6f4419831d4c3802458c320b8e9ef36  7972d53ea8bf58472500a392c496836e  d6f4419831d4c3802458c320b8e9ef36 fpsr=00000000
+sha512su0 v30.2d, v31.2d   19f3d7116d5971d5d234977794db61d6  6ecc3a09dfbd048cc8dc260bdc0b4323  e02b4e815fbb2e292c08976919f6b54e  6ecc3a09dfbd048cc8dc260bdc0b4323 fpsr=00000000
+
+SHA512SU1 <Vd>.2D, <Vn>.2D, <Vm>.2D
+
+sha512su1 v0.2d, v1.2d, v2.2d   0937e4909fe80ce02f87a429eb5f081f  45af4ec7c2a821574df11effc5645bbb  de016364cdeb46445e3dde9f39ff175e  0f7f6ba65166a58e738ddd051d46d395  45af4ec7c2a821574df11effc5645bbb  de016364cdeb46445e3dde9f39ff175e fpsr=00000000
+sha512su1 v1.2d, v2.2d, v3.2d   10a112344c596d04e61bbedf67380ca3  5df6d73059dd837e3e8527449ee9f43b  b1cff9f1b4ddbe2322a9c22776ff3042  211fb586d6a491ebd319ca702013d2b9  5df6d73059dd837e3e8527449ee9f43b  b1cff9f1b4ddbe2322a9c22776ff3042 fpsr=00000000
+sha512su1 v2.2d, v3.2d, v4.2d   f7579b2891a813446e1bdf8d327099a8  51c6f6af2a1de39526bc45f7a76187ef  1378cc285014632fa05bf3836f7b0267  3dd26bec144f04da13fd0d8e0f1ae999  51c6f6af2a1de39526bc45f7a76187ef  1378cc285014632fa05bf3836f7b0267 fpsr=00000000
+sha512su1 v3.2d, v4.2d, v5.2d   30ff3e8365b8b6c1363c54f62d3ffa9d  baa85b3de501ef210e4d83f18c6ed012  f209069ea7d3e520baedeb496f09ca07  0d5494f8e2895df29981a889b182cf01  baa85b3de501ef210e4d83f18c6ed012  f209069ea7d3e520baedeb496f09ca07 fpsr=00000000
+randV128: 512 calls, 699 iters
+sha512su1 v4.2d, v5.2d, v6.2d   919b29bf2bfec2c5dd3bb51ccef7f987  ae2d4071b09e34d197ade8b4986d6b05  ebd55f51b7352d94362d6f4fc8df6c3a  32b90c5acd71d8a625ba656043f3e44e  ae2d4071b09e34d197ade8b4986d6b05  ebd55f51b7352d94362d6f4fc8df6c3a fpsr=00000000
+sha512su1 v5.2d, v6.2d, v7.2d   9511ad90107c4aa99c0bee255989da0e  30796011b79f7a8390a6a371c6291371  4c8b686f3a23b6d93a12e81f605f5002  4df7990220c7a0827b38895bdc273114  30796011b79f7a8390a6a371c6291371  4c8b686f3a23b6d93a12e81f605f5002 fpsr=00000000
+sha512su1 v6.2d, v7.2d, v8.2d   b2aa237461d97084eb06887153eff01a  cfa6ab954bb50e5bd22fb34754a219c5  c89783ffad7ef35a4cf4eb6ba0f602c9  5b026764ed4c736f0909128f43109fc0  cfa6ab954bb50e5bd22fb34754a219c5  c89783ffad7ef35a4cf4eb6ba0f602c9 fpsr=00000000
+sha512su1 v7.2d, v8.2d, v9.2d   0a0edcee4d2cc878ef855eb65c10d628  ee30cd29d94c9218e8bf66df043a1230  0f7c166980b896167145c55bed24b56c  fa08ab144289f83464eafa86fa5124dc  ee30cd29d94c9218e8bf66df043a1230  0f7c166980b896167145c55bed24b56c fpsr=00000000
+sha512su1 v8.2d, v9.2d, v10.2d   0be77b318842c856059940783863e7a8  94463cd1c7914d221e876212d6c92a13  0a97cbc7ac5e30f57b7629851fcfdef3  a043f3eef0af0e1d5212d8cb6983f584  94463cd1c7914d221e876212d6c92a13  0a97cbc7ac5e30f57b7629851fcfdef3 fpsr=00000000
+sha512su1 v9.2d, v10.2d, v11.2d   a8fb004a32b8ef7bf67abbd38dacaf39  7bcc8918719010b51f8d0a9a2b9cdad6  392f0631401ae5027aa91a00bcc34007  bfc7dc19ef39a058d87078dedf8bcfe8  7bcc8918719010b51f8d0a9a2b9cdad6  392f0631401ae5027aa91a00bcc34007 fpsr=00000000
+sha512su1 v10.2d, v11.2d, v12.2d   455d9993e4a5f1b876795aaf7a3a6332  768d72ee82413c1cef651c6c49c9b9c3  ee9c3c004c1c753e762819b5269b0613  c62c0202371f9b513c4e7f63fdbccb06  768d72ee82413c1cef651c6c49c9b9c3  ee9c3c004c1c753e762819b5269b0613 fpsr=00000000
+sha512su1 v11.2d, v12.2d, v13.2d   1a8f772c44efeda7ba0881e4f45d0ce7  50fd4f567ac722fc2fbc3120de9c6479  f376b669ae2ce35a2a57a09a50746818  70fc332719559532d6307eb5368ebe8a  50fd4f567ac722fc2fbc3120de9c6479  f376b669ae2ce35a2a57a09a50746818 fpsr=00000000
+sha512su1 v12.2d, v13.2d, v14.2d   091a1f4f5923c556de8f49b6eb14daf9  95a02171b9c06a425dbdc3e2025a96a7  2ad99232f0910c210fd806e54e5e51f5  d6138b3e567f35fcacb354445c14cc19  95a02171b9c06a425dbdc3e2025a96a7  2ad99232f0910c210fd806e54e5e51f5 fpsr=00000000
+sha512su1 v13.2d, v14.2d, v15.2d   8836d1131b62cd0b48d36e5b73435f30  a664346538d4b1f3206a46c70c8cf676  539af0a5cbcde8d1860844ed2dee1843  835808edbbfb301c6bf90e76d1bed96c  a664346538d4b1f3206a46c70c8cf676  539af0a5cbcde8d1860844ed2dee1843 fpsr=00000000
+sha512su1 v14.2d, v15.2d, v16.2d   f0c7891470a9c6d97711cd0105a75eff  2c00565c14c9b5e0cc4528dc9099beba  3ec6594828ea00ce852ad4015bd9be35  859c98967668d2f6530bacd1b5151e73  2c00565c14c9b5e0cc4528dc9099beba  3ec6594828ea00ce852ad4015bd9be35 fpsr=00000000
+sha512su1 v15.2d, v16.2d, v17.2d   a9732d8eebbc9fc3ac524f46d3d3415d  c3a505c0b746521e41604a20d37f8abb  ab54e2e2e2e9a17df5c4cddac86ba5d7  292d72d7e6fde0969d67d523ae3498d3  c3a505c0b746521e41604a20d37f8abb  ab54e2e2e2e9a17df5c4cddac86ba5d7 fpsr=00000000
+sha512su1 v16.2d, v17.2d, v18.2d   0aefbd68c882e0ba8688124d9a8034e6  4f3e6b0b450ee14a3f6391173f4b1584  c2d574b34771ed36d20bf7d72a1e1546  72ac1a2dd7f72766f1e58b369925b1ca  4f3e6b0b450ee14a3f6391173f4b1584  c2d574b34771ed36d20bf7d72a1e1546 fpsr=00000000
+sha512su1 v17.2d, v18.2d, v19.2d   b166e8214114a950baae5dda57a6295a  4030f30c48c120052fffdbd7daec0268  b803f91594cef4691ed025b60377507f  8df2d4df3f2f2b6bd88aa7bece8ed1ee  4030f30c48c120052fffdbd7daec0268  b803f91594cef4691ed025b60377507f fpsr=00000000
+sha512su1 v18.2d, v19.2d, v20.2d   b70b87ec21fcaee0ded12dca0df26a17  70b1ce7f93297a1aeff889594c121bf4  5ad5737c833dcb8d47245f373bad281c  bcf0f63c040301cb64fac2115e2b507d  70b1ce7f93297a1aeff889594c121bf4  5ad5737c833dcb8d47245f373bad281c fpsr=00000000
+sha512su1 v19.2d, v20.2d, v21.2d   b17280fe8bd0af2574688c737559b274  48dac018701d2c9c4cc5301c44b8009d  4467de8de308363b05d28a171d1a294d  d8414265280303b3e144544585454840  48dac018701d2c9c4cc5301c44b8009d  4467de8de308363b05d28a171d1a294d fpsr=00000000
+sha512su1 v20.2d, v21.2d, v22.2d   25ee34ff9e689545c592399af877a248  df912f8374159df2f7085589b343d21f  d99d3da4e6e56fdba00fc29a5d63c6e3  4bd4d5fc0ddadc83277f70300c3e130a  df912f8374159df2f7085589b343d21f  d99d3da4e6e56fdba00fc29a5d63c6e3 fpsr=00000000
+sha512su1 v21.2d, v22.2d, v23.2d   080a18b62fb42368e72cafe0fab6f109  3a5ee3fa671d74b80b650cfe693570ed  7695b11f8084e96131699e77ba13900a  fb292cecbd41a9b90daea104c65b20a0  3a5ee3fa671d74b80b650cfe693570ed  7695b11f8084e96131699e77ba13900a fpsr=00000000
+sha512su1 v22.2d, v23.2d, v24.2d   6ebcc4c757e84ee401f6228492d84a9b  0ce747ec936710ebfbe70be75829395f  a213d785a320168623013c4543e7646a  95e56034bc90eee120f39b3394153424  0ce747ec936710ebfbe70be75829395f  a213d785a320168623013c4543e7646a fpsr=00000000
+sha512su1 v23.2d, v24.2d, v25.2d   70ed65e99385444d9a5ced2c189f1b19  1a7dfb643cd5dcc0d64fc13628a521a2  c208da666ec923c9a6447b2b73612f52  9b146fd3cb7f9eff55b4d4d3f1ada6ef  1a7dfb643cd5dcc0d64fc13628a521a2  c208da666ec923c9a6447b2b73612f52 fpsr=00000000
+sha512su1 v24.2d, v25.2d, v26.2d   9ca3dd0d0d8957f8464ca0f2311c20b5  b3a2b91de06daeb55b71d1649acc2190  c74ecb80347fdbee7379c440a7ec3e28  8e009d0c65d8b3001897ac42572f0e3a  b3a2b91de06daeb55b71d1649acc2190  c74ecb80347fdbee7379c440a7ec3e28 fpsr=00000000
+sha512su1 v25.2d, v26.2d, v27.2d   51564476d333c3e117b48545ea003632  5685816295ab54170b8338fe141e7250  dbd8609b86ba8d162d9b0d5f9d85c79b  0d239cd3f10eb056d7cd5d08c7422797  5685816295ab54170b8338fe141e7250  dbd8609b86ba8d162d9b0d5f9d85c79b fpsr=00000000
+sha512su1 v26.2d, v27.2d, v28.2d   e19a660dfbf22d561be6f39a2c0cfb30  7a7b4e2ba2eb89d3b39f1de9625c24b1  603563102a8d410ebd081fb5bb3711d3  e4d9bc48f6920345f38fb89f3c198657  7a7b4e2ba2eb89d3b39f1de9625c24b1  603563102a8d410ebd081fb5bb3711d3 fpsr=00000000
+sha512su1 v27.2d, v28.2d, v29.2d   3926cc5df566ae80e65d3af1a217a5e8  bad46a21352852c83b9f9256ee33f7ac  4c7d311058224c9e16e48416217a378f  63b51569ee5b0cc9a0292a959bff8cf0  bad46a21352852c83b9f9256ee33f7ac  4c7d311058224c9e16e48416217a378f fpsr=00000000
+sha512su1 v28.2d, v29.2d, v30.2d   7b408c9b2067aa17b9a984144ef62b49  f81b4f5fe03bec2401c8b1f90f4166de  3d6c48c6356e0b2329e52f65977e5676  776b5e226d8a27ca062820b06e7d9442  f81b4f5fe03bec2401c8b1f90f4166de  3d6c48c6356e0b2329e52f65977e5676 fpsr=00000000
+sha512su1 v29.2d, v30.2d, v31.2d   4d48924e39cfc662eba41ed5c4688066  199d84f3ea7b26753196e4203c5c9b3d  61076702b3356dd0a94456d89e10168e  5694ec1019f3d6b0b3ff5252210a4302  199d84f3ea7b26753196e4203c5c9b3d  61076702b3356dd0a94456d89e10168e fpsr=00000000
diff --git a/none/tests/arm64/sha512_v82.vgtest b/none/tests/arm64/sha512_v82.vgtest
new file mode 100644 (file)
index 0000000..eb32cbe
--- /dev/null
@@ -0,0 +1,3 @@
+prog: sha512_v82
+prereq: test -x sha512_v82 && ../../../tests/arm64_features sha512
+vgopts: -q