|
From: <sv...@va...> - 2014-02-20 17:34:53
|
Author: sewardj
Date: Thu Feb 20 17:34:45 2014
New Revision: 13821
Log:
Make these buildable on arm64-linux.
Modified:
trunk/memcheck/tests/atomic_incs.c
trunk/memcheck/tests/unit_libcbase.c
Modified: trunk/memcheck/tests/atomic_incs.c
==============================================================================
--- trunk/memcheck/tests/atomic_incs.c (original)
+++ trunk/memcheck/tests/atomic_incs.c Thu Feb 20 17:34:45 2014
@@ -96,6 +96,24 @@
: /*trash*/ "memory", "cc", "r5", "r8", "r9", "r10", "r4"
);
} while (block[2] != 0);
+#elif defined(VGA_arm64)
+ unsigned long long int block[3]
+ = { (unsigned long long int)p, (unsigned long long int)n,
+ 0xFFFFFFFFFFFFFFFFULL};
+ do {
+ __asm__ __volatile__(
+ "mov x5, %0" "\n\t"
+ "ldr x9, [x5, #0]" "\n\t" // p
+ "ldr x10, [x5, #8]" "\n\t" // n
+ "ldxrb w8, [x9]" "\n\t"
+ "add x8, x8, x10" "\n\t"
+ "stxrb w4, w8, [x9]" "\n\t"
+ "str x4, [x5, #16]" "\n\t"
+ : /*out*/
+ : /*in*/ "r"(&block[0])
+ : /*trash*/ "memory", "cc", "x5", "x8", "x9", "x10", "x4"
+ );
+ } while (block[2] != 0);
#elif defined(VGA_s390x)
int dummy;
__asm__ __volatile__(
@@ -277,6 +295,24 @@
: /*trash*/ "memory", "cc", "r5", "r8", "r9", "r10", "r4"
);
} while (block[2] != 0);
+#elif defined(VGA_arm64)
+ unsigned long long int block[3]
+ = { (unsigned long long int)p, (unsigned long long int)n,
+ 0xFFFFFFFFFFFFFFFFULL};
+ do {
+ __asm__ __volatile__(
+ "mov x5, %0" "\n\t"
+ "ldr x9, [x5, #0]" "\n\t" // p
+ "ldr x10, [x5, #8]" "\n\t" // n
+ "ldxrh w8, [x9]" "\n\t"
+ "add x8, x8, x10" "\n\t"
+ "stxrh w4, w8, [x9]" "\n\t"
+ "str x4, [x5, #16]" "\n\t"
+ : /*out*/
+ : /*in*/ "r"(&block[0])
+ : /*trash*/ "memory", "cc", "x5", "x8", "x9", "x10", "x4"
+ );
+ } while (block[2] != 0);
#elif defined(VGA_s390x)
int dummy;
__asm__ __volatile__(
@@ -455,6 +491,24 @@
: /*trash*/ "memory", "cc", "r5", "r8", "r9", "r10", "r4"
);
} while (block[2] != 0);
+#elif defined(VGA_arm64)
+ unsigned long long int block[3]
+ = { (unsigned long long int)p, (unsigned long long int)n,
+ 0xFFFFFFFFFFFFFFFFULL};
+ do {
+ __asm__ __volatile__(
+ "mov x5, %0" "\n\t"
+ "ldr x9, [x5, #0]" "\n\t" // p
+ "ldr x10, [x5, #8]" "\n\t" // n
+ "ldxr w8, [x9]" "\n\t"
+ "add x8, x8, x10" "\n\t"
+ "stxr w4, w8, [x9]" "\n\t"
+ "str x4, [x5, #16]" "\n\t"
+ : /*out*/
+ : /*in*/ "r"(&block[0])
+ : /*trash*/ "memory", "cc", "x5", "x8", "x9", "x10", "x4"
+ );
+ } while (block[2] != 0);
#elif defined(VGA_s390x)
__asm__ __volatile__(
" l 0,%0\n\t"
@@ -555,6 +609,24 @@
: /*trash*/ "memory", "cc", "r5", "r0", "r1", "r8", "r2", "r3"
);
} while (block[2] != 0xFFFFFFFF00000000ULL);
+#elif defined(VGA_arm64)
+ unsigned long long int block[3]
+ = { (unsigned long long int)p, (unsigned long long int)n,
+ 0xFFFFFFFFFFFFFFFFULL};
+ do {
+ __asm__ __volatile__(
+ "mov x5, %0" "\n\t"
+ "ldr x9, [x5, #0]" "\n\t" // p
+ "ldr x10, [x5, #8]" "\n\t" // n
+ "ldxr x8, [x9]" "\n\t"
+ "add x8, x8, x10" "\n\t"
+ "stxr w4, x8, [x9]" "\n\t"
+ "str x4, [x5, #16]" "\n\t"
+ : /*out*/
+ : /*in*/ "r"(&block[0])
+ : /*trash*/ "memory", "cc", "x5", "x8", "x9", "x10", "x4"
+ );
+ } while (block[2] != 0);
#elif defined(VGA_s390x)
__asm__ __volatile__(
" lg 0,%0\n\t"
Modified: trunk/memcheck/tests/unit_libcbase.c
==============================================================================
--- trunk/memcheck/tests/unit_libcbase.c (original)
+++ trunk/memcheck/tests/unit_libcbase.c Thu Feb 20 17:34:45 2014
@@ -58,6 +58,8 @@
// On PPC/Linux VKI_PAGE_SIZE is a variable, not a macro.
#if defined(VGP_ppc32_linux) || defined(VGP_ppc64_linux)
unsigned long VKI_PAGE_SIZE = 1UL << 12;
+#elif defined(VGP_arm64_linux)
+unsigned long VKI_PAGE_SIZE = 1UL << 16;
#endif
void test_VG_IS_XYZ_ALIGNED(void)
|