## Data-Dependent Fail-First (not Fail/Fault-First)
Not to be confused with Fail/Fault First, Data-Fail-First performs an
-additional check on the data into a Condition Register Field and if a test on
-the CR Field fails then VL is truncated and further looping terminates.
-This is precisely the same as Arithmetic Data-Dependent Fail-First, the
-only difference being that the result comes from the LD/ST.
+additional check on the data into a Condition Register Field and if a test
+on the CR Field fails then VL is truncated and further looping terminates.
+This is precisely the same as Arithmetic Data-Dependent Fail-First,
+the only difference being that the result comes from the LD/ST.
In the case of Store operations there is a quirk when VLi (VL inclusive
is "Valid") is clear. Bear in mind the criteria is that the truncated
-Vector of results,
-when VLi is clear, must all pass the "test", but when VLi is set the
-*current failed test* is permitted to be included. Thus, the actual
-update (store) to Memory is **not permitted to take place** should the
-test fail. Therefore, on testing the value to be stored, and after updating
-the corresponding CR Field Element, when VLi=0 and finding that the
-test fails the Memory store must **not** occur.
+Vector of results, when VLi is clear, must all pass the "test", but when
+VLi is set the *current failed test* is permitted to be included. Thus,
+the actual update (store) to Memory is **not permitted to take place**
+should the test fail. Therefore, on testing the value to be stored,
+and after updating the corresponding CR Field Element, when VLi=0 and
+finding that the test fails the Memory store must **not** occur.
Additionally, when VLi=0 and a test fails then RA does **not** receive a
copy of the Effective Address. Hardware implementations with Out-of-Order
Micro-Architectures should use speculative Shadow-Hold and Cancellation
when the test fails.
-By contrast if VLi=1
-and the test fails, Store may proceed *and then* looping terminates.
-In this way, when non-Inclusive, the Vector of Truncated results contains
-only Stores that passed the test (and RA=EA updates if any), and when Inclusive the Vector of
-Truncated results contains the first-failed data.
+By contrast if VLi=1 and the test fails, Store may proceed *and then*
+looping terminates. In this way, when non-Inclusive, the Vector of
+Truncated results contains only Stores that passed the test (and RA=EA
+updates if any), and when Inclusive the Vector of Truncated results
+contains the first-failed data.
-Below is an example of loading the starting addresses of Linked-List nodes.
-If VLi=1 it will load the NULL pointer into the Vector of results.
+Below is an example of loading the starting addresses of Linked-List
+nodes. If VLi=1 it will load the NULL pointer into the Vector of results.
If however VLi=0 it will *exclude* the NULL pointer by truncating VL to
one Element earlier.