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.
| 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> | <small>`10110 01101`</small><br> | <small>`10110 01110`</small><br> | <small>`10110 01111`</small><br> |
+| 10111 | <small>`10111 01100`</small><br> | <small>`10111 01101`</small><br> | <small>`10111 01110`</small><br> | <small>`10111 01111`</small><br> |
| XO LSB half →<br> XO MSB half ↓ | 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> | <small>`11000 01111`</small><br> |
| 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> | <small>`11011 01111`</small><br> |
+| 11100 | <small>`11100 01100`</small><br>fexp2(s) (draft) | <small>`11100 01101`</small><br>flog2(s) (draft) | <small>`11100 01110`</small><br> | <small>`11100 01111`</small><br> |
| 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> | <small>`11111 01111`</small><br> |
+
+| XO LSB half →<br> XO MSB half ↓ | 10000 | 10001 | 10010 | 10011 |
+|-----------------------------------------------|----------------------------------------------------|----------------------------------------|-------------------------------------------|----------------------------------------|
+| ////0 | <small>`....0 10000`</small><br>fminmax(s) (draft) | <small>`////0 10001`</small><br> | <small>`////0 10010`</small><br>(fdiv(s)) | <small>`////0 10011`</small><br> |
+| ////1 | <small>`////1 10000`</small><br> | <small>`////1 10001`</small><br> | <small>`////1 10010`</small><br>(fdiv(s)) | <small>`////1 10011`</small><br> |
# DRAFT List of 2-arg opcodes
| -- | -- | --- | --- | ---------- |--| ---- | ------- |
| 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:
| fpowr(s) | x<sup>y</sup> (x >= 0) | 11111 01100 | FRB |
| frootn(s) | <sup>n</sup>√x (n ∈ ℤ) | 11011 01101 | RB |
| fhypot(s) | √(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 |
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\*\*| |))"
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:
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():