# Summary FP Opcodes * Zfrsqrt - Recip SQRT * Zftrans - Transcendentals (FSIN, FCOS, FATAN, FPOW, FEXP, FLOG, FRCP) * HI-half FP MV - # Main FP opcode 1010011 table Proposed new encodings in **bold** [[!table data=""" 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function | funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | name | 5 | 2 | 5 | 5 | 3 | 5 | 7 | | ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- | 00000 | xx | rs2 | rs1 | rm | rd | 1010011 | FADD.xx | 00001 | xx | rs2 | rs1 | rm | rd | 1010011 | FSUB.xx | 00010 | xx | rs2 | rs1 | rm | rd | 1010011 | FMUL.xx | 00011 | xx | rs2 | rs1 | rm | rd | 1010011 | FDIV.xx | 00100 | xx | rs2 | rs1 | yyy | rd | 1010011 | tb=00100 | 00101 | xx | rs2 | rs1 | yyy | rd | 1010011 | tb=00101 | 00110 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? | 00111 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? | 01000 | xx | rs2 | rs1 | yyy | rd | 1010011 | tb=01000 | 01001 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? | 01010 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? | 01011 | xx | xxxxx | rs1 | yyy | rd | 1010011 | tb=01011 | 01100 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? | 01101 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? | 01110 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? | 01111 | xx | rs2 | rs1 | yyy | rd | 1010011 | **FPOW.XX** | 10000 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? | 10001 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? | 10010 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? | 10011 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? | 10100 | xx | rs2 | rs1 | yyy | rd | 1010011 | tb=10100 | 10101 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? | 10110 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? | 10111 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? | 11000 | xx | xxxxx | rs1 | yyy | rd | 1010011 | tb=11000 | 11001 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? | 11010 | xx | xxxxx | rs1 | yyy | rd | 1010011 | tb=11010 | 11100 | xx | xxxxx | rs1 | 000 | rd | 1010011 | tb=11100 | 11101 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? | 11110 | xx | xxxxx | rs1 | 000 | rd | 1010011 | tb=11110 | 11111 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? | """]] ## funct5 = 00100 [[!table data=""" 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function | funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | name | 5 | 2 | 5 | 5 | 3 | 5 | 7 | | ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- | 00100 | xx | rs2 | rs1 | 000 | rd | 1010011 | FSGNJ.xx | 00100 | xx | rs2 | rs1 | 001 | rd | 1010011 | FSGNJN.xx | 00100 | xx | rs2 | rs1 | 010 | rd | 1010011 | FSGNJX.xx | 00100 | xx | rs2 | rs1 | 011 | rd | 1010011 | ?f3=011 | 00100 | xx | rs2 | rs1 | 100 | rd | 1010011 | ?f3=100 | 00100 | xx | rs2 | rs1 | 101 | rd | 1010011 | ?f3=101 | 00100 | xx | rs2 | rs1 | 110 | rd | 1010011 | ?f3=110 | 00100 | xx | rs2 | rs1 | 111 | rd | 1010011 | ?f3=111 | """]] # funct5 = 00101 [[!table data=""" 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function | funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | name | 5 | 2 | 5 | 5 | 3 | 5 | 7 | | ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- | 00101 | xx | rs2 | rs1 | 000 | rd | 1010011 | FMIN.S | 00101 | xx | rs2 | rs1 | 001 | rd | 1010011 | FMAX.S | 00101 | xx | rs2 | rs1 | 010 | rd | 1010011 | ?f3=010 | 00101 | xx | rs2 | rs1 | 011 | rd | 1010011 | ?f3=011 | 00101 | xx | rs2 | rs1 | 100 | rd | 1010011 | ?f3=100 | 00101 | xx | rs2 | rs1 | 101 | rd | 1010011 | ?f3=101 | 00101 | xx | rs2 | rs1 | 110 | rd | 1010011 | ?f3=110 | 00101 | xx | rs2 | rs1 | 111 | rd | 1010011 | ?f3=111 | """]] # funct5 = 01000 Notes: * TODO FP16 (trivial) [[!table data=""" 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function | funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | name | 5 | 2 | 5 | 5 | 3 | 5 | 7 | | ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- | 01000 | 00 | 00001 | rs1 | rm | rd | 1010011 | FCVT.S.D | 01000 | 00 | 00011 | rs1 | rm | rd | 1010011 | FCVT.S.Q | 01000 | 00 | xxxxx | rs1 | rm | rd | 1010011 | rs2? | ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- | 01000 | 01 | 00000 | rs1 | rm | rd | 1010011 | FCVT.D.S | 01000 | 01 | 00011 | rs1 | rm | rd | 1010011 | FCVT.D.Q | 01000 | 01 | xxxxx | rs1 | rm | rd | 1010011 | rs2? | ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- | 01000 | 11 | 00000 | rs1 | rm | rd | 1010011 | FCVT.Q.S | 01000 | 11 | 00001 | rs1 | rm | rd | 1010011 | FCVT.Q.D | 01000 | 11 | xxxxx | rs1 | rm | rd | 1010011 | rs2? | ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- | """]] # funct5 = 01011 [[!table data=""" 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function | funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | name | 5 | 2 | 5 | 5 | 3 | 5 | 7 | | ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- | 01011 | xx | 00000 | rs1 | yyy | rd | 1010011 | FSQRT.xx | 01011 | xx | 00001 | rs1 | yyy | rd | 1010011 | **FRSQRT.xx** | 01011 | xx | 00010 | rs1 | yyy | rd | 1010011 | **FSIN.xx** | 01011 | xx | 00011 | rs1 | yyy | rd | 1010011 | **FCOS.xx** | 01011 | xx | 00100 | rs1 | yyy | rd | 1010011 | **FATAN.xx** | 01011 | xx | 00101 | rs1 | yyy | rd | 1010011 | **FEXP.xx** | 01011 | xx | 00110 | rs1 | yyy | rd | 1010011 | **FLOG.xx** | 01011 | xx | 00111 | rs1 | yyy | rd | 1010011 | **FRCP.xx** | 01011 | xx | 01000 | rs1 | yyy | rd | 1010011 | ? | 01011 | xx | 01001 | rs1 | yyy | rd | 1010011 | ? | 01011 | xx | 01010 | rs1 | yyy | rd | 1010011 | ? | 01011 | xx | 01011 | rs1 | yyy | rd | 1010011 | ? | 01011 | xx | 01100 | rs1 | yyy | rd | 1010011 | ? | 01011 | xx | 01101 | rs1 | yyy | rd | 1010011 | ? | 01011 | xx | 01110 | rs1 | yyy | rd | 1010011 | ? | 01011 | xx | 01111 | rs1 | yyy | rd | 1010011 | ? | 01011 | xx | 10000 | rs1 | yyy | rd | 1010011 | ? | 01011 | xx | 10001 | rs1 | yyy | rd | 1010011 | ? | 01011 | xx | 10010 | rs1 | yyy | rd | 1010011 | ? | 01011 | xx | 10011 | rs1 | yyy | rd | 1010011 | ? | 01011 | xx | 10100 | rs1 | yyy | rd | 1010011 | ? | 01011 | xx | 10101 | rs1 | yyy | rd | 1010011 | ? | 01011 | xx | 10110 | rs1 | yyy | rd | 1010011 | ? | 01011 | xx | 10111 | rs1 | yyy | rd | 1010011 | ? | 01011 | xx | 11000 | rs1 | yyy | rd | 1010011 | ? | 01011 | xx | 11001 | rs1 | yyy | rd | 1010011 | ? | 01011 | xx | 11010 | rs1 | yyy | rd | 1010011 | ? | 01011 | xx | 11011 | rs1 | yyy | rd | 1010011 | ? | 01011 | xx | 11100 | rs1 | yyy | rd | 1010011 | ? | 01011 | xx | 11101 | rs1 | yyy | rd | 1010011 | ? | 01011 | xx | 11110 | rs1 | yyy | rd | 1010011 | ? | 01011 | xx | 11111 | rs1 | yyy | rd | 1010011 | ? | """]] # funct5 = 10100 Notes: * FNE missing? [[!table data=""" 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function | funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | name | 5 | 2 | 5 | 5 | 3 | 5 | 7 | | ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- | 10100 | xx | rs2 | rs1 | 000 | rd | 1010011 | FLE.xx | 10100 | xx | rs2 | rs1 | 001 | rd | 1010011 | FLT.xx | 10100 | xx | rs2 | rs1 | 010 | rd | 1010011 | FEQ.xx | 10100 | xx | rs2 | rs1 | 011 | rd | 1010011 | ?f3=011 | 10100 | xx | rs2 | rs1 | 100 | rd | 1010011 | ?f3=100 | 10100 | xx | rs2 | rs1 | 101 | rd | 1010011 | ?f3=101 | 10100 | xx | rs2 | rs1 | 110 | rd | 1010011 | ?f3=110 | 10100 | xx | rs2 | rs1 | 111 | rd | 1010011 | ?f3=111 | """]] # funct5 = 11000 Notes: * TODO FP16 (trivial) [[!table data=""" 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function | funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | name | 5 | 2 | 5 | 5 | 3 | 5 | 7 | | ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- | 11000 | 00 | 00000 | rs1 | rm | rd | 1010011 | FCVT.W.S | 11000 | 00 | 00001 | rs1 | rm | rd | 1010011 | FCVT.WU.S | 11000 | 00 | 00010 | rs1 | rm | rd | 1010011 | FCVT.L.S | 11000 | 00 | 00011 | rs1 | rm | rd | 1010011 | FCVT.LU.S | 11000 | 00 | xxxxx | rs1 | rm | rd | 1010011 | rs2? | ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- | 11000 | 01 | 00000 | rs1 | rm | rd | 1010011 | FCVT.W.D | 11000 | 01 | 00001 | rs1 | rm | rd | 1010011 | FCVT.WU.D | 11000 | 01 | 00010 | rs1 | rm | rd | 1010011 | FCVT.L.D | 11000 | 01 | 00011 | rs1 | rm | rd | 1010011 | FCVT.LU.D | 11000 | 01 | xxxxx | rs1 | rm | rd | 1010011 | rs2? | ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- | 11000 | 11 | 00000 | rs1 | rm | rd | 1010011 | FCVT.W.Q | 11000 | 11 | 00001 | rs1 | rm | rd | 1010011 | FCVT.WU.Q | 11000 | 11 | 00010 | rs1 | rm | rd | 1010011 | FCVT.L.Q | 11000 | 11 | 00011 | rs1 | rm | rd | 1010011 | FCVT.LU.Q | 11000 | 11 | xxxxx | rs1 | rm | rd | 1010011 | rs2? | ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- | """]] # funct5 = 11010 [[!table data=""" 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function | funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | name | 5 | 2 | 5 | 5 | 3 | 5 | 7 | | ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- | 11010 | 00 | 00000 | rs1 | rm | rd | 1010011 | FCVT.S.W | 11010 | 00 | 00001 | rs1 | rm | rd | 1010011 | FCVT.S.WU | 11010 | 00 | 00010 | rs1 | rm | rd | 1010011 | FCVT.S.L | 11010 | 00 | 00011 | rs1 | rm | rd | 1010011 | FCVT.S.LU | 11010 | 00 | xxxxx | rs1 | rm | rd | 1010011 | rs2? | ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- | 11010 | 01 | 00000 | rs1 | rm | rd | 1010011 | FCVT.D.W | 11010 | 01 | 00001 | rs1 | rm | rd | 1010011 | FCVT.D.WU | 11010 | 01 | 00010 | rs1 | rm | rd | 1010011 | FCVT.D.L | 11010 | 01 | 00011 | rs1 | rm | rd | 1010011 | FCVT.D.LU | 11010 | 01 | xxxxx | rs1 | rm | rd | 1010011 | rs2? | ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- | 11010 | 11 | 00000 | rs1 | rm | rd | 1010011 | FCVT.Q.W | 11010 | 11 | 00001 | rs1 | rm | rd | 1010011 | FCVT.Q.WU | 11010 | 11 | 00010 | rs1 | rm | rd | 1010011 | FCVT.Q.L | 11010 | 11 | 00011 | rs1 | rm | rd | 1010011 | FCVT.Q.LU | 11010 | 11 | xxxxx | rs1 | rm | rd | 1010011 | rs2? | ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- | """]] # funct5 = 11100 Notes: * FMV.X.Q is missing (alias of FMVH.X.D if it existed) * TODO FP16 (trivial) * FMVH.X.HW (half-word) missing? [[!table data=""" 31..27| 26..25| 24..20 |19..15|14...12| 11..7 | 6....0 | function | funct5| SDHQ | rs2 | rs1 |funct3 | rd | opcode | name | 5 | 2 | 5 | 5 | 3 | 5 | 7 | | ----- | ----- | ----- | -----| ----- | ----- | ------- | -------- | 11100 | 00 | 00000 | rs1 | 000 | rd | 1010011 | FMV.X.W | 11100 | 00 | 00000 | rs1 | 001 | rd | 1010011 | FCLASS.S | 11100 | 00 | xxxxx | rs1 | yyy | rd | 1010011 | rs2? f3? | ------| ----- | ----- | -----| ----- | ----- | ------- | -------- | 11100 | 01 | 00000 | rs1 | 000 | rd | 1010011 | FMV.X.D **FMVH.X.W** | 11100 | 01 | 00000 | rs1 | 001 | rd | 1010011 | FCLASS.D | 11100 | xx | xxxxx | rs1 | yyy | rd | 1010011 | rs2? f3? | ------| ----- | ----- | -----| ----- | ----- | ------- | -------- | 11100 | 11 | 00000 | rs1 | 000 | rd | 1010011 | **FMVH.X.D** | 11100 | 11 | 00000 | rs1 | 001 | rd | 1010011 | FCLASS.Q | 11100 | xx | xxxxx | rs1 | yyy | rd | 1010011 | rs2? f3? | ----- | ----- | ----- | -----| ----- | ----- | ------- | -------- | """]] # funct5 = 11110 Notes: * FMV.Q.X is missing (as is FMVH.D.X) * FMVH.W.X is missing (alias of FMV.D.X) * TODO FP16 (trivial) * FMVH.HW.X (half-word) missing? [[!table data=""" 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function | funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | name | 5 | 2 | 5 | 5 | 3 | 5 | 7 | | ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- | 11110 | 00 | 00000 | rs1 | 000 | rd | 1010011 | FMV.W.X | 11110 | 00 | xxxxx | rs1 | yyy | rd | 1010011 | rs2? f3? | ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- | 11110 | 01 | 00000 | rs1 | 000 | rd | 1010011 | FMV.D.X | 11110 | 01 | xxxxx | rs1 | yyy | rd | 1010011 | rs2? f3? | ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- | 11110 | 11 | 00000 | rs1 | 000 | rd | 1010011 | ? | 11110 | 11 | xxxxx | rs1 | yyy | rd | 1010011 | rs2? f3? | ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- | """]] # funct5 = ????? [[!table data=""" 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function | funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | name | 5 | 2 | 5 | 5 | 3 | 5 | 7 | | ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- | """]]