-
Notifications
You must be signed in to change notification settings - Fork 64
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[herd] Non temporal memory accesses (AArch64) #492
base: master
Are you sure you want to change the base?
Conversation
This PR now includes one single commit that updates the cat file. All other operations on non-temporal accesses have been merged into master (cf. PR #549). |
Thanks @maranget. Please could you add a test to illustrate the required change too? |
0aba8bf
to
4ffdad3
Compare
a23d589
to
5905deb
Compare
According to documentation, there are no address dependencies that ends in a non-temporal read: In addition, there is an exception to the usual memory ordering rules. If an address dependency exists between two memory reads, and a Load Non-temporal Pair instruction generated the second read, then in the absence of any other barrier mechanism to achieve order, the memory accesses can be observed in any order by the other observers within the shareability domain of the memory addresses being accessed.
Added tests illustrate the "non temporal" exception to address dependencies. More precisely L070 illustrates the exception, while L071 is a control.
4ffdad3
to
2bd9994
Compare
Although PR quotes only Load/store scalar SIMD and floating-point the same applies to ordinal Load/store non-temporal pair [1]
and SVE as well [2]
With #749 I can confirm that
now allowed
Just my 2p. Hope that would help to justify the change. [1] C3.2.4 Load/store non-temporal pair, ARM DDI 0487J. |
This PR handles non-temporal memory accesses. They have a noticeable impact over the memory models, as an address dependency that ends into a non-temporal read does not create order. See Arm Architecture Reference Manual, section C.3.2.9 "Load/store scalar SIMD and floating-point":