update 22nm page
[libreriscv.git] / rv_major_opcode_1010011.mdwn
index 429a1deba16c0cb4dc01883015664d59174911ac..6383cf0c48f21b9b91aecbffef51b4da553e6847 100644 (file)
@@ -1,3 +1,5 @@
+**OBSOLETE**, superceded by [[openpower/transcendentals]]
+
 # Summary FP Opcodes
 
 This page aids and assists in the development of FP proposals,
@@ -11,9 +13,12 @@ Publicly-known FP proposals:
 
 * Zfrsqrt - Reciprocal SQRT <http://bugs.libre-riscv.org/show_bug.cgi?id=110>
 * Zftrans - see [[ztrans_proposal]]: Transcendentals
-  (FSIN, FCOS, FATAN, FPOW, FEXP, FLOG, FRCP)
+  (FPOW, FEXP, FLOG, FCBRT)
   <http://bugs.libre-riscv.org/show_bug.cgi?id=127>
+* Ztrig\* - see [[ztrans_proposal]]: Trigonometriics
+  (FSIN, FCOS, FTAN, arc-variants, hypotenuse-variants)
 * Extension of formats to cover FP16 (RISC-V ISA Manual Table 11.3 "fmt field")
+ <https://groups.google.com/a/groups.riscv.org/d/msg/isa-dev/8knne5BtlvM>
 * HI-half FP MV - <https://github.com/riscv/riscv-isa-manual/pull/301>
   <https://groups.google.com/a/groups.riscv.org/forum/m/#!topic/isa-dev/kXgfFqgBv-c>
 * (Add new entries here: Zextname - Description and URL)
@@ -56,13 +61,13 @@ funct5  | SDHQ    | rs2    | rs1  | funct3 | rd    | opcode  | name           |
 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 | ?              |
+01100   | xx      | rs2    | rs1  | yyy    | rd    | 1010011 | **FHYPOT.xx**  |
 01101   | xx      | rs2    | rs1  | rm     | rd    | 1010011 | **FATAN2.xx**  |
 01110   | xx      | rs2    | rs1  | rm     | rd    | 1010011 | **FATAN2PI.xx**|
 01111   | xx      | rs2    | rs1  | rm     | rd    | 1010011 | **FPOW.xx**    |
-10000   | xx      | rs2    | rs1  | yyy    | rd    | 1010011 | **FROOT.xx**   |
-10001   | xx      | rs2    | rs1  | yyy    | rd    | 1010011 | ?              |
-10010   | xx      | rs2    | rs1  | yyy    | rd    | 1010011 | ?              |
+10000   | xx      | rs2    | rs1  | yyy    | rd    | 1010011 | **FROOTN.xx**  |
+10001   | xx      | rs2    | rs1  | yyy    | rd    | 1010011 | **FPOWN.xx**   |
+10010   | xx      | rs2    | rs1  | yyy    | rd    | 1010011 | **FPOWR.xx**   |
 10011   | xx      | rs2    | rs1  | yyy    | rd    | 1010011 | ?              |
 10100   | xx      | rs2    | rs1  | yyy    | rd    | 1010011 | tb=10100       |
 10101   | xx      | rs2    | rs1  | yyy    | rd    | 1010011 | ?              |
@@ -104,7 +109,7 @@ No brownfield encodings available.
 
 Brownfield encodings available.
 
-## funct5 = 00100
+## funct5 = 00100 - FSGN
 
 This table uses funct3 for encoding 2-operand FP operations
 
