diff --git a/cddl/lib/libzpool/Makefile b/cddl/lib/libzpool/Makefile index 686261c56e94..38d347ec36d9 100644 --- a/cddl/lib/libzpool/Makefile +++ b/cddl/lib/libzpool/Makefile @@ -1,46 +1,46 @@ # $FreeBSD$ .include "${.CURDIR}/../../../sys/contrib/opensolaris/uts/common/Makefile.files" # ZFS_COMMON_SRCS .PATH: ${.CURDIR}/../../../sys/contrib/opensolaris/uts/common/fs/zfs # ZFS_SHARED_SRCS .PATH: ${.CURDIR}/../../../sys/contrib/opensolaris/common/zfs # KERNEL_SRCS .PATH: ${.CURDIR}/../../../contrib/opensolaris/lib/libzpool/common # LIST_SRCS .PATH: ${.CURDIR}/../../../sys/contrib/opensolaris/uts/common/os # ATOMIC_SRCS -.PATH: ${.CURDIR}/../../../sys/contrib/opensolaris/uts/common/arch/${MACHINE_ARCH} +.PATH: ${.CURDIR}/../../../sys/contrib/opensolaris/common/atomic/${MACHINE_ARCH} LIB= zpool SHLIB_MAJOR?=1 ZFS_COMMON_SRCS= ${ZFS_COMMON_OBJS:C/.o$/.c/} vdev_file.c ZFS_SHARED_SRCS= ${ZFS_SHARED_OBJS:C/.o$/.c/} KERNEL_SRCS= kernel.c taskq.c util.c LIST_SRCS= list.c ATOMIC_SRCS= atomic.S SRCS= ${ZFS_COMMON_SRCS} ${ZFS_SHARED_SRCS} ${KERNEL_SRCS} ${LIST_SRCS} ${ATOMIC_SRCS} CFLAGS+=-I${.CURDIR}/../../../sys/compat/opensolaris CFLAGS+=-I${.CURDIR}/../../../compat/opensolaris/include CFLAGS+=-I${.CURDIR}/../../../compat/opensolaris/lib/libumem CFLAGS+=-I${.CURDIR}/../../../contrib/opensolaris/lib/libzpool/common CFLAGS+=-I${.CURDIR}/../../../sys/contrib/opensolaris/uts/common/sys CFLAGS+=-I${.CURDIR}/../../../sys/contrib/opensolaris/uts/common/fs/zfs CFLAGS+=-I${.CURDIR}/../../../sys/contrib/opensolaris/common/zfs CFLAGS+=-I${.CURDIR}/../../../sys/contrib/opensolaris/uts/common CFLAGS+=-I${.CURDIR}/../../../contrib/opensolaris/head CFLAGS+=-I${.CURDIR}/../../../cddl/lib/libumem CFLAGS+=-I${.CURDIR}/../../../contrib/opensolaris/lib/libnvpair CFLAGS+=-I${.CURDIR}/../../../sys DPADD= ${LIBTHR} ${LIBZ} LDADD= -lthr -lz # atomic.S doesn't like profiling. NO_PROFILE= .include diff --git a/sys/cddl/contrib/opensolaris/uts/common/arch/amd64/atomic.S b/sys/cddl/contrib/opensolaris/common/atomic/amd64/atomic.S similarity index 99% rename from sys/cddl/contrib/opensolaris/uts/common/arch/amd64/atomic.S rename to sys/cddl/contrib/opensolaris/common/atomic/amd64/atomic.S index 1fa3c05b3317..1c34b5313529 100644 --- a/sys/cddl/contrib/opensolaris/uts/common/arch/amd64/atomic.S +++ b/sys/cddl/contrib/opensolaris/common/atomic/amd64/atomic.S @@ -1,564 +1,560 @@ /* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2005 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ .ident "%Z%%M% %I% %E% SMI" .file "%M%" -#define _ASM +#define _ASM #include #if defined(_KERNEL) /* * Legacy kernel interfaces; they will go away (eventually). */ ANSI_PRAGMA_WEAK2(cas8,atomic_cas_8,function) ANSI_PRAGMA_WEAK2(cas32,atomic_cas_32,function) ANSI_PRAGMA_WEAK2(cas64,atomic_cas_64,function) ANSI_PRAGMA_WEAK2(caslong,atomic_cas_ulong,function) ANSI_PRAGMA_WEAK2(casptr,atomic_cas_ptr,function) ANSI_PRAGMA_WEAK2(atomic_and_long,atomic_and_ulong,function) ANSI_PRAGMA_WEAK2(atomic_or_long,atomic_or_ulong,function) #endif ENTRY(atomic_inc_8) ALTENTRY(atomic_inc_uchar) lock incb (%rdi) ret SET_SIZE(atomic_inc_uchar) SET_SIZE(atomic_inc_8) ENTRY(atomic_inc_16) ALTENTRY(atomic_inc_ushort) lock incw (%rdi) ret SET_SIZE(atomic_inc_ushort) SET_SIZE(atomic_inc_16) ENTRY(atomic_inc_32) ALTENTRY(atomic_inc_uint) lock incl (%rdi) ret SET_SIZE(atomic_inc_uint) SET_SIZE(atomic_inc_32) ENTRY(atomic_inc_64) ALTENTRY(atomic_inc_ulong) lock incq (%rdi) ret SET_SIZE(atomic_inc_ulong) SET_SIZE(atomic_inc_64) ENTRY(atomic_inc_8_nv) ALTENTRY(atomic_inc_uchar_nv) movb (%rdi), %al 1: leaq 1(%rax), %rcx lock cmpxchgb %cl, (%rdi) jne 1b movzbl %cl, %eax ret SET_SIZE(atomic_inc_uchar_nv) SET_SIZE(atomic_inc_8_nv) ENTRY(atomic_inc_16_nv) ALTENTRY(atomic_inc_ushort_nv) movw (%rdi), %ax 1: leaq 1(%rax), %rcx lock cmpxchgw %cx, (%rdi) jne 1b movzwl %cx, %eax ret SET_SIZE(atomic_inc_ushort_nv) SET_SIZE(atomic_inc_16_nv) ENTRY(atomic_inc_32_nv) ALTENTRY(atomic_inc_uint_nv) movl (%rdi), %eax 1: leaq 1(%rax), %rcx lock cmpxchgl %ecx, (%rdi) jne 1b movl %ecx, %eax ret SET_SIZE(atomic_inc_uint_nv) SET_SIZE(atomic_inc_32_nv) ENTRY(atomic_inc_64_nv) ALTENTRY(atomic_inc_ulong_nv) movq (%rdi), %rax 1: leaq 1(%rax), %rcx lock cmpxchgq %rcx, (%rdi) jne 1b movq %rcx, %rax ret SET_SIZE(atomic_inc_ulong_nv) SET_SIZE(atomic_inc_64_nv) ENTRY(atomic_dec_8) ALTENTRY(atomic_dec_uchar) lock decb (%rdi) ret SET_SIZE(atomic_dec_uchar) SET_SIZE(atomic_dec_8) ENTRY(atomic_dec_16) ALTENTRY(atomic_dec_ushort) lock decw (%rdi) ret SET_SIZE(atomic_dec_ushort) SET_SIZE(atomic_dec_16) ENTRY(atomic_dec_32) ALTENTRY(atomic_dec_uint) lock decl (%rdi) ret SET_SIZE(atomic_dec_uint) SET_SIZE(atomic_dec_32) ENTRY(atomic_dec_64) ALTENTRY(atomic_dec_ulong) lock decq (%rdi) ret SET_SIZE(atomic_dec_ulong) SET_SIZE(atomic_dec_64) ENTRY(atomic_dec_8_nv) ALTENTRY(atomic_dec_uchar_nv) movb (%rdi), %al 1: leaq -1(%rax), %rcx lock cmpxchgb %cl, (%rdi) jne 1b movzbl %cl, %eax ret SET_SIZE(atomic_dec_uchar_nv) SET_SIZE(atomic_dec_8_nv) ENTRY(atomic_dec_16_nv) ALTENTRY(atomic_dec_ushort_nv) movw (%rdi), %ax 1: leaq -1(%rax), %rcx lock cmpxchgw %cx, (%rdi) jne 1b movzwl %cx, %eax ret SET_SIZE(atomic_dec_ushort_nv) SET_SIZE(atomic_dec_16_nv) ENTRY(atomic_dec_32_nv) ALTENTRY(atomic_dec_uint_nv) movl (%rdi), %eax 1: leaq -1(%rax), %rcx lock cmpxchgl %ecx, (%rdi) jne 1b movl %ecx, %eax ret SET_SIZE(atomic_dec_uint_nv) SET_SIZE(atomic_dec_32_nv) ENTRY(atomic_dec_64_nv) ALTENTRY(atomic_dec_ulong_nv) movq (%rdi), %rax 1: leaq -1(%rax), %rcx lock cmpxchgq %rcx, (%rdi) jne 1b movq %rcx, %rax ret SET_SIZE(atomic_dec_ulong_nv) SET_SIZE(atomic_dec_64_nv) ENTRY(atomic_or_8) ALTENTRY(atomic_or_uchar) lock orb %sil, (%rdi) ret SET_SIZE(atomic_or_uchar) SET_SIZE(atomic_or_8) ENTRY(atomic_or_16) ALTENTRY(atomic_or_ushort) lock orw %si, (%rdi) ret SET_SIZE(atomic_or_ushort) SET_SIZE(atomic_or_16) ENTRY(atomic_or_32) ALTENTRY(atomic_or_uint) lock orl %esi, (%rdi) ret SET_SIZE(atomic_or_uint) SET_SIZE(atomic_or_32) ENTRY(atomic_or_64) ALTENTRY(atomic_or_ulong) lock orq %rsi, (%rdi) ret SET_SIZE(atomic_or_ulong) SET_SIZE(atomic_or_64) ENTRY(atomic_and_8) ALTENTRY(atomic_and_uchar) lock andb %sil, (%rdi) ret SET_SIZE(atomic_and_uchar) SET_SIZE(atomic_and_8) ENTRY(atomic_and_16) ALTENTRY(atomic_and_ushort) lock andw %si, (%rdi) ret SET_SIZE(atomic_and_ushort) SET_SIZE(atomic_and_16) ENTRY(atomic_and_32) ALTENTRY(atomic_and_uint) lock andl %esi, (%rdi) ret SET_SIZE(atomic_and_uint) SET_SIZE(atomic_and_32) ENTRY(atomic_and_64) ALTENTRY(atomic_and_ulong) lock andq %rsi, (%rdi) ret SET_SIZE(atomic_and_ulong) SET_SIZE(atomic_and_64) ENTRY(atomic_add_8_nv) ALTENTRY(atomic_add_char_nv) movb (%rdi), %al 1: movb %sil, %cl addb %al, %cl lock cmpxchgb %cl, (%rdi) jne 1b movzbl %cl, %eax ret SET_SIZE(atomic_add_char_nv) SET_SIZE(atomic_add_8_nv) ENTRY(atomic_add_16_nv) ALTENTRY(atomic_add_short_nv) movw (%rdi), %ax 1: movw %si, %cx addw %ax, %cx lock cmpxchgw %cx, (%rdi) jne 1b movzwl %cx, %eax ret SET_SIZE(atomic_add_short_nv) SET_SIZE(atomic_add_16_nv) ENTRY(atomic_add_32_nv) ALTENTRY(atomic_add_int_nv) movl (%rdi), %eax 1: movl %esi, %ecx addl %eax, %ecx lock cmpxchgl %ecx, (%rdi) jne 1b movl %ecx, %eax ret SET_SIZE(atomic_add_int_nv) SET_SIZE(atomic_add_32_nv) ENTRY(atomic_add_64_nv) ALTENTRY(atomic_add_ptr_nv) ALTENTRY(atomic_add_long_nv) movq (%rdi), %rax 1: movq %rsi, %rcx addq %rax, %rcx lock cmpxchgq %rcx, (%rdi) jne 1b movq %rcx, %rax ret SET_SIZE(atomic_add_long_nv) SET_SIZE(atomic_add_ptr_nv) SET_SIZE(atomic_add_64_nv) ENTRY(atomic_and_8_nv) ALTENTRY(atomic_and_uchar_nv) movb (%rdi), %al 1: movb %sil, %cl andb %al, %cl lock cmpxchgb %cl, (%rdi) jne 1b movzbl %cl, %eax ret SET_SIZE(atomic_and_uchar_nv) SET_SIZE(atomic_and_8_nv) ENTRY(atomic_and_16_nv) ALTENTRY(atomic_and_ushort_nv) movw (%rdi), %ax 1: movw %si, %cx andw %ax, %cx lock cmpxchgw %cx, (%rdi) jne 1b movzwl %cx, %eax ret SET_SIZE(atomic_and_ushort_nv) SET_SIZE(atomic_and_16_nv) ENTRY(atomic_and_32_nv) ALTENTRY(atomic_and_uint_nv) movl (%rdi), %eax 1: movl %esi, %ecx andl %eax, %ecx lock cmpxchgl %ecx, (%rdi) jne 1b movl %ecx, %eax ret SET_SIZE(atomic_and_uint_nv) SET_SIZE(atomic_and_32_nv) ENTRY(atomic_and_64_nv) ALTENTRY(atomic_and_ulong_nv) movq (%rdi), %rax 1: movq %rsi, %rcx andq %rax, %rcx lock cmpxchgq %rcx, (%rdi) jne 1b movq %rcx, %rax ret SET_SIZE(atomic_and_ulong_nv) SET_SIZE(atomic_and_64_nv) ENTRY(atomic_or_8_nv) ALTENTRY(atomic_or_uchar_nv) movb (%rdi), %al 1: movb %sil, %cl orb %al, %cl lock cmpxchgb %cl, (%rdi) jne 1b movzbl %cl, %eax ret SET_SIZE(atomic_and_uchar_nv) SET_SIZE(atomic_and_8_nv) ENTRY(atomic_or_16_nv) ALTENTRY(atomic_or_ushort_nv) movw (%rdi), %ax 1: movw %si, %cx orw %ax, %cx lock cmpxchgw %cx, (%rdi) jne 1b movzwl %cx, %eax ret SET_SIZE(atomic_or_ushort_nv) SET_SIZE(atomic_or_16_nv) ENTRY(atomic_or_32_nv) ALTENTRY(atomic_or_uint_nv) movl (%rdi), %eax 1: movl %esi, %ecx orl %eax, %ecx lock cmpxchgl %ecx, (%rdi) jne 1b movl %ecx, %eax ret SET_SIZE(atomic_or_uint_nv) SET_SIZE(atomic_or_32_nv) ENTRY(atomic_or_64_nv) ALTENTRY(atomic_or_ulong_nv) movq (%rdi), %rax 1: movq %rsi, %rcx orq %rax, %rcx lock cmpxchgq %rcx, (%rdi) jne 1b movq %rcx, %rax ret SET_SIZE(atomic_or_ulong_nv) SET_SIZE(atomic_or_64_nv) ENTRY(atomic_cas_8) ALTENTRY(atomic_cas_uchar) movzbl %sil, %eax lock cmpxchgb %dl, (%rdi) ret SET_SIZE(atomic_cas_uchar) SET_SIZE(atomic_cas_8) ENTRY(atomic_cas_16) ALTENTRY(atomic_cas_ushort) movzwl %si, %eax lock cmpxchgw %dx, (%rdi) ret SET_SIZE(atomic_cas_ushort) SET_SIZE(atomic_cas_16) ENTRY(atomic_cas_32) ALTENTRY(atomic_cas_uint) movl %esi, %eax lock cmpxchgl %edx, (%rdi) ret SET_SIZE(atomic_cas_uint) SET_SIZE(atomic_cas_32) ENTRY(atomic_cas_64) ALTENTRY(atomic_cas_ulong) ALTENTRY(atomic_cas_ptr) movq %rsi, %rax lock cmpxchgq %rdx, (%rdi) ret SET_SIZE(atomic_cas_ptr) SET_SIZE(atomic_cas_ulong) SET_SIZE(atomic_cas_64) ENTRY(atomic_swap_8) ALTENTRY(atomic_swap_uchar) movzbl %sil, %eax lock xchgb %al, (%rdi) ret SET_SIZE(atomic_swap_uchar) SET_SIZE(atomic_swap_8) ENTRY(atomic_swap_16) ALTENTRY(atomic_swap_ushort) movzwl %si, %eax lock xchgw %ax, (%rdi) ret SET_SIZE(atomic_swap_ushort) SET_SIZE(atomic_swap_16) ENTRY(atomic_swap_32) ALTENTRY(atomic_swap_uint) movl %esi, %eax lock xchgl %eax, (%rdi) ret SET_SIZE(atomic_swap_uint) SET_SIZE(atomic_swap_32) ENTRY(atomic_swap_64) ALTENTRY(atomic_swap_ulong) ALTENTRY(atomic_swap_ptr) movq %rsi, %rax lock xchgq %rax, (%rdi) ret SET_SIZE(atomic_swap_ptr) SET_SIZE(atomic_swap_ulong) SET_SIZE(atomic_swap_64) ENTRY(atomic_set_long_excl) xorl %eax, %eax lock btsq %rsi, (%rdi) jnc 1f decl %eax 1: ret SET_SIZE(atomic_set_long_excl) ENTRY(atomic_clear_long_excl) xorl %eax, %eax lock btrq %rsi, (%rdi) jc 1f decl %eax 1: ret SET_SIZE(atomic_clear_long_excl) ENTRY(membar_enter) ALTENTRY(membar_exit) mfence ret SET_SIZE(membar_exit) SET_SIZE(membar_enter) ENTRY(membar_producer) sfence ret SET_SIZE(membar_producer) ENTRY(membar_consumer) lfence ret SET_SIZE(membar_consumer) - -#ifdef __ELF__ -.section .note.GNU-stack,"",%progbits -#endif diff --git a/sys/contrib/opensolaris/uts/common/arch/i386/atomic.S b/sys/cddl/contrib/opensolaris/common/atomic/i386/atomic.S similarity index 99% rename from sys/contrib/opensolaris/uts/common/arch/i386/atomic.S rename to sys/cddl/contrib/opensolaris/common/atomic/i386/atomic.S index 4a1d37521119..afbd11f59ee6 100644 --- a/sys/contrib/opensolaris/uts/common/arch/i386/atomic.S +++ b/sys/cddl/contrib/opensolaris/common/atomic/i386/atomic.S @@ -1,659 +1,655 @@ /* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2005 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ .ident "%Z%%M% %I% %E% SMI" .file "%M%" -#define _ASM +#define _ASM #include #if defined(_KERNEL) /* * Legacy kernel interfaces; they will go away (eventually). */ ANSI_PRAGMA_WEAK2(cas8,atomic_cas_8,function) ANSI_PRAGMA_WEAK2(cas32,atomic_cas_32,function) ANSI_PRAGMA_WEAK2(cas64,atomic_cas_64,function) ANSI_PRAGMA_WEAK2(caslong,atomic_cas_ulong,function) ANSI_PRAGMA_WEAK2(casptr,atomic_cas_ptr,function) ANSI_PRAGMA_WEAK2(atomic_and_long,atomic_and_ulong,function) ANSI_PRAGMA_WEAK2(atomic_or_long,atomic_or_ulong,function) #endif ENTRY(atomic_inc_8) ALTENTRY(atomic_inc_uchar) movl 4(%esp), %eax lock incb (%eax) ret SET_SIZE(atomic_inc_uchar) SET_SIZE(atomic_inc_8) ENTRY(atomic_inc_16) ALTENTRY(atomic_inc_ushort) movl 4(%esp), %eax lock incw (%eax) ret SET_SIZE(atomic_inc_ushort) SET_SIZE(atomic_inc_16) ENTRY(atomic_inc_32) ALTENTRY(atomic_inc_uint) ALTENTRY(atomic_inc_ulong) movl 4(%esp), %eax lock incl (%eax) ret SET_SIZE(atomic_inc_ulong) SET_SIZE(atomic_inc_uint) SET_SIZE(atomic_inc_32) ENTRY(atomic_inc_8_nv) ALTENTRY(atomic_inc_uchar_nv) movl 4(%esp), %edx movb (%edx), %al 1: leal 1(%eax), %ecx lock cmpxchgb %cl, (%edx) jne 1b movzbl %cl, %eax ret SET_SIZE(atomic_inc_uchar_nv) SET_SIZE(atomic_inc_8_nv) ENTRY(atomic_inc_16_nv) ALTENTRY(atomic_inc_ushort_nv) movl 4(%esp), %edx movw (%edx), %ax 1: leal 1(%eax), %ecx lock cmpxchgw %cx, (%edx) jne 1b movzwl %cx, %eax ret SET_SIZE(atomic_inc_ushort_nv) SET_SIZE(atomic_inc_16_nv) ENTRY(atomic_inc_32_nv) ALTENTRY(atomic_inc_uint_nv) ALTENTRY(atomic_inc_ulong_nv) movl 4(%esp), %edx movl (%edx), %eax 1: leal 1(%eax), %ecx lock cmpxchgl %ecx, (%edx) jne 1b movl %ecx, %eax ret SET_SIZE(atomic_inc_ulong_nv) SET_SIZE(atomic_inc_uint_nv) SET_SIZE(atomic_inc_32_nv) ENTRY(atomic_inc_64) ALTENTRY(atomic_inc_64_nv) pushl %edi pushl %ebx movl 12(%esp), %edi movl (%edi), %eax movl 4(%edi), %edx 1: xorl %ebx, %ebx xorl %ecx, %ecx incl %ebx addl %eax, %ebx adcl %edx, %ecx lock cmpxchg8b (%edi) jne 1b movl %ebx, %eax movl %ecx, %edx popl %ebx popl %edi ret SET_SIZE(atomic_inc_64_nv) SET_SIZE(atomic_inc_64) ENTRY(atomic_dec_8) ALTENTRY(atomic_dec_uchar) movl 4(%esp), %eax lock decb (%eax) ret SET_SIZE(atomic_dec_uchar) SET_SIZE(atomic_dec_8) ENTRY(atomic_dec_16) ALTENTRY(atomic_dec_ushort) movl 4(%esp), %eax lock decw (%eax) ret SET_SIZE(atomic_dec_ushort) SET_SIZE(atomic_dec_16) ENTRY(atomic_dec_32) ALTENTRY(atomic_dec_uint) ALTENTRY(atomic_dec_ulong) movl 4(%esp), %eax lock decl (%eax) ret SET_SIZE(atomic_dec_ulong) SET_SIZE(atomic_dec_uint) SET_SIZE(atomic_dec_32) ENTRY(atomic_dec_8_nv) ALTENTRY(atomic_dec_uchar_nv) movl 4(%esp), %edx movb (%edx), %al 1: leal -1(%eax), %ecx lock cmpxchgb %cl, (%edx) jne 1b movzbl %cl, %eax ret SET_SIZE(atomic_dec_uchar_nv) SET_SIZE(atomic_dec_8_nv) ENTRY(atomic_dec_16_nv) ALTENTRY(atomic_dec_ushort_nv) movl 4(%esp), %edx movw (%edx), %ax 1: leal -1(%eax), %ecx lock cmpxchgw %cx, (%edx) jne 1b movzwl %cx, %eax ret SET_SIZE(atomic_dec_ushort_nv) SET_SIZE(atomic_dec_16_nv) ENTRY(atomic_dec_32_nv) ALTENTRY(atomic_dec_uint_nv) ALTENTRY(atomic_dec_ulong_nv) movl 4(%esp), %edx movl (%edx), %eax 1: leal -1(%eax), %ecx lock cmpxchgl %ecx, (%edx) jne 1b movl %ecx, %eax ret SET_SIZE(atomic_dec_ulong_nv) SET_SIZE(atomic_dec_uint_nv) SET_SIZE(atomic_dec_32_nv) ENTRY(atomic_dec_64) ALTENTRY(atomic_dec_64_nv) pushl %edi pushl %ebx movl 12(%esp), %edi movl (%edi), %eax movl 4(%edi), %edx 1: xorl %ebx, %ebx xorl %ecx, %ecx not %ecx not %ebx addl %eax, %ebx adcl %edx, %ecx lock cmpxchg8b (%edi) jne 1b movl %ebx, %eax movl %ecx, %edx popl %ebx popl %edi ret SET_SIZE(atomic_dec_64_nv) SET_SIZE(atomic_dec_64) ENTRY(atomic_or_8) ALTENTRY(atomic_or_uchar) movl 4(%esp), %eax movb 8(%esp), %cl lock orb %cl, (%eax) ret SET_SIZE(atomic_or_uchar) SET_SIZE(atomic_or_8) ENTRY(atomic_or_16) ALTENTRY(atomic_or_ushort) movl 4(%esp), %eax movw 8(%esp), %cx lock orw %cx, (%eax) ret SET_SIZE(atomic_or_ushort) SET_SIZE(atomic_or_16) ENTRY(atomic_or_32) ALTENTRY(atomic_or_uint) ALTENTRY(atomic_or_ulong) movl 4(%esp), %eax movl 8(%esp), %ecx lock orl %ecx, (%eax) ret SET_SIZE(atomic_or_ulong) SET_SIZE(atomic_or_uint) SET_SIZE(atomic_or_32) ENTRY(atomic_and_8) ALTENTRY(atomic_and_uchar) movl 4(%esp), %eax movb 8(%esp), %cl lock andb %cl, (%eax) ret SET_SIZE(atomic_and_uchar) SET_SIZE(atomic_and_8) ENTRY(atomic_and_16) ALTENTRY(atomic_and_ushort) movl 4(%esp), %eax movw 8(%esp), %cx lock andw %cx, (%eax) ret SET_SIZE(atomic_and_ushort) SET_SIZE(atomic_and_16) ENTRY(atomic_and_32) ALTENTRY(atomic_and_uint) ALTENTRY(atomic_and_ulong) movl 4(%esp), %eax movl 8(%esp), %ecx lock andl %ecx, (%eax) ret SET_SIZE(atomic_and_ulong) SET_SIZE(atomic_and_uint) SET_SIZE(atomic_and_32) ENTRY(atomic_add_8_nv) ALTENTRY(atomic_add_char_nv) movl 4(%esp), %edx movb (%edx), %al 1: movl 8(%esp), %ecx addb %al, %cl lock cmpxchgb %cl, (%edx) jne 1b movzbl %cl, %eax ret SET_SIZE(atomic_add_char_nv) SET_SIZE(atomic_add_8_nv) ENTRY(atomic_add_16_nv) ALTENTRY(atomic_add_short_nv) movl 4(%esp), %edx movw (%edx), %ax 1: movl 8(%esp), %ecx addw %ax, %cx lock cmpxchgw %cx, (%edx) jne 1b movzwl %cx, %eax ret SET_SIZE(atomic_add_short_nv) SET_SIZE(atomic_add_16_nv) ENTRY(atomic_add_32_nv) ALTENTRY(atomic_add_int_nv) ALTENTRY(atomic_add_ptr_nv) ALTENTRY(atomic_add_long_nv) movl 4(%esp), %edx movl (%edx), %eax 1: movl 8(%esp), %ecx addl %eax, %ecx lock cmpxchgl %ecx, (%edx) jne 1b movl %ecx, %eax ret SET_SIZE(atomic_add_long_nv) SET_SIZE(atomic_add_ptr_nv) SET_SIZE(atomic_add_int_nv) SET_SIZE(atomic_add_32_nv) ENTRY(atomic_add_64) ALTENTRY(atomic_add_64_nv) pushl %edi pushl %ebx movl 12(%esp), %edi movl (%edi), %eax movl 4(%edi), %edx 1: movl 16(%esp), %ebx movl 20(%esp), %ecx addl %eax, %ebx adcl %edx, %ecx lock cmpxchg8b (%edi) jne 1b movl %ebx, %eax movl %ecx, %edx popl %ebx popl %edi ret SET_SIZE(atomic_add_64_nv) SET_SIZE(atomic_add_64) ENTRY(atomic_or_8_nv) ALTENTRY(atomic_or_uchar_nv) movl 4(%esp), %edx movb (%edx), %al 1: movl 8(%esp), %ecx orb %al, %cl lock cmpxchgb %cl, (%edx) jne 1b movzbl %cl, %eax ret SET_SIZE(atomic_or_uchar_nv) SET_SIZE(atomic_or_8_nv) ENTRY(atomic_or_16_nv) ALTENTRY(atomic_or_ushort_nv) movl 4(%esp), %edx movw (%edx), %ax 1: movl 8(%esp), %ecx orw %ax, %cx lock cmpxchgw %cx, (%edx) jne 1b movzwl %cx, %eax ret SET_SIZE(atomic_or_ushort_nv) SET_SIZE(atomic_or_16_nv) ENTRY(atomic_or_32_nv) ALTENTRY(atomic_or_uint_nv) ALTENTRY(atomic_or_ulong_nv) movl 4(%esp), %edx movl (%edx), %eax 1: movl 8(%esp), %ecx orl %eax, %ecx lock cmpxchgl %ecx, (%edx) jne 1b movl %ecx, %eax ret SET_SIZE(atomic_or_ulong_nv) SET_SIZE(atomic_or_uint_nv) SET_SIZE(atomic_or_32_nv) ENTRY(atomic_or_64) ALTENTRY(atomic_or_64_nv) pushl %edi pushl %ebx movl 12(%esp), %edi movl (%edi), %eax movl 4(%edi), %edx 1: movl 16(%esp), %ebx movl 20(%esp), %ecx orl %eax, %ebx orl %edx, %ecx lock cmpxchg8b (%edi) jne 1b movl %ebx, %eax movl %ecx, %edx popl %ebx popl %edi ret SET_SIZE(atomic_or_64_nv) SET_SIZE(atomic_or_64) ENTRY(atomic_and_8_nv) ALTENTRY(atomic_and_uchar_nv) movl 4(%esp), %edx movb (%edx), %al 1: movl 8(%esp), %ecx andb %al, %cl lock cmpxchgb %cl, (%edx) jne 1b movzbl %cl, %eax ret SET_SIZE(atomic_and_uchar_nv) SET_SIZE(atomic_and_8_nv) ENTRY(atomic_and_16_nv) ALTENTRY(atomic_and_ushort_nv) movl 4(%esp), %edx movw (%edx), %ax 1: movl 8(%esp), %ecx andw %ax, %cx lock cmpxchgw %cx, (%edx) jne 1b movzwl %cx, %eax ret SET_SIZE(atomic_and_ushort_nv) SET_SIZE(atomic_and_16_nv) ENTRY(atomic_and_32_nv) ALTENTRY(atomic_and_uint_nv) ALTENTRY(atomic_and_ulong_nv) movl 4(%esp), %edx movl (%edx), %eax 1: movl 8(%esp), %ecx andl %eax, %ecx lock cmpxchgl %ecx, (%edx) jne 1b movl %ecx, %eax ret SET_SIZE(atomic_and_ulong_nv) SET_SIZE(atomic_and_uint_nv) SET_SIZE(atomic_and_32_nv) ENTRY(atomic_and_64) ALTENTRY(atomic_and_64_nv) pushl %edi pushl %ebx movl 12(%esp), %edi movl (%edi), %eax movl 4(%edi), %edx 1: movl 16(%esp), %ebx movl 20(%esp), %ecx andl %eax, %ebx andl %edx, %ecx lock cmpxchg8b (%edi) jne 1b movl %ebx, %eax movl %ecx, %edx popl %ebx popl %edi ret SET_SIZE(atomic_and_64_nv) SET_SIZE(atomic_and_64) ENTRY(atomic_cas_8) ALTENTRY(atomic_cas_uchar) movl 4(%esp), %edx movzbl 8(%esp), %eax movb 12(%esp), %cl lock cmpxchgb %cl, (%edx) ret SET_SIZE(atomic_cas_uchar) SET_SIZE(atomic_cas_8) ENTRY(atomic_cas_16) ALTENTRY(atomic_cas_ushort) movl 4(%esp), %edx movzwl 8(%esp), %eax movw 12(%esp), %cx lock cmpxchgw %cx, (%edx) ret SET_SIZE(atomic_cas_ushort) SET_SIZE(atomic_cas_16) ENTRY(atomic_cas_32) ALTENTRY(atomic_cas_uint) ALTENTRY(atomic_cas_ulong) ALTENTRY(atomic_cas_ptr) movl 4(%esp), %edx movl 8(%esp), %eax movl 12(%esp), %ecx lock cmpxchgl %ecx, (%edx) ret SET_SIZE(atomic_cas_ptr) SET_SIZE(atomic_cas_ulong) SET_SIZE(atomic_cas_uint) SET_SIZE(atomic_cas_32) ENTRY(atomic_cas_64) pushl %ebx pushl %esi movl 12(%esp), %esi movl 16(%esp), %eax movl 20(%esp), %edx movl 24(%esp), %ebx movl 28(%esp), %ecx lock cmpxchg8b (%esi) popl %esi popl %ebx ret SET_SIZE(atomic_cas_64) ENTRY(atomic_swap_8) ALTENTRY(atomic_swap_uchar) movl 4(%esp), %edx movzbl 8(%esp), %eax lock xchgb %al, (%edx) ret SET_SIZE(atomic_swap_uchar) SET_SIZE(atomic_swap_8) ENTRY(atomic_swap_16) ALTENTRY(atomic_swap_ushort) movl 4(%esp), %edx movzwl 8(%esp), %eax lock xchgw %ax, (%edx) ret SET_SIZE(atomic_swap_ushort) SET_SIZE(atomic_swap_16) ENTRY(atomic_swap_32) ALTENTRY(atomic_swap_uint) ALTENTRY(atomic_swap_ptr) ALTENTRY(atomic_swap_ulong) movl 4(%esp), %edx movl 8(%esp), %eax lock xchgl %eax, (%edx) ret SET_SIZE(atomic_swap_ulong) SET_SIZE(atomic_swap_ptr) SET_SIZE(atomic_swap_uint) SET_SIZE(atomic_swap_32) ENTRY(atomic_swap_64) pushl %esi pushl %ebx movl 12(%esp), %esi movl 16(%esp), %ebx movl 20(%esp), %ecx movl (%esi), %eax movl 4(%esi), %edx 1: lock cmpxchg8b (%esi) jne 1b popl %ebx popl %esi ret SET_SIZE(atomic_swap_64) ENTRY(atomic_set_long_excl) movl 4(%esp), %edx movl 8(%esp), %ecx xorl %eax, %eax lock btsl %ecx, (%edx) jnc 1f decl %eax 1: ret SET_SIZE(atomic_set_long_excl) ENTRY(atomic_clear_long_excl) movl 4(%esp), %edx movl 8(%esp), %ecx xorl %eax, %eax lock btrl %ecx, (%edx) jc 1f decl %eax 1: ret SET_SIZE(atomic_clear_long_excl) ENTRY(membar_enter) ALTENTRY(membar_exit) ALTENTRY(membar_producer) ALTENTRY(membar_consumer) lock xorl $0, (%esp) ret SET_SIZE(membar_consumer) SET_SIZE(membar_producer) SET_SIZE(membar_exit) SET_SIZE(membar_enter) - -#ifdef __ELF__ -.section .note.GNU-stack,"",%progbits -#endif diff --git a/sys/contrib/opensolaris/uts/common/arch/amd64/atomic.S b/sys/contrib/opensolaris/common/atomic/amd64/atomic.S similarity index 99% rename from sys/contrib/opensolaris/uts/common/arch/amd64/atomic.S rename to sys/contrib/opensolaris/common/atomic/amd64/atomic.S index 1fa3c05b3317..1c34b5313529 100644 --- a/sys/contrib/opensolaris/uts/common/arch/amd64/atomic.S +++ b/sys/contrib/opensolaris/common/atomic/amd64/atomic.S @@ -1,564 +1,560 @@ /* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2005 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ .ident "%Z%%M% %I% %E% SMI" .file "%M%" -#define _ASM +#define _ASM #include #if defined(_KERNEL) /* * Legacy kernel interfaces; they will go away (eventually). */ ANSI_PRAGMA_WEAK2(cas8,atomic_cas_8,function) ANSI_PRAGMA_WEAK2(cas32,atomic_cas_32,function) ANSI_PRAGMA_WEAK2(cas64,atomic_cas_64,function) ANSI_PRAGMA_WEAK2(caslong,atomic_cas_ulong,function) ANSI_PRAGMA_WEAK2(casptr,atomic_cas_ptr,function) ANSI_PRAGMA_WEAK2(atomic_and_long,atomic_and_ulong,function) ANSI_PRAGMA_WEAK2(atomic_or_long,atomic_or_ulong,function) #endif ENTRY(atomic_inc_8) ALTENTRY(atomic_inc_uchar) lock incb (%rdi) ret SET_SIZE(atomic_inc_uchar) SET_SIZE(atomic_inc_8) ENTRY(atomic_inc_16) ALTENTRY(atomic_inc_ushort) lock incw (%rdi) ret SET_SIZE(atomic_inc_ushort) SET_SIZE(atomic_inc_16) ENTRY(atomic_inc_32) ALTENTRY(atomic_inc_uint) lock incl (%rdi) ret SET_SIZE(atomic_inc_uint) SET_SIZE(atomic_inc_32) ENTRY(atomic_inc_64) ALTENTRY(atomic_inc_ulong) lock incq (%rdi) ret SET_SIZE(atomic_inc_ulong) SET_SIZE(atomic_inc_64) ENTRY(atomic_inc_8_nv) ALTENTRY(atomic_inc_uchar_nv) movb (%rdi), %al 1: leaq 1(%rax), %rcx lock cmpxchgb %cl, (%rdi) jne 1b movzbl %cl, %eax ret SET_SIZE(atomic_inc_uchar_nv) SET_SIZE(atomic_inc_8_nv) ENTRY(atomic_inc_16_nv) ALTENTRY(atomic_inc_ushort_nv) movw (%rdi), %ax 1: leaq 1(%rax), %rcx lock cmpxchgw %cx, (%rdi) jne 1b movzwl %cx, %eax ret SET_SIZE(atomic_inc_ushort_nv) SET_SIZE(atomic_inc_16_nv) ENTRY(atomic_inc_32_nv) ALTENTRY(atomic_inc_uint_nv) movl (%rdi), %eax 1: leaq 1(%rax), %rcx lock cmpxchgl %ecx, (%rdi) jne 1b movl %ecx, %eax ret SET_SIZE(atomic_inc_uint_nv) SET_SIZE(atomic_inc_32_nv) ENTRY(atomic_inc_64_nv) ALTENTRY(atomic_inc_ulong_nv) movq (%rdi), %rax 1: leaq 1(%rax), %rcx lock cmpxchgq %rcx, (%rdi) jne 1b movq %rcx, %rax ret SET_SIZE(atomic_inc_ulong_nv) SET_SIZE(atomic_inc_64_nv) ENTRY(atomic_dec_8) ALTENTRY(atomic_dec_uchar) lock decb (%rdi) ret SET_SIZE(atomic_dec_uchar) SET_SIZE(atomic_dec_8) ENTRY(atomic_dec_16) ALTENTRY(atomic_dec_ushort) lock decw (%rdi) ret SET_SIZE(atomic_dec_ushort) SET_SIZE(atomic_dec_16) ENTRY(atomic_dec_32) ALTENTRY(atomic_dec_uint) lock decl (%rdi) ret SET_SIZE(atomic_dec_uint) SET_SIZE(atomic_dec_32) ENTRY(atomic_dec_64) ALTENTRY(atomic_dec_ulong) lock decq (%rdi) ret SET_SIZE(atomic_dec_ulong) SET_SIZE(atomic_dec_64) ENTRY(atomic_dec_8_nv) ALTENTRY(atomic_dec_uchar_nv) movb (%rdi), %al 1: leaq -1(%rax), %rcx lock cmpxchgb %cl, (%rdi) jne 1b movzbl %cl, %eax ret SET_SIZE(atomic_dec_uchar_nv) SET_SIZE(atomic_dec_8_nv) ENTRY(atomic_dec_16_nv) ALTENTRY(atomic_dec_ushort_nv) movw (%rdi), %ax 1: leaq -1(%rax), %rcx lock cmpxchgw %cx, (%rdi) jne 1b movzwl %cx, %eax ret SET_SIZE(atomic_dec_ushort_nv) SET_SIZE(atomic_dec_16_nv) ENTRY(atomic_dec_32_nv) ALTENTRY(atomic_dec_uint_nv) movl (%rdi), %eax 1: leaq -1(%rax), %rcx lock cmpxchgl %ecx, (%rdi) jne 1b movl %ecx, %eax ret SET_SIZE(atomic_dec_uint_nv) SET_SIZE(atomic_dec_32_nv) ENTRY(atomic_dec_64_nv) ALTENTRY(atomic_dec_ulong_nv) movq (%rdi), %rax 1: leaq -1(%rax), %rcx lock cmpxchgq %rcx, (%rdi) jne 1b movq %rcx, %rax ret SET_SIZE(atomic_dec_ulong_nv) SET_SIZE(atomic_dec_64_nv) ENTRY(atomic_or_8) ALTENTRY(atomic_or_uchar) lock orb %sil, (%rdi) ret SET_SIZE(atomic_or_uchar) SET_SIZE(atomic_or_8) ENTRY(atomic_or_16) ALTENTRY(atomic_or_ushort) lock orw %si, (%rdi) ret SET_SIZE(atomic_or_ushort) SET_SIZE(atomic_or_16) ENTRY(atomic_or_32) ALTENTRY(atomic_or_uint) lock orl %esi, (%rdi) ret SET_SIZE(atomic_or_uint) SET_SIZE(atomic_or_32) ENTRY(atomic_or_64) ALTENTRY(atomic_or_ulong) lock orq %rsi, (%rdi) ret SET_SIZE(atomic_or_ulong) SET_SIZE(atomic_or_64) ENTRY(atomic_and_8) ALTENTRY(atomic_and_uchar) lock andb %sil, (%rdi) ret SET_SIZE(atomic_and_uchar) SET_SIZE(atomic_and_8) ENTRY(atomic_and_16) ALTENTRY(atomic_and_ushort) lock andw %si, (%rdi) ret SET_SIZE(atomic_and_ushort) SET_SIZE(atomic_and_16) ENTRY(atomic_and_32) ALTENTRY(atomic_and_uint) lock andl %esi, (%rdi) ret SET_SIZE(atomic_and_uint) SET_SIZE(atomic_and_32) ENTRY(atomic_and_64) ALTENTRY(atomic_and_ulong) lock andq %rsi, (%rdi) ret SET_SIZE(atomic_and_ulong) SET_SIZE(atomic_and_64) ENTRY(atomic_add_8_nv) ALTENTRY(atomic_add_char_nv) movb (%rdi), %al 1: movb %sil, %cl addb %al, %cl lock cmpxchgb %cl, (%rdi) jne 1b movzbl %cl, %eax ret SET_SIZE(atomic_add_char_nv) SET_SIZE(atomic_add_8_nv) ENTRY(atomic_add_16_nv) ALTENTRY(atomic_add_short_nv) movw (%rdi), %ax 1: movw %si, %cx addw %ax, %cx lock cmpxchgw %cx, (%rdi) jne 1b movzwl %cx, %eax ret SET_SIZE(atomic_add_short_nv) SET_SIZE(atomic_add_16_nv) ENTRY(atomic_add_32_nv) ALTENTRY(atomic_add_int_nv) movl (%rdi), %eax 1: movl %esi, %ecx addl %eax, %ecx lock cmpxchgl %ecx, (%rdi) jne 1b movl %ecx, %eax ret SET_SIZE(atomic_add_int_nv) SET_SIZE(atomic_add_32_nv) ENTRY(atomic_add_64_nv) ALTENTRY(atomic_add_ptr_nv) ALTENTRY(atomic_add_long_nv) movq (%rdi), %rax 1: movq %rsi, %rcx addq %rax, %rcx lock cmpxchgq %rcx, (%rdi) jne 1b movq %rcx, %rax ret SET_SIZE(atomic_add_long_nv) SET_SIZE(atomic_add_ptr_nv) SET_SIZE(atomic_add_64_nv) ENTRY(atomic_and_8_nv) ALTENTRY(atomic_and_uchar_nv) movb (%rdi), %al 1: movb %sil, %cl andb %al, %cl lock cmpxchgb %cl, (%rdi) jne 1b movzbl %cl, %eax ret SET_SIZE(atomic_and_uchar_nv) SET_SIZE(atomic_and_8_nv) ENTRY(atomic_and_16_nv) ALTENTRY(atomic_and_ushort_nv) movw (%rdi), %ax 1: movw %si, %cx andw %ax, %cx lock cmpxchgw %cx, (%rdi) jne 1b movzwl %cx, %eax ret SET_SIZE(atomic_and_ushort_nv) SET_SIZE(atomic_and_16_nv) ENTRY(atomic_and_32_nv) ALTENTRY(atomic_and_uint_nv) movl (%rdi), %eax 1: movl %esi, %ecx andl %eax, %ecx lock cmpxchgl %ecx, (%rdi) jne 1b movl %ecx, %eax ret SET_SIZE(atomic_and_uint_nv) SET_SIZE(atomic_and_32_nv) ENTRY(atomic_and_64_nv) ALTENTRY(atomic_and_ulong_nv) movq (%rdi), %rax 1: movq %rsi, %rcx andq %rax, %rcx lock cmpxchgq %rcx, (%rdi) jne 1b movq %rcx, %rax ret SET_SIZE(atomic_and_ulong_nv) SET_SIZE(atomic_and_64_nv) ENTRY(atomic_or_8_nv) ALTENTRY(atomic_or_uchar_nv) movb (%rdi), %al 1: movb %sil, %cl orb %al, %cl lock cmpxchgb %cl, (%rdi) jne 1b movzbl %cl, %eax ret SET_SIZE(atomic_and_uchar_nv) SET_SIZE(atomic_and_8_nv) ENTRY(atomic_or_16_nv) ALTENTRY(atomic_or_ushort_nv) movw (%rdi), %ax 1: movw %si, %cx orw %ax, %cx lock cmpxchgw %cx, (%rdi) jne 1b movzwl %cx, %eax ret SET_SIZE(atomic_or_ushort_nv) SET_SIZE(atomic_or_16_nv) ENTRY(atomic_or_32_nv) ALTENTRY(atomic_or_uint_nv) movl (%rdi), %eax 1: movl %esi, %ecx orl %eax, %ecx lock cmpxchgl %ecx, (%rdi) jne 1b movl %ecx, %eax ret SET_SIZE(atomic_or_uint_nv) SET_SIZE(atomic_or_32_nv) ENTRY(atomic_or_64_nv) ALTENTRY(atomic_or_ulong_nv) movq (%rdi), %rax 1: movq %rsi, %rcx orq %rax, %rcx lock cmpxchgq %rcx, (%rdi) jne 1b movq %rcx, %rax ret SET_SIZE(atomic_or_ulong_nv) SET_SIZE(atomic_or_64_nv) ENTRY(atomic_cas_8) ALTENTRY(atomic_cas_uchar) movzbl %sil, %eax lock cmpxchgb %dl, (%rdi) ret SET_SIZE(atomic_cas_uchar) SET_SIZE(atomic_cas_8) ENTRY(atomic_cas_16) ALTENTRY(atomic_cas_ushort) movzwl %si, %eax lock cmpxchgw %dx, (%rdi) ret SET_SIZE(atomic_cas_ushort) SET_SIZE(atomic_cas_16) ENTRY(atomic_cas_32) ALTENTRY(atomic_cas_uint) movl %esi, %eax lock cmpxchgl %edx, (%rdi) ret SET_SIZE(atomic_cas_uint) SET_SIZE(atomic_cas_32) ENTRY(atomic_cas_64) ALTENTRY(atomic_cas_ulong) ALTENTRY(atomic_cas_ptr) movq %rsi, %rax lock cmpxchgq %rdx, (%rdi) ret SET_SIZE(atomic_cas_ptr) SET_SIZE(atomic_cas_ulong) SET_SIZE(atomic_cas_64) ENTRY(atomic_swap_8) ALTENTRY(atomic_swap_uchar) movzbl %sil, %eax lock xchgb %al, (%rdi) ret SET_SIZE(atomic_swap_uchar) SET_SIZE(atomic_swap_8) ENTRY(atomic_swap_16) ALTENTRY(atomic_swap_ushort) movzwl %si, %eax lock xchgw %ax, (%rdi) ret SET_SIZE(atomic_swap_ushort) SET_SIZE(atomic_swap_16) ENTRY(atomic_swap_32) ALTENTRY(atomic_swap_uint) movl %esi, %eax lock xchgl %eax, (%rdi) ret SET_SIZE(atomic_swap_uint) SET_SIZE(atomic_swap_32) ENTRY(atomic_swap_64) ALTENTRY(atomic_swap_ulong) ALTENTRY(atomic_swap_ptr) movq %rsi, %rax lock xchgq %rax, (%rdi) ret SET_SIZE(atomic_swap_ptr) SET_SIZE(atomic_swap_ulong) SET_SIZE(atomic_swap_64) ENTRY(atomic_set_long_excl) xorl %eax, %eax lock btsq %rsi, (%rdi) jnc 1f decl %eax 1: ret SET_SIZE(atomic_set_long_excl) ENTRY(atomic_clear_long_excl) xorl %eax, %eax lock btrq %rsi, (%rdi) jc 1f decl %eax 1: ret SET_SIZE(atomic_clear_long_excl) ENTRY(membar_enter) ALTENTRY(membar_exit) mfence ret SET_SIZE(membar_exit) SET_SIZE(membar_enter) ENTRY(membar_producer) sfence ret SET_SIZE(membar_producer) ENTRY(membar_consumer) lfence ret SET_SIZE(membar_consumer) - -#ifdef __ELF__ -.section .note.GNU-stack,"",%progbits -#endif diff --git a/sys/cddl/contrib/opensolaris/uts/common/arch/i386/atomic.S b/sys/contrib/opensolaris/common/atomic/i386/atomic.S similarity index 99% rename from sys/cddl/contrib/opensolaris/uts/common/arch/i386/atomic.S rename to sys/contrib/opensolaris/common/atomic/i386/atomic.S index 4a1d37521119..afbd11f59ee6 100644 --- a/sys/cddl/contrib/opensolaris/uts/common/arch/i386/atomic.S +++ b/sys/contrib/opensolaris/common/atomic/i386/atomic.S @@ -1,659 +1,655 @@ /* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2005 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ .ident "%Z%%M% %I% %E% SMI" .file "%M%" -#define _ASM +#define _ASM #include #if defined(_KERNEL) /* * Legacy kernel interfaces; they will go away (eventually). */ ANSI_PRAGMA_WEAK2(cas8,atomic_cas_8,function) ANSI_PRAGMA_WEAK2(cas32,atomic_cas_32,function) ANSI_PRAGMA_WEAK2(cas64,atomic_cas_64,function) ANSI_PRAGMA_WEAK2(caslong,atomic_cas_ulong,function) ANSI_PRAGMA_WEAK2(casptr,atomic_cas_ptr,function) ANSI_PRAGMA_WEAK2(atomic_and_long,atomic_and_ulong,function) ANSI_PRAGMA_WEAK2(atomic_or_long,atomic_or_ulong,function) #endif ENTRY(atomic_inc_8) ALTENTRY(atomic_inc_uchar) movl 4(%esp), %eax lock incb (%eax) ret SET_SIZE(atomic_inc_uchar) SET_SIZE(atomic_inc_8) ENTRY(atomic_inc_16) ALTENTRY(atomic_inc_ushort) movl 4(%esp), %eax lock incw (%eax) ret SET_SIZE(atomic_inc_ushort) SET_SIZE(atomic_inc_16) ENTRY(atomic_inc_32) ALTENTRY(atomic_inc_uint) ALTENTRY(atomic_inc_ulong) movl 4(%esp), %eax lock incl (%eax) ret SET_SIZE(atomic_inc_ulong) SET_SIZE(atomic_inc_uint) SET_SIZE(atomic_inc_32) ENTRY(atomic_inc_8_nv) ALTENTRY(atomic_inc_uchar_nv) movl 4(%esp), %edx movb (%edx), %al 1: leal 1(%eax), %ecx lock cmpxchgb %cl, (%edx) jne 1b movzbl %cl, %eax ret SET_SIZE(atomic_inc_uchar_nv) SET_SIZE(atomic_inc_8_nv) ENTRY(atomic_inc_16_nv) ALTENTRY(atomic_inc_ushort_nv) movl 4(%esp), %edx movw (%edx), %ax 1: leal 1(%eax), %ecx lock cmpxchgw %cx, (%edx) jne 1b movzwl %cx, %eax ret SET_SIZE(atomic_inc_ushort_nv) SET_SIZE(atomic_inc_16_nv) ENTRY(atomic_inc_32_nv) ALTENTRY(atomic_inc_uint_nv) ALTENTRY(atomic_inc_ulong_nv) movl 4(%esp), %edx movl (%edx), %eax 1: leal 1(%eax), %ecx lock cmpxchgl %ecx, (%edx) jne 1b movl %ecx, %eax ret SET_SIZE(atomic_inc_ulong_nv) SET_SIZE(atomic_inc_uint_nv) SET_SIZE(atomic_inc_32_nv) ENTRY(atomic_inc_64) ALTENTRY(atomic_inc_64_nv) pushl %edi pushl %ebx movl 12(%esp), %edi movl (%edi), %eax movl 4(%edi), %edx 1: xorl %ebx, %ebx xorl %ecx, %ecx incl %ebx addl %eax, %ebx adcl %edx, %ecx lock cmpxchg8b (%edi) jne 1b movl %ebx, %eax movl %ecx, %edx popl %ebx popl %edi ret SET_SIZE(atomic_inc_64_nv) SET_SIZE(atomic_inc_64) ENTRY(atomic_dec_8) ALTENTRY(atomic_dec_uchar) movl 4(%esp), %eax lock decb (%eax) ret SET_SIZE(atomic_dec_uchar) SET_SIZE(atomic_dec_8) ENTRY(atomic_dec_16) ALTENTRY(atomic_dec_ushort) movl 4(%esp), %eax lock decw (%eax) ret SET_SIZE(atomic_dec_ushort) SET_SIZE(atomic_dec_16) ENTRY(atomic_dec_32) ALTENTRY(atomic_dec_uint) ALTENTRY(atomic_dec_ulong) movl 4(%esp), %eax lock decl (%eax) ret SET_SIZE(atomic_dec_ulong) SET_SIZE(atomic_dec_uint) SET_SIZE(atomic_dec_32) ENTRY(atomic_dec_8_nv) ALTENTRY(atomic_dec_uchar_nv) movl 4(%esp), %edx movb (%edx), %al 1: leal -1(%eax), %ecx lock cmpxchgb %cl, (%edx) jne 1b movzbl %cl, %eax ret SET_SIZE(atomic_dec_uchar_nv) SET_SIZE(atomic_dec_8_nv) ENTRY(atomic_dec_16_nv) ALTENTRY(atomic_dec_ushort_nv) movl 4(%esp), %edx movw (%edx), %ax 1: leal -1(%eax), %ecx lock cmpxchgw %cx, (%edx) jne 1b movzwl %cx, %eax ret SET_SIZE(atomic_dec_ushort_nv) SET_SIZE(atomic_dec_16_nv) ENTRY(atomic_dec_32_nv) ALTENTRY(atomic_dec_uint_nv) ALTENTRY(atomic_dec_ulong_nv) movl 4(%esp), %edx movl (%edx), %eax 1: leal -1(%eax), %ecx lock cmpxchgl %ecx, (%edx) jne 1b movl %ecx, %eax ret SET_SIZE(atomic_dec_ulong_nv) SET_SIZE(atomic_dec_uint_nv) SET_SIZE(atomic_dec_32_nv) ENTRY(atomic_dec_64) ALTENTRY(atomic_dec_64_nv) pushl %edi pushl %ebx movl 12(%esp), %edi movl (%edi), %eax movl 4(%edi), %edx 1: xorl %ebx, %ebx xorl %ecx, %ecx not %ecx not %ebx addl %eax, %ebx adcl %edx, %ecx lock cmpxchg8b (%edi) jne 1b movl %ebx, %eax movl %ecx, %edx popl %ebx popl %edi ret SET_SIZE(atomic_dec_64_nv) SET_SIZE(atomic_dec_64) ENTRY(atomic_or_8) ALTENTRY(atomic_or_uchar) movl 4(%esp), %eax movb 8(%esp), %cl lock orb %cl, (%eax) ret SET_SIZE(atomic_or_uchar) SET_SIZE(atomic_or_8) ENTRY(atomic_or_16) ALTENTRY(atomic_or_ushort) movl 4(%esp), %eax movw 8(%esp), %cx lock orw %cx, (%eax) ret SET_SIZE(atomic_or_ushort) SET_SIZE(atomic_or_16) ENTRY(atomic_or_32) ALTENTRY(atomic_or_uint) ALTENTRY(atomic_or_ulong) movl 4(%esp), %eax movl 8(%esp), %ecx lock orl %ecx, (%eax) ret SET_SIZE(atomic_or_ulong) SET_SIZE(atomic_or_uint) SET_SIZE(atomic_or_32) ENTRY(atomic_and_8) ALTENTRY(atomic_and_uchar) movl 4(%esp), %eax movb 8(%esp), %cl lock andb %cl, (%eax) ret SET_SIZE(atomic_and_uchar) SET_SIZE(atomic_and_8) ENTRY(atomic_and_16) ALTENTRY(atomic_and_ushort) movl 4(%esp), %eax movw 8(%esp), %cx lock andw %cx, (%eax) ret SET_SIZE(atomic_and_ushort) SET_SIZE(atomic_and_16) ENTRY(atomic_and_32) ALTENTRY(atomic_and_uint) ALTENTRY(atomic_and_ulong) movl 4(%esp), %eax movl 8(%esp), %ecx lock andl %ecx, (%eax) ret SET_SIZE(atomic_and_ulong) SET_SIZE(atomic_and_uint) SET_SIZE(atomic_and_32) ENTRY(atomic_add_8_nv) ALTENTRY(atomic_add_char_nv) movl 4(%esp), %edx movb (%edx), %al 1: movl 8(%esp), %ecx addb %al, %cl lock cmpxchgb %cl, (%edx) jne 1b movzbl %cl, %eax ret SET_SIZE(atomic_add_char_nv) SET_SIZE(atomic_add_8_nv) ENTRY(atomic_add_16_nv) ALTENTRY(atomic_add_short_nv) movl 4(%esp), %edx movw (%edx), %ax 1: movl 8(%esp), %ecx addw %ax, %cx lock cmpxchgw %cx, (%edx) jne 1b movzwl %cx, %eax ret SET_SIZE(atomic_add_short_nv) SET_SIZE(atomic_add_16_nv) ENTRY(atomic_add_32_nv) ALTENTRY(atomic_add_int_nv) ALTENTRY(atomic_add_ptr_nv) ALTENTRY(atomic_add_long_nv) movl 4(%esp), %edx movl (%edx), %eax 1: movl 8(%esp), %ecx addl %eax, %ecx lock cmpxchgl %ecx, (%edx) jne 1b movl %ecx, %eax ret SET_SIZE(atomic_add_long_nv) SET_SIZE(atomic_add_ptr_nv) SET_SIZE(atomic_add_int_nv) SET_SIZE(atomic_add_32_nv) ENTRY(atomic_add_64) ALTENTRY(atomic_add_64_nv) pushl %edi pushl %ebx movl 12(%esp), %edi movl (%edi), %eax movl 4(%edi), %edx 1: movl 16(%esp), %ebx movl 20(%esp), %ecx addl %eax, %ebx adcl %edx, %ecx lock cmpxchg8b (%edi) jne 1b movl %ebx, %eax movl %ecx, %edx popl %ebx popl %edi ret SET_SIZE(atomic_add_64_nv) SET_SIZE(atomic_add_64) ENTRY(atomic_or_8_nv) ALTENTRY(atomic_or_uchar_nv) movl 4(%esp), %edx movb (%edx), %al 1: movl 8(%esp), %ecx orb %al, %cl lock cmpxchgb %cl, (%edx) jne 1b movzbl %cl, %eax ret SET_SIZE(atomic_or_uchar_nv) SET_SIZE(atomic_or_8_nv) ENTRY(atomic_or_16_nv) ALTENTRY(atomic_or_ushort_nv) movl 4(%esp), %edx movw (%edx), %ax 1: movl 8(%esp), %ecx orw %ax, %cx lock cmpxchgw %cx, (%edx) jne 1b movzwl %cx, %eax ret SET_SIZE(atomic_or_ushort_nv) SET_SIZE(atomic_or_16_nv) ENTRY(atomic_or_32_nv) ALTENTRY(atomic_or_uint_nv) ALTENTRY(atomic_or_ulong_nv) movl 4(%esp), %edx movl (%edx), %eax 1: movl 8(%esp), %ecx orl %eax, %ecx lock cmpxchgl %ecx, (%edx) jne 1b movl %ecx, %eax ret SET_SIZE(atomic_or_ulong_nv) SET_SIZE(atomic_or_uint_nv) SET_SIZE(atomic_or_32_nv) ENTRY(atomic_or_64) ALTENTRY(atomic_or_64_nv) pushl %edi pushl %ebx movl 12(%esp), %edi movl (%edi), %eax movl 4(%edi), %edx 1: movl 16(%esp), %ebx movl 20(%esp), %ecx orl %eax, %ebx orl %edx, %ecx lock cmpxchg8b (%edi) jne 1b movl %ebx, %eax movl %ecx, %edx popl %ebx popl %edi ret SET_SIZE(atomic_or_64_nv) SET_SIZE(atomic_or_64) ENTRY(atomic_and_8_nv) ALTENTRY(atomic_and_uchar_nv) movl 4(%esp), %edx movb (%edx), %al 1: movl 8(%esp), %ecx andb %al, %cl lock cmpxchgb %cl, (%edx) jne 1b movzbl %cl, %eax ret SET_SIZE(atomic_and_uchar_nv) SET_SIZE(atomic_and_8_nv) ENTRY(atomic_and_16_nv) ALTENTRY(atomic_and_ushort_nv) movl 4(%esp), %edx movw (%edx), %ax 1: movl 8(%esp), %ecx andw %ax, %cx lock cmpxchgw %cx, (%edx) jne 1b movzwl %cx, %eax ret SET_SIZE(atomic_and_ushort_nv) SET_SIZE(atomic_and_16_nv) ENTRY(atomic_and_32_nv) ALTENTRY(atomic_and_uint_nv) ALTENTRY(atomic_and_ulong_nv) movl 4(%esp), %edx movl (%edx), %eax 1: movl 8(%esp), %ecx andl %eax, %ecx lock cmpxchgl %ecx, (%edx) jne 1b movl %ecx, %eax ret SET_SIZE(atomic_and_ulong_nv) SET_SIZE(atomic_and_uint_nv) SET_SIZE(atomic_and_32_nv) ENTRY(atomic_and_64) ALTENTRY(atomic_and_64_nv) pushl %edi pushl %ebx movl 12(%esp), %edi movl (%edi), %eax movl 4(%edi), %edx 1: movl 16(%esp), %ebx movl 20(%esp), %ecx andl %eax, %ebx andl %edx, %ecx lock cmpxchg8b (%edi) jne 1b movl %ebx, %eax movl %ecx, %edx popl %ebx popl %edi ret SET_SIZE(atomic_and_64_nv) SET_SIZE(atomic_and_64) ENTRY(atomic_cas_8) ALTENTRY(atomic_cas_uchar) movl 4(%esp), %edx movzbl 8(%esp), %eax movb 12(%esp), %cl lock cmpxchgb %cl, (%edx) ret SET_SIZE(atomic_cas_uchar) SET_SIZE(atomic_cas_8) ENTRY(atomic_cas_16) ALTENTRY(atomic_cas_ushort) movl 4(%esp), %edx movzwl 8(%esp), %eax movw 12(%esp), %cx lock cmpxchgw %cx, (%edx) ret SET_SIZE(atomic_cas_ushort) SET_SIZE(atomic_cas_16) ENTRY(atomic_cas_32) ALTENTRY(atomic_cas_uint) ALTENTRY(atomic_cas_ulong) ALTENTRY(atomic_cas_ptr) movl 4(%esp), %edx movl 8(%esp), %eax movl 12(%esp), %ecx lock cmpxchgl %ecx, (%edx) ret SET_SIZE(atomic_cas_ptr) SET_SIZE(atomic_cas_ulong) SET_SIZE(atomic_cas_uint) SET_SIZE(atomic_cas_32) ENTRY(atomic_cas_64) pushl %ebx pushl %esi movl 12(%esp), %esi movl 16(%esp), %eax movl 20(%esp), %edx movl 24(%esp), %ebx movl 28(%esp), %ecx lock cmpxchg8b (%esi) popl %esi popl %ebx ret SET_SIZE(atomic_cas_64) ENTRY(atomic_swap_8) ALTENTRY(atomic_swap_uchar) movl 4(%esp), %edx movzbl 8(%esp), %eax lock xchgb %al, (%edx) ret SET_SIZE(atomic_swap_uchar) SET_SIZE(atomic_swap_8) ENTRY(atomic_swap_16) ALTENTRY(atomic_swap_ushort) movl 4(%esp), %edx movzwl 8(%esp), %eax lock xchgw %ax, (%edx) ret SET_SIZE(atomic_swap_ushort) SET_SIZE(atomic_swap_16) ENTRY(atomic_swap_32) ALTENTRY(atomic_swap_uint) ALTENTRY(atomic_swap_ptr) ALTENTRY(atomic_swap_ulong) movl 4(%esp), %edx movl 8(%esp), %eax lock xchgl %eax, (%edx) ret SET_SIZE(atomic_swap_ulong) SET_SIZE(atomic_swap_ptr) SET_SIZE(atomic_swap_uint) SET_SIZE(atomic_swap_32) ENTRY(atomic_swap_64) pushl %esi pushl %ebx movl 12(%esp), %esi movl 16(%esp), %ebx movl 20(%esp), %ecx movl (%esi), %eax movl 4(%esi), %edx 1: lock cmpxchg8b (%esi) jne 1b popl %ebx popl %esi ret SET_SIZE(atomic_swap_64) ENTRY(atomic_set_long_excl) movl 4(%esp), %edx movl 8(%esp), %ecx xorl %eax, %eax lock btsl %ecx, (%edx) jnc 1f decl %eax 1: ret SET_SIZE(atomic_set_long_excl) ENTRY(atomic_clear_long_excl) movl 4(%esp), %edx movl 8(%esp), %ecx xorl %eax, %eax lock btrl %ecx, (%edx) jc 1f decl %eax 1: ret SET_SIZE(atomic_clear_long_excl) ENTRY(membar_enter) ALTENTRY(membar_exit) ALTENTRY(membar_producer) ALTENTRY(membar_consumer) lock xorl $0, (%esp) ret SET_SIZE(membar_consumer) SET_SIZE(membar_producer) SET_SIZE(membar_exit) SET_SIZE(membar_enter) - -#ifdef __ELF__ -.section .note.GNU-stack,"",%progbits -#endif diff --git a/sys/modules/zfs/Makefile b/sys/modules/zfs/Makefile index 46f7d39b4724..1f3fbbfaaf8b 100644 --- a/sys/modules/zfs/Makefile +++ b/sys/modules/zfs/Makefile @@ -1,87 +1,87 @@ # $FreeBSD$ KMOD= zfs SRCS= vnode_if.h .PATH: ${.CURDIR}/../../contrib/opensolaris/common/acl SRCS+= acl_common.c .PATH: ${.CURDIR}/../../contrib/opensolaris/common/avl SRCS+= avl.c .PATH: ${.CURDIR}/../../contrib/opensolaris/common/nvpair SRCS+= nvpair.c .PATH: ${.CURDIR}/../../compat/opensolaris/kern SRCS+= opensolaris_kmem.c SRCS+= opensolaris_kobj.c SRCS+= opensolaris_kstat.c SRCS+= opensolaris_policy.c SRCS+= opensolaris_string.c SRCS+= opensolaris_vfs.c SRCS+= opensolaris_zone.c -.PATH: ${.CURDIR}/../../contrib/opensolaris/uts/common/arch/${MACHINE_ARCH} +.PATH: ${.CURDIR}/../../contrib/opensolaris/common/atomic/${MACHINE_ARCH} SRCS+= atomic.S .PATH: ${.CURDIR}/../../contrib/opensolaris/uts/common/fs SRCS+= dnlc.c SRCS+= gfs.c .PATH: ${.CURDIR}/../../contrib/opensolaris/uts/common/os SRCS+= callb.c SRCS+= list.c SRCS+= nvpair_alloc_system.c SRCS+= taskq.c .PATH: ${.CURDIR}/../../contrib/opensolaris/uts/common/rpc SRCS+= xdr.c SRCS+= xdr_array.c SRCS+= xdr_mem.c .PATH: ${.CURDIR}/../../contrib/opensolaris/uts/common/zmod SRCS+= adler32.c SRCS+= crc32.c SRCS+= deflate.c SRCS+= inffast.c SRCS+= inflate.c SRCS+= inftrees.c SRCS+= trees.c SRCS+= zmod.c SRCS+= zmod_subr.c SRCS+= zutil.c .PATH: ${.CURDIR}/../../contrib/opensolaris/common/zfs .include "${.CURDIR}/../../contrib/opensolaris/uts/common/Makefile.files" .PATH: ${.CURDIR}/../../contrib/opensolaris/uts/common/fs/zfs ZFS_SRCS= ${ZFS_OBJS:C/.o$/.c/} SRCS+= ${ZFS_SRCS} SRCS+= vdev_geom.c # Use UMA for ZIO allocation. This is not stable. #CFLAGS+=-DZIO_USE_UMA CWARNFLAGS=-Wall CWARNFLAGS+=-Wno-unknown-pragmas CWARNFLAGS+=-Wno-missing-braces CWARNFLAGS+=-Wno-parentheses CWARNFLAGS+=-Wno-uninitialized CWARNFLAGS+=-Wno-unused CWARNFLAGS+=-Wno-switch CFLAGS+=-D_SOLARIS_C_SOURCE CFLAGS+=-I${.CURDIR}/../../compat/opensolaris CFLAGS+=-I${.CURDIR}/../../contrib/opensolaris/uts/common/fs/zfs CFLAGS+=-I${.CURDIR}/../../contrib/opensolaris/uts/common/zmod CFLAGS+=-I${.CURDIR}/../../contrib/opensolaris/uts/common CFLAGS+=-I${.CURDIR}/../.. CFLAGS+=-I${.CURDIR}/../../contrib/opensolaris/common/zfs CFLAGS+=-I${.CURDIR}/../../contrib/opensolaris/common CFLAGS+=-I${.CURDIR}/../../../include WARNS?=1 #CFLAGS+=-DDEBUG=1 #DEBUG_FLAGS=-g .include