Hi, David Woodhouse wrote: > On Thu, 2007-05-17 at 20:30 +0000, Matthieu CASTET wrote: >> On arch that don't support aligned access, packed struct access will be >> done byte per byte (but it could be the expected behavior if there >> unaligned access). > > When I tested this on ARM, the output for je32_to_cpu et al was fine. > For _other_ structures where I'd used __attribute__((packed)) to be > safe, gcc would emit code to handle unaligned loads. But not in the > simple case where the struct has only one member. > > Are you suggesting that this has changed since I did my testing? > here a small example I made and try with a sourcery 2006q3-27 /tmp/arm-2006q3/bin/arm-none-linux-gnueabi-gcc -S test.c -O3 -o test.s.packed /tmp/arm-2006q3/bin/arm-none-linux-gnueabi-gcc -S test.c -DNOP -O3 -o test.s $diff test.s test.s.packed 19,23c19,34 < @ link register save eliminated. < ldrh r2, [r1, #0] < ldrh r1, [r0, #2] < ldr r0, [r0, #4] < @ lr needed for prologue --- > stmfd sp!, {r4, r5, r6, lr} > ldrb r2, [r0, #5] @ zero_extendqisi2 > ldrb r3, [r0, #4] @ zero_extendqisi2 > mov lr, r1 > ldrb r4, [r0, #6] @ zero_extendqisi2 > ldrb r5, [r0, #3] @ zero_extendqisi2 > ldrb r6, [r1, #1] @ zero_extendqisi2 > orr r3, r3, r2, asl #8 > ldrb r1, [r0, #2] @ zero_extendqisi2 > ldrb ip, [r0, #7] @ zero_extendqisi2 > ldrb r2, [lr, #0] @ zero_extendqisi2 > orr r3, r3, r4, asl #16 > orr r0, r3, ip, asl #24 > orr r1, r1, r5, asl #8 > orr r2, r2, r6, asl #8 > ldmfd sp!, {r4, r5, r6, lr} Matthieu