summaryrefslogtreecommitdiff
path: root/pr/include/md/_linux.h
diff options
context:
space:
mode:
Diffstat (limited to 'pr/include/md/_linux.h')
-rw-r--r--pr/include/md/_linux.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/pr/include/md/_linux.h b/pr/include/md/_linux.h
index a26291a8..ad57d083 100644
--- a/pr/include/md/_linux.h
+++ b/pr/include/md/_linux.h
@@ -73,6 +73,8 @@
#define _PR_SI_ARCHITECTURE "nds32"
#elif defined(__xtensa__)
#define _PR_SI_ARCHITECTURE "xtensa"
+#elif defined(__loongarch64)
+#define _PR_SI_ARCHITECTURE "loongarch64"
#else
#error "Unknown CPU architecture"
#endif
@@ -141,6 +143,18 @@ extern PRInt32 _PR_x86_64_AtomicSet(PRInt32 *val, PRInt32 newval);
#define _MD_ATOMIC_SET _PR_x86_64_AtomicSet
#endif
+#if defined(__loongarch__)
+#if defined(__GNUC__)
+/* Use GCC built-in functions */
+#define _PR_HAVE_ATOMIC_OPS
+#define _MD_INIT_ATOMIC()
+#define _MD_ATOMIC_INCREMENT(ptr) __sync_add_and_fetch(ptr, 1)
+#define _MD_ATOMIC_DECREMENT(ptr) __sync_sub_and_fetch(ptr, 1)
+#define _MD_ATOMIC_ADD(ptr, i) __sync_add_and_fetch(ptr, i)
+#define _MD_ATOMIC_SET(ptr, nv) __sync_lock_test_and_set(ptr, nv)
+#endif
+#endif
+
#if defined(__or1k__)
#if defined(__GNUC__)
/* Use GCC built-in functions */