From a0e42d18228ab48b344944a6d4e25b2fb9d9d952 Mon Sep 17 00:00:00 2001 From: lkcl Date: Mon, 8 May 2023 12:13:18 +0100 Subject: [PATCH] --- openpower/sv/ldst.mdwn | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/openpower/sv/ldst.mdwn b/openpower/sv/ldst.mdwn index 53c4ce0ec..7c05649ce 100644 --- a/openpower/sv/ldst.mdwn +++ b/openpower/sv/ldst.mdwn @@ -494,16 +494,22 @@ copy of the Effective Address. Hardware implementations with Out-of-Order Micro-Architectures should use speculative Shadow-Hold and Cancellation (or other Transactional Rollback mechanism) when the test fails. +* **Load, VLi=0**: perform the Memory Load, do not put the result into the regfile yet (or EA into RA). Test the Loaded data: if fail do not store the Load in the register file (or EA into RA). Otherwise proceed with updating regfiles. VL is truncated to "only elements that passed the test" +* **Store, VLi=0**: even before the Store takes place, perform the test on the data to *be* stored. If fail do not proceed with the Store at all. VL is truncated to "only elements that passed the test" + **Load/Store Data-Dependent Fail-First, VLi=1** By contrast if VLi=1 and the test fails, the Store may proceed *and then* looping terminates. In this way, when Inclusive the Vector of Truncated results contains the first-failed data (including RA on Updates) +* **Load, VLi=1**: perform the Memory Load, complete it in full (including EA into RA). Test the Loaded data: if fail then VL is truncated to "elements tested". +* **Store, VLi=0**: same as Load. Perform the Store in full and after-the-fact carry out the test of the original data requested to be stored. If fail then VL is truncated to "elements tested". + 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. +one Element earlier (only loading non-NULL data into registers). *Programmer's Note: by also setting the RC1 qualifier as well as setting VLi=1 it is possible to establish a Predicate Mask such that the first -- 2.30.2