Loading...
src/quarantine_malloc.h libmalloc-374.120.1 libmalloc-409.81.2
--- libmalloc/libmalloc-374.120.1/src/quarantine_malloc.h
+++ libmalloc/libmalloc-409.81.2/src/quarantine_malloc.h
@@ -52,6 +52,15 @@
         :                       // clobbers, empty
     );
     return (uint16_t)(uintptr_t)ptr;
+#elif TARGET_CPU_ARM64
+	__asm__ (
+		"sub  %0, %0, fp    \n"
+		"ldrh %w0, [fp, %0] \n"
+		: "+r" (ptr)            // outputs, ptr = %0 read-write
+		:                       // inputs, empty
+		:                       // clobbers, empty
+	);
+	return (uint16_t)(uintptr_t)ptr;
 #else
     return *(uint16_t *)ptr;
 #endif
@@ -69,6 +78,15 @@
         :                       // clobbers, empty
     );
     return (uint64_t)ptr;
+#elif TARGET_CPU_ARM64
+	__asm__ (
+		"sub %0, %0, fp  \n"
+		"ldr %0, [fp, %0]\n"
+		: "+r" (ptr)            // outputs, ptr = %0 read-write
+		:                       // inputs, empty
+		:                       // clobbers, empty
+	);
+	return (uint64_t)ptr;
 #else
     return *(uint64_t *)ptr;
 #endif
@@ -85,6 +103,14 @@
         : "r" (ptr), "r" (value)  // inputs, ptr = %0, value = %1
         :                         // clobbers, empty
     );
+#elif TARGET_CPU_ARM64
+	__asm__ volatile (
+		"sub %0, %0, fp   \n"
+		"str %1, [fp, %0] \n"
+		: "+r" (ptr)              // outputs, ptr = %0 (not a real output but gets clobbered)
+		: "r" (value)             // inputs, value = %1
+		:                         // clobbers, empty
+	);
 #else
     *(uint64_t *)ptr = value;
 #endif