aboutsummaryrefslogtreecommitdiffstats
path: root/nginx/src/os/unix/ngx_sunpro_atomic_sparc64.h
diff options
context:
space:
mode:
authorYu Ping <ping.yu@intel.com>2020-02-21 22:36:20 +0800
committerFlorin Coras <fcoras@cisco.com>2020-02-22 00:30:48 +0000
commit54346b61f91008c5098243b588f184ad92ad29c9 (patch)
tree60116fad568970aee2538a081de0560b0487db8c /nginx/src/os/unix/ngx_sunpro_atomic_sparc64.h
parent4b0794f139564682503fcd2f59c7bcd3238e6633 (diff)
initial version of VSAP
Signed-off-by: Yu Ping <ping.yu@intel.com> Change-Id: I04d9150f0c7607ba20de9096b452476eff1622fc
Diffstat (limited to 'nginx/src/os/unix/ngx_sunpro_atomic_sparc64.h')
-rw-r--r--nginx/src/os/unix/ngx_sunpro_atomic_sparc64.h61
1 files changed, 61 insertions, 0 deletions
diff --git a/nginx/src/os/unix/ngx_sunpro_atomic_sparc64.h b/nginx/src/os/unix/ngx_sunpro_atomic_sparc64.h
new file mode 100644
index 0000000..5f28055
--- /dev/null
+++ b/nginx/src/os/unix/ngx_sunpro_atomic_sparc64.h
@@ -0,0 +1,61 @@
+
+/*
+ * Copyright (C) Igor Sysoev
+ * Copyright (C) Nginx, Inc.
+ */
+
+
+#if (NGX_PTR_SIZE == 4)
+#define NGX_CASA ngx_casa
+#else
+#define NGX_CASA ngx_casxa
+#endif
+
+
+ngx_atomic_uint_t
+ngx_casa(ngx_atomic_uint_t set, ngx_atomic_uint_t old, ngx_atomic_t *lock);
+
+ngx_atomic_uint_t
+ngx_casxa(ngx_atomic_uint_t set, ngx_atomic_uint_t old, ngx_atomic_t *lock);
+
+/* the code in src/os/unix/ngx_sunpro_sparc64.il */
+
+
+static ngx_inline ngx_atomic_uint_t
+ngx_atomic_cmp_set(ngx_atomic_t *lock, ngx_atomic_uint_t old,
+ ngx_atomic_uint_t set)
+{
+ set = NGX_CASA(set, old, lock);
+
+ return (set == old);
+}
+
+
+static ngx_inline ngx_atomic_int_t
+ngx_atomic_fetch_add(ngx_atomic_t *value, ngx_atomic_int_t add)
+{
+ ngx_atomic_uint_t old, res;
+
+ old = *value;
+
+ for ( ;; ) {
+
+ res = old + add;
+
+ res = NGX_CASA(res, old, value);
+
+ if (res == old) {
+ return res;
+ }
+
+ old = res;
+ }
+}
+
+
+#define ngx_memory_barrier() \
+ __asm (".volatile"); \
+ __asm ("membar #LoadLoad | #LoadStore | #StoreStore | #StoreLoad"); \
+ __asm (".nonvolatile")
+
+#define ngx_cpu_pause()