~ubuntu-branches/debian/experimental/linux-tools/experimental

« back to all changes in this revision

Viewing changes to arch/x86/include/asm/rmwcc.h

  • Committer: Package Import Robot
  • Author(s): Ben Hutchings
  • Date: 2014-02-02 16:57:49 UTC
  • mfrom: (1.1.10) (0.1.21 sid)
  • Revision ID: package-import@ubuntu.com-20140202165749-tw94o9t1t0a8txk6
Tags: 3.13-1~exp2
Merge changes from sid up to 3.12.6-3

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#ifndef _ASM_X86_RMWcc
 
2
#define _ASM_X86_RMWcc
 
3
 
 
4
#ifdef CC_HAVE_ASM_GOTO
 
5
 
 
6
#define __GEN_RMWcc(fullop, var, cc, ...)                               \
 
7
do {                                                                    \
 
8
        asm_volatile_goto (fullop "; j" cc " %l[cc_label]"              \
 
9
                        : : "m" (var), ## __VA_ARGS__                   \
 
10
                        : "memory" : cc_label);                         \
 
11
        return 0;                                                       \
 
12
cc_label:                                                               \
 
13
        return 1;                                                       \
 
14
} while (0)
 
15
 
 
16
#define GEN_UNARY_RMWcc(op, var, arg0, cc)                              \
 
17
        __GEN_RMWcc(op " " arg0, var, cc)
 
18
 
 
19
#define GEN_BINARY_RMWcc(op, var, vcon, val, arg0, cc)                  \
 
20
        __GEN_RMWcc(op " %1, " arg0, var, cc, vcon (val))
 
21
 
 
22
#else /* !CC_HAVE_ASM_GOTO */
 
23
 
 
24
#define __GEN_RMWcc(fullop, var, cc, ...)                               \
 
25
do {                                                                    \
 
26
        char c;                                                         \
 
27
        asm volatile (fullop "; set" cc " %1"                           \
 
28
                        : "+m" (var), "=qm" (c)                         \
 
29
                        : __VA_ARGS__ : "memory");                      \
 
30
        return c != 0;                                                  \
 
31
} while (0)
 
32
 
 
33
#define GEN_UNARY_RMWcc(op, var, arg0, cc)                              \
 
34
        __GEN_RMWcc(op " " arg0, var, cc)
 
35
 
 
36
#define GEN_BINARY_RMWcc(op, var, vcon, val, arg0, cc)                  \
 
37
        __GEN_RMWcc(op " %2, " arg0, var, cc, vcon (val))
 
38
 
 
39
#endif /* CC_HAVE_ASM_GOTO */
 
40
 
 
41
#endif /* _ASM_X86_RMWcc */