freebsd-skq/sys/i386/include
Attilio Rao 86d2e48c22 Per their definition, atomic instructions used in conjuction with
memory barriers should also ensure that the compiler doesn't reorder paths
where they are used.  GCC, however, does that aggressively, even in
presence of volatile operands.  The most reliable way GCC offers for avoid
instructions reordering is clobbering "memory" even if that is
theoretically an heavy-weight operation, flushing the content of all
the registers and forcing reload of them (We could rely, however, on
gcc DTRT by just understanding the purpose as this is a well-known
pattern for many modern operating-systems).

Not all our memory barriers, right now, clobber memory for GCC-like
compilers. The most notable cases are IA32 and amd64 where the memory
barrier are treacted the same as normal atomic instructions.
Fix this by offering the possibility to implement atomic instructions
with memory barriers separately from the normal version and implement
the GCC-like specific one using memory clobbering.
Thanks to Chris Lattner (@apple) for his discussion on llvm specifics.

Reported by:	jhb
Reviewed by:	jhb
Tested by:	rdivacky, Giovanni Trematerra
		<giovanni dot trematerra at gmail dot com>
2009-10-06 13:45:49 +00:00
..
pc - Teach vesa(4) and dpms(4) about x86emu. [1] 2009-09-09 09:50:31 +00:00
xen fix UP compilation 2009-09-11 23:41:11 +00:00
_align.h Get rid of the _NO_NAMESPACE_POLLUTION kludge by creating an 2009-09-08 20:45:40 +00:00
_bus.h
_inttypes.h
_limits.h
_stdint.h
_types.h Change float_t and double_t to long double on i386. All floating point 2008-03-05 11:21:14 +00:00
acpica_machdep.h Extract the code to find and map the MADT ACPI table during early kernel 2009-09-23 15:42:35 +00:00
apicreg.h Add constants for fields in the local APIC error status register and a 2008-12-11 15:56:30 +00:00
apicvar.h Adjust the handling of the local APIC PMC interrupt vector: 2009-08-14 21:05:08 +00:00
apm_bios.h Copy apm(4) emulation from sys/i386/acpica/acpi_machdep.c and 2009-09-27 14:00:16 +00:00
apm_segments.h
asm.h Define an END() macro for use in i386 and amd64 assembly code, akin 2007-08-22 04:26:07 +00:00
asmacros.h Integrate support for xen in to i386 common code. 2008-08-15 20:51:31 +00:00
atomic.h Per their definition, atomic instructions used in conjuction with 2009-10-06 13:45:49 +00:00
bootinfo.h Slightly cleanup the 'bootdev' concept on x86 by changing the various 2007-10-24 04:03:25 +00:00
bus_dma.h
bus.h
clock.h Rename statclock_disable variable to atrtcclock_disable that it actually is, 2009-05-03 17:47:21 +00:00
cpu.h
cpufunc.h make read_eflags and write_eflags accomplish the same effect on PVM as native, 2009-10-01 22:05:38 +00:00
cputypes.h Introduce cpu_vendor_id and replace a lot of strcmp(cpu_vendor, "..."). 2008-11-26 19:25:13 +00:00
cserial.h
db_machdep.h
elan_mmcr.h
elf.h Add AT_EXECPATH ELF auxinfo entry type. The value's a_ptr is a pointer 2009-03-17 12:50:16 +00:00
endian.h Also remove the unused __word_swap_int*() macros. 2009-04-08 19:10:20 +00:00
exec.h
float.h Oops, back out previous commit since it was to the wrong file. 2008-03-05 11:17:20 +00:00
floatingpoint.h
frame.h
gdb_machdep.h
ieeefp.h MFamd64 (everything possible up to 1.19; mainly the amd64 implementations 2008-01-11 18:59:35 +00:00
if_wl_wavelan.h
in_cksum.h Clobber "cc" instead of using volatile; remove obsolete register keyword. 2009-06-13 14:00:10 +00:00
intr_machdep.h Improve the handling of cpuset with interrupts. 2009-07-01 17:20:07 +00:00
ioctl_bt848.h
ioctl_meteor.h
iodev.h Remove the unused major/minor numbers from iodev and memdev. 2008-06-25 07:45:31 +00:00
kdb.h Add kdb_cpu_sync_icache(), intended to synchronize instruction 2007-06-09 21:55:17 +00:00
legacyvar.h strict kobj signatures: fix legacy i386 pcib_write_config impl 2009-06-11 17:06:31 +00:00
limits.h
mca.h Implement simple machine check support for amd64 and i386. 2009-05-13 17:53:04 +00:00
md_var.h As was done in r195820 for amd64, use clflush for flushing cache lines 2009-07-29 08:49:58 +00:00
memdev.h Remove the unused M_MEMDEV from the kernel. 2008-06-25 07:52:10 +00:00
metadata.h A simple rewrite of biossmap.c: 2009-04-15 17:31:22 +00:00
minidump.h
mp_watchdog.h
mptable.h
mutex.h
nexusvar.h Rework how the nexus(4) device works on x86 to better handle the idea of 2008-03-13 20:39:04 +00:00
npx.h Some cleanups to the i386 FPU support: 2009-03-05 18:32:43 +00:00
param.h Add a new sysctl for reporting all of the supported page sizes. 2009-09-18 17:04:57 +00:00
pcaudioio.h
pcb_ext.h
pcb.h A better fix for handling different FPU initial control words for different 2009-03-05 19:42:11 +00:00
pci_cfgreg.h Extend the support for PCI-e memory mapped configuration space access: 2008-08-22 02:14:23 +00:00
pcpu.h whitespace commit 2009-09-04 07:29:24 +00:00
perfmon.h
pmap.h Improve pmap_change_attr() so that it is able to demote a large (2/4MB) 2009-08-31 17:42:52 +00:00
pmc_mdep.h Adjust the handling of the local APIC PMC interrupt vector: 2009-08-14 21:05:08 +00:00
ppireg.h
privatespace.h
proc.h When doing rfork(0), i.e. separating curproc VM from any other user of 2008-09-12 09:53:29 +00:00
profile.h Unbreak cc -pg support on i386. In gcc 4.2, %ecx is used as the arg pointer 2008-07-23 11:37:20 +00:00
psl.h
ptrace.h
reg.h - Add macro constants for the various fields in %dr7 and use them in place 2006-11-17 19:20:32 +00:00
reloc.h
resource.h
runq.h
segments.h Integrate support for xen in to i386 common code. 2008-08-15 20:51:31 +00:00
setjmp.h Remove 3rd clause, renumber, ok per email 2007-01-12 07:26:21 +00:00
sf_buf.h As was done in r195820 for amd64, use clflush for flushing cache lines 2009-07-29 08:49:58 +00:00
sigframe.h
signal.h Sync definitions for struct sigcontext for i386 and amd64 architectures 2009-04-01 13:44:28 +00:00
smapi.h
smp.h * Completely Remove the option STOP_NMI from the kernel. This option 2009-08-13 17:09:45 +00:00
speaker.h
specialreg.h Consolidate CPUID to CPU family/model macros for amd64 and i386 to reduce 2009-09-10 17:27:36 +00:00
stack.h Break out stack(9) from ddb(4): 2007-12-02 20:40:35 +00:00
stdarg.h
sysarch.h
timerreg.h The "free-lance" timer in the i8254 is only used for the speaker 2008-03-26 20:09:21 +00:00
trap.h GC unused values 2008-10-19 01:23:30 +00:00
tss.h
ucontext.h Add all segment registers for the amd64 CPU to struct reg and mcontext. 2009-04-01 12:44:17 +00:00
varargs.h
vm86.h
vm.h Add support to the virtual memory system for configuring machine- 2009-07-12 23:31:20 +00:00
vmparam.h Retire VM_PROT_READ_IS_EXEC. It was intended to be a micro-optimization, 2009-04-04 23:12:14 +00:00
xbox.h