Messages in this thread | | | Date | Sat, 22 Jan 2005 20:13:24 -0800 | From | Matt Mackall <> | Subject | Re: [PATCH 1/12] random pt4: Create new rol32/ror32 bitops |
| |
On Sun, Jan 23, 2005 at 04:19:21AM +0100, Andi Kleen wrote: > On Sat, Jan 22, 2005 at 09:10:40PM -0500, Chuck Ebbert wrote: > > On Fri, 21 Jan 2005 at 15:41:06 -0600 Matt Mackall wrote: > > > > > Add rol32 and ror32 bitops to bitops.h > > > > Can you test this patch on top of yours? I did it on 2.6.10-ac10 but it > > should apply OK. Compile tested and booted, but only random.c is using it > > in my kernel. > > Does random really use variable rotates? For constant rotates > gcc detects the usual C idiom and turns it transparently into > the right machine instruction.
Nope, random doesn't. The only thing I converted in my sweep that did were CAST5 and CAST6, which are fairly unique in doing key-based rotations. On the other hand:
typedef unsigned int __u32;
static inline __u32 rol32(__u32 word, int shift) { return (word << shift) | (word >> (32 - shift)); }
int foo(int val, int rot) { return rol32(val, rot); }
With 2.95:
0: 55 push %ebp 1: 89 e5 mov %esp,%ebp 3: 8b 4d 0c mov 0xc(%ebp),%ecx 6: 8b 45 08 mov 0x8(%ebp),%eax 9: d3 c0 rol %cl,%eax b: c9 leave c: c3 ret
With 3.3.5:
0: 55 push %ebp 1: 89 e5 mov %esp,%ebp 3: 8b 45 08 mov 0x8(%ebp),%eax 6: 8b 4d 0c mov 0xc(%ebp),%ecx 9: 5d pop %ebp a: d3 c0 rol %cl,%eax c: c3 ret
With gcc-snapshot:
0: 55 push %ebp 1: 89 e5 mov %esp,%ebp 3: 8b 45 08 mov 0x8(%ebp),%eax 6: 8b 4d 0c mov 0xc(%ebp),%ecx 9: d3 c0 rol %cl,%eax b: 5d pop %ebp c: c3 ret
So I think tweaks for x86 at least are unnecessary.
-- Mathematics is the supreme nostalgia of our time. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |