lkml.org 
[lkml]   [2011]   [Aug]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: [PATCH 07/15] x86: add xadd helper macro
From
Date


What you could do is something like:

#define CASE_B case 1
#define CASE_W case 2
#define CASE_L case 4
#ifdef CONFIG_64BIT
# define CASE_Q case 8
#else
# define CASE_Q case -1 /* sizeof() won't ever return this */
#endif


> +#define xadd(ptr, inc) \
> + do { \
> + switch (sizeof(*(ptr))) { \
CASE_B: \
> + asm volatile (LOCK_PREFIX "xaddb %b0, %1\n" \
> + : "+r" (inc), "+m" (*(ptr)) \
> + : : "memory", "cc"); \
> + break; \
CASE_W: \
> + asm volatile (LOCK_PREFIX "xaddw %w0, %1\n" \
> + : "+r" (inc), "+m" (*(ptr)) \
> + : : "memory", "cc"); \
> + break; \
CASE_L: \
> + asm volatile (LOCK_PREFIX "xaddl %0, %1\n" \
> + : "+r" (inc), "+m" (*(ptr)) \
> + : : "memory", "cc"); \
> + break; \
CASE_Q: \
> + asm volatile (LOCK_PREFIX "xaddq %q0, %1\n" \
> + : "+r" (inc), "+m" (*(ptr)) \
> + : : "memory", "cc"); \
> + break; \
default: \
__xadd_wrong_size(); \
> + } \
> + } while(0)




\
 
 \ /
  Last update: 2011-08-23 13:03    [W:0.090 / U:0.012 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site