File: sync_instead_of_atomic

package info (click to toggle)
fermi-lite 0.1%2Bgit20221215.85f159e-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 748 kB
  • sloc: ansic: 5,196; makefile: 65; sh: 17
file content (23 lines) | stat: -rw-r--r-- 900 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
From: Michael R. Crusoe <michael.crusoe@gmail.com>
Subject: fix compatibility on mipsel
Forwarded: https://github.com/lh3/fermi-lite/pull/13
--- fermi-lite.orig/unitig.c
+++ fermi-lite/unitig.c
@@ -71,7 +71,7 @@
 {
 	uint64_t *p = bits + (x>>6);
 	uint64_t z = 1LLU<<(x&0x3f);
-	__sync_fetch_and_or(p, z);
+	__atomic_fetch_or(p, z, __ATOMIC_SEQ_CST);
 }
 
 static inline void set_bits(uint64_t *bits, const rldintv_t *p)
@@ -389,7 +389,7 @@
 		magv_t *q;
 		p[0] = w->visited + (d->z.k[0]>>6); x[0] = 1LLU<<(d->z.k[0]&0x3f);
 		p[1] = w->visited + (d->z.k[1]>>6); x[1] = 1LLU<<(d->z.k[1]&0x3f);
-		if ((__sync_fetch_and_or(p[0], x[0])&x[0]) || (__sync_fetch_and_or(p[1], x[1])&x[1])) return;
+		if ((__atomic_fetch_or(p[0], x[0], __ATOMIC_SEQ_CST)&x[0]) || (__atomic_fetch_or(p[1], x[1], __ATOMIC_SEQ_CST)&x[1])) return;
 		d->z.len = d->str.l;
 		if (d->max_l < d->str.m) {
 			d->max_l = d->str.m;