(no commit message)
authorlkcl <lkcl@web>
Mon, 19 Jun 2023 11:06:40 +0000 (12:06 +0100)
committerIkiWiki <ikiwiki.info>
Mon, 19 Jun 2023 11:06:40 +0000 (12:06 +0100)
openpower/sv/po9_encoding/discussion.mdwn

index 78f25651385b30b859c1090758a400ee8ced2d32..aa2993fc121f63ab4fe8963e8292bb62fd8c7634 100644 (file)
@@ -279,7 +279,9 @@ test.  Only EXT000-063 is not by a "process of elimination" (if ... return True)
 # alternative 32-64 encoding (4) **current**
 
 this idea gets even simpler. the 55-bit area is eliminated and may only be
-reintroduced by sacrificing parts of EXT200-263.
+reintroduced by sacrificing parts of EXT200-263. however doing so **WILL** damage
+high-performance decode
+
 
 ```
 |0-5| 6-29   |30 31|32-37   | 38-663 | Description      |
@@ -308,22 +310,17 @@ test.  Only EXT000-063 is not by a "process of elimination" (if ... return True)
 
 ```
     if PO1                   return 64
-    elif not PO9             return 32
-    elif Word[30:31] = 0b00  return 32
-    else                     return 64
+    elif PO9                 return 64
+    else                     return 32
 ```
 
 **EXT232-263:**
 
 ```
     if not PO9                return False
-    # eliminate EXT900
-    if Word[30:31] == 0b00    return False
     # eliminate EXT0xx
     if Word[31] == 0b1        return False
-    # eliminate EXT900 and reserved areas
-    if Word[33:37] != 0b10001 return False
-    # 
+    # remaining is EXT2xx
     return True
 ```
 
@@ -334,34 +331,46 @@ test.  Only EXT000-063 is not by a "process of elimination" (if ... return True)
 ```
     if PO1                     return False # or other reserved
     if not PO9                 return True  # prefixed needs more
-    # eliminate EXT900
-    if Word[30:31] =  0b00     return False
-    # eliminate Prefixed-EXT900, RESERVED and EXT200
+    # eliminate EXT2xx
     if Word[31]    =  0b0      return False
-    # eliminate 32-bit Unvec in 64b area
-    if Word[30:31] =  0b01 and
-       Word[6:29 ] =  0x000000 return False
+    # remaining is EXT0xx
     return True
 ```
 
 **SVP64**:
 
+|0-5| 6-29   |30 31|32-37   | 38-663 | Description      |
+|---|--------|-----|--------|--------|------------------|
+|PO9| xxxx   | x x | 010001 |  ////  | RESERVED         |
+|PO9| xxxx   | x x | 000001 |  ////  | RESERVED         |
+|PO9| !ZERO  | 1 1 |  !PO9  |     xxxx        | SSingle:EXT232-263 |
+|PO9|  0000  | 1 1 |  !PO9  |     xxxx        | Scalar EXT232-263  |
+|PO9|  SVRM  | 1 0 |  !PO9  |     xxxx        | SVP64:EXT232-263   |
+|PO9|  0000  | 0 1 | Defined Word-instruction | 32-bit EXT300-363  |
+|PO9| !ZERO  | 0 1 | Defined Word-instruction | SSingle:EXT000-063 |
+|PO9|  SVRM  | 0 0 | Defined Word-instruction | SVP64:EXT000-063   |
 ```
     # easy-elimination, first
     if not PO9                 return False
-    if Word[30]    =  0b0      return False
-    # eliminate anything not SVP64:EXT900
-    if Word[30:31] =  0b10 and
-       Word[33:37] = 0b10001 and
-       Word[62:63] != 0b01    return False
-    # eliminate anything not SVP64:EXT200-231
-    if Word[31:32] =  0b00    return False
-    # all remaining combinations are SVP64:EXTnnn
+    # eliminate anything not SVP64:
+    if Word[31]    =  0b1      return False
+    # all remaining are SVP64:EXT0xx/EXT2xx
     return True
 ```
 
 **SVP64Single**:
 
+|0-5| 6-29   |30 31|32-37   | 38-663 | Description      |
+|---|--------|-----|--------|--------|------------------|
+|PO9| xxxx   | x x | 010001 |  ////  | RESERVED         |
+|PO9| xxxx   | x x | 000001 |  ////  | RESERVED         |
+|PO9| !ZERO  | 1 1 |  !PO9  |     xxxx        | SSingle:EXT232-263 |
+|PO9|  0000  | 1 1 |  !PO9  |     xxxx        | Scalar EXT232-263  |
+|PO9|  SVRM  | 1 0 |  !PO9  |     xxxx        | SVP64:EXT232-263   |
+|PO9|  0000  | 0 1 | Defined Word-instruction | 32-bit EXT300-363  |
+|PO9| !ZERO  | 0 1 | Defined Word-instruction | SSingle:EXT000-063 |
+|PO9|  SVRM  | 0 0 | Defined Word-instruction | SVP64:EXT000-063   |
+
 ```
     # easy-elimination, first
     if not PO9                 return False