* H. Peter Anvin (hpa@xxxxxxxxx) wrote: > Mathieu Desnoyers wrote: >> This epilogue should then be used on both branches of the condition, >> like this : >> if (unlikely(imv_cond(var))) { >> imv_cond_end(); >> ... >> } else { >> imv_cond_end(); >> ... >> } >> Where imv_cond_end() would look like this : >> +/* >> + * Puts a test and branch make sure the %al register and ZF are not live >> + * anymore. >> + * All asm statements clobbers the flags, but add "cc" clobber just to be >> sure. >> + * Clobbers %al. >> + */ >> +#define imv_cond_end() \ >> + do { \ >> + asm (".section __imv_cond_end,\"a\",@progbits\n\t" \ >> + _ASM_PTR "1f\n\t" \ >> + ".previous\n\t" \ >> + "1:\n\t" \ >> + : : : "a", "cc"); \ >> + } while (0) >> + > > As far as this is concerned, all you accomplish here is that gcc, if it > wants to re-use the %al value, will copy it into another register before > doing your imv_conv_end(). > Exactly, and by doing so, it will have to add instructions (mov, push..) in the instruction pattern I am looking for and therefore I will detect this and fall back on standard immediate values. Mathieu > -hpa -- Mathieu Desnoyers Computer Engineering Ph.D. Student, Ecole Polytechnique de Montreal OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68 -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html