On May 16, 2016 10:06:08 AM PDT, Peter Zijlstra <pet...@infradead.org> wrote: >On Mon, May 16, 2016 at 11:49:05PM +0800, Zhaoxiu Zeng wrote: >> On 2016/5/11 17:31, Peter Zijlstra wrote: >> > Please use the GEN_*_RMWcc() stuff to avoid the setpo where >possible. >> >> Setpo is better. >> In most cases, we need to store the parity, or compare it with other >variables. >> >> For example, in drivers/net/ethernet/broadcom/tg3.c, >> >> static int tg3_test_nvram(struct tg3 *tp) >> { >> ...... >> if (parity8(data[i]) == !!parity[i]) >> goto out; >> ...... >> } >> >> If use GEN_BINARY_RMWcc stuff, >> >> static inline unsigned int __arch_parity8(unsigned int w) >> { >> GEN_BINARY_RMWcc("testb", w, "er", 0xff, "%0", "po"); >> } > >blergh; GCC does indeed make a mess of that. It looks we'll need the >cc-output stuff for this in order for GCC to generates sane code for >that :/
For what it's worth, I have a patchset for cc out just about ready to post. It is in gcc 6.1. -- Sent from my Android device with K-9 Mail. Please excuse brevity and formatting.