We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hi,
I am trying to write a code using Neon instructions for an iOS app, based on a previous code that has been optimized with SSE instructions for a desktop app.
The SSE code has memory alignment checks throughout the code, based on which it invokes the aligned or unaligned load / store instruction. Basically the SSE has the following instructions for loads -
__mm_storeu_si128 - the pointer address need not be 16-byte aligned
__mm_store_si128 - the pointer address needs to be 16-byte aligned
And the following instructions for store -
__mm_loadu_si128 - the pointer address need not be 16-byte aligned
__mm_load_si128 - the pointer address needs to be 16-byte aligned.
From the ARM Neon instructions documentation, I was not able to find separate load / store instructions for the aligned or unaligned memory addresses. I could only find generic vldq_s16 for loads and vstq_s16 for stores. Do these instructions handle the memory alignment under the hood? How should I handle cases where memory addresses might not be aligned?
Hi Matt,Does this mean that performing unaligned access to data wont lead to a segmentation fault when accessing normal memory?