move fminmax[s] to XO ....0 10000
authorJacob Lifshay <programmerjake@gmail.com>
Fri, 21 Apr 2023 02:31:53 +0000 (19:31 -0700)
committerJacob Lifshay <programmerjake@gmail.com>
Fri, 21 Apr 2023 02:31:53 +0000 (19:31 -0700)
openpower/power_trans_ops.mdwn
openpower/power_trans_ops_copy_from_PO59_table.py

index a2f51f04ca2a467236546bb6d563cf30329925c5..babf0130fcdfb0b25dfe25939d570ed9ca2375eb 100644 (file)
@@ -2,8 +2,8 @@
 
 Power ISA v3.1B opcodes extracted from:
 
-* Power ISA v3.1B Appendix D Table 23 sheet 2 of 4 page 1391
-* Power ISA v3.1B Appendix D Table 25 sheet 2 of 4 page 1399
+* Power ISA v3.1B Appendix D Table 23 sheet 2/3 of 4 page 1391/1392
+* Power ISA v3.1B Appendix D Table 25 sheet 2/3 of 4 page 1399/1400
 
 Parenthesized entries are not part of fptrans.
 
@@ -19,19 +19,24 @@ Parenthesized entries are not part of fptrans.
 | 10011                                         | <small>`10011 01100`</small><br>fcos(s) (draft)      | <small>`10011 01101`</small><br>ftan(s) (draft)   | <small>`10011 01110`</small><br>facos(s) (draft)     | <small>`10011 01111`</small><br>fatan(s) (draft)   |
 | 10100                                         | <small>`10100 01100`</small><br>frecip(s) (draft)    | <small>`10100 01101`</small><br>fsinh(s) (draft)  | <small>`10100 01110`</small><br>fhypot(s) (draft)    | <small>`10100 01111`</small><br>fasinh(s) (draft)  |
 | 10101                                         | <small>`10101 01100`</small><br>fcosh(s) (draft)     | <small>`10101 01101`</small><br>ftanh(s) (draft)  | <small>`10101 01110`</small><br>facosh(s) (draft)    | <small>`10101 01111`</small><br>fatanh(s) (draft)  |
-| 10110                                         | <small>`10110 01100`</small><br>fminnum08(s) (draft) | <small>`10110 01101`</small><br>fmin19(s) (draft) | <small>`10110 01110`</small><br>fminnum19(s) (draft) | <small>`10110 01111`</small><br>fminc(s) (draft)   |
-| 10111                                         | <small>`10111 01100`</small><br>fmaxnum08(s) (draft) | <small>`10111 01101`</small><br>fmax19(s) (draft) | <small>`10111 01110`</small><br>fmaxnum19(s) (draft) | <small>`10111 01111`</small><br>fmaxc(s) (draft)   |
+| 10110                                         | <small>`10110 01100`</small><br>&nbsp;               | <small>`10110 01101`</small><br>&nbsp;            | <small>`10110 01110`</small><br>&nbsp;               | <small>`10110 01111`</small><br>&nbsp;             |
+| 10111                                         | <small>`10111 01100`</small><br>&nbsp;               | <small>`10111 01101`</small><br>&nbsp;            | <small>`10111 01110`</small><br>&nbsp;               | <small>`10111 01111`</small><br>&nbsp;             |
 
 | XO LSB half &#x2192;<br> XO MSB half &#x2193; | 01100                                              | 01101                                              | 01110                                                   | 01111                                                   |
 |-----------------------------------------------|----------------------------------------------------|----------------------------------------------------|---------------------------------------------------------|---------------------------------------------------------|
-| 11000                                         | <small>`11000 01100`</small><br>fexp2m1(s) (draft) | <small>`11000 01101`</small><br>flog2p1(s) (draft) | <small>`11000 01110`</small><br>fminmagnum08(s) (draft) | <small>`11000 01111`</small><br>fmaxmagnum08(s) (draft) |
+| 11000                                         | <small>`11000 01100`</small><br>fexp2m1(s) (draft) | <small>`11000 01101`</small><br>flog2p1(s) (draft) | <small>`11000 01110`</small><br>&nbsp;                  | <small>`11000 01111`</small><br>&nbsp;                  |
 | 11001                                         | <small>`11001 01100`</small><br>fexpm1(s) (draft)  | <small>`11001 01101`</small><br>flogp1(s) (draft)  | <small>`11001 01110`</small><br>(fctid)                 | <small>`11001 01111`</small><br>(fctidz)                |
 | 11010                                         | <small>`11010 01100`</small><br>fexp10m1(s) (draft)| <small>`11010 01101`</small><br>flog10p1(s) (draft)| <small>`11010 01110`</small><br>(fcfid(s))              | <small>`11010 01111`</small><br>fmod(s) (draft)         |
