https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87373
--- Comment #3 from Umesh Kalappa <umesh.kalappa0 at gmail dot com> --- With -O0 , i see the byte load /store like push {r7} sub sp, sp, #12 add r7, sp, #0 ldr r2, .L3 mov r3, r7 str r3, [r2] ldr r3, .L3 ldr r3, [r3] ldrb r2, [r3] movs r2, #0 orr r2, r2, #1 strb r2, [r3] ldrb r2, [r3, #1] movs r2, #0 orr r2, r2, #4 strb r2, [r3, #1] ldrb r2, [r3, #2] movs r2, #0 strb r2, [r3, #2] ldrb r2, [r3, #3] movs r2, #0 strb r2, [r3, #3] ldr r3, .L3 ldr r3, [r3] ldr r2, [r3] @ unaligned ldr r3, .L3 ldr r3, [r3] uxtb r2, r2 strb r2, [r3, #4] ldr r3, .L3 ldr r3, [r3] ldrb r3, [r3, #4] @ zero_extendqisi2 mov r0, r3 adds r7, r7, #12 mov sp, r7 @ sp needed pop {r7} bx lr but ,why you are compiling with -O0 , any reason such ?