On Sat, Apr 04, 2015 at 10:36:11AM +0200, Quentin Casasnovas wrote: > Since all of these are compile time constants, could we not use the safe > variant on that same page? Not that I'm too worried about the signed right > shift but heh that would be portable and should not impact performance > anyway, so no added value in using the optimized version is there?
Seems to work with the experimental diff below. I need to do -(-(x < y)) with the last term though as we're working with s32s. --- diff --git a/arch/x86/include/asm/alternative-asm.h b/arch/x86/include/asm/alternative-asm.h index 44a1fc5439d3..2cb6da2716bf 100644 --- a/arch/x86/include/asm/alternative-asm.h +++ b/arch/x86/include/asm/alternative-asm.h @@ -53,14 +53,14 @@ * Shamelessly stolen and adapted from: * http://graphics.stanford.edu/~seander/bithacks.html#IntegerMinOrMax */ -#define alt_max_short(a,b) (((a) - (((a) - (b)) & (((a) - (b)) >> 15))) & 0xffff) +#define alt_max_short(a, b) ((a) ^ (((a) ^ (b)) & -(-((a) < (b))))) .macro ALTERNATIVE_2 oldinstr, newinstr1, feature1, newinstr2, feature2 140: \oldinstr 141: - .skip -((alt_max_short(new_len1, new_len2) - old_len) > 0) * \ - (alt_max_short(new_len1, new_len2) - old_len),0x90 + .skip -((alt_max_short(new_len1, new_len2) - (old_len)) > 0) * \ + (alt_max_short(new_len1, new_len2) - (old_len)),0x90 142: .pushsection .altinstructions,"a" diff --git a/arch/x86/lib/memset_64.S b/arch/x86/lib/memset_64.S index 93118fb23976..453b6a05a07e 100644 --- a/arch/x86/lib/memset_64.S +++ b/arch/x86/lib/memset_64.S @@ -29,6 +29,14 @@ ENTRY(__memset) ALTERNATIVE_2 "jmp memset_orig", "", X86_FEATURE_REP_GOOD, \ "jmp memset_erms", X86_FEATURE_ERMS + ALTERNATIVE_2 \ + ".byte 0xc3, 0xc3, 0xc3", \ + ".byte 0x66, 0x66, 0x66, 0x90", \ + X86_FEATURE_ALWAYS, \ + ".byte 0x66, 0x66, 0x66, 0x66, 0xcc", \ + X86_FEATURE_ALWAYS + + movq %rdi,%r9 movq %rdx,%rcx andl $7,%edx > On the bonus side, you're getting rid of the double 'alt_end_marker' label > in case of an alternative_2()! > > Looks good to me and I find it much easier to understand here :) Cool. Please give it more critical staring as we're under time pressure here. Thanks! -- Regards/Gruss, Boris. ECO tip #101: Trim your mails when you reply. -- -- 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/