Messages in this thread Patch in this message | | | Date | Sat, 4 Apr 2015 11:25:36 +0200 | From | Borislav Petkov <> | Subject | Re: [PATCH] x86/xsave: Robustify and merge macros |
| |
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. --
| |