Add support for ARMv8 AArch64 (the 64 bit ARM instruction set).


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13770 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/coregrind/m_libcassert.c b/coregrind/m_libcassert.c
index d7706de..65a373e 100644
--- a/coregrind/m_libcassert.c
+++ b/coregrind/m_libcassert.c
@@ -136,6 +136,25 @@
         (srP)->misc.ARM.r11 = block[4];                   \
         (srP)->misc.ARM.r7  = block[5];                   \
       }
+#elif defined(VGP_arm64_linux)
+#  define GET_STARTREGS(srP)                              \
+      { ULong block[4];                                   \
+        __asm__ __volatile__(                             \
+           "adr x19, 0;"                                  \
+           "str x19, [%0, #+0];"   /* pc */               \
+           "mov x19, sp;"                                 \
+           "str x19, [%0, #+8];"   /* sp */               \
+           "str x29, [%0, #+16];"  /* fp */               \
+           "str x30, [%0, #+24];"  /* lr */               \
+           : /* out */                                    \
+           : /* in */ "r"(&block[0])                      \
+           : /* trash */ "memory","x19"                   \
+        );                                                \
+        (srP)->r_pc = block[0];                           \
+        (srP)->r_sp = block[1];                           \
+        (srP)->misc.ARM64.x29 = block[2];                 \
+        (srP)->misc.ARM64.x30 = block[3];                 \
+      }
 #elif defined(VGP_s390x_linux)
 #  define GET_STARTREGS(srP)                              \
       { ULong ia, sp, fp, lr;                             \