Spent all day reading through ARMv8a and Cortex-A53 docs but couldn't find anything beyond what you mention above. That sentence though,
I have given up on trying to solve the problem and just worked around it by switching bitwise operations to pointer dereferencing in my code. It isn't as sophisticated, but at least it keeps the compiler from trying to vectorize reads from device memory.
If anyone else has any suggestions, I'm still very happy to try anything at this point Image may be NSFW.
Clik here to view.
Thanks again for those who helped me thus far!!
... seems to only imply that there is a possibility of reading registers beyond the one explicitly referenced if in the same 128bit block. That in itself wouldn't bother me in this case (none of these are clear or advance on read type registers) but it doesn't imply that you would never be able to read the offset you're trying to read. Still, I guess it's the closest documented explanation out there.There is a single, uncommon exception to this. If NEON operations are used to read bytes from Device memory, the processor might read bytes not explicitly referenced if they are within an aligned 16-byte block that contains one or more bytes that are explicitly referenced.
I have given up on trying to solve the problem and just worked around it by switching bitwise operations to pointer dereferencing in my code. It isn't as sophisticated, but at least it keeps the compiler from trying to vectorize reads from device memory.
Code:
// read from right to left unsigned char* c = (unsigned char*)(&b127_96);c += 2;oem_id[0] = *c--;oem_id[1] = *c--;prod_name[0] = *c--;// read from right to leftc = (unsigned char*)(&b95_64);c += 3;prod_name[1] = *c--;prod_name[2] = *c--;prod_name[3] = *c--;prod_name[4] = *c--;
Clik here to view.

Statistics: Posted by willdieh — Mon May 20, 2024 7:49 pm