add quad fp, ref to hi-half FMVH
[libreriscv.git] / rv_major_opcode_1010011.mdwn
1 # Summary FP Opcodes
2
3 * Zfrsqrt - Recip SQRT <http://bugs.libre-riscv.org/show_bug.cgi?id=110>
4 * Zftrans - Transcendentals (FSIN, FCOS, FATAN, FPOW, FEXP, FLOG, FRCP)
5 * HI-half FP MV - <https://github.com/riscv/riscv-isa-manual/pull/301>
6
7 # Main FP opcode 1010011 table
8
9 Proposed new encodings in **bold**
10
11 [[!table data="""
12 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function |
13 funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | name |
14 5 | 2 | 5 | 5 | 3 | 5 | 7 | |
15 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
16 00000 | xx | rs2 | rs1 | rm | rd | 1010011 | FADD.xx |
17 00001 | xx | rs2 | rs1 | rm | rd | 1010011 | FSUB.xx |
18 00010 | xx | rs2 | rs1 | rm | rd | 1010011 | FMUL.xx |
19 00011 | xx | rs2 | rs1 | rm | rd | 1010011 | FDIV.xx |
20 00100 | xx | rs2 | rs1 | yyy | rd | 1010011 | tb=00100 |
21 00101 | xx | rs2 | rs1 | yyy | rd | 1010011 | tb=00101 |
22 00110 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
23 00111 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
24 01000 | xx | rs2 | rs1 | yyy | rd | 1010011 | tb=01000 |
25 01001 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
26 01010 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
27 01011 | xx | xxxxx | rs1 | yyy | rd | 1010011 | tb=01011 |
28 01100 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
29 01101 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
30 01110 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
31 01111 | xx | rs2 | rs1 | yyy | rd | 1010011 | **FPOW.XX** |
32 10000 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
33 10001 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
34 10010 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
35 10011 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
36 10100 | xx | rs2 | rs1 | yyy | rd | 1010011 | tb=10100 |
37 10101 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
38 10110 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
39 10111 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
40 11000 | xx | xxxxx | rs1 | yyy | rd | 1010011 | tb=11000 |
41 11001 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
42 11010 | xx | xxxxx | rs1 | yyy | rd | 1010011 | tb=11010 |
43 11100 | xx | xxxxx | rs1 | 000 | rd | 1010011 | tb=11100 |
44 11101 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
45 11110 | xx | xxxxx | rs1 | 000 | rd | 1010011 | tb=11110 |
46 11111 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
47 """]]
48
49 ## funct5 = 00100
50
51 [[!table data="""
52 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function |
53 funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | name |
54 5 | 2 | 5 | 5 | 3 | 5 | 7 | |
55 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
56 00100 | xx | rs2 | rs1 | 000 | rd | 1010011 | FSGNJ.xx |
57 00100 | xx | rs2 | rs1 | 001 | rd | 1010011 | FSGNJN.xx |
58 00100 | xx | rs2 | rs1 | 010 | rd | 1010011 | FSGNJX.xx |
59 00100 | xx | rs2 | rs1 | 011 | rd | 1010011 | ?f3=011 |
60 00100 | xx | rs2 | rs1 | 100 | rd | 1010011 | ?f3=100 |
61 00100 | xx | rs2 | rs1 | 101 | rd | 1010011 | ?f3=101 |
62 00100 | xx | rs2 | rs1 | 110 | rd | 1010011 | ?f3=110 |
63 00100 | xx | rs2 | rs1 | 111 | rd | 1010011 | ?f3=111 |
64 """]]
65
66 # funct5 = 00101
67
68 [[!table data="""
69 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function |
70 funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | name |
71 5 | 2 | 5 | 5 | 3 | 5 | 7 | |
72 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
73 00101 | xx | rs2 | rs1 | 000 | rd | 1010011 | FMIN.S |
74 00101 | xx | rs2 | rs1 | 001 | rd | 1010011 | FMAX.S |
75 00101 | xx | rs2 | rs1 | 010 | rd | 1010011 | ?f3=010 |
76 00101 | xx | rs2 | rs1 | 011 | rd | 1010011 | ?f3=011 |
77 00101 | xx | rs2 | rs1 | 100 | rd | 1010011 | ?f3=100 |
78 00101 | xx | rs2 | rs1 | 101 | rd | 1010011 | ?f3=101 |
79 00101 | xx | rs2 | rs1 | 110 | rd | 1010011 | ?f3=110 |
80 00101 | xx | rs2 | rs1 | 111 | rd | 1010011 | ?f3=111 |
81 """]]
82
83 # funct5 = 01000
84
85 Notes:
86
87 * TODO FP16 (trivial)
88
89 [[!table data="""
90 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function |
91 funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | name |
92 5 | 2 | 5 | 5 | 3 | 5 | 7 | |
93 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
94 01000 | 00 | 00001 | rs1 | rm | rd | 1010011 | FCVT.S.D |
95 01000 | 00 | 00011 | rs1 | rm | rd | 1010011 | FCVT.S.Q |
96 01000 | 00 | xxxxx | rs1 | rm | rd | 1010011 | rs2? |
97 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
98 01000 | 01 | 00000 | rs1 | rm | rd | 1010011 | FCVT.D.S |
99 01000 | 01 | 00011 | rs1 | rm | rd | 1010011 | FCVT.D.Q |
100 01000 | 01 | xxxxx | rs1 | rm | rd | 1010011 | rs2? |
101 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
102 01000 | 11 | 00000 | rs1 | rm | rd | 1010011 | FCVT.Q.S |
103 01000 | 11 | 00001 | rs1 | rm | rd | 1010011 | FCVT.Q.D |
104 01000 | 11 | xxxxx | rs1 | rm | rd | 1010011 | rs2? |
105 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
106 """]]
107
108 # funct5 = 01011
109
110 [[!table data="""
111 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function |
112 funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | name |
113 5 | 2 | 5 | 5 | 3 | 5 | 7 | |
114 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
115 01011 | xx | 00000 | rs1 | yyy | rd | 1010011 | FSQRT.xx |
116 01011 | xx | 00001 | rs1 | yyy | rd | 1010011 | **FRSQRT.xx** |
117 01011 | xx | 00010 | rs1 | yyy | rd | 1010011 | **FSIN.xx** |
118 01011 | xx | 00011 | rs1 | yyy | rd | 1010011 | **FCOS.xx** |
119 01011 | xx | 00100 | rs1 | yyy | rd | 1010011 | **FATAN.xx** |
120 01011 | xx | 00101 | rs1 | yyy | rd | 1010011 | **FEXP.xx** |
121 01011 | xx | 00110 | rs1 | yyy | rd | 1010011 | **FLOG.xx** |
122 01011 | xx | 00111 | rs1 | yyy | rd | 1010011 | **FRCP.xx** |
123 01011 | xx | 01000 | rs1 | yyy | rd | 1010011 | ? |
124 01011 | xx | 01001 | rs1 | yyy | rd | 1010011 | ? |
125 01011 | xx | 01010 | rs1 | yyy | rd | 1010011 | ? |
126 01011 | xx | 01011 | rs1 | yyy | rd | 1010011 | ? |
127 01011 | xx | 01100 | rs1 | yyy | rd | 1010011 | ? |
128 01011 | xx | 01101 | rs1 | yyy | rd | 1010011 | ? |
129 01011 | xx | 01110 | rs1 | yyy | rd | 1010011 | ? |
130 01011 | xx | 01111 | rs1 | yyy | rd | 1010011 | ? |
131 01011 | xx | 10000 | rs1 | yyy | rd | 1010011 | ? |
132 01011 | xx | 10001 | rs1 | yyy | rd | 1010011 | ? |
133 01011 | xx | 10010 | rs1 | yyy | rd | 1010011 | ? |
134 01011 | xx | 10011 | rs1 | yyy | rd | 1010011 | ? |
135 01011 | xx | 10100 | rs1 | yyy | rd | 1010011 | ? |
136 01011 | xx | 10101 | rs1 | yyy | rd | 1010011 | ? |
137 01011 | xx | 10110 | rs1 | yyy | rd | 1010011 | ? |
138 01011 | xx | 10111 | rs1 | yyy | rd | 1010011 | ? |
139 01011 | xx | 11000 | rs1 | yyy | rd | 1010011 | ? |
140 01011 | xx | 11001 | rs1 | yyy | rd | 1010011 | ? |
141 01011 | xx | 11010 | rs1 | yyy | rd | 1010011 | ? |
142 01011 | xx | 11011 | rs1 | yyy | rd | 1010011 | ? |
143 01011 | xx | 11100 | rs1 | yyy | rd | 1010011 | ? |
144 01011 | xx | 11101 | rs1 | yyy | rd | 1010011 | ? |
145 01011 | xx | 11110 | rs1 | yyy | rd | 1010011 | ? |
146 01011 | xx | 11111 | rs1 | yyy | rd | 1010011 | ? |
147 """]]
148
149 # funct5 = 10100
150
151 Notes:
152
153 * FNE missing?
154
155 [[!table data="""
156 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function |
157 funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | name |
158 5 | 2 | 5 | 5 | 3 | 5 | 7 | |
159 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
160 10100 | xx | rs2 | rs1 | 000 | rd | 1010011 | FLE.xx |
161 10100 | xx | rs2 | rs1 | 001 | rd | 1010011 | FLT.xx |
162 10100 | xx | rs2 | rs1 | 010 | rd | 1010011 | FEQ.xx |
163 10100 | xx | rs2 | rs1 | 011 | rd | 1010011 | ?f3=011 |
164 10100 | xx | rs2 | rs1 | 100 | rd | 1010011 | ?f3=100 |
165 10100 | xx | rs2 | rs1 | 101 | rd | 1010011 | ?f3=101 |
166 10100 | xx | rs2 | rs1 | 110 | rd | 1010011 | ?f3=110 |
167 10100 | xx | rs2 | rs1 | 111 | rd | 1010011 | ?f3=111 |
168 """]]
169
170 # funct5 = 11000
171
172 Notes:
173
174 * TODO FP16 (trivial)
175
176 [[!table data="""
177 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function |
178 funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | name |
179 5 | 2 | 5 | 5 | 3 | 5 | 7 | |
180 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
181 11000 | 00 | 00000 | rs1 | rm | rd | 1010011 | FCVT.W.S |
182 11000 | 00 | 00001 | rs1 | rm | rd | 1010011 | FCVT.WU.S |
183 11000 | 00 | 00010 | rs1 | rm | rd | 1010011 | FCVT.L.S |
184 11000 | 00 | 00011 | rs1 | rm | rd | 1010011 | FCVT.LU.S |
185 11000 | 00 | xxxxx | rs1 | rm | rd | 1010011 | rs2? |
186 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
187 11000 | 01 | 00000 | rs1 | rm | rd | 1010011 | FCVT.W.D |
188 11000 | 01 | 00001 | rs1 | rm | rd | 1010011 | FCVT.WU.D |
189 11000 | 01 | 00010 | rs1 | rm | rd | 1010011 | FCVT.L.D |
190 11000 | 01 | 00011 | rs1 | rm | rd | 1010011 | FCVT.LU.D |
191 11000 | 01 | xxxxx | rs1 | rm | rd | 1010011 | rs2? |
192 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
193 11000 | 11 | 00000 | rs1 | rm | rd | 1010011 | FCVT.W.Q |
194 11000 | 11 | 00001 | rs1 | rm | rd | 1010011 | FCVT.WU.Q |
195 11000 | 11 | 00010 | rs1 | rm | rd | 1010011 | FCVT.L.Q |
196 11000 | 11 | 00011 | rs1 | rm | rd | 1010011 | FCVT.LU.Q |
197 11000 | 11 | xxxxx | rs1 | rm | rd | 1010011 | rs2? |
198 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
199 """]]
200
201 # funct5 = 11010
202
203 [[!table data="""
204 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function |
205 funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | name |
206 5 | 2 | 5 | 5 | 3 | 5 | 7 | |
207 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
208 11010 | 00 | 00000 | rs1 | rm | rd | 1010011 | FCVT.S.W |
209 11010 | 00 | 00001 | rs1 | rm | rd | 1010011 | FCVT.S.WU |
210 11010 | 00 | 00010 | rs1 | rm | rd | 1010011 | FCVT.S.L |
211 11010 | 00 | 00011 | rs1 | rm | rd | 1010011 | FCVT.S.LU |
212 11010 | 00 | xxxxx | rs1 | rm | rd | 1010011 | rs2? |
213 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
214 11010 | 01 | 00000 | rs1 | rm | rd | 1010011 | FCVT.D.W |
215 11010 | 01 | 00001 | rs1 | rm | rd | 1010011 | FCVT.D.WU |
216 11010 | 01 | 00010 | rs1 | rm | rd | 1010011 | FCVT.D.L |
217 11010 | 01 | 00011 | rs1 | rm | rd | 1010011 | FCVT.D.LU |
218 11010 | 01 | xxxxx | rs1 | rm | rd | 1010011 | rs2? |
219 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
220 11010 | 11 | 00000 | rs1 | rm | rd | 1010011 | FCVT.Q.W |
221 11010 | 11 | 00001 | rs1 | rm | rd | 1010011 | FCVT.Q.WU |
222 11010 | 11 | 00010 | rs1 | rm | rd | 1010011 | FCVT.Q.L |
223 11010 | 11 | 00011 | rs1 | rm | rd | 1010011 | FCVT.Q.LU |
224 11010 | 11 | xxxxx | rs1 | rm | rd | 1010011 | rs2? |
225 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
226 """]]
227
228 # funct5 = 11100
229
230 Notes:
231
232 * FMV.X.Q is missing (alias of FMVH.X.D if it existed)
233 * TODO FP16 (trivial)
234 * FMVH.X.HW (half-word) missing?
235
236 [[!table data="""
237 31..27| 26..25| 24..20 |19..15|14...12| 11..7 | 6....0 | function |
238 funct5| SDHQ | rs2 | rs1 |funct3 | rd | opcode | name |
239 5 | 2 | 5 | 5 | 3 | 5 | 7 | |
240 ----- | ----- | ----- | -----| ----- | ----- | ------- | -------- |
241 11100 | 00 | 00000 | rs1 | 000 | rd | 1010011 | FMV.X.W |
242 11100 | 00 | 00000 | rs1 | 001 | rd | 1010011 | FCLASS.S |
243 11100 | 00 | xxxxx | rs1 | yyy | rd | 1010011 | rs2? f3? |
244 ------| ----- | ----- | -----| ----- | ----- | ------- | -------- |
245 11100 | 01 | 00000 | rs1 | 000 | rd | 1010011 | FMV.X.D **FMVH.X.W** |
246 11100 | 01 | 00000 | rs1 | 001 | rd | 1010011 | FCLASS.D |
247 11100 | xx | xxxxx | rs1 | yyy | rd | 1010011 | rs2? f3? |
248 ------| ----- | ----- | -----| ----- | ----- | ------- | -------- |
249 11100 | 11 | 00000 | rs1 | 000 | rd | 1010011 | **FMVH.X.D** |
250 11100 | 11 | 00000 | rs1 | 001 | rd | 1010011 | FCLASS.Q |
251 11100 | xx | xxxxx | rs1 | yyy | rd | 1010011 | rs2? f3? |
252 ----- | ----- | ----- | -----| ----- | ----- | ------- | -------- |
253 """]]
254
255 # funct5 = 11110
256
257 Notes:
258
259 * FMV.Q.X is missing (as is FMVH.D.X)
260 * FMVH.W.X is missing (alias of FMV.D.X)
261 * TODO FP16 (trivial)
262 * FMVH.HW.X (half-word) missing?
263
264 [[!table data="""
265 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function |
266 funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | name |
267 5 | 2 | 5 | 5 | 3 | 5 | 7 | |
268 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
269 11110 | 00 | 00000 | rs1 | 000 | rd | 1010011 | FMV.W.X |
270 11110 | 00 | xxxxx | rs1 | yyy | rd | 1010011 | rs2? f3? |
271 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
272 11110 | 01 | 00000 | rs1 | 000 | rd | 1010011 | FMV.D.X |
273 11110 | 01 | xxxxx | rs1 | yyy | rd | 1010011 | rs2? f3? |
274 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
275 11110 | 11 | 00000 | rs1 | 000 | rd | 1010011 | ? |
276 11110 | 11 | xxxxx | rs1 | yyy | rd | 1010011 | rs2? f3? |
277 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
278 """]]
279
280 # funct5 = ?????
281
282 [[!table data="""
283 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function |
284 funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | name |
285 5 | 2 | 5 | 5 | 3 | 5 | 7 | |
286 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
287 """]]
288