@@ -122,7 +127,7 @@ funct5  | SDHQ    | rs2    | rs1  | funct3 | rd    | opcode  | name        |
 00100   | xx      | rs2    | rs1  | 111    | rd    | 1010011 | ?f3=111     |
 """]]
 
-## funct5 = 00101
+## funct5 = 00101 - FMIN/MAX
 
 This table uses funct3 for encoding 2-operand FP operations where the result
 register is a **floating-point** value.
@@ -149,7 +154,7 @@ Brownfield encodings available.
 
 Brownfield encodings available.
 
-## funct5 = 01000
+## funct5 = 01000 - FCVT
 
 This table uses rs2 for encoding 1-operand FP operations, using
 funct3 to specify the "rounding" mode
@@ -206,7 +211,7 @@ funct5  | SDHQ    | rs2    | rs1  | funct3 | rd    | opcode  | name          |
  5      | 2       | 5      | 5    | 3      | 5     |   7     |               |
 01011   | xx      | 00000  | rs1  | rm     | rd    | 1010011 | FSQRT.xx      |
 01011   | xx      | 00001  | rs1  | rm     | rd    | 1010011 | **FRSQRT.xx** |
-01011   | xx      | 00010  | rs1  | rm     | rd    | 1010011 | **FRCP.xx**   |
+01011   | xx      | 00010  | rs1  | rm     | rd    | 1010011 | **FRECIP.xx** |
 01011   | xx      | 00011  | rs1  | rm     | rd    | 1010011 | **FCBRT.xx**  |
 01011   | xx      | 00100  | rs1  | rm     | rd    | 1010011 | **FEXP2.xx**  |
 01011   | xx      | 00101  | rs1  | rm     | rd    | 1010011 | **FLOG2.xx**  |
@@ -230,17 +235,17 @@ funct5  | SDHQ    | rs2    | rs1  | funct3 | rd    | opcode  | name          |
 01011   | xx      | 10111  | rs1  | rm     | rd    | 1010011 | **FACOSPI.xx**|
 01011   | xx      | 11000  | rs1  | rm     | rd    | 1010011 | **FTAN.xx**   |
 01011   | xx      | 11001  | rs1  | rm     | rd    | 1010011 | **FTANPI.xx** |
-01011   | xx      | 11010  | rs1  | rm     | rd    | 1010011 | ?             |
-01011   | xx      | 11011  | rs1  | rm     | rd    | 1010011 | ?             |
+01011   | xx      | 11010  | rs1  | rm     | rd    | 1010011 | **FATAN.xx**  |
+01011   | xx      | 11011  | rs1  | rm     | rd    | 1010011 | **FATANPI.xx**|
 01011   | xx      | 11100  | rs1  | rm     | rd    | 1010011 | **FSINH.xx**  |
 01011   | xx      | 11101  | rs1  | rm     | rd    | 1010011 | **FCOSH.xx**  |
 01011   | xx      | 11110  | rs1  | rm     | rd    | 1010011 | **FTANH.xx**  |
 01011   | xx      | 11111  | rs1  | rm     | rd    | 1010011 | ?             |
 """]]
 
-## funct5 = 01100 - unused
+## funct5 = 01100 - **FHYPOT**
 
-Brownfield encodings available.
+Proposed for Zftrans - FHYPOT: "sqrt(rs1 * rs1 + rs2 * rs2)"
 
 ## funct5 = 01101 - **FATAN2**
 
@@ -255,17 +260,20 @@ Rationale: Gives better accuracy than if using FMUL with the constant, PI.
 
 Proposed for ZftransAdv - FPOW: "FP rs1 to the power of rs2"
 
-## funct5 = 10000 - **FROOT**
+## funct5 = 10000 - **FROOTN**
 
-Proposed for ZftransAdv - FPROOT: "FP rs1 to the power of (1/rs2)"
+Proposed for ZftransAdv - FPROOTN: "FP rs1 to the power of (1/rs2)".
+rs1 is FP, rs2 is **integer**.
 
-## funct5 = 10000 - unused
+## funct5 = 10000 - **FPOWN**
 
-Brownfield encodings available.
+Proposed for ZftransAdv - FPOW: "FP rs1 to the power of rs2"
+rs1 is FP, rs2 is **integer**.
 
-## funct5 = 10001 - unused
+## funct5 = 10001 - **FPOW**
 
-Brownfield encodings available.
+Proposed for ZftransAdv - FPOWN: "FP rs1 to the power of rs2, rs1 +ve"
+rs1 and rs2 are FP, rs1 must be +ve.  Equivalent to "exp(rs2 * log(rs1))"
 
 ## funct5 = 10010 - unused
 
@@ -275,7 +283,7 @@ Brownfield encodings available.
 
 Brownfield encodings available.
 
-## funct5 = 10100
+## funct5 = 10100 - FP comparisons
 
 This table uses funct3 for encoding 2-operand FP "comparison" operations
 where the result register is an **integer**
@@ -310,7 +318,7 @@ Brownfield encodings available.
 
 Brownfield encodings available.
 
-## funct5 = 11000
+## funct5 = 11000 - FCVT
 
 This table uses rs2 for encoding 1-operand FP operations, using
 funct3 to specify the "rounding" mode
@@ -352,7 +360,7 @@ funct5  | SDHQ    | rs2    | rs1  | funct3 | rd    | opcode  | name        |
 
 Brownfield encodings available.
 
-## funct5 = 11010
+## funct5 = 11010 - FCVT
 
 This table uses rs2 for encoding 1-operand FP operations, using
 funct3 to specify the "rounding" mode
@@ -388,7 +396,7 @@ funct5  | SDHQ    | rs2    | rs1  | funct3 | rd    | opcode  | name        |
 11010   | 11      | xxxxx  | rs1  | rm     | rd    | 1010011 | rs2?        |
 """]]
 
-## funct5 = 11100
+## funct5 = 11100 - FMV, FCLASS
 
 This table uses *both* rs2 *and* funct3 for encoding 1-operand FP operations.
 
@@ -423,7 +431,7 @@ funct5| SDHQ  | rs2    | rs1  |funct3 | rd    | opcode  | name        |
 
 Brownfield encodings available.
 
-## funct5 = 11110
+## funct5 = 11110 - FMV
 
 This table uses *both* rs2 *and* funct3 for encoding 1-operand FP operations.