-| 11011                                         | <small>`11011 01100`</small><br>fpown(s) (draft)   | <small>`11011 01101`</small><br>frootn(s) (draft)  | <small>`11011 01110`</small><br>fminmag19(s) (draft)    | <small>`11011 01111`</small><br>fmaxmag19(s) (draft)    |
-| 11100                                         | <small>`11100 01100`</small><br>fexp2(s) (draft)   | <small>`11100 01101`</small><br>flog2(s) (draft)   | <small>`11100 01110`</small><br>fminmagnum19(s) (draft) | <small>`11100 01111`</small><br>fmaxmagnum19(s) (draft) |
+| 11011                                         | <small>`11011 01100`</small><br>fpown(s) (draft)   | <small>`11011 01101`</small><br>frootn(s) (draft)  | <small>`11011 01110`</small><br>&nbsp;                  | <small>`11011 01111`</small><br>&nbsp;                  |
+| 11100                                         | <small>`11100 01100`</small><br>fexp2(s) (draft)   | <small>`11100 01101`</small><br>flog2(s) (draft)   | <small>`11100 01110`</small><br>&nbsp;                  | <small>`11100 01111`</small><br>&nbsp;                  |
 | 11101                                         | <small>`11101 01100`</small><br>fexp(s) (draft)    | <small>`11101 01101`</small><br>flog(s) (draft)    | <small>`11101 01110`</small><br>(fctidu)                | <small>`11101 01111`</small><br>(fctiduz)               |
 | 11110                                         | <small>`11110 01100`</small><br>fexp10(s) (draft)  | <small>`11110 01101`</small><br>flog10(s) (draft)  | <small>`11110 01110`</small><br>(fcfidu(s))             | <small>`11110 01111`</small><br>fremainder(s) (draft)   |
-| 11111                                         | <small>`11111 01100`</small><br>fpowr(s) (draft)   | <small>`11111 01101`</small><br>fpow(s) (draft)    | <small>`11111 01110`</small><br>fminmagc(s) (draft)     | <small>`11111 01111`</small><br>fmaxmagc(s) (draft)     |
+| 11111                                         | <small>`11111 01100`</small><br>fpowr(s) (draft)   | <small>`11111 01101`</small><br>fpow(s) (draft)    | <small>`11111 01110`</small><br>&nbsp;                  | <small>`11111 01111`</small><br>&nbsp;                  |
+
+| XO LSB half &#x2192;<br> XO MSB half &#x2193; | 10000                                              | 10001                                  | 10010                                     | 10011                                  |
+|-----------------------------------------------|----------------------------------------------------|----------------------------------------|-------------------------------------------|----------------------------------------|
+| ////0                                         | <small>`....0 10000`</small><br>fminmax(s) (draft) | <small>`////0 10001`</small><br>&nbsp; | <small>`////0 10010`</small><br>(fdiv(s)) | <small>`////0 10011`</small><br>&nbsp; |
+| ////1                                         | <small>`////1 10000`</small><br>&nbsp;             | <small>`////1 10001`</small><br>&nbsp; | <small>`////1 10010`</small><br>(fdiv(s)) | <small>`////1 10011`</small><br>&nbsp; |
 
 # DRAFT List of 2-arg opcodes
 
@@ -42,6 +47,7 @@ and 59 for half-width (ending in s).
 | -- | -- | --- | --- | ----------  |--| ----           | ------- |
 | NN |FRT | FRA | FRB | 1xxxx011xx  |Rc| transcendental | X-Form  |
 | NN |FRT | FRA | RB  | 1xxxx011xx  |Rc| transcendental | X-Form  |
+| NN |FRT | FRA | FRB | xxxxx10000  |Rc| transcendental | X-Form  |
 
 Recommended 10-bit XO assignments:
 
@@ -54,22 +60,7 @@ Recommended 10-bit XO assignments:
 | fpowr(s)        | x<sup>y</sup> (x >= 0)                  | 11111 01100     | FRB         |
 | frootn(s)       | <sup>n</sup>&#x221A;x (n &in; &#x2124;) | 11011 01101     | RB          |
 | fhypot(s)       | &#x221A;(x<sup>2</sup> + y<sup>2</sup>) | 10100 01110     | FRB         |
