[Bug middle-end/58041] Unaligned access to arrays in packed structure
mikpe at it dot uu.se
gcc-bugzilla@gcc.gnu.org
Thu Aug 1 11:36:00 GMT 2013
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58041
Mikael Pettersson <mikpe at it dot uu.se> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |wschmidt at gcc dot gnu.org
--- Comment #4 from Mikael Pettersson <mikpe at it dot uu.se> ---
Started with Bill Schmidt's PR46556 patch in r190037. (Author CC:d.)
Comparing the generated code between 190036 and 190037 clearly shows how the
misaligned accesses were wrongly replaced by aligned accesses:
--- pr58041.s-r190036 2013-08-01 13:30:59.264514025 +0200
+++ pr58041.s-r190037 2013-08-01 13:27:38.874840851 +0200
@@ -18,37 +18,11 @@
@ args = 0, pretend = 0, frame = 0
@ frame_needed = 0, uses_anonymous_args = 0
@ link register save eliminated.
- stmfd sp!, {r4, r5, r6, r7, r8, r9, r10, fp}
add ip, r0, r1, asl #3
- ldrb r7, [ip, #2] @ zero_extendqisi2
- ldrb r6, [ip, #6] @ zero_extendqisi2
- ldrb r0, [ip, #1] @ zero_extendqisi2
- ldrb r1, [ip, #5] @ zero_extendqisi2
- ldrb r5, [ip, #3] @ zero_extendqisi2
- ldrb r4, [ip, #7] @ zero_extendqisi2
- orr r0, r0, r7, asl #8
- orr r1, r1, r6, asl #8
- ldrb r10, [ip, #4] @ zero_extendqisi2
- ldrb r6, [ip, #8] @ zero_extendqisi2
- mov fp, r2, lsr #8
- orr r0, r0, r5, asl #16
- mov r9, r2, lsr #16
- mov r8, r2, lsr #24
- mov r7, r3, lsr #8
- orr r1, r1, r4, asl #16
- mov r5, r3, lsr #16
- mov r4, r3, lsr #24
- strb fp, [ip, #2]
- strb r2, [ip, #1]
- strb r9, [ip, #3]
- strb r8, [ip, #4]
- strb r7, [ip, #6]
- strb r3, [ip, #5]
- strb r5, [ip, #7]
- strb r4, [ip, #8]
- orr r0, r0, r10, asl #24
- orr r1, r1, r6, asl #24
- ldmfd sp!, {r4, r5, r6, r7, r8, r9, r10, fp}
+ ldr r0, [ip, #1]
+ ldr r1, [ip, #5]
+ str r2, [ip, #1]
+ str r3, [ip, #5]
bx lr
.size foo, .-foo
.section .text.startup,"ax",%progbits
More information about the Gcc-bugs
mailing list