(no commit message)
authorlkcl <lkcl@web>
Wed, 26 Apr 2023 06:50:41 +0000 (07:50 +0100)
committerIkiWiki <ikiwiki.info>
Wed, 26 Apr 2023 06:50:41 +0000 (07:50 +0100)
openpower/sv/rfc/ls014.mdwn

index 4833e4f38a56c2c2c3c846b590d72867be92a3ad..82050215cf89b6dc2e3dd19cf3a0a5058d682512 100644 (file)
@@ -87,6 +87,41 @@ Add the following entries to:
 * Book I 3.3.13 Fixed-Point Logical Instructions
 * Book I 1.6.1 and 1.6.2
 
+----------
+
+\newpage{}
+
+# Rationale
+
+## bmask
+
+Based on RVV masked set-before-first, set-after-first etc.
+and Intel and AMD Bitmanip instructions made generalised then
+advanced further to include masks, this is a single instruction
+covering 24 individual instructions in other ISAs.
+
+The patterns within the pseudocode for AMD TBM and x86 BMI1 are
+as follows:
+
+* first pattern A: two options `x` or `~x`
+* second pattern B: three options `|` `&` or `^`
+* third pattern C: four options `x+1`, `x-1`, `~(x+1)` or `(~x)+1`
+
+Thus it makes sense to create a single instruction
+that covers all of these.  A crucial addition that is essential
+for Scalable Vector usage as Predicate Masks, is the second mask parameter
+(RB).  The additional paramater, L, if set, will leave bits of RA masked
+by RB unaltered, otherwise those bits are set to zero. Note that when `RB=0`
+then instead of reading from the register file the mask is set to all ones.
+
+
+Executable pseudocode demo:
+
+```
+[[!inline pages="openpower/sv/bmask.py" quick="yes" raw="yes" ]]
+```
+
+
 ----------
 
 \newpage{}