X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=simple_v_extension%2Fappendix.mdwn;h=c29044cfea6b9772be22c43d9b8dc3d968f819ee;hb=37181e5b518787335694439350f8d7a6d4a5d444;hp=a951d4450663125307b76c5d5feff09a609c16c3;hpb=700d534cf47ddc39014ee6bf76f3cbac6733d411;p=libreriscv.git diff --git a/simple_v_extension/appendix.mdwn b/simple_v_extension/appendix.mdwn index a951d4450..c29044cfe 100644 --- a/simple_v_extension/appendix.mdwn +++ b/simple_v_extension/appendix.mdwn @@ -1,4 +1,8 @@ -# Simple-V (Parallelism Extension Proposal) Appendix +[[!oldstandards]] + +# Simple-V (Parallelism Extension Proposal) Appendix (OBSOLETE) + +**OBSOLETE** * Copyright (C) 2017, 2018, 2019 Luke Kenneth Casson Leighton * Status: DRAFTv0.6 @@ -194,7 +198,9 @@ comprehensive in its effect on instructions. Branch operations are augmented slightly to be a little more like FP Compares (FEQ, FNE etc.), by permitting the cumulation (and storage) of multiple comparisons into a register (taken indirectly from the predicate -table). As such, "ffirst" - fail-on-first - condition mode can be enabled. +table) and enhancing them to branch "consensually" depending on *multiple* +tests. "ffirst" - fail-on-first - condition mode can also be enabled, +to terminate the comparisons early. See ffirst mode in the Predication Table section. There are two registers for the comparison operation, therefore there @@ -232,6 +238,13 @@ element tests must be performed (and the result optionally stored in the result mask), with a "post-analysis" phase carried out which checks whether to branch. +Note also that whilst it may seem excessive to have all four (because +conditional comparisons may be inverted by swapping src1 and src2), +data-dependent fail-on-first is *not* invertible and *only* terminates +on first zero-condition encountered. Additionally it may be inconvenient +to have to swap the predicate registers associated with src1 and src2, +because this involves a new VBLOCK Context. + ### Standard Branch Branch operations use standard RV opcodes that are reinterpreted to @@ -1087,7 +1100,7 @@ Note: is also marked as scalar, this is how the compatibility with standard RV LOAD/STORE is preserved by this algorithm. -### Example Tables showing LOAD elements +### Example Tables showing LOAD elements This section contains examples of vectorised LOAD operations, showing how the two stage process works (three if zero/sign-extension is included). @@ -1447,7 +1460,7 @@ circumstances it is perfectly fine to simply have the lanes "inactive" for predicated elements, even though it results in less than 100% ALU utilisation. -## Twin-predication (based on source and destination register) +## Twin-predication (based on source and destination register) Twin-predication is not that much different, except that that the source is independently zero-predicated from the destination.