Forcing llvm to not wrap two 32bit accesses into a single 64bit access


I am working with a problem with an arm64 CPU that seems to have
problems with 64bit read/write operations to particular memory
If I wish to transfer 256 bytes to this region with:
uint8_t *src;
uint8_t *dest;
for (int n = 0; n < 256; n++) {
  src[n] = dest[n];

Now, these are byte accesses, but LLVM optimisation might try to
convert them into 64 bit or wide data transfer instructions.
How do I ensure that the optimisation will only optimise to 32bit wide

As it is only for specific memory regions, I don't wish to put the
restriction on the entire program.

Kind Regards


The only way I can think of is by marking them volatile (and possibly
hand-promoting to 32-bit if that matters to you). Or assembly of one
form or another of course.