Changeset 8b4d6cb in mainline for kernel/arch/ia64/include/atomic.h
- Timestamp:
- 2009-01-03T15:33:55Z (16 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 2b70a6e
- Parents:
- fb69f39
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ia64/include/atomic.h
rfb69f39 r8b4d6cb 38 38 /** Atomic addition. 39 39 * 40 * @param val 41 * @param imm 40 * @param val Atomic value. 41 * @param imm Value to add. 42 42 * 43 * @return 43 * @return Value before addition. 44 44 */ 45 45 static inline long atomic_add(atomic_t *val, int imm) … … 47 47 long v; 48 48 49 asm volatile ("fetchadd8.rel %0 = %1, %2\n" : "=r" (v), "+m" (val->count) : "i" (imm)); 49 asm volatile ("fetchadd8.rel %0 = %1, %2\n" : "=r" (v), 50 "+m" (val->count) : "i" (imm)); 50 51 51 52 return v; … … 57 58 58 59 asm volatile ( 59 "movl %0 =0x01;;\n"60 "xchg8 %0 =%1,%0;;\n"61 : "=r" (v), "+m" (val->count)60 "movl %0 = 0x01;;\n" 61 "xchg8 %0 = %1, %0;;\n" 62 : "=r" (v), "+m" (val->count) 62 63 ); 63 64 … … 66 67 67 68 68 static inline void atomic_inc(atomic_t *val) { atomic_add(val, 1); } 69 static inline void atomic_dec(atomic_t *val) { atomic_add(val, -1); } 69 static inline void atomic_inc(atomic_t *val) 70 { 71 atomic_add(val, 1); 72 } 70 73 71 static inline long atomic_preinc(atomic_t *val) { return atomic_add(val, 1) + 1; } 72 static inline long atomic_predec(atomic_t *val) { return atomic_add(val, -1) - 1; } 74 static inline void atomic_dec(atomic_t *val) 75 { 76 atomic_add(val, -1); 77 } 73 78 74 static inline long atomic_postinc(atomic_t *val) { return atomic_add(val, 1); } 75 static inline long atomic_postdec(atomic_t *val) { return atomic_add(val, -1); } 79 static inline long atomic_preinc(atomic_t *val) 80 { 81 return atomic_add(val, 1) + 1; 82 } 83 84 static inline long atomic_predec(atomic_t *val) 85 { 86 return atomic_add(val, -1) - 1; 87 } 88 89 static inline long atomic_postinc(atomic_t *val) 90 { 91 return atomic_add(val, 1); 92 } 93 94 static inline long atomic_postdec(atomic_t *val) 95 { 96 return atomic_add(val, -1); 97 } 76 98 77 99 #endif
Note:
See TracChangeset
for help on using the changeset viewer.