summaryrefslogtreecommitdiffstats
path: root/sys/conf
diff options
context:
space:
mode:
authored <ed@FreeBSD.org>2013-06-08 13:19:11 +0000
committered <ed@FreeBSD.org>2013-06-08 13:19:11 +0000
commit10554f30575cd190e163e334156c6270c2e88a48 (patch)
tree9cf919cf8c648029ada2c496b50207d4e967706d /sys/conf
parent163379d62d47e4f123dc7ec4a8272fedd248d52d (diff)
downloadFreeBSD-src-10554f30575cd190e163e334156c6270c2e88a48.zip
FreeBSD-src-10554f30575cd190e163e334156c6270c2e88a48.tar.gz
Add proper __sync_*() intrinsics for MIPS.
To make <stdatomic.h> work on MIPS (and ARM) using GCC, we need to provide implementations of the __sync_*() functions. I already added these functions for 4 and 8 byte types to libcompiler-rt some time ago, based on top of <machine/atomic.h>. Unfortunately, <machine/atomic.h> only provides a subset of the features needed to implement <stdatomic.h>. This means that in some cases we had to do compare-and-exchange calls in loops, where a simple ll/sc would suffice. Also implement these functions for 1 and 2 byte types. MIPS only provides ll/sc instructions for 4 and 8 byte types, but this is of course no limitation. We can simply load 4 bytes and use some bitmask tricks to modify only the bytes affected. Discussed on: mips, arch Tested with: QEMU
Diffstat (limited to 'sys/conf')
-rw-r--r--sys/conf/files.mips2
1 files changed, 2 insertions, 0 deletions
diff --git a/sys/conf/files.mips b/sys/conf/files.mips
index 7308143..79676b9 100644
--- a/sys/conf/files.mips
+++ b/sys/conf/files.mips
@@ -35,6 +35,8 @@ mips/mips/pmap.c standard
mips/mips/ptrace_machdep.c standard
mips/mips/sc_machdep.c standard
mips/mips/stack_machdep.c optional ddb | stack
+mips/mips/stdatomic.c standard \
+ compile-with "${NORMAL_C:N-Wmissing-prototypes}"
mips/mips/support.S standard
mips/mips/swtch.S standard
mips/mips/sys_machdep.c standard
OpenPOWER on IntegriCloud