-| fminnum08(s)    | IEEE 754-2008 minNum                    | 10110 01100     | FRB         |
-| fmaxnum08(s)    | IEEE 754-2008 maxNum                    | 10111 01100     | FRB         |
-| fmin19(s)       | IEEE 754-2019 minimum                   | 10110 01101     | FRB         |
-| fmax19(s)       | IEEE 754-2019 maximum                   | 10111 01101     | FRB         |
-| fminnum19(s)    | IEEE 754-2019 minimumNumber             | 10110 01110     | FRB         |
-| fmaxnum19(s)    | IEEE 754-2019 maximumNumber             | 10111 01110     | FRB         |
-| fminc(s)        | C ternary-op minimum                    | 10110 01111     | FRB         |
-| fmaxc(s)        | C ternary-op maximum                    | 10111 01111     | FRB         |
-| fminmagnum08(s) | IEEE 754-2008 minNumMag                 | 11000 01110     | FRB         |
-| fmaxmagnum08(s) | IEEE 754-2008 maxNumMag                 | 11000 01111     | FRB         |
-| fminmag19(s)    | IEEE 754-2019 minimumMagnitude          | 11011 01110     | FRB         |
-| fmaxmag19(s)    | IEEE 754-2019 maximumMagnitude          | 11011 01111     | FRB         |
-| fminmagnum19(s) | IEEE 754-2019 minimumMagnitudeNumber    | 11100 01110     | FRB         |
-| fmaxmagnum19(s) | IEEE 754-2019 maximumMagnitudeNumber    | 11100 01111     | FRB         |
-| fminmagc(s)     | C ternary-op minimum magnitude          | 11111 01110     | FRB         |
-| fmaxmagc(s)     | C ternary-op maximum magnitude          | 11111 01111     | FRB         |
+| fminmax(s)      | min/max                                 | ....0 10000     | FRB         |
 | fmod(s)         | modulus                                 | 11010 01111     | FRB         |
 | fremainder(s)   | IEEE 754 remainder                      | 11110 01111     | FRB         |
 
index f3a25c1a86b5ffdf43a61a2391039a54a59d0987..e41166c1ce94f61057e429b814fa11d577a3cf49 100644 (file)
@@ -87,22 +87,23 @@ def process(lr):
             row = line_parts[1].strip()
             if row.startswith('`') and row.endswith('`'):
                 row = row[1:-1].strip()
-            assert row.lstrip(" 01") == "", (f"invalid table line header-cell "
-                                             f"contents -- must be a "
-                                             f"binary string: {row}")
+            assert row.lstrip(" 01/.") == "", (
+                f"invalid table line header-cell contents -- must be a "
+                f"binary string: {row}")
             for i, column in zip(columns_range, columns):
                 cell = line_parts[i]
                 if cell.strip() == "":
                     continue
                 match = re.fullmatch(
-                    r" *<small> *` *(?P<xo>[01][01 ]*[01]) *` *</small>"
+                    r" *<small> *` *(?P<xo>[01./][01 ./]*[01./]) *` *</small>"
                     r" *<br/?> *(?P<mnemonic>[a-zA-Z0-9_.][a-zA-Z0-9_.()]*)?"
-                    r"(?(mnemonic)|(?:\([a-zA-Z0-9_.()]+\)|\*\*TBD\*\*|))"
+                    r"(?(mnemonic)|(?:\([a-zA-Z0-9_.()]+\)|"
+                    r"\*\*TBD\*\*|&nbsp;|))"
                     r"(?: *\(draft\))? *", cell)
                 assert match is not None, f"invalid table cell: {cell!r}"
                 xo, mnemonic = match.group("xo", "mnemonic")
-                shrunk_xo = xo.replace(" ", "")
-                expected_xo = (row + column).replace(" ", "")
+                shrunk_xo = xo.replace(" ", "").replace('.', '/')
+                expected_xo = (row + column).replace(" ", "").replace('.', '/')
                 assert shrunk_xo == expected_xo, \
                     f"incorrect XO: found {shrunk_xo} expected {expected_xo}"
                 if mnemonic is None:
@@ -138,7 +139,7 @@ def process(lr):
             yield line
             line, lineno = lr.read()
 
-        for _ in range(2):
+        for _ in range(3):
             yield from parse_single_mnemonic_to_opcode_map()
 
     def skip_table():