add FP16 anticipated opcodes
[libreriscv.git] / rv_major_opcode_1010011.mdwn
1 # Summary FP Opcodes
2
3 This page aids and assists in the development of FP proposals,
4 by identifying and listing in full both publicly-known proposals
5 and the full brownfield encoding space available in the 0b010011
6 major opcode.
7
8 A primary critical use-case for extending FP is for 3D and supercomputing.
9
10 Publicly-known FP proposals:
11
12 * Zfrsqrt - Reciprocal SQRT <http://bugs.libre-riscv.org/show_bug.cgi?id=110>
13 * Zftrans - Transcendentals (FSIN, FCOS, FATAN, FPOW, FEXP, FLOG, FRCP)
14 * Extension of formats to cover FP16 (RISC-V ISA Manual Table 11.3 "fmt field")
15 * HI-half FP MV - <https://github.com/riscv/riscv-isa-manual/pull/301>
16 <https://groups.google.com/a/groups.riscv.org/forum/m/#!topic/isa-dev/kXgfFqgBv-c>
17 * (Add new entries here: Zextname - Description and URL)
18
19 [[!toc levels=2]]
20
21 # Main FP opcode 1010011 table
22
23 Notes:
24
25 * Proposed new encodings in **bold**.
26 * *Use funct5 sparingly!* - 2-operand functions only.
27 * Single-argument FP operations should go under one of the funct5 tables
28 * Both dual and single argument FP operations that do not require
29 "rounding mode" should go in one of the funct5 tables that already use
30 "funct3".
31 * Be careful not to use encoding space for which FP16 has already been
32 reserved.
33
34 [[!table data="""
35 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function |
36 funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | name |
37 5 | 2 | 5 | 5 | 3 | 5 | 7 | |
38 00000 | xx | rs2 | rs1 | rm | rd | 1010011 | FADD.xx |
39 00001 | xx | rs2 | rs1 | rm | rd | 1010011 | FSUB.xx |
40 00010 | xx | rs2 | rs1 | rm | rd | 1010011 | FMUL.xx |
41 00011 | xx | rs2 | rs1 | rm | rd | 1010011 | FDIV.xx |
42 00100 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
43 00101 | xx | rs2 | rs1 | yyy | rd | 1010011 | tb=00101 |
44 00110 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
45 00111 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
46 01000 | xx | rs2 | rs1 | yyy | rd | 1010011 | tb=01000 |
47 01001 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
48 01010 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
49 01011 | xx | xxxxx | rs1 | yyy | rd | 1010011 | tb=01011 |
50 01100 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
51 01101 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
52 01110 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
53 01111 | xx | rs2 | rs1 | yyy | rd | 1010011 | **FPOW.xx** |
54 10000 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
55 10001 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
56 10010 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
57 10011 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
58 10100 | xx | rs2 | rs1 | yyy | rd | 1010011 | tb=10100 |
59 10101 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
60 10110 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
61 10111 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
62 11000 | xx | xxxxx | rs1 | yyy | rd | 1010011 | tb=11000 |
63 11001 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
64 11010 | xx | xxxxx | rs1 | yyy | rd | 1010011 | tb=11010 |
65 11100 | xx | xxxxx | rs1 | 000 | rd | 1010011 | tb=11100 |
66 11101 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
67 11110 | xx | xxxxx | rs1 | 000 | rd | 1010011 | tb=11110 |
68 11111 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
69 """]]
70
71 ## funct5 = 00000 - FADD
72
73 No brownfield encodings available.
74
75 ## funct5 = 00001 - FSUB
76
77 No brownfield encodings available.
78
79 ## funct5 = 00010 - FMUL
80
81 No brownfield encodings available.
82
83 ## funct5 = 00011 - FDIV
84
85 No brownfield encodings available.
86
87 ## funct5 = 00100 - unused
88
89 Brownfield encodings available.
90
91 ## funct5 = 00100
92
93 This table uses funct3 for encoding 2-operand FP operations
94
95 [[!table data="""
96 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function |
97 funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | name |
98 5 | 2 | 5 | 5 | 3 | 5 | 7 | |
99 00100 | xx | rs2 | rs1 | 000 | rd | 1010011 | FSGNJ.xx |
100 00100 | xx | rs2 | rs1 | 001 | rd | 1010011 | FSGNJN.xx |
101 00100 | xx | rs2 | rs1 | 010 | rd | 1010011 | FSGNJX.xx |
102 00100 | xx | rs2 | rs1 | 011 | rd | 1010011 | ?f3=011 |
103 00100 | xx | rs2 | rs1 | 100 | rd | 1010011 | ?f3=100 |
104 00100 | xx | rs2 | rs1 | 101 | rd | 1010011 | ?f3=101 |
105 00100 | xx | rs2 | rs1 | 110 | rd | 1010011 | ?f3=110 |
106 00100 | xx | rs2 | rs1 | 111 | rd | 1010011 | ?f3=111 |
107 """]]
108
109 ## funct5 = 00101
110
111 This table uses funct3 for encoding 2-operand FP operations where the result
112 register is a **floating-point** value.
113
114 [[!table data="""
115 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function |
116 funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | name |
117 5 | 2 | 5 | 5 | 3 | 5 | 7 | |
118 00101 | xx | rs2 | rs1 | 000 | rd | 1010011 | FMIN.S |
119 00101 | xx | rs2 | rs1 | 001 | rd | 1010011 | FMAX.S |
120 00101 | xx | rs2 | rs1 | 010 | rd | 1010011 | ?f3=010 |
121 00101 | xx | rs2 | rs1 | 011 | rd | 1010011 | ?f3=011 |
122 00101 | xx | rs2 | rs1 | 100 | rd | 1010011 | ?f3=100 |
123 00101 | xx | rs2 | rs1 | 101 | rd | 1010011 | ?f3=101 |
124 00101 | xx | rs2 | rs1 | 110 | rd | 1010011 | ?f3=110 |
125 00101 | xx | rs2 | rs1 | 111 | rd | 1010011 | ?f3=111 |
126 """]]
127
128 ## funct5 = 00110 - unused
129
130 Brownfield encodings available.
131
132 ## funct5 = 00111 - unused
133
134 Brownfield encodings available.
135
136 ## funct5 = 01000
137
138 This table uses rs2 for encoding 1-operand FP operations, using
139 funct3 to specify the "rounding" mode
140
141 Notes:
142
143 * FP16 logically deduced from fmt field encoding (bits 25-26)
144
145 [[!table data="""
146 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function |
147 funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | name |
148 5 | 2 | 5 | 5 | 3 | 5 | 7 | |
149 01000 | 00 | 00000 | rs1 | rm | rd | 1010011 | ???????? |
150 01000 | 00 | 00001 | rs1 | rm | rd | 1010011 | FCVT.S.D |
151 01000 | 00 | 00010 | rs1 | rm | rd | 1010011 | **FCVT.S.H**|
152 01000 | 00 | 00011 | rs1 | rm | rd | 1010011 | FCVT.S.Q |
153 01000 | 00 | xxxxx | rs1 | rm | rd | 1010011 | rs2? |
154 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
155 01000 | 01 | 00000 | rs1 | rm | rd | 1010011 | FCVT.D.S |
156 01000 | 01 | 00001 | rs1 | rm | rd | 1010011 | ???????? |
157 01000 | 01 | 00010 | rs1 | rm | rd | 1010011 | **FCVT.D.H**|
158 01000 | 01 | 00011 | rs1 | rm | rd | 1010011 | FCVT.D.Q |
159 01000 | 01 | xxxxx | rs1 | rm | rd | 1010011 | rs2? |
160 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
161 01000 | 10 | 00000 | rs1 | rm | rd | 1010011 | FCVT.H.S |
162 01000 | 10 | 00001 | rs1 | rm | rd | 1010011 | **FCVT.H.D**|
163 01000 | 10 | 00010 | rs1 | rm | rd | 1010011 | ???????? |
164 01000 | 10 | 00011 | rs1 | rm | rd | 1010011 | FCVT.H.Q |
165 01000 | 10 | xxxxx | rs1 | rm | rd | 1010011 | rs2? |
166 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
167 01000 | 11 | 00000 | rs1 | rm | rd | 1010011 | FCVT.Q.S |
168 01000 | 11 | 00001 | rs1 | rm | rd | 1010011 | FCVT.Q.D |
169 01000 | 11 | 00010 | rs1 | rm | rd | 1010011 | **FCVT.Q.H**|
170 01000 | 11 | 00011 | rs1 | rm | rd | 1010011 | ???????? |
171 01000 | 11 | xxxxx | rs1 | rm | rd | 1010011 | rs2? |
172 """]]
173
174 ## funct5 = 01001 - unused
175
176 Brownfield encodings available.
177
178 ## funct5 = 01010 - unused
179
180 Brownfield encodings available.
181
182 ## funct5 = 01011
183
184 This table uses rs2 for encoding 1-operand FP operations, using
185 funct3 to specify the "rounding" mode
186
187 [[!table data="""
188 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function |
189 funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | name |
190 5 | 2 | 5 | 5 | 3 | 5 | 7 | |
191 01011 | xx | 00000 | rs1 | rm | rd | 1010011 | FSQRT.xx |
192 01011 | xx | 00001 | rs1 | rm | rd | 1010011 | **FRSQRT.xx** |
193 01011 | xx | 00010 | rs1 | rm | rd | 1010011 | **FSIN.xx** |
194 01011 | xx | 00011 | rs1 | rm | rd | 1010011 | **FCOS.xx** |
195 01011 | xx | 00100 | rs1 | rm | rd | 1010011 | **FATAN.xx** |
196 01011 | xx | 00101 | rs1 | rm | rd | 1010011 | **FEXP.xx** |
197 01011 | xx | 00110 | rs1 | rm | rd | 1010011 | **FLOG.xx** |
198 01011 | xx | 00111 | rs1 | rm | rd | 1010011 | **FRCP.xx** |
199 01011 | xx | 01000 | rs1 | rm | rd | 1010011 | ? |
200 01011 | xx | 01001 | rs1 | rm | rd | 1010011 | ? |
201 01011 | xx | 01010 | rs1 | rm | rd | 1010011 | ? |
202 01011 | xx | 01011 | rs1 | rm | rd | 1010011 | ? |
203 01011 | xx | 01100 | rs1 | rm | rd | 1010011 | ? |
204 01011 | xx | 01101 | rs1 | rm | rd | 1010011 | ? |
205 01011 | xx | 01110 | rs1 | rm | rd | 1010011 | ? |
206 01011 | xx | 01111 | rs1 | rm | rd | 1010011 | ? |
207 01011 | xx | 10000 | rs1 | rm | rd | 1010011 | ? |
208 01011 | xx | 10001 | rs1 | rm | rd | 1010011 | ? |
209 01011 | xx | 10010 | rs1 | rm | rd | 1010011 | ? |
210 01011 | xx | 10011 | rs1 | rm | rd | 1010011 | ? |
211 01011 | xx | 10100 | rs1 | rm | rd | 1010011 | ? |
212 01011 | xx | 10101 | rs1 | rm | rd | 1010011 | ? |
213 01011 | xx | 10110 | rs1 | rm | rd | 1010011 | ? |
214 01011 | xx | 10111 | rs1 | rm | rd | 1010011 | ? |
215 01011 | xx | 11000 | rs1 | rm | rd | 1010011 | ? |
216 01011 | xx | 11001 | rs1 | rm | rd | 1010011 | ? |
217 01011 | xx | 11010 | rs1 | rm | rd | 1010011 | ? |
218 01011 | xx | 11011 | rs1 | rm | rd | 1010011 | ? |
219 01011 | xx | 11100 | rs1 | rm | rd | 1010011 | ? |
220 01011 | xx | 11101 | rs1 | rm | rd | 1010011 | ? |
221 01011 | xx | 11110 | rs1 | rm | rd | 1010011 | ? |
222 01011 | xx | 11111 | rs1 | rm | rd | 1010011 | ? |
223 """]]
224
225 ## funct5 = 01100 - unused
226
227 Brownfield encodings available.
228
229 ## funct5 = 01101 - unused
230
231 Brownfield encodings available.
232
233 ## funct5 = 01110 - unused
234
235 Brownfield encodings available.
236
237 ## funct5 = 01111 - **FPOW**
238
239 Proposed for Zftrans - FPOW: "FP rs2 to the power of rs1"
240
241 ## funct5 = 10000 - unused
242
243 Brownfield encodings available.
244
245 ## funct5 = 10001 - unused
246
247 Brownfield encodings available.
248
249 ## funct5 = 10010 - unused
250
251 Brownfield encodings available.
252
253 ## funct5 = 10011 - unused
254
255 Brownfield encodings available.
256
257 ## funct5 = 10100
258
259 This table uses funct3 for encoding 2-operand FP "comparison" operations
260 where the result register is an **integer**
261
262 Notes:
263
264 * FNE missing?
265
266 [[!table data="""
267 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function |
268 funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | name |
269 5 | 2 | 5 | 5 | 3 | 5 | 7 | |
270 10100 | xx | rs2 | rs1 | 000 | rd | 1010011 | FLE.xx |
271 10100 | xx | rs2 | rs1 | 001 | rd | 1010011 | FLT.xx |
272 10100 | xx | rs2 | rs1 | 010 | rd | 1010011 | FEQ.xx |
273 10100 | xx | rs2 | rs1 | 011 | rd | 1010011 | ?f3=011 |
274 10100 | xx | rs2 | rs1 | 100 | rd | 1010011 | ?f3=100 |
275 10100 | xx | rs2 | rs1 | 101 | rd | 1010011 | ?f3=101 |
276 10100 | xx | rs2 | rs1 | 110 | rd | 1010011 | ?f3=110 |
277 10100 | xx | rs2 | rs1 | 111 | rd | 1010011 | ?f3=111 |
278 """]]
279
280 ## funct5 = 10101 - unused
281
282 Brownfield encodings available.
283
284 ## funct5 = 10110 - unused
285
286 Brownfield encodings available.
287
288 ## funct5 = 10111 - unused
289
290 Brownfield encodings available.
291
292 ## funct5 = 11000
293
294 This table uses rs2 for encoding 1-operand FP operations, using
295 funct3 to specify the "rounding" mode
296
297 Notes:
298
299 * FP16 logically deduced from fmt field (bits 25-26)
300
301 [[!table data="""
302 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function |
303 funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | name |
304 5 | 2 | 5 | 5 | 3 | 5 | 7 | |
305 11000 | 00 | 00000 | rs1 | rm | rd | 1010011 | FCVT.W.S |
306 11000 | 00 | 00001 | rs1 | rm | rd | 1010011 | FCVT.WU.S |
307 11000 | 00 | 00010 | rs1 | rm | rd | 1010011 | FCVT.L.S |
308 11000 | 00 | 00011 | rs1 | rm | rd | 1010011 | FCVT.LU.S |
309 11000 | 00 | xxxxx | rs1 | rm | rd | 1010011 | rs2? |
310 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
311 11000 | 01 | 00000 | rs1 | rm | rd | 1010011 | FCVT.W.D |
312 11000 | 01 | 00001 | rs1 | rm | rd | 1010011 | FCVT.WU.D |
313 11000 | 01 | 00010 | rs1 | rm | rd | 1010011 | FCVT.L.D |
314 11000 | 01 | 00011 | rs1 | rm | rd | 1010011 | FCVT.LU.D |
315 11000 | 01 | xxxxx | rs1 | rm | rd | 1010011 | rs2? |
316 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
317 11000 | 10 | 00000 | rs1 | rm | rd | 1010011 |**FCVT.W.H** |
318 11000 | 10 | 00001 | rs1 | rm | rd | 1010011 |**FCVT.WU.H**|
319 11000 | 10 | 00010 | rs1 | rm | rd | 1010011 |**FCVT.L.H** |
320 11000 | 10 | 00011 | rs1 | rm | rd | 1010011 |**FCVT.LU.H**|
321 11000 | 10 | xxxxx | rs1 | rm | rd | 1010011 | rs2? |
322 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
323 11000 | 11 | 00000 | rs1 | rm | rd | 1010011 | FCVT.W.Q |
324 11000 | 11 | 00001 | rs1 | rm | rd | 1010011 | FCVT.WU.Q |
325 11000 | 11 | 00010 | rs1 | rm | rd | 1010011 | FCVT.L.Q |
326 11000 | 11 | 00011 | rs1 | rm | rd | 1010011 | FCVT.LU.Q |
327 11000 | 11 | xxxxx | rs1 | rm | rd | 1010011 | rs2? |
328 """]]
329
330 ## funct5 = 11001 - unused
331
332 Brownfield encodings available.
333
334 ## funct5 = 11010
335
336 This table uses rs2 for encoding 1-operand FP operations, using
337 funct3 to specify the "rounding" mode
338
339 * FP16 logically deduced from fmt field (bits 25-26)
340
341 [[!table data="""
342 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function |
343 funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | name |
344 5 | 2 | 5 | 5 | 3 | 5 | 7 | |
345 11010 | 00 | 00000 | rs1 | rm | rd | 1010011 | FCVT.S.W |
346 11010 | 00 | 00001 | rs1 | rm | rd | 1010011 | FCVT.S.WU |
347 11010 | 00 | 00010 | rs1 | rm | rd | 1010011 | FCVT.S.L |
348 11010 | 00 | 00011 | rs1 | rm | rd | 1010011 | FCVT.S.LU |
349 11010 | 00 | xxxxx | rs1 | rm | rd | 1010011 | rs2? |
350 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
351 11010 | 01 | 00000 | rs1 | rm | rd | 1010011 | FCVT.D.W |
352 11010 | 01 | 00001 | rs1 | rm | rd | 1010011 | FCVT.D.WU |
353 11010 | 01 | 00010 | rs1 | rm | rd | 1010011 | FCVT.D.L |
354 11010 | 01 | 00011 | rs1 | rm | rd | 1010011 | FCVT.D.LU |
355 11010 | 01 | xxxxx | rs1 | rm | rd | 1010011 | rs2? |
356 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
357 11010 | 10 | 00000 | rs1 | rm | rd | 1010011 |**FCVT.H.W** |
358 11010 | 10 | 00001 | rs1 | rm | rd | 1010011 |**FCVT.H.WU**|
359 11010 | 10 | 00010 | rs1 | rm | rd | 1010011 |**FCVT.H.L** |
360 11010 | 10 | 00011 | rs1 | rm | rd | 1010011 |**FCVT.H.LU**|
361 11010 | 10 | xxxxx | rs1 | rm | rd | 1010011 | rs2? |
362 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
363 11010 | 11 | 00000 | rs1 | rm | rd | 1010011 | FCVT.Q.W |
364 11010 | 11 | 00001 | rs1 | rm | rd | 1010011 | FCVT.Q.WU |
365 11010 | 11 | 00010 | rs1 | rm | rd | 1010011 | FCVT.Q.L |
366 11010 | 11 | 00011 | rs1 | rm | rd | 1010011 | FCVT.Q.LU |
367 11010 | 11 | xxxxx | rs1 | rm | rd | 1010011 | rs2? |
368 """]]
369
370 ## funct5 = 11100
371
372 This table uses *both* rs2 *and* funct3 for encoding 1-operand FP operations.
373
374 Notes:
375
376 * FMV.X.Q is missing (alias of FMVH.X.D if it existed)
377 * FP16 logically deduced from fmt field (bits 25-26)
378 * FMVH.X.HW (half-word) missing?
379
380 [[!table data="""
381 31..27| 26..25| 24..20 |19..15|14...12| 11..7 | 6....0 | function |
382 funct5| SDHQ | rs2 | rs1 |funct3 | rd | opcode | name |
383 5 | 2 | 5 | 5 | 3 | 5 | 7 | |
384 11100 | 00 | 00000 | rs1 | 000 | rd | 1010011 | FMV.X.W |
385 11100 | 00 | 00000 | rs1 | 001 | rd | 1010011 | FCLASS.S |
386 11100 | 00 | xxxxx | rs1 | yyy | rd | 1010011 | rs2? f3? |
387 ------| ----- | ----- | -----| ----- | ----- | ------- | -------- |
388 11100 | 01 | 00000 | rs1 | 000 | rd | 1010011 | FMV.X.D **FMVH.X.W** |
389 11100 | 01 | 00000 | rs1 | 001 | rd | 1010011 | FCLASS.D |
390 11100 | 01 | xxxxx | rs1 | yyy | rd | 1010011 | rs2? f3? |
391 ------| ----- | ----- | -----| ----- | ----- | ------- | -------- |
392 11100 | 10 | 00000 | rs1 | 000 | rd | 1010011 |**FMV.X.H** |
393 11100 | 10 | 00000 | rs1 | 001 | rd | 1010011 |**FCLASS.H** |
394 11100 | 10 | xxxxx | rs1 | yyy | rd | 1010011 | rs2? f3? |
395 ------| ----- | ----- | -----| ----- | ----- | ------- | -------- |
396 11100 | 11 | 00000 | rs1 | 000 | rd | 1010011 | **FMVH.X.D** |
397 11100 | 11 | 00000 | rs1 | 001 | rd | 1010011 | FCLASS.Q |
398 11100 | xx | xxxxx | rs1 | yyy | rd | 1010011 | rs2? f3? |
399 """]]
400
401 ## funct5 = 11101 - unused
402
403 Brownfield encodings available.
404
405 ## funct5 = 11110
406
407 This table uses *both* rs2 *and* funct3 for encoding 1-operand FP operations.
408
409 Notes:
410
411 * FMV.Q.X is missing (as is FMVH.D.X)
412 * FMVH.W.X is missing (alias of FMV.D.X)
413 * FP16 logically deduced from fmt field (bits 25-26)
414 * FMVH.HW.X (half-word) missing?
415
416 [[!table data="""
417 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function |
418 funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | name |
419 5 | 2 | 5 | 5 | 3 | 5 | 7 | |
420 11110 | 00 | 00000 | rs1 | 000 | rd | 1010011 | FMV.W.X |
421 11110 | 00 | xxxxx | rs1 | yyy | rd | 1010011 | rs2? f3? |
422 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
423 11110 | 01 | 00000 | rs1 | 000 | rd | 1010011 | FMV.D.X |
424 11110 | 01 | xxxxx | rs1 | yyy | rd | 1010011 | rs2? f3? |
425 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
426 11110 | 10 | 00000 | rs1 | 000 | rd | 1010011 |**FMV.H.X** |
427 11110 | 10 | xxxxx | rs1 | yyy | rd | 1010011 | rs2? f3? |
428 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
429 11110 | 11 | 00000 | rs1 | 000 | rd | 1010011 | ? |
430 11110 | 11 | xxxxx | rs1 | yyy | rd | 1010011 | rs2? f3? |
431 """]]
432
433 ## funct5 = 11111 - unused
434
435 Brownfield encodings available.
436
437 ## funct5 = ????? (table template)
438
439 This table acts as a cut/paste template for creating brownfield encodings
440
441 [[!table data="""
442 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function |
443 funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | name |
444 5 | 2 | 5 | 5 | 3 | 5 | 7 | |
445 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
446 """]]
447