Opcode Tables for PO=59/63 XO=1---011--
Power ISA v3.1B opcodes extracted from:
- 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.
- Entries whose mnemonic ends in
sare only in PO=59. - Entries whose mnemonic does not end in
sare only in PO=63. - Entries whose mnemonic ends in
(s)are in both PO=59 and PO=63.
| XO LSB half → XO MSB half ↓ |
01100 | 01101 | 01110 | 01111 |
|---|---|---|---|---|
| 10000 | 10000 01100fcbrt(s) (draft) |
10000 01101fsinpi(s) (draft) |
10000 01110fatan2pi(s) (draft) |
10000 01111fasinpi(s) (draft) |
| 10001 | 10001 01100fcospi(s) (draft) |
10001 01101ftanpi(s) (draft) |
10001 01110facospi(s) (draft) |
10001 01111fatanpi(s) (draft) |
| 10010 | 10010 01100frsqrt(s) (draft) |
10010 01101fsin(s) (draft) |
10010 01110fatan2(s) (draft) |
10010 01111fasin(s) (draft) |
| 10011 | 10011 01100fcos(s) (draft) |
10011 01101ftan(s) (draft) |
10011 01110facos(s) (draft) |
10011 01111fatan(s) (draft) |
| 10100 | 10100 01100frecip(s) (draft) |
10100 01101fsinh(s) (draft) |
10100 01110fhypot(s) (draft) |
10100 01111fasinh(s) (draft) |
| 10101 | 10101 01100fcosh(s) (draft) |
10101 01101ftanh(s) (draft) |
10101 01110facosh(s) (draft) |
10101 01111fatanh(s) (draft) |
| 10110 | 10110 01100 |
10110 01101 |
10110 01110 |
10110 01111 |
| 10111 | 10111 01100 |
10111 01101 |
10111 01110 |
10111 01111 |
| XO LSB half → XO MSB half ↓ |
01100 | 01101 | 01110 | 01111 |
|---|---|---|---|---|
| 11000 | 11000 01100fexp2m1(s) (draft) |
11000 01101flog2p1(s) (draft) |
11000 01110(cffpro) (draft) |
11000 01111(ctfpr(s)) (draft) |
| 11001 | 11001 01100fexpm1(s) (draft) |
11001 01101flogp1(s) (draft) |
11001 01110(fctid) |
11001 01111(fctidz) |
| 11010 | 11010 01100fexp10m1(s) (draft) |
11010 01101flog10p1(s) (draft) |
11010 01110(fcfid(s)) |
11010 01111fmod(s) (draft) |
| 11011 | 11011 01100fpown(s) (draft) |
11011 01101frootn(s) (draft) |
11011 01110 |
11011 01111 |
| 11100 | 11100 01100fexp2(s) (draft) |
11100 01101flog2(s) (draft) |
11100 01110(mffpr(s)) (draft) |
11100 01111(mtfpr(s)) (draft) |
| 11101 | 11101 01100fexp(s) (draft) |
11101 01101flog(s) (draft) |
11101 01110(fctidu) |
11101 01111(fctiduz) |
| 11110 | 11110 01100fexp10(s) (draft) |
11110 01101flog10(s) (draft) |
11110 01110(fcfidu(s)) |
11110 01111fremainder(s) (draft) |
| 11111 | 11111 01100fpowr(s) (draft) |
11111 01101fpow(s) (draft) |
11111 01110 |
11111 01111 |
| XO LSB half → XO MSB half ↓ |
10000 | 10001 | 10010 | 10011 |
|---|---|---|---|---|
| ////0 | ....0 10000fminmax (draft) |
////0 10001 |
////0 10010(fdiv(s)) |
////0 10011 |
| ////1 | ////1 10000 |
////1 10001 |
////1 10010(fdiv(s)) |
////1 10011 |
DRAFT List of 2-arg opcodes
These are X-Form, recommended Major Opcode 63 for full-width and 59 for half-width (ending in s).
| 0.5 | 6.10 | 11.15 | 16.20 | 21..30 | 31 | name | Form |
|---|---|---|---|---|---|---|---|
| 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:
| opcode | Description | Major 59 and 63 | bits 16..20 |
|---|---|---|---|
| fatan2(s) | atan2 arc tangent | 10010 01110 | FRB |
| fatan2pi(s) | atan2 arc tangent / π | 10000 01110 | FRB |
| fpow(s) | xy | 11111 01101 | FRB |
| fpown(s) | xn (n ∈ ℤ) | 11011 01100 | RB |
| fpowr(s) | xy (x >= 0) | 11111 01100 | FRB |
| frootn(s) | n√x (n ∈ ℤ) | 11011 01101 | RB |
| fhypot(s) | √(x2 + y2) | 10100 01110 | FRB |
| fminmax | min/max | ....0 10000 | FRB |
| fmod(s) | modulus | 11010 01111 | FRB |
| fremainder(s) | IEEE 754 remainder | 11110 01111 | FRB |
DRAFT List of 1-arg transcendental opcodes
These are X-Form, and are mostly identical in Special Registers Altered to
fsqrt (the exact fp exceptions they can produce differ).
Recommended Major Opcode 63 for full-width and 59 for half-width (ending in s).
Special Registers Altered (FIXME: come up with correct list):
FPRF FR FI FX OX UX XX
VXSNAN VXIMZ VXZDZ
CR1 (if Rc=1)
| 0.5 | 6.10 | 11.15 | 16.20 | 21..30 | 31 | name | Form |
|---|---|---|---|---|---|---|---|
| NN | FRT | /// | FRB | 1xxxx011xx | Rc | transcendental | X-Form |
Recommended 10-bit XO assignments:
| opcode | Description | Major 59 and 63 |
|---|---|---|
| frsqrt(s) | 1 / √x | 10010 01100 |
| fcbrt(s) | ∛x | 10000 01100 |
| frecip(s) | 1 / x | 10100 01100 |
| fexp2m1(s) | 2x - 1 | 11000 01100 |
| flog2p1(s) | log2 (x + 1) | 11000 01101 |
| fexp2(s) | 2x | 11100 01100 |
| flog2(s) | log2 x | 11100 01101 |
| fexpm1(s) | ex - 1 | 11001 01100 |
| flogp1(s) | loge (x + 1) | 11001 01101 |
| fexp(s) | ex | 11101 01100 |
| flog(s) | loge x | 11101 01101 |
| fexp10m1(s) | 10x - 1 | 11010 01100 |
| flog10p1(s) | log10 (x + 1) | 11010 01101 |
| fexp10(s) | 10x | 11110 01100 |
| flog10(s) | log10 x | 11110 01101 |
DRAFT List of 1-arg trigonometric opcodes
These are X-Form, and are mostly identical in Special Registers Altered to
fsqrt (the exact fp exceptions they can produce differ).
Recommended Major Opcode 63 for full-width and 59 for half-width (ending in s)
Special Registers Altered:
FPRF FR FI FX OX UX XX
VXSNAN VXIMZ VXZDZ
CR1 (if Rc=1)
| 0.5 | 6.10 | 11.15 | 16.20 | 21..30 | 31 | name | Form |
|---|---|---|---|---|---|---|---|
| NN | FRT | /// | FRB | 1xxxx011xx | Rc | trigonometric | X-Form |
Recommended 10-bit XO assignments:
| opcode | Description | Major 59 and 63 |
|---|---|---|
| fsin(s) | sin (radians) | 10010 01101 |
| fcos(s) | cos (radians) | 10011 01100 |
| ftan(s) | tan (radians) | 10011 01101 |
| fasin(s) | arcsin (radians) | 10010 01111 |
| facos(s) | arccos (radians) | 10011 01110 |
| fatan(s) | arctan (radians) | 10011 01111 |
| fsinpi(s) | sin(π * x) | 10000 01101 |
| fcospi(s) | cos(π * x) | 10001 01100 |
| ftanpi(s) | tan(π * x) | 10001 01101 |
| fasinpi(s) | arcsin(x) / π | 10000 01111 |
| facospi(s) | arccos(x) / π | 10001 01110 |
| fatanpi(s) | arctan(x) / π | 10001 01111 |
| fsinh(s) | hyperbolic sin | 10100 01101 |
| fcosh(s) | hyperbolic cos | 10101 01100 |
| ftanh(s) | hyperbolic tan | 10101 01101 |
| fasinh(s) | inverse hyperbolic sin | 10100 01111 |
| facosh(s) | inverse hyperbolic cos | 10101 01110 |
| fatanh(s) | inverse hyperbolic tan | 10101 01111 |