https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116856
--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
```
#include <stdint.h>
typedef uint32_t uuint32_t __attribute__ ((__aligned__(1))) ;
void f(uint8_t *array)
{
uuint32_t * ptr = (uuint32_t *) (array + 1);
*ptr ^= *(ptr+1);
}
```
Works for me with -mcpu=cortex-m33:
ldr r3, [r0, #1] @ unaligned
ldr r2, [r0, #5] @ unaligned
eors r3, r3, r2
str r3, [r0, #1] @ unaligned
bx lr
This also works:
```
#include <stdint.h>
typedef uint32_t uuint32_t __attribute__ ((__aligned__(1))) ;
void g(uint8_t *);
void f()//uint8_t *array)
{
uint8_t array[100];
uuint32_t * ptr = (uuint32_t *) (array + 1);
*ptr ^= *(ptr+1);
g(array);
}
```
Giving:
```
push {lr}
sub sp, sp, #108
ldr r3, [sp, #5] @ unaligned
ldr r2, [sp, #9] @ unaligned
add r0, sp, #4
eors r3, r3, r2
str r3, [sp, #5] @ unaligned
bl g
```