Messages in this thread | | | Date | Thu, 21 Feb 2013 00:52:21 -0600 | From | Kim Phillips <> | Subject | Re: [RFC] arm: use built-in byte swap function |
| |
On Wed, 20 Feb 2013 23:29:58 -0500 Nicolas Pitre <nico@fluxnic.net> wrote:
> On Wed, 20 Feb 2013, Kim Phillips wrote: > > > On Wed, 20 Feb 2013 10:43:18 -0500 > > Nicolas Pitre <nico@fluxnic.net> wrote: > > > > > On Wed, 20 Feb 2013, Woodhouse, David wrote: > > > > On Wed, 2013-02-20 at 09:06 -0500, Nicolas Pitre wrote: > > > > > ... in which case there is no harm shipping a .c file and trivially > > > > > enforcing -O2, the rest being equal. > > > > > > > > For today's compilers, unless the wind changes. > > > > > > We'll adapt if necessary. Going with -O2 should remain pretty safe anyway. > > > > Alas, not so for gcc 4.4 - I had forgotten I had tested > > Ubuntu/Linaro 4.4.7-1ubuntu2 here: > > > > https://patchwork.kernel.org/patch/2101491/ > > > > add -O2 to that test script and gcc 4.4 *always* emits calls to > > __bswap[sd]i2, even with -march=armv6k+.
argh, sorry - that script was testing support for __builtin_bswap{16,32,64} directly, which isn't the same as testing code generation of a byte swap pattern in C.
> Crap. OK, assembly code is the way to go then. > > > I'll try working on an assembly version given it probably > > makes more sense, future-gcc-immunity-wise. > > Agreed.
I'll still try the assembly approach - gcc 4.4's armv6 output looks worse than both the pre-armv6 and post-armv6 __arch_swab32 implementations currently in use:
mov ip, sp push {fp, ip, lr, pc} sub fp, ip, #4 and r2, r0, #65280 ; 0xff00 lsl ip, r0, #24 orr r1, ip, r0, lsr #24 and r0, r0, #16711680 ; 0xff0000 orr r3, r1, r2, lsl #8 orr r0, r3, r0, lsr #8 ldm sp, {fp, sp, pc}
Kim
| |