summaryrefslogtreecommitdiff
path: root/usr/src/uts/intel
diff options
context:
space:
mode:
authorKeith M Wesolowski <wesolows@foobazco.org>2014-08-20 20:04:47 +0000
committerKeith M Wesolowski <wesolows@foobazco.org>2014-08-20 20:04:47 +0000
commit5f00496ef2e39b976b062f196ff01a99fd4864a4 (patch)
tree20be9cbc8f4b7ed3e616ce23552728083801e846 /usr/src/uts/intel
parentaf59b1a40df03681c1c8129aea7b1f5f52f2bcea (diff)
parent86bb58aec7165f8a0303564575c65e5a2ad58bf1 (diff)
downloadillumos-joyent-release-20140821.tar.gz
[illumos-gate merge]20140821release-20140821
commit 86bb58aec7165f8a0303564575c65e5a2ad58bf1 5095 panic when adding a duplicate dbuf to dn_dbufs commit 60a61f7adabc73a7a0cb70d200ac2a6735f4a6e8 5092 env files don't need to define LOCKNAME by default 5091 illumos.sh env file's LOCKNAME definition is busted commit 5e3f545c431ec4bce3e1b52f3f81bc9befe501f2 4989 removal of ntfsprogs and parted commit ba3594ba9b5dd4c846c472a8d657edcb7c8109ac 5066 remove support for non-ANSI compilation 5068 Remove SCCSID() macro from <macros.h> commit d8ccf998f9c944b8cf27ed840c376f9b79ebce5c 5087 8-bit inline atomic {add,or,and} use wrong reg constraints on x86 Manifests: usr/src/pkg/manifests/SUNWntfsprogs.mf (torch library) usr/src/pkg/manifests/SUNWparted.mf (torch headers) usr/src/pkg/manifests/system-file-system-ntfsprogs.mf usr/src/pkg/manifests/system-storage-parted.mf
Diffstat (limited to 'usr/src/uts/intel')
-rw-r--r--usr/src/uts/intel/asm/atomic.h54
1 files changed, 27 insertions, 27 deletions
diff --git a/usr/src/uts/intel/asm/atomic.h b/usr/src/uts/intel/asm/atomic.h
index 8310186bf5..29913b6bd5 100644
--- a/usr/src/uts/intel/asm/atomic.h
+++ b/usr/src/uts/intel/asm/atomic.h
@@ -105,24 +105,24 @@ __ATOMIC_OPXX(atomic_dec_ulong, ulong_t, "dec" SUF_LONG)
#undef __ATOMIC_OPXX
-#define __ATOMIC_OPXX(fxn, type1, type2, op) \
+#define __ATOMIC_OPXX(fxn, type1, type2, op, reg) \
extern __GNU_INLINE void \
fxn(volatile type1 *target, type2 delta) \
{ \
__asm__ __volatile__( \
"lock; " op " %1,%0" \
: "+m" (*target) \
- : "ir" (delta)); \
+ : "i" reg (delta)); \
}
-__ATOMIC_OPXX(atomic_add_8, uint8_t, int8_t, "add" SUF_8)
-__ATOMIC_OPXX(atomic_add_16, uint16_t, int16_t, "add" SUF_16)
-__ATOMIC_OPXX(atomic_add_32, uint32_t, int32_t, "add" SUF_32)
-__ATOMIC_OP64(atomic_add_64, uint64_t, int64_t, "add" SUF_64)
-__ATOMIC_OPXX(atomic_add_char, uchar_t, signed char, "add" SUF_8)
-__ATOMIC_OPXX(atomic_add_short, ushort_t, short, "add" SUF_16)
-__ATOMIC_OPXX(atomic_add_int, uint_t, int, "add" SUF_32)
-__ATOMIC_OPXX(atomic_add_long, ulong_t, long, "add" SUF_LONG)
+__ATOMIC_OPXX(atomic_add_8, uint8_t, int8_t, "add" SUF_8, "q")
+__ATOMIC_OPXX(atomic_add_16, uint16_t, int16_t, "add" SUF_16, "r")
+__ATOMIC_OPXX(atomic_add_32, uint32_t, int32_t, "add" SUF_32, "r")
+__ATOMIC_OP64(atomic_add_64, uint64_t, int64_t, "add" SUF_64, "r")
+__ATOMIC_OPXX(atomic_add_char, uchar_t, signed char, "add" SUF_8, "q")
+__ATOMIC_OPXX(atomic_add_short, ushort_t, short, "add" SUF_16, "r")
+__ATOMIC_OPXX(atomic_add_int, uint_t, int, "add" SUF_32, "r")
+__ATOMIC_OPXX(atomic_add_long, ulong_t, long, "add" SUF_LONG, "r")
/*
* We don't use the above macro here because atomic_add_ptr has an
@@ -140,23 +140,23 @@ atomic_add_ptr(volatile void *target, ssize_t delta)
: "ir" (delta));
}
-__ATOMIC_OPXX(atomic_or_8, uint8_t, uint8_t, "or" SUF_8)
-__ATOMIC_OPXX(atomic_or_16, uint16_t, uint16_t, "or" SUF_16)
-__ATOMIC_OPXX(atomic_or_32, uint32_t, uint32_t, "or" SUF_32)
-__ATOMIC_OP64(atomic_or_64, uint64_t, uint64_t, "or" SUF_64)
-__ATOMIC_OPXX(atomic_or_uchar, uchar_t, uchar_t, "or" SUF_8)
-__ATOMIC_OPXX(atomic_or_ushort, ushort_t, ushort_t, "or" SUF_16)
-__ATOMIC_OPXX(atomic_or_uint, uint_t, uint_t, "or" SUF_32)
-__ATOMIC_OPXX(atomic_or_ulong, ulong_t, ulong_t, "or" SUF_LONG)
-
-__ATOMIC_OPXX(atomic_and_8, uint8_t, uint8_t, "and" SUF_8)
-__ATOMIC_OPXX(atomic_and_16, uint16_t, uint16_t, "and" SUF_16)
-__ATOMIC_OPXX(atomic_and_32, uint32_t, uint32_t, "and" SUF_32)
-__ATOMIC_OP64(atomic_and_64, uint64_t, uint64_t, "and" SUF_64)
-__ATOMIC_OPXX(atomic_and_uchar, uchar_t, uchar_t, "and" SUF_8)
-__ATOMIC_OPXX(atomic_and_ushort, ushort_t, ushort_t, "and" SUF_16)
-__ATOMIC_OPXX(atomic_and_uint, uint_t, uint_t, "and" SUF_32)
-__ATOMIC_OPXX(atomic_and_ulong, ulong_t, ulong_t, "and" SUF_LONG)
+__ATOMIC_OPXX(atomic_or_8, uint8_t, uint8_t, "or" SUF_8, "q")
+__ATOMIC_OPXX(atomic_or_16, uint16_t, uint16_t, "or" SUF_16, "r")
+__ATOMIC_OPXX(atomic_or_32, uint32_t, uint32_t, "or" SUF_32, "r")
+__ATOMIC_OP64(atomic_or_64, uint64_t, uint64_t, "or" SUF_64, "r")
+__ATOMIC_OPXX(atomic_or_uchar, uchar_t, uchar_t, "or" SUF_8, "q")
+__ATOMIC_OPXX(atomic_or_ushort, ushort_t, ushort_t, "or" SUF_16, "r")
+__ATOMIC_OPXX(atomic_or_uint, uint_t, uint_t, "or" SUF_32, "r")
+__ATOMIC_OPXX(atomic_or_ulong, ulong_t, ulong_t, "or" SUF_LONG, "r")
+
+__ATOMIC_OPXX(atomic_and_8, uint8_t, uint8_t, "and" SUF_8, "q")
+__ATOMIC_OPXX(atomic_and_16, uint16_t, uint16_t, "and" SUF_16, "r")
+__ATOMIC_OPXX(atomic_and_32, uint32_t, uint32_t, "and" SUF_32, "r")
+__ATOMIC_OP64(atomic_and_64, uint64_t, uint64_t, "and" SUF_64, "r")
+__ATOMIC_OPXX(atomic_and_uchar, uchar_t, uchar_t, "and" SUF_8, "q")
+__ATOMIC_OPXX(atomic_and_ushort, ushort_t, ushort_t, "and" SUF_16, "r")
+__ATOMIC_OPXX(atomic_and_uint, uint_t, uint_t, "and" SUF_32, "r")
+__ATOMIC_OPXX(atomic_and_ulong, ulong_t, ulong_t, "and" SUF_LONG, "r")
#undef __ATOMIC_OPXX