From: js@sig21.net (Johannes Stezenbach)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] ARM: decompressor: clear SCTLR.A bit for v7 cores
Date: Wed, 20 Feb 2013 15:56:54 +0100 [thread overview]
Message-ID: <20130220145654.GA6742@sig21.net> (raw)
In-Reply-To: <CANLjY-k7sn-7pH_0nFiktXCxvgy8XizVbPRvS8aG1rg+CmVTPQ@mail.gmail.com>
Replying to old thread, for full context see
http://thread.gmane.org/gmane.linux.ports.arm.kernel/180226/focus=197914
On Tue, Nov 06, 2012 at 11:02:27AM +1300, Michael Hope wrote:
> On 6 November 2012 02:48, Rob Herring <robherring2@gmail.com> wrote:
> >
> > I tried adding -munaligned-accesses on a v6 build and still get byte
> > accesses rather than unaligned word accesses. So this does seem to be a
> > v7 only issue based on what gcc will currently produce. Copying Michael
> > Hope who can hopefully provide some insight on why v6 unaligned accesses
> > are not enabled.
>
> This looks like a bug. Unaligned access is enabled for armv6 but
> seems to only take effect for cores with Thumb-2. Here's a test case
> both with unaligned field access and unaligned block copy:
>
> struct foo
> {
> char a;
> int b;
> struct
> {
> int x[3];
> } c;
> } __attribute__((packed));
>
> int get_field(struct foo *p)
> {
> return p->b;
> }
>
> int copy_block(struct foo *p, struct foo *q)
> {
> p->c = q->c;
> }
>
> With -march=armv7-a you get the correct:
>
> bar:
> ldr r0, [r0, #1] @ unaligned @ 11 unaligned_loadsi/2 [length = 4]
> bx lr @ 21 *arm_return [length = 12]
>
> baz:
> str r4, [sp, #-4]! @ 25 *push_multi [length = 4]
> mov r2, r0 @ 2 *arm_movsi_vfp/1 [length = 4]
> ldr r4, [r1, #5]! @ unaligned @ 9 unaligned_loadsi/2 [length = 4]
> ldr ip, [r1, #4] @ unaligned @ 10 unaligned_loadsi/2 [length = 4]
> ldr r1, [r1, #8] @ unaligned @ 11 unaligned_loadsi/2 [length = 4]
> str r4, [r2, #5] @ unaligned @ 12 unaligned_storesi/2 [length = 4]
> str ip, [r2, #9] @ unaligned @ 13 unaligned_storesi/2 [length = 4]
> str r1, [r2, #13] @ unaligned @ 14 unaligned_storesi/2 [length = 4]
> ldmfd sp!, {r4}
> bx lr
>
> With -march=armv6 you get a byte-by-byte field access and a correct
> unaligned block copy:
>
> bar:
> ldrb r1, [r0, #2] @ zero_extendqisi2
> ldrb r3, [r0, #1] @ zero_extendqisi2
> ldrb r2, [r0, #3] @ zero_extendqisi2
> ldrb r0, [r0, #4] @ zero_extendqisi2
> orr r3, r3, r1, asl #8
> orr r3, r3, r2, asl #16
> orr r0, r3, r0, asl #24
> bx lr
>
> baz:
> str r4, [sp, #-4]!
> mov r2, r0
> ldr r4, [r1, #5]! @ unaligned
> ldr ip, [r1, #4] @ unaligned
> ldr r1, [r1, #8] @ unaligned
> str r4, [r2, #5] @ unaligned
> str ip, [r2, #9] @ unaligned
> str r1, [r2, #13] @ unaligned
> ldmfd sp!, {r4}
> bx lr
>
> readelf -A shows that the compiler planned to use unaligned access in
> both. My suspicion is that GCC is using the extv pattern to extract
> the field from memory, and that pattern is only enabled for Thumb-2
> capable cores.
>
> I've logged PR55218. We'll discuss it at our next meeting.
Just tried with gcc-linaro-4.7-2013.01 (gcc-4.7.3 20130102 (prerelease)),
the issue is still unfixed. Do you have any idea how to fix it?
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55218
Thanks,
Johannes
next prev parent reply other threads:[~2013-02-20 14:56 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-05 1:23 [PATCH v2 0/5] Use more asm-generic headers Rob Herring
2012-08-05 1:23 ` [PATCH v2 1/5] ARM: use generic version of identical asm headers Rob Herring
2012-08-05 1:23 ` [PATCH v2 2/5] ARM: add strstr declaration for decompressors Rob Herring
2012-08-05 1:23 ` [PATCH v2 3/5] ARM: use generic unaligned.h Rob Herring
2012-10-08 16:43 ` Shawn Guo
2012-10-08 20:34 ` Rob Herring
2012-10-08 23:28 ` Shawn Guo
2012-10-09 2:27 ` Rob Herring
2012-10-09 2:45 ` Shawn Guo
2012-10-09 4:01 ` Nicolas Pitre
2012-10-10 13:29 ` Rob Herring
2012-10-10 13:57 ` Nicolas Pitre
2012-10-11 12:43 ` [PATCH] ARM: decompressor: clear SCTLR.A bit for v7 cores Rob Herring
2012-10-11 13:09 ` Russell King - ARM Linux
2012-10-11 13:31 ` Rob Herring
2012-10-11 13:41 ` Russell King - ARM Linux
2012-10-11 15:44 ` Nicolas Pitre
2012-10-23 20:32 ` Gregory CLEMENT
2012-10-25 12:07 ` Russell King - ARM Linux
2012-10-11 13:59 ` Russell King - ARM Linux
2012-10-11 15:58 ` Nicolas Pitre
2012-10-25 9:34 ` Johannes Stezenbach
2012-10-25 12:41 ` Rob Herring
2012-10-25 13:30 ` Arnd Bergmann
2012-10-25 14:16 ` Johannes Stezenbach
2012-10-25 14:25 ` Rob Herring
2012-10-25 15:02 ` Nicolas Pitre
2012-10-25 15:08 ` Johannes Stezenbach
2012-11-05 10:48 ` Dave Martin
2012-11-05 11:13 ` Russell King - ARM Linux
2012-11-05 13:02 ` Dave Martin
2012-11-05 13:43 ` Johannes Stezenbach
2012-11-05 15:39 ` Russell King - ARM Linux
2012-11-05 16:13 ` Nicolas Pitre
2012-11-05 17:26 ` Dave Martin
2012-11-05 17:44 ` Rob Herring
2012-11-05 20:02 ` Nicolas Pitre
2012-11-05 17:46 ` Nicolas Pitre
2012-11-05 13:48 ` Rob Herring
2012-11-05 22:02 ` Michael Hope
2013-02-20 14:56 ` Johannes Stezenbach [this message]
2013-02-20 15:07 ` Johannes Stezenbach
2012-08-05 1:23 ` [PATCH v2 4/5] ARM: use generic termios.h Rob Herring
2012-08-05 1:24 ` [PATCH v2 5/5] ARM: convert asm/irqflags.h to use asm-generic/irqflags.h Rob Herring
2012-08-05 9:34 ` [PATCH v2 0/5] Use more asm-generic headers Thomas Petazzoni
2012-08-06 14:35 ` Arnd Bergmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20130220145654.GA6742@sig21.net \
--to=js@sig21.net \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.