Address and data dependencies

Contents

This note illustrates that address and data dependencies may behave differently. It is reminded that an address dependency occurs when the effective address of a store depends upon the value read by a previous load instruction; while a data dependency occurs when the the value stored by a store instruction depends upon the value. The difference is observable on ARM hardware only, as the tests derive from the LB and S+ffence+po idioms, which are not observed on Power.

ARM

There are 9 such tests
 ModelARMRelax-Addr-PoRTegra2APQ8060A5XA6XExynos5250Tegra3Exynos4412Exynos5410APQ8064
S+dmb+poAllowOk, 22M/50GAllowOk, 306k/5.2GOk, 4.5k/3.6GOk, 3.1M/5.5GNo, 0/13GNo, 0/8.3GOk, 343k/1.2GOk, 18M/7.0GNo, 0/6.3GOk, 1/400M
       Allow unseenAllow unseen  Allow unseen 
DataRWAllowOk, 65k/77GAllowOk, 5.9k/23GNo, 0/9.2GOk, 13k/5.0GNo, 0/12GNo, 0/8.3GOk, 15k/4.3GOk, 31k/7.0GNo, 0/6.3GOk, 361/2.4G
     Allow unseen Allow unseenAllow unseen  Allow unseen 
AddrRWForbidOk, 0/122GForbidOk, 0/36GOk, 0/9.1GOk, 0/8.2GOk, 0/12GOk, 0/8.3GOk, 0/14GOk, 0/22GOk, 0/6.3GOk, 0/4.5G
DataWWAllowOk, 224k/77GAllowOk, 6.6k/22GNo, 0/9.2GOk, 30k/4.9GNo, 0/12GNo, 0/8.3GOk, 200/4.2GOk, 185k/7.0GNo, 0/6.3GOk, 2.5k/2.4G
     Allow unseen Allow unseenAllow unseen  Allow unseen 
AddrWWForbidOk, 0/111GForbidOk, 0/25GOk, 0/9.2GOk, 0/8.2GOk, 0/12GOk, 0/8.3GOk, 0/14GOk, 0/22GOk, 0/6.3GOk, 0/4.5G
LBAllowOk, 154M/51GAllowOk, 1.6M/5.1GOk, 4.9k/3.3GOk, 45M/6.3GNo, 0/14GNo, 0/8.3GOk, 19M/1.2GOk, 89M/7.0GNo, 0/6.3GOk, 154/400M
       Allow unseenAllow unseen  Allow unseen 
LB+datas+WWAllowOk, 506k/90GAllowOk, 46k/23GNo, 0/25GOk, 182k/5.6GNo, 0/13GNo, 0/8.3GOk, 526/1.8GOk, 277k/7.0GNo, 0/6.3GOk, 2/400M
     Allow unseen Allow unseenAllow unseen  Allow unseen 
LB+addrs+RWForbidOk, 0/146GForbidOk, 0/31GOk, 0/23GOk, 0/6.9GOk, 0/13GOk, 0/8.3GOk, 0/30GOk, 0/22GOk, 0/6.3GOk, 0/4.5G
LB+addrs+WWForbidOk, 0/152GForbidOk, 0/33GOk, 0/25GOk, 0/9.0GOk, 0/13GOk, 0/8.3GOk, 0/30GOk, 0/22GOk, 0/6.3GOk, 0/4.5G

The above table lists some tests that differ only in some dependencies from one load to one store: the dependency being either an address dependency or a data dependency. Names should help to identify the matching tests. For instance LB+addrs+WW matches LB+datas+WW.

Then, one sees that tests with a data dependency are allowed by the model and observed on hardware; while tests with an address dependency are forbidden by the model and not observed on hardware.

Power

There are 9 such tests
 ModelPowerPowerG5Power6Power7
S+sync+poAllowNo, 0/108GNo, 0/8.0GNo, 0/18GNo, 0/81G
  Allow unseenAllow unseenAllow unseenAllow unseen
DataRWAllowNo, 0/287GNo, 0/35GNo, 0/650MNo, 0/252G
  Allow unseenAllow unseenAllow unseenAllow unseen
AddrRWForbidOk, 0/287GOk, 0/35GOk, 0/650MOk, 0/252G
DataWWAllowNo, 0/287GNo, 0/35GNo, 0/650MNo, 0/252G
  Allow unseenAllow unseenAllow unseenAllow unseen
AddrWWForbidOk, 0/287GOk, 0/35GOk, 0/650MOk, 0/252G
LBAllowNo, 0/362GNo, 0/13GNo, 0/44GNo, 0/305G
  Allow unseenAllow unseenAllow unseenAllow unseen
LB+datas+WWAllowNo, 0/296GNo, 0/35GNo, 0/9.2GNo, 0/252G
  Allow unseenAllow unseenAllow unseenAllow unseen
LB+addrs+RWForbidOk, 0/186GOk, 0/9.2GOk, 0/6.0GOk, 0/171G
LB+addrs+WWForbidOk, 0/295GOk, 0/35GOk, 0/8.7GOk, 0/252G

This document was translated from LATEX by HEVEA.