Are dmb.st and dsb.st lightweight fences?

Contents

The ARM architectures features the dmb and dsb fences. As ARM documentation forbids IRIW+dmb and specifies dsb to behave at least as dmb, one may be reasonably sure that dmb and dsb are full fences. When suffixed by .st, ARM fences operate on write-to-write pairs only. It remains to decide wether the resulting dmb.st and dsb.st fences are lightweight fences or not. In that aspect ARM documentation does not help much, we thus resort to experiments.

We consider two models: Light is the alteration of the model that considers dmb.st and dsb.st to be lightweight fences (as lwsync); while Model considers dmb.st and dsb.st to be full fences operating on write-to-write pairs. The Light model is slightly more relaxed (96 tests, see below). Unfortunately, no hardware experiment produce some outcome that would be forbidden by Model yet allowed by Light. As a consequence experiments do not help to solve the issue.

Notice that on most machines (except A6X) dmb, (resp. dsb) dmb.st (resp. dsb.st) in behave the same on all pairs of memory accessses. Hence, as A6X has two cores, there are four tests only that could help us to decide wether .st fences are lightweight or not: R+dmb.st+dmb, R+dmb.st+dsb, R+dsb.st+dmb, R+dsb.st+dsb.

Checking Light against Model

More behaviours

There are 96 such tests
 LightModelTegra2APQ8060A5XA6XExynos5250Tegra3Exynos4412Exynos5410APQ8064
R+dmb.st+dmbAllowForbidNo, 0/4.2GNo, 0/7.6GNo, 0/9.1GNo, 0/13GNo, 0/8.3GNo, 0/6.8GNo, 0/22GNo, 0/6.3GNo, 0/4.5G
   Allow unseenAllow unseenAllow unseenAllow unseenAllow unseenAllow unseenAllow unseenAllow unseenAllow unseen
R+dmb.st+dsbAllowForbidNo, 0/4.2GNo, 0/7.6GNo, 0/9.1GNo, 0/13GNo, 0/8.3GNo, 0/6.8GNo, 0/22GNo, 0/6.3GNo, 0/4.5G
   Allow unseenAllow unseenAllow unseenAllow unseenAllow unseenAllow unseenAllow unseenAllow unseenAllow unseen
R+dsb.st+dmbAllowForbidNo, 0/4.2GNo, 0/7.6GNo, 0/9.1GNo, 0/13GNo, 0/8.3GNo, 0/6.8GNo, 0/22GNo, 0/6.3GNo, 0/4.5G
   Allow unseenAllow unseenAllow unseenAllow unseenAllow unseenAllow unseenAllow unseenAllow unseenAllow unseen
R+dsb.st+dsbAllowForbidNo, 0/4.2GNo, 0/7.6GNo, 0/9.1GNo, 0/13GNo, 0/8.3GNo, 0/6.8GNo, 0/22GNo, 0/6.3GNo, 0/4.5G
   Allow unseenAllow unseenAllow unseenAllow unseenAllow unseenAllow unseenAllow unseenAllow unseenAllow unseen
WRR+2W+dmb+dmb.stAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
WRR+2W+dmb+dsb.stAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
WRR+2W+dsb+dmb.stAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
WRR+2W+dsb+dsb.stAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
W+RWC+dmb.st+addr+dmbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
W+RWC+dmb.st+addr+dsbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
W+RWC+dmb.st+ctrlisb+dmbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
W+RWC+dmb.st+ctrlisb+dsbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
W+RWC+dsb.st+addr+dmbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
W+RWC+dsb.st+addr+dsbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
W+RWC+dsb.st+ctrlisb+dmbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
W+RWC+dsb.st+ctrlisb+dsbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.0+dmb.st+addr+dmbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.0+dmb.st+addr+dsbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.0+dmb.st+ctrl+dmbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.0+dmb.st+ctrl+dsbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.0+dmb.st+ctrlisb+dmbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.0+dmb.st+ctrlisb+dsbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.0+dmb.st+data+dmbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.0+dmb.st+data+dsbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.0+dsb.st+addr+dmbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.0+dsb.st+addr+dsbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.0+dsb.st+ctrl+dmbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.0+dsb.st+ctrl+dsbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.0+dsb.st+ctrlisb+dmbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.0+dsb.st+ctrlisb+dsbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.0+dsb.st+data+dmbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.0+dsb.st+data+dsbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dmb+dmb.st+addrAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dmb+dmb.st+ctrlisbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dmb+dsb.st+addrAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dmb+dsb.st+ctrlisbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dmb.st+dmb+addrAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dmb.st+dmb+ctrlisbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dmb.st+dmb+dmbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dmb.st+dmb+dsbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dmb.st+dmb.st+addrAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dmb.st+dmb.st+ctrlisbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dmb.st+dmb.st+dmbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dmb.st+dmb.st+dsbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dmb.st+dsb+addrAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dmb.st+dsb+ctrlisbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dmb.st+dsb+dmbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dmb.st+dsb+dsbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dmb.st+dsb.st+addrAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dmb.st+dsb.st+ctrlisbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dmb.st+dsb.st+dmbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dmb.st+dsb.st+dsbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dsb+dmb.st+addrAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dsb+dmb.st+ctrlisbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dsb+dsb.st+addrAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dsb+dsb.st+ctrlisbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dsb.st+dmb+addrAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dsb.st+dmb+ctrlisbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dsb.st+dmb+dmbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dsb.st+dmb+dsbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dsb.st+dmb.st+addrAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dsb.st+dmb.st+ctrlisbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dsb.st+dmb.st+dmbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dsb.st+dmb.st+dsbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dsb.st+dsb+addrAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dsb.st+dsb+ctrlisbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dsb.st+dsb+dmbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dsb.st+dsb+dsbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dsb.st+dsb.st+addrAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dsb.st+dsb.st+ctrlisbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dsb.st+dsb.st+dmbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.3+dsb.st+dsb.st+dsbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.4+dmb.st+dmb+dmbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.4+dmb.st+dmb+dsbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.4+dmb.st+dsb+dmbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.4+dmb.st+dsb+dsbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.4+dsb.st+dmb+dmbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.4+dsb.st+dmb+dsbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.4+dsb.st+dsb+dmbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.4+dsb.st+dsb+dsbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.5+dmb.st+dmb+dmbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.5+dmb.st+dmb+dsbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.5+dmb.st+dmb.st+dmbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.5+dmb.st+dmb.st+dsbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.5+dmb.st+dsb+dmbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.5+dmb.st+dsb+dsbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.5+dmb.st+dsb.st+dmbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.5+dmb.st+dsb.st+dsbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.5+dsb.st+dmb+dmbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.5+dsb.st+dmb+dsbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.5+dsb.st+dmb.st+dmbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.5+dsb.st+dmb.st+dsbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.5+dsb.st+dsb+dmbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.5+dsb.st+dsb+dsbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.5+dsb.st+dsb.st+dmbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen
Z6.5+dsb.st+dsb.st+dsbAllowForbidNo, 0/3.4GNo, 0/11GNo, 0/3.1GNo, 0/2.3G
        Allow unseenAllow unseenAllow unseenAllow unseen

Less behaviours

There is no such test

This document was translated from LATEX by HEVEA.