On Thu, Sep 12, 2013 at 04:20:40AM +0200, Peter Zijlstra wrote: > On Wed, Sep 11, 2013 at 04:02:14PM -0700, Linus Torvalds wrote: > > On Wed, Sep 11, 2013 at 11:59 AM, Peter Zijlstra <pet...@infradead.org> > > wrote: > > > > > > OK, stripped it down further, I couldn't quite see how to collapse the > > > unary and binary operator variants though :/ > > > > Ok, this looks pretty good. I assume it works too? ;) > > Only compile tested that one.. the below is kvm boot tested until root > mount -- I'll try on actual hardware when I've gotten some sleep. > > I split the thing up into two macros GEN_UNARY_RMWcc and > GEN_BINARY_RMWcc which ends up being more readable as well as smaller > code overall.
If you wanted to collapse the unary and binary variants as you mentioned upthread, you could do something like (for the CC_HAVE_ASM_GOTO case): #define GEN_RMWcc(fullop, cc, ...) \ do { \ asm volatile goto (fullop \ "j" cc " %l[cc_label]" \ : : __VA_ARGS__ \ : "memory" : cc_label); \ return 0; \ cc_label: \ return 1; \ } while (0) #define GEN_UNARY_RMWcc(op, var, arg0, cc) GEN_RMWcc(op " " arg0 ";", cc, "m" (var)) #define GEN_BINARY_RMWcc(op, var, val, arg0, cc) GEN_RMWcc(op " %1, " arg0 ";", cc, "m" (var), "er" (val)) - Kevin -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/