\
        asm volatile(ALTERNATIVE(_lock_loc                              \
                                 "call cmpxchg8b_emu",                  \
-                                _lock "cmpxchg8b %[ptr]", X86_FEATURE_CX8) \
-                    : [ptr] "+m" (*(_ptr)),                            \
-                      "+a" (o.low), "+d" (o.high)                      \
-                    : "b" (n.low), "c" (n.high), "S" (_ptr)            \
+                                _lock "cmpxchg8b %a[ptr]", X86_FEATURE_CX8) \
+                    : "+a" (o.low), "+d" (o.high)                      \
+                    : "b" (n.low), "c" (n.high), [ptr] "S" (_ptr)      \
                     : "memory");                                       \
                                                                        \
        o.full;                                                         \
                                                                        \
        asm volatile(ALTERNATIVE(_lock_loc                              \
                                 "call cmpxchg8b_emu",                  \
-                                _lock "cmpxchg8b %[ptr]", X86_FEATURE_CX8) \
+                                _lock "cmpxchg8b %a[ptr]", X86_FEATURE_CX8) \
                     CC_SET(e)                                          \
                     : CC_OUT(e) (ret),                                 \
-                      [ptr] "+m" (*(_ptr)),                            \
                       "+a" (o.low), "+d" (o.high)                      \
-                    : "b" (n.low), "c" (n.high), "S" (_ptr)            \
+                    : "b" (n.low), "c" (n.high), [ptr] "S" (_ptr)      \
                     : "memory");                                       \
                                                                        \
        if (unlikely(!ret))                                             \