Skip to main content

asmkit/riscv/
emitter.rs

1//! Typed RISC-V emitter traits generated by `meta/riscv.py`.
2//!
3//! Invalid operand categories fail at compile time:
4//!
5//! ```compile_fail
6//! use asmkit::riscv::{Assembler, FaddSEmitter, Gp};
7//! fn require<T: FaddSEmitter<Gp, Gp, Gp, Gp>>() {}
8//! require::<Assembler<'static>>();
9//! ```
10//!
11//! ```compile_fail
12//! use asmkit::riscv::{Assembler, VaddVvEmitter, Vp};
13//! fn require<T: VaddVvEmitter<Vp, Vp, Vp, Vp>>() {}
14//! require::<Assembler<'static>>();
15//! ```
16//!
17//! ```compile_fail
18//! use asmkit::Sym;
19//! use asmkit::riscv::{Assembler, Gp, JalEmitter};
20//! fn require<T: JalEmitter<Gp, Sym>>() {}
21//! require::<Assembler<'static>>();
22//! ```
23//!
24//! ```
25//! use asmkit::Imm;
26//! use asmkit::riscv::{Assembler, FcvtmodWDEmitter, FmvWXEmitter, FmvXWEmitter, Fp, Gp, VfaddVfEmitter, Vp};
27//! fn require<T: FcvtmodWDEmitter<Gp, Fp> + FmvWXEmitter<Fp, Gp> + FmvXWEmitter<Gp, Fp> + VfaddVfEmitter<Vp, Vp, Fp, Imm>>() {}
28//! require::<Assembler<'static>>();
29//! ```
30//!
31//! ```compile_fail
32//! use asmkit::Imm;
33//! use asmkit::riscv::{Assembler, Gp, VfaddVfEmitter, Vp};
34//! fn require<T: VfaddVfEmitter<Vp, Vp, Gp, Imm>>() {}
35//! require::<Assembler<'static>>();
36//! ```
37//!
38//! ```compile_fail
39//! use asmkit::Label;
40//! use asmkit::riscv::{Assembler, Gp, JalrEmitter, LbEmitter};
41//! fn require<T: JalrEmitter<Gp, Gp, Label> + LbEmitter<Gp, Gp, Label>>() {}
42//! require::<Assembler<'static>>();
43//! ```
44use super::{assembler::*, opcodes::*, operands::*};
45use crate::core::operand::*;
46
47/* Automatically generated by parse_opcodes (meta/riscv.py). Do not edit by hand.
48 * Derived from riscv-opcodes (BSD-3-Clause) and riscv-unified-db
49 * (BSD-3-Clause-Clear); see meta/README.md for the input pins. */
50
51/// Integer add
52///
53/// Add the value in rs1 to rs2, and store the result in rd.
54/// Any overflow is thrown away.
55///
56/// # Forms
57/// Assembly: `add xd, xs1, xs2`
58/// Rust: `add(rd, rs1, rs2)`
59///
60/// # Arguments
61/// - `rd` — Destination register.
62/// - `rs1` — Source register.
63/// - `rs2` — Source register.
64pub trait AddEmitter<T0, T1, T2> {
65    fn add(&mut self, rd: T0, rs1: T1, rs2: T2);
66}
67
68/// Add unsigned word
69///
70/// This instruction performs an XLEN-wide addition between rs2 and the
71/// zero-extended least-significant word of rs1.
72///
73/// # Forms
74/// Assembly: `add.uw xd, xs1, xs2`
75/// Rust: `add_uw(rd, rs1, rs2)`
76///
77/// # Arguments
78/// - `rd` — Destination register.
79/// - `rs1` — Source register.
80/// - `rs2` — Source register.
81pub trait AddUwEmitter<T0, T1, T2> {
82    fn add_uw(&mut self, rd: T0, rs1: T1, rs2: T2);
83}
84
85/// Add immediate
86///
87/// Add an immediate to the value in rs1, and store the result in rd
88///
89/// # Forms
90/// Assembly: `addi xd, xs1, imm`
91/// Rust: `addi(rd, rs1, imm)`
92///
93/// # Arguments
94/// - `rd` — Destination register.
95/// - `rs1` — Source register.
96/// - `imm` — Immediate encoding value.
97pub trait AddiEmitter<T0, T1, T2> {
98    fn addi(&mut self, rd: T0, rs1: T1, imm: T2);
99}
100
101/// Add immediate word
102///
103/// Add an immediate to the 32-bit value in rs1, and store the sign extended result in rd
104///
105/// # Forms
106/// Assembly: `addiw xd, xs1, imm`
107/// Rust: `addiw(rd, rs1, imm)`
108///
109/// # Arguments
110/// - `rd` — Destination register.
111/// - `rs1` — Source register.
112/// - `imm` — Immediate encoding value.
113pub trait AddiwEmitter<T0, T1, T2> {
114    fn addiw(&mut self, rd: T0, rs1: T1, imm: T2);
115}
116
117/// Add word
118///
119/// Add the 32-bit values in rs1 to rs2, and store the sign-extended result in rd.
120/// Any overflow is thrown away.
121///
122/// # Forms
123/// Assembly: `addw xd, xs1, xs2`
124/// Rust: `addw(rd, rs1, rs2)`
125///
126/// # Arguments
127/// - `rd` — Destination register.
128/// - `rs1` — Source register.
129/// - `rs2` — Source register.
130pub trait AddwEmitter<T0, T1, T2> {
131    fn addw(&mut self, rd: T0, rs1: T1, rs2: T2);
132}
133
134/// RISC-V `aes32dsi` instruction.
135///
136/// # Forms
137/// Assembly: `aes32dsi xd, xs1, xs2, bs`
138/// Rust: `aes32dsi(rd, rs1, rs2, bs)`
139///
140/// # Arguments
141/// - `rd` — Destination register.
142/// - `rs1` — Source register.
143/// - `rs2` — Source register.
144/// - `bs` — Immediate encoding value.
145pub trait Aes32DsiEmitter<T0, T1, T2, T3> {
146    fn aes32dsi(&mut self, rd: T0, rs1: T1, rs2: T2, bs: T3);
147}
148
149/// RISC-V `aes32dsmi` instruction.
150///
151/// # Forms
152/// Assembly: `aes32dsmi xd, xs1, xs2, bs`
153/// Rust: `aes32dsmi(rd, rs1, rs2, bs)`
154///
155/// # Arguments
156/// - `rd` — Destination register.
157/// - `rs1` — Source register.
158/// - `rs2` — Source register.
159/// - `bs` — Immediate encoding value.
160pub trait Aes32DsmiEmitter<T0, T1, T2, T3> {
161    fn aes32dsmi(&mut self, rd: T0, rs1: T1, rs2: T2, bs: T3);
162}
163
164/// RISC-V `aes32esi` instruction.
165///
166/// # Forms
167/// Assembly: `aes32esi xd, xs1, xs2, bs`
168/// Rust: `aes32esi(rd, rs1, rs2, bs)`
169///
170/// # Arguments
171/// - `rd` — Destination register.
172/// - `rs1` — Source register.
173/// - `rs2` — Source register.
174/// - `bs` — Immediate encoding value.
175pub trait Aes32EsiEmitter<T0, T1, T2, T3> {
176    fn aes32esi(&mut self, rd: T0, rs1: T1, rs2: T2, bs: T3);
177}
178
179/// RISC-V `aes32esmi` instruction.
180///
181/// # Forms
182/// Assembly: `aes32esmi xd, xs1, xs2, bs`
183/// Rust: `aes32esmi(rd, rs1, rs2, bs)`
184///
185/// # Arguments
186/// - `rd` — Destination register.
187/// - `rs1` — Source register.
188/// - `rs2` — Source register.
189/// - `bs` — Immediate encoding value.
190pub trait Aes32EsmiEmitter<T0, T1, T2, T3> {
191    fn aes32esmi(&mut self, rd: T0, rs1: T1, rs2: T2, bs: T3);
192}
193
194/// RISC-V `aes64ds` instruction.
195///
196/// # Forms
197/// Assembly: `aes64ds xd, xs1, xs2`
198/// Rust: `aes64ds(rd, rs1, rs2)`
199///
200/// # Arguments
201/// - `rd` — Destination register.
202/// - `rs1` — Source register.
203/// - `rs2` — Source register.
204pub trait Aes64DsEmitter<T0, T1, T2> {
205    fn aes64ds(&mut self, rd: T0, rs1: T1, rs2: T2);
206}
207
208/// RISC-V `aes64dsm` instruction.
209///
210/// # Forms
211/// Assembly: `aes64dsm xd, xs1, xs2`
212/// Rust: `aes64dsm(rd, rs1, rs2)`
213///
214/// # Arguments
215/// - `rd` — Destination register.
216/// - `rs1` — Source register.
217/// - `rs2` — Source register.
218pub trait Aes64DsmEmitter<T0, T1, T2> {
219    fn aes64dsm(&mut self, rd: T0, rs1: T1, rs2: T2);
220}
221
222/// RISC-V `aes64es` instruction.
223///
224/// # Forms
225/// Assembly: `aes64es xd, xs1, xs2`
226/// Rust: `aes64es(rd, rs1, rs2)`
227///
228/// # Arguments
229/// - `rd` — Destination register.
230/// - `rs1` — Source register.
231/// - `rs2` — Source register.
232pub trait Aes64EsEmitter<T0, T1, T2> {
233    fn aes64es(&mut self, rd: T0, rs1: T1, rs2: T2);
234}
235
236/// RISC-V `aes64esm` instruction.
237///
238/// # Forms
239/// Assembly: `aes64esm xd, xs1, xs2`
240/// Rust: `aes64esm(rd, rs1, rs2)`
241///
242/// # Arguments
243/// - `rd` — Destination register.
244/// - `rs1` — Source register.
245/// - `rs2` — Source register.
246pub trait Aes64EsmEmitter<T0, T1, T2> {
247    fn aes64esm(&mut self, rd: T0, rs1: T1, rs2: T2);
248}
249
250/// RISC-V `aes64im` instruction.
251///
252/// # Forms
253/// Assembly: `aes64im xd, xs1`
254/// Rust: `aes64im(rd, rs1)`
255///
256/// # Arguments
257/// - `rd` — Destination register.
258/// - `rs1` — Source register.
259pub trait Aes64ImEmitter<T0, T1> {
260    fn aes64im(&mut self, rd: T0, rs1: T1);
261}
262
263/// RISC-V `aes64ks1i` instruction.
264///
265/// # Forms
266/// Assembly: `aes64ks1i xd, xs1, rnum`
267/// Rust: `aes64ks1i(rd, rs1, rnum)`
268///
269/// # Arguments
270/// - `rd` — Destination register.
271/// - `rs1` — Source register.
272/// - `rnum` — Immediate encoding value.
273pub trait Aes64Ks1IEmitter<T0, T1, T2> {
274    fn aes64ks1i(&mut self, rd: T0, rs1: T1, rnum: T2);
275}
276
277/// RISC-V `aes64ks2` instruction.
278///
279/// # Forms
280/// Assembly: `aes64ks2 xd, xs1, xs2`
281/// Rust: `aes64ks2(rd, rs1, rs2)`
282///
283/// # Arguments
284/// - `rd` — Destination register.
285/// - `rs1` — Source register.
286/// - `rs2` — Source register.
287pub trait Aes64Ks2Emitter<T0, T1, T2> {
288    fn aes64ks2(&mut self, rd: T0, rs1: T1, rs2: T2);
289}
290
291/// RISC-V `amoadd.b` instruction.
292///
293/// # Forms
294/// Assembly: `amoadd.b xd, xs1, xs2, aq, rl`
295/// Rust: `amoadd_b(rd, rs1, rs2, aq, rl)`
296///
297/// # Arguments
298/// - `rd` — Destination register.
299/// - `rs1` — Memory base register.
300/// - `rs2` — Source register.
301/// - `aq` — Acquire-order bit.
302/// - `rl` — Release-order bit; retained for the existing emitter API.
303pub trait AmoaddBEmitter<T0, T1, T2, T3, T4> {
304    fn amoadd_b(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
305}
306
307/// Atomic fetch-and-add doubleword
308///
309/// Atomically:
310///
311///   * Load the doubleword at address _rs1_
312///   * Write the loaded value into _rd_
313///   * Add the value of register _rs2_ to the loaded value
314///   * Write the sum to the address in _rs1_
315///
316/// # Forms
317/// Assembly: `amoadd.d xd, xs2, (xs1)`
318/// Rust: `amoadd_d(rd, rs1, rs2, aq, rl)`
319///
320/// # Arguments
321/// - `rd` — Destination register.
322/// - `rs1` — Memory base register.
323/// - `rs2` — Source register.
324/// - `aq` — Acquire-order bit.
325/// - `rl` — Release-order bit; retained for the existing emitter API.
326pub trait AmoaddDEmitter<T0, T1, T2, T3, T4> {
327    fn amoadd_d(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
328}
329
330/// RISC-V `amoadd.h` instruction.
331///
332/// # Forms
333/// Assembly: `amoadd.h xd, xs1, xs2, aq, rl`
334/// Rust: `amoadd_h(rd, rs1, rs2, aq, rl)`
335///
336/// # Arguments
337/// - `rd` — Destination register.
338/// - `rs1` — Memory base register.
339/// - `rs2` — Source register.
340/// - `aq` — Acquire-order bit.
341/// - `rl` — Release-order bit; retained for the existing emitter API.
342pub trait AmoaddHEmitter<T0, T1, T2, T3, T4> {
343    fn amoadd_h(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
344}
345
346/// Atomic fetch-and-add word
347///
348/// Atomically:
349///
350///   * Load the word at address _rs1_
351///   * Write the sign-extended value into _rd_
352///   * Add the least-significant word of register _rs2_ to the loaded value
353///   * Write the sum to the address in _rs1_
354///
355/// # Forms
356/// Assembly: `amoadd.w xd, xs2, (xrs1)`
357/// Rust: `amoadd_w(rd, rs1, rs2, aq, rl)`
358///
359/// # Arguments
360/// - `rd` — Destination register.
361/// - `rs1` — Memory base register.
362/// - `rs2` — Source register.
363/// - `aq` — Acquire-order bit.
364/// - `rl` — Release-order bit; retained for the existing emitter API.
365pub trait AmoaddWEmitter<T0, T1, T2, T3, T4> {
366    fn amoadd_w(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
367}
368
369/// RISC-V `amoand.b` instruction.
370///
371/// # Forms
372/// Assembly: `amoand.b xd, xs1, xs2, aq, rl`
373/// Rust: `amoand_b(rd, rs1, rs2, aq, rl)`
374///
375/// # Arguments
376/// - `rd` — Destination register.
377/// - `rs1` — Memory base register.
378/// - `rs2` — Source register.
379/// - `aq` — Acquire-order bit.
380/// - `rl` — Release-order bit; retained for the existing emitter API.
381pub trait AmoandBEmitter<T0, T1, T2, T3, T4> {
382    fn amoand_b(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
383}
384
385/// Atomic fetch-and-and doubleword
386///
387/// Atomically:
388///
389///   * Load the doubleword at address _rs1_
390///   * Write the loaded value into _rd_
391///   * AND the value of register _rs2_ to the loaded value
392///   * Write the result to the address in _rs1_
393///
394/// # Forms
395/// Assembly: `amoand.d xd, xs2, (xrs1)`
396/// Rust: `amoand_d(rd, rs1, rs2, aq, rl)`
397///
398/// # Arguments
399/// - `rd` — Destination register.
400/// - `rs1` — Memory base register.
401/// - `rs2` — Source register.
402/// - `aq` — Acquire-order bit.
403/// - `rl` — Release-order bit; retained for the existing emitter API.
404pub trait AmoandDEmitter<T0, T1, T2, T3, T4> {
405    fn amoand_d(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
406}
407
408/// RISC-V `amoand.h` instruction.
409///
410/// # Forms
411/// Assembly: `amoand.h xd, xs1, xs2, aq, rl`
412/// Rust: `amoand_h(rd, rs1, rs2, aq, rl)`
413///
414/// # Arguments
415/// - `rd` — Destination register.
416/// - `rs1` — Memory base register.
417/// - `rs2` — Source register.
418/// - `aq` — Acquire-order bit.
419/// - `rl` — Release-order bit; retained for the existing emitter API.
420pub trait AmoandHEmitter<T0, T1, T2, T3, T4> {
421    fn amoand_h(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
422}
423
424/// Atomic fetch-and-and word
425///
426/// Atomically:
427///
428///   * Load the word at address _rs1_
429///   * Write the sign-extended value into _rd_
430///   * AND the least-significant word of register _rs2_ to the loaded value
431///   * Write the result to the address in _rs1_
432///
433/// # Forms
434/// Assembly: `amoand.w xd, xs2, (xrs1)`
435/// Rust: `amoand_w(rd, rs1, rs2, aq, rl)`
436///
437/// # Arguments
438/// - `rd` — Destination register.
439/// - `rs1` — Memory base register.
440/// - `rs2` — Source register.
441/// - `aq` — Acquire-order bit.
442/// - `rl` — Release-order bit; retained for the existing emitter API.
443pub trait AmoandWEmitter<T0, T1, T2, T3, T4> {
444    fn amoand_w(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
445}
446
447/// RISC-V `amocas.b` instruction.
448///
449/// # Forms
450/// Assembly: `amocas.b xd, xs1, xs2, aq, rl`
451/// Rust: `amocas_b(rd, rs1, rs2, aq, rl)`
452///
453/// # Arguments
454/// - `rd` — Destination register.
455/// - `rs1` — Memory base register.
456/// - `rs2` — Source register.
457/// - `aq` — Acquire-order bit.
458/// - `rl` — Release-order bit; retained for the existing emitter API.
459pub trait AmocasBEmitter<T0, T1, T2, T3, T4> {
460    fn amocas_b(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
461}
462
463/// RISC-V `amocas.d` instruction.
464///
465/// # Forms
466/// Assembly: `amocas.d xd, xs1, xs2, aq, rl`
467/// Rust: `amocas_d(rd, rs1, rs2, aq, rl)`
468///
469/// # Arguments
470/// - `rd` — Destination register.
471/// - `rs1` — Memory base register.
472/// - `rs2` — Source register.
473/// - `aq` — Acquire-order bit.
474/// - `rl` — Release-order bit; retained for the existing emitter API.
475pub trait AmocasDEmitter<T0, T1, T2, T3, T4> {
476    fn amocas_d(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
477}
478
479/// RISC-V `amocas.h` instruction.
480///
481/// # Forms
482/// Assembly: `amocas.h xd, xs1, xs2, aq, rl`
483/// Rust: `amocas_h(rd, rs1, rs2, aq, rl)`
484///
485/// # Arguments
486/// - `rd` — Destination register.
487/// - `rs1` — Memory base register.
488/// - `rs2` — Source register.
489/// - `aq` — Acquire-order bit.
490/// - `rl` — Release-order bit; retained for the existing emitter API.
491pub trait AmocasHEmitter<T0, T1, T2, T3, T4> {
492    fn amocas_h(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
493}
494
495/// RISC-V `amocas.q` instruction.
496///
497/// # Forms
498/// Assembly: `amocas.q xd, xs1, xs2, aq, rl`
499/// Rust: `amocas_q(rd, rs1, rs2, aq, rl)`
500///
501/// # Arguments
502/// - `rd` — Destination register.
503/// - `rs1` — Memory base register.
504/// - `rs2` — Source register.
505/// - `aq` — Acquire-order bit.
506/// - `rl` — Release-order bit; retained for the existing emitter API.
507pub trait AmocasQEmitter<T0, T1, T2, T3, T4> {
508    fn amocas_q(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
509}
510
511/// RISC-V `amocas.w` instruction.
512///
513/// # Forms
514/// Assembly: `amocas.w xd, xs1, xs2, aq, rl`
515/// Rust: `amocas_w(rd, rs1, rs2, aq, rl)`
516///
517/// # Arguments
518/// - `rd` — Destination register.
519/// - `rs1` — Memory base register.
520/// - `rs2` — Source register.
521/// - `aq` — Acquire-order bit.
522/// - `rl` — Release-order bit; retained for the existing emitter API.
523pub trait AmocasWEmitter<T0, T1, T2, T3, T4> {
524    fn amocas_w(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
525}
526
527/// RISC-V `amomax.b` instruction.
528///
529/// # Forms
530/// Assembly: `amomax.b xd, xs1, xs2, aq, rl`
531/// Rust: `amomax_b(rd, rs1, rs2, aq, rl)`
532///
533/// # Arguments
534/// - `rd` — Destination register.
535/// - `rs1` — Memory base register.
536/// - `rs2` — Source register.
537/// - `aq` — Acquire-order bit.
538/// - `rl` — Release-order bit; retained for the existing emitter API.
539pub trait AmomaxBEmitter<T0, T1, T2, T3, T4> {
540    fn amomax_b(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
541}
542
543/// Atomic MAX doubleword
544///
545/// Atomically:
546///
547///   * Load the doubleword at address _rs1_
548///   * Write the loaded value into _rd_
549///   * Signed compare the value of register _rs2_ to the loaded value, and select the maximum value
550///   * Write the maximum to the address in _rs1_
551///
552/// # Forms
553/// Assembly: `amomax.d xd, xs2, (xrs1)`
554/// Rust: `amomax_d(rd, rs1, rs2, aq, rl)`
555///
556/// # Arguments
557/// - `rd` — Destination register.
558/// - `rs1` — Memory base register.
559/// - `rs2` — Source register.
560/// - `aq` — Acquire-order bit.
561/// - `rl` — Release-order bit; retained for the existing emitter API.
562pub trait AmomaxDEmitter<T0, T1, T2, T3, T4> {
563    fn amomax_d(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
564}
565
566/// RISC-V `amomax.h` instruction.
567///
568/// # Forms
569/// Assembly: `amomax.h xd, xs1, xs2, aq, rl`
570/// Rust: `amomax_h(rd, rs1, rs2, aq, rl)`
571///
572/// # Arguments
573/// - `rd` — Destination register.
574/// - `rs1` — Memory base register.
575/// - `rs2` — Source register.
576/// - `aq` — Acquire-order bit.
577/// - `rl` — Release-order bit; retained for the existing emitter API.
578pub trait AmomaxHEmitter<T0, T1, T2, T3, T4> {
579    fn amomax_h(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
580}
581
582/// Atomic MAX word
583///
584/// Atomically:
585///
586///   * Load the word at address _rs1_
587///   * Write the sign-extended value into _rd_
588///   * Signed compare the least-significant word of register _rs2_ to the loaded value, and select the maximum value
589///   * Write the maximum to the address in _rs1_
590///
591/// # Forms
592/// Assembly: `amomax.w xd, xs2, (xrs1)`
593/// Rust: `amomax_w(rd, rs1, rs2, aq, rl)`
594///
595/// # Arguments
596/// - `rd` — Destination register.
597/// - `rs1` — Memory base register.
598/// - `rs2` — Source register.
599/// - `aq` — Acquire-order bit.
600/// - `rl` — Release-order bit; retained for the existing emitter API.
601pub trait AmomaxWEmitter<T0, T1, T2, T3, T4> {
602    fn amomax_w(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
603}
604
605/// RISC-V `amomaxu.b` instruction.
606///
607/// # Forms
608/// Assembly: `amomaxu.b xd, xs1, xs2, aq, rl`
609/// Rust: `amomaxu_b(rd, rs1, rs2, aq, rl)`
610///
611/// # Arguments
612/// - `rd` — Destination register.
613/// - `rs1` — Memory base register.
614/// - `rs2` — Source register.
615/// - `aq` — Acquire-order bit.
616/// - `rl` — Release-order bit; retained for the existing emitter API.
617pub trait AmomaxuBEmitter<T0, T1, T2, T3, T4> {
618    fn amomaxu_b(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
619}
620
621/// Atomic MAX unsigned doubleword
622///
623/// Atomically:
624///
625///   * Load the doubleword at address _rs1_
626///   * Write the loaded value into _rd_
627///   * Unsigned compare the value of register _rs2_ to the loaded value, and select the maximum value
628///   * Write the maximum to the address in _rs1_
629///
630/// # Forms
631/// Assembly: `amomaxu.d xd, xs2, (xrs1)`
632/// Rust: `amomaxu_d(rd, rs1, rs2, aq, rl)`
633///
634/// # Arguments
635/// - `rd` — Destination register.
636/// - `rs1` — Memory base register.
637/// - `rs2` — Source register.
638/// - `aq` — Acquire-order bit.
639/// - `rl` — Release-order bit; retained for the existing emitter API.
640pub trait AmomaxuDEmitter<T0, T1, T2, T3, T4> {
641    fn amomaxu_d(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
642}
643
644/// RISC-V `amomaxu.h` instruction.
645///
646/// # Forms
647/// Assembly: `amomaxu.h xd, xs1, xs2, aq, rl`
648/// Rust: `amomaxu_h(rd, rs1, rs2, aq, rl)`
649///
650/// # Arguments
651/// - `rd` — Destination register.
652/// - `rs1` — Memory base register.
653/// - `rs2` — Source register.
654/// - `aq` — Acquire-order bit.
655/// - `rl` — Release-order bit; retained for the existing emitter API.
656pub trait AmomaxuHEmitter<T0, T1, T2, T3, T4> {
657    fn amomaxu_h(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
658}
659
660/// Atomic MAX unsigned word
661///
662/// Atomically:
663///
664///   * Load the word at address _rs1_
665///   * Write the sign-extended value into _rd_
666///   * Unsigned compare the least-significant word of register _rs2_ to the loaded value, and select the maximum value
667///   * Write the maximum to the address in _rs1_
668///
669/// # Forms
670/// Assembly: `amomaxu.w xd, xs2, (xrs1)`
671/// Rust: `amomaxu_w(rd, rs1, rs2, aq, rl)`
672///
673/// # Arguments
674/// - `rd` — Destination register.
675/// - `rs1` — Memory base register.
676/// - `rs2` — Source register.
677/// - `aq` — Acquire-order bit.
678/// - `rl` — Release-order bit; retained for the existing emitter API.
679pub trait AmomaxuWEmitter<T0, T1, T2, T3, T4> {
680    fn amomaxu_w(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
681}
682
683/// RISC-V `amomin.b` instruction.
684///
685/// # Forms
686/// Assembly: `amomin.b xd, xs1, xs2, aq, rl`
687/// Rust: `amomin_b(rd, rs1, rs2, aq, rl)`
688///
689/// # Arguments
690/// - `rd` — Destination register.
691/// - `rs1` — Memory base register.
692/// - `rs2` — Source register.
693/// - `aq` — Acquire-order bit.
694/// - `rl` — Release-order bit; retained for the existing emitter API.
695pub trait AmominBEmitter<T0, T1, T2, T3, T4> {
696    fn amomin_b(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
697}
698
699/// Atomic MIN doubleword
700///
701/// Atomically:
702///
703///   * Load the doubleword at address _rs1_
704///   * Write the loaded value into _rd_
705///   * Signed compare the value of register _rs2_ to the loaded value, and select the minimum value
706///   * Write the minimum to the address in _rs1_
707///
708/// # Forms
709/// Assembly: `amomin.d xd, xs2, (xrs1)`
710/// Rust: `amomin_d(rd, rs1, rs2, aq, rl)`
711///
712/// # Arguments
713/// - `rd` — Destination register.
714/// - `rs1` — Memory base register.
715/// - `rs2` — Source register.
716/// - `aq` — Acquire-order bit.
717/// - `rl` — Release-order bit; retained for the existing emitter API.
718pub trait AmominDEmitter<T0, T1, T2, T3, T4> {
719    fn amomin_d(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
720}
721
722/// RISC-V `amomin.h` instruction.
723///
724/// # Forms
725/// Assembly: `amomin.h xd, xs1, xs2, aq, rl`
726/// Rust: `amomin_h(rd, rs1, rs2, aq, rl)`
727///
728/// # Arguments
729/// - `rd` — Destination register.
730/// - `rs1` — Memory base register.
731/// - `rs2` — Source register.
732/// - `aq` — Acquire-order bit.
733/// - `rl` — Release-order bit; retained for the existing emitter API.
734pub trait AmominHEmitter<T0, T1, T2, T3, T4> {
735    fn amomin_h(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
736}
737
738/// Atomic MIN word
739///
740/// Atomically:
741///
742///   * Load the word at address _rs1_
743///   * Write the sign-extended value into _rd_
744///   * Signed compare the least-significant word of register _rs2_ to the loaded value, and select the minimum value
745///   * Write the result to the address in _rs1_
746///
747/// # Forms
748/// Assembly: `amomin.w xd, xs2, (xrs1)`
749/// Rust: `amomin_w(rd, rs1, rs2, aq, rl)`
750///
751/// # Arguments
752/// - `rd` — Destination register.
753/// - `rs1` — Memory base register.
754/// - `rs2` — Source register.
755/// - `aq` — Acquire-order bit.
756/// - `rl` — Release-order bit; retained for the existing emitter API.
757pub trait AmominWEmitter<T0, T1, T2, T3, T4> {
758    fn amomin_w(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
759}
760
761/// RISC-V `amominu.b` instruction.
762///
763/// # Forms
764/// Assembly: `amominu.b xd, xs1, xs2, aq, rl`
765/// Rust: `amominu_b(rd, rs1, rs2, aq, rl)`
766///
767/// # Arguments
768/// - `rd` — Destination register.
769/// - `rs1` — Memory base register.
770/// - `rs2` — Source register.
771/// - `aq` — Acquire-order bit.
772/// - `rl` — Release-order bit; retained for the existing emitter API.
773pub trait AmominuBEmitter<T0, T1, T2, T3, T4> {
774    fn amominu_b(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
775}
776
777/// Atomic MIN unsigned doubleword
778///
779/// Atomically:
780///
781///   * Load the doubleword at address _rs1_
782///   * Write the loaded value into _rd_
783///   * Unsigned compare the value of register _rs2_ to the loaded value, and select the minimum value
784///   * Write the minimum to the address in _rs1_
785///
786/// # Forms
787/// Assembly: `amominu.d xd, xs2, (xrs1)`
788/// Rust: `amominu_d(rd, rs1, rs2, aq, rl)`
789///
790/// # Arguments
791/// - `rd` — Destination register.
792/// - `rs1` — Memory base register.
793/// - `rs2` — Source register.
794/// - `aq` — Acquire-order bit.
795/// - `rl` — Release-order bit; retained for the existing emitter API.
796pub trait AmominuDEmitter<T0, T1, T2, T3, T4> {
797    fn amominu_d(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
798}
799
800/// RISC-V `amominu.h` instruction.
801///
802/// # Forms
803/// Assembly: `amominu.h xd, xs1, xs2, aq, rl`
804/// Rust: `amominu_h(rd, rs1, rs2, aq, rl)`
805///
806/// # Arguments
807/// - `rd` — Destination register.
808/// - `rs1` — Memory base register.
809/// - `rs2` — Source register.
810/// - `aq` — Acquire-order bit.
811/// - `rl` — Release-order bit; retained for the existing emitter API.
812pub trait AmominuHEmitter<T0, T1, T2, T3, T4> {
813    fn amominu_h(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
814}
815
816/// Atomic MIN unsigned word
817///
818/// Atomically:
819///
820///   * Load the word at address _rs1_
821///   * Write the sign-extended value into _rd_
822///   * Unsigned compare the least-significant word of register _rs2_ to the loaded word, and select the minimum value
823///   * Write the result to the address in _rs1_
824///
825/// # Forms
826/// Assembly: `amominu.w xd, xs2, (xrs1)`
827/// Rust: `amominu_w(rd, rs1, rs2, aq, rl)`
828///
829/// # Arguments
830/// - `rd` — Destination register.
831/// - `rs1` — Memory base register.
832/// - `rs2` — Source register.
833/// - `aq` — Acquire-order bit.
834/// - `rl` — Release-order bit; retained for the existing emitter API.
835pub trait AmominuWEmitter<T0, T1, T2, T3, T4> {
836    fn amominu_w(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
837}
838
839/// RISC-V `amoor.b` instruction.
840///
841/// # Forms
842/// Assembly: `amoor.b xd, xs1, xs2, aq, rl`
843/// Rust: `amoor_b(rd, rs1, rs2, aq, rl)`
844///
845/// # Arguments
846/// - `rd` — Destination register.
847/// - `rs1` — Memory base register.
848/// - `rs2` — Source register.
849/// - `aq` — Acquire-order bit.
850/// - `rl` — Release-order bit; retained for the existing emitter API.
851pub trait AmoorBEmitter<T0, T1, T2, T3, T4> {
852    fn amoor_b(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
853}
854
855/// Atomic fetch-and-or doubleword
856///
857/// Atomically:
858///
859///   * Load the doubleword at address _rs1_
860///   * Write the loaded value into _rd_
861///   * OR the value of register _rs2_ to the loaded value
862///   * Write the result to the address in _rs1_
863///
864/// # Forms
865/// Assembly: `amoor.d xd, xs2, (xrs1)`
866/// Rust: `amoor_d(rd, rs1, rs2, aq, rl)`
867///
868/// # Arguments
869/// - `rd` — Destination register.
870/// - `rs1` — Memory base register.
871/// - `rs2` — Source register.
872/// - `aq` — Acquire-order bit.
873/// - `rl` — Release-order bit; retained for the existing emitter API.
874pub trait AmoorDEmitter<T0, T1, T2, T3, T4> {
875    fn amoor_d(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
876}
877
878/// RISC-V `amoor.h` instruction.
879///
880/// # Forms
881/// Assembly: `amoor.h xd, xs1, xs2, aq, rl`
882/// Rust: `amoor_h(rd, rs1, rs2, aq, rl)`
883///
884/// # Arguments
885/// - `rd` — Destination register.
886/// - `rs1` — Memory base register.
887/// - `rs2` — Source register.
888/// - `aq` — Acquire-order bit.
889/// - `rl` — Release-order bit; retained for the existing emitter API.
890pub trait AmoorHEmitter<T0, T1, T2, T3, T4> {
891    fn amoor_h(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
892}
893
894/// Atomic fetch-and-or word
895///
896/// Atomically:
897///
898///   * Load the word at address _rs1_
899///   * Write the sign-extended value into _rd_
900///   * OR the least-significant word of register _rs2_ to the loaded value
901///   * Write the result to the address in _rs1_
902///
903/// # Forms
904/// Assembly: `amoor.w xd, xs2, (xrs1)`
905/// Rust: `amoor_w(rd, rs1, rs2, aq, rl)`
906///
907/// # Arguments
908/// - `rd` — Destination register.
909/// - `rs1` — Memory base register.
910/// - `rs2` — Source register.
911/// - `aq` — Acquire-order bit.
912/// - `rl` — Release-order bit; retained for the existing emitter API.
913pub trait AmoorWEmitter<T0, T1, T2, T3, T4> {
914    fn amoor_w(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
915}
916
917/// RISC-V `amoswap.b` instruction.
918///
919/// # Forms
920/// Assembly: `amoswap.b xd, xs1, xs2, aq, rl`
921/// Rust: `amoswap_b(rd, rs1, rs2, aq, rl)`
922///
923/// # Arguments
924/// - `rd` — Destination register.
925/// - `rs1` — Memory base register.
926/// - `rs2` — Source register.
927/// - `aq` — Acquire-order bit.
928/// - `rl` — Release-order bit; retained for the existing emitter API.
929pub trait AmoswapBEmitter<T0, T1, T2, T3, T4> {
930    fn amoswap_b(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
931}
932
933/// Atomic SWAP doubleword
934///
935/// Atomically:
936///
937///   * Load the doubleword at address _rs1_
938///   * Write the value into _rd_
939///   * Store the value of register _rs2_ to the address in _rs1_
940///
941/// # Forms
942/// Assembly: `amoswap.d xd, xs2, (xrs1)`
943/// Rust: `amoswap_d(rd, rs1, rs2, aq, rl)`
944///
945/// # Arguments
946/// - `rd` — Destination register.
947/// - `rs1` — Memory base register.
948/// - `rs2` — Source register.
949/// - `aq` — Acquire-order bit.
950/// - `rl` — Release-order bit; retained for the existing emitter API.
951pub trait AmoswapDEmitter<T0, T1, T2, T3, T4> {
952    fn amoswap_d(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
953}
954
955/// RISC-V `amoswap.h` instruction.
956///
957/// # Forms
958/// Assembly: `amoswap.h xd, xs1, xs2, aq, rl`
959/// Rust: `amoswap_h(rd, rs1, rs2, aq, rl)`
960///
961/// # Arguments
962/// - `rd` — Destination register.
963/// - `rs1` — Memory base register.
964/// - `rs2` — Source register.
965/// - `aq` — Acquire-order bit.
966/// - `rl` — Release-order bit; retained for the existing emitter API.
967pub trait AmoswapHEmitter<T0, T1, T2, T3, T4> {
968    fn amoswap_h(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
969}
970
971/// Atomic SWAP word
972///
973/// Atomically:
974///
975///   * Load the word at address _rs1_
976///   * Write the sign-extended value into _rd_
977///   * Store the least-significant word of register _rs2_ to the address in _rs1_
978///
979/// # Forms
980/// Assembly: `amoswap.w xd, xs2, (xrs1)`
981/// Rust: `amoswap_w(rd, rs1, rs2, aq, rl)`
982///
983/// # Arguments
984/// - `rd` — Destination register.
985/// - `rs1` — Memory base register.
986/// - `rs2` — Source register.
987/// - `aq` — Acquire-order bit.
988/// - `rl` — Release-order bit; retained for the existing emitter API.
989pub trait AmoswapWEmitter<T0, T1, T2, T3, T4> {
990    fn amoswap_w(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
991}
992
993/// RISC-V `amoxor.b` instruction.
994///
995/// # Forms
996/// Assembly: `amoxor.b xd, xs1, xs2, aq, rl`
997/// Rust: `amoxor_b(rd, rs1, rs2, aq, rl)`
998///
999/// # Arguments
1000/// - `rd` — Destination register.
1001/// - `rs1` — Memory base register.
1002/// - `rs2` — Source register.
1003/// - `aq` — Acquire-order bit.
1004/// - `rl` — Release-order bit; retained for the existing emitter API.
1005pub trait AmoxorBEmitter<T0, T1, T2, T3, T4> {
1006    fn amoxor_b(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
1007}
1008
1009/// Atomic fetch-and-xor doubleword
1010///
1011/// Atomically:
1012///
1013///   * Load the doubleword at address _rs1_
1014///   * Write the loaded value into _rd_
1015///   * XOR the value of register _rs2_ to the loaded value
1016///   * Write the result to the address in _rs1_
1017///
1018/// # Forms
1019/// Assembly: `amoxor.d xd, xs2, (xrs1)`
1020/// Rust: `amoxor_d(rd, rs1, rs2, aq, rl)`
1021///
1022/// # Arguments
1023/// - `rd` — Destination register.
1024/// - `rs1` — Memory base register.
1025/// - `rs2` — Source register.
1026/// - `aq` — Acquire-order bit.
1027/// - `rl` — Release-order bit; retained for the existing emitter API.
1028pub trait AmoxorDEmitter<T0, T1, T2, T3, T4> {
1029    fn amoxor_d(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
1030}
1031
1032/// RISC-V `amoxor.h` instruction.
1033///
1034/// # Forms
1035/// Assembly: `amoxor.h xd, xs1, xs2, aq, rl`
1036/// Rust: `amoxor_h(rd, rs1, rs2, aq, rl)`
1037///
1038/// # Arguments
1039/// - `rd` — Destination register.
1040/// - `rs1` — Memory base register.
1041/// - `rs2` — Source register.
1042/// - `aq` — Acquire-order bit.
1043/// - `rl` — Release-order bit; retained for the existing emitter API.
1044pub trait AmoxorHEmitter<T0, T1, T2, T3, T4> {
1045    fn amoxor_h(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
1046}
1047
1048/// Atomic fetch-and-xor word
1049///
1050/// Atomically:
1051///
1052///   * Load the word at address _rs1_
1053///   * Write the sign-extended value into _rd_
1054///   * XOR the least-significant word of register _rs2_ to the loaded value
1055///   * Write the result to the address in _rs1_
1056///
1057/// # Forms
1058/// Assembly: `amoxor.w xd, xs2, (xrs1)`
1059/// Rust: `amoxor_w(rd, rs1, rs2, aq, rl)`
1060///
1061/// # Arguments
1062/// - `rd` — Destination register.
1063/// - `rs1` — Memory base register.
1064/// - `rs2` — Source register.
1065/// - `aq` — Acquire-order bit.
1066/// - `rl` — Release-order bit; retained for the existing emitter API.
1067pub trait AmoxorWEmitter<T0, T1, T2, T3, T4> {
1068    fn amoxor_w(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
1069}
1070
1071/// And
1072///
1073/// And rs1 with rs2, and store the result in rd
1074///
1075/// # Forms
1076/// Assembly: `and xd, xs1, xs2`
1077/// Rust: `and(rd, rs1, rs2)`
1078///
1079/// # Arguments
1080/// - `rd` — Destination register.
1081/// - `rs1` — Source register.
1082/// - `rs2` — Source register.
1083pub trait AndEmitter<T0, T1, T2> {
1084    fn and(&mut self, rd: T0, rs1: T1, rs2: T2);
1085}
1086
1087/// And immediate
1088///
1089/// And an immediate to the value in rs1, and store the result in rd
1090///
1091/// # Forms
1092/// Assembly: `andi xd, xs1, imm`
1093/// Rust: `andi(rd, rs1, imm)`
1094///
1095/// # Arguments
1096/// - `rd` — Destination register.
1097/// - `rs1` — Source register.
1098/// - `imm` — Immediate encoding value.
1099pub trait AndiEmitter<T0, T1, T2> {
1100    fn andi(&mut self, rd: T0, rs1: T1, imm: T2);
1101}
1102
1103/// AND with inverted operand
1104///
1105/// This instruction performs the bitwise logical AND operation between `rs1` and the
1106/// bitwise inversion of `rs2`.
1107///
1108/// # Forms
1109/// Assembly: `andn xd, xs1, xs2`
1110/// Rust: `andn(rd, rs1, rs2)`
1111///
1112/// # Arguments
1113/// - `rd` — Destination register.
1114/// - `rs1` — Source register.
1115/// - `rs2` — Source register.
1116pub trait AndnEmitter<T0, T1, T2> {
1117    fn andn(&mut self, rd: T0, rs1: T1, rs2: T2);
1118}
1119
1120/// Add upper immediate to pc
1121///
1122/// Add an immediate to the current PC.
1123///
1124/// # Forms
1125/// Assembly: `auipc xd, imm`
1126/// Rust: `auipc(rd, imm)`
1127///
1128/// # Arguments
1129/// - `rd` — Destination register.
1130/// - `imm` — Immediate encoding value.
1131pub trait AuipcEmitter<T0, T1> {
1132    fn auipc(&mut self, rd: T0, imm: T1);
1133}
1134
1135/// Single-Bit clear (Register)
1136///
1137/// This instruction returns rs1 with a single bit cleared at the index specified in rs2.
1138/// The index is read from the lower log2(XLEN) bits of rs2.
1139///
1140/// # Forms
1141/// Assembly: `bclr xd, xs1, xs2`
1142/// Rust: `bclr(rd, rs1, rs2)`
1143///
1144/// # Arguments
1145/// - `rd` — Destination register.
1146/// - `rs1` — Source register.
1147/// - `rs2` — Source register.
1148pub trait BclrEmitter<T0, T1, T2> {
1149    fn bclr(&mut self, rd: T0, rs1: T1, rs2: T2);
1150}
1151
1152/// Single-Bit clear (Immediate)
1153///
1154/// This instruction returns rs1 with a single bit cleared at the index specified in shamt. The
1155/// index is read from the lower log2(XLEN) bits of shamt. For RV32, the encodings corresponding
1156/// to shamt\[5\]=1 are reserved.
1157///
1158/// # Forms
1159/// Assembly: `bclri xd, xs1, shamt`
1160/// Rust: `bclri(rd, rs1, shamtd)`
1161///
1162/// # Arguments
1163/// - `rd` — Destination register.
1164/// - `rs1` — Source register.
1165/// - `shamtd` — Immediate encoding value.
1166pub trait BclriEmitter<T0, T1, T2> {
1167    fn bclri(&mut self, rd: T0, rs1: T1, shamtd: T2);
1168}
1169
1170/// Single-Bit clear (Immediate)
1171///
1172/// This instruction returns rs1 with a single bit cleared at the index specified in shamt. The
1173/// index is read from the lower log2(XLEN) bits of shamt. For RV32, the encodings corresponding
1174/// to shamt\[5\]=1 are reserved.
1175///
1176/// # Forms
1177/// Assembly: `bclri.rv32 xd, xs1, shamt`
1178/// Rust: `bclri_rv32(rd, rs1, shamtw)`
1179///
1180/// # Arguments
1181/// - `rd` — Destination register.
1182/// - `rs1` — Source register.
1183/// - `shamtw` — Immediate encoding value.
1184pub trait BclriRv32Emitter<T0, T1, T2> {
1185    fn bclri_rv32(&mut self, rd: T0, rs1: T1, shamtw: T2);
1186}
1187
1188/// Branch if equal
1189///
1190/// Branch to PC + imm if
1191/// the value in register rs1 is equal to the value in register rs2.
1192///
1193/// Raise a `MisalignedAddress` exception if PC + imm is misaligned.
1194///
1195/// # Forms
1196/// Assembly: `beq xs1, xs2, imm`
1197/// Rust: `beq(rs1, rs2, imm)`
1198///
1199/// # Arguments
1200/// - `rs1` — Source register.
1201/// - `rs2` — Source register.
1202/// - `imm` — Immediate encoding value.
1203pub trait BeqEmitter<T0, T1, T2> {
1204    fn beq(&mut self, rs1: T0, rs2: T1, imm: T2);
1205}
1206
1207/// RISC-V `beqz` instruction.
1208///
1209/// # Forms
1210/// Assembly: `beqz rs1 bimm12lohi`
1211/// Rust: `beqz(rs1, imm)`
1212///
1213/// # Arguments
1214/// - `rs1` — Source register.
1215/// - `imm` — Immediate encoding value.
1216pub trait BeqzEmitter<T0, T1> {
1217    fn beqz(&mut self, rs1: T0, imm: T1);
1218}
1219
1220/// Single-Bit extract (Register)
1221///
1222/// This instruction returns a single bit extracted from rs1 at the index specified in rs2.
1223/// The index is read from the lower log2(XLEN) bits of rs2.
1224///
1225/// # Forms
1226/// Assembly: `bext xd, xs1, xs2`
1227/// Rust: `bext(rd, rs1, rs2)`
1228///
1229/// # Arguments
1230/// - `rd` — Destination register.
1231/// - `rs1` — Source register.
1232/// - `rs2` — Source register.
1233pub trait BextEmitter<T0, T1, T2> {
1234    fn bext(&mut self, rd: T0, rs1: T1, rs2: T2);
1235}
1236
1237/// Single-Bit extract (Immediate)
1238///
1239/// This instruction returns a single bit extracted from rs1 at the index specified in rs2.
1240/// The index is read from the lower log2(XLEN) bits of shamt. For RV32, the encodings
1241/// corresponding to shamt\[5\]=1 are reserved.
1242///
1243/// # Forms
1244/// Assembly: `bexti xd, xs1, shamt`
1245/// Rust: `bexti(rd, rs1, shamtd)`
1246///
1247/// # Arguments
1248/// - `rd` — Destination register.
1249/// - `rs1` — Source register.
1250/// - `shamtd` — Immediate encoding value.
1251pub trait BextiEmitter<T0, T1, T2> {
1252    fn bexti(&mut self, rd: T0, rs1: T1, shamtd: T2);
1253}
1254
1255/// Single-Bit extract (Immediate)
1256///
1257/// This instruction returns a single bit extracted from rs1 at the index specified in rs2.
1258/// The index is read from the lower log2(XLEN) bits of shamt. For RV32, the encodings
1259/// corresponding to shamt\[5\]=1 are reserved.
1260///
1261/// # Forms
1262/// Assembly: `bexti.rv32 xd, xs1, shamt`
1263/// Rust: `bexti_rv32(rd, rs1, shamtw)`
1264///
1265/// # Arguments
1266/// - `rd` — Destination register.
1267/// - `rs1` — Source register.
1268/// - `shamtw` — Immediate encoding value.
1269pub trait BextiRv32Emitter<T0, T1, T2> {
1270    fn bexti_rv32(&mut self, rd: T0, rs1: T1, shamtw: T2);
1271}
1272
1273/// Branch if greater than or equal
1274///
1275/// Branch to PC + imm if
1276/// the signed value in register rs1 is greater than or equal to the signed value in register rs2.
1277///
1278/// Raise a `MisalignedAddress` exception if PC + imm is misaligned.
1279///
1280/// # Forms
1281/// Assembly: `bge xs1, xs2, imm`
1282/// Rust: `bge(rs1, rs2, imm)`
1283///
1284/// # Arguments
1285/// - `rs1` — Source register.
1286/// - `rs2` — Source register.
1287/// - `imm` — Immediate encoding value.
1288pub trait BgeEmitter<T0, T1, T2> {
1289    fn bge(&mut self, rs1: T0, rs2: T1, imm: T2);
1290}
1291
1292/// Branch if greater than or equal unsigned
1293///
1294/// Branch to PC + imm if
1295/// the unsigned value in register rs1 is greater than or equal to the unsigned value in register rs2.
1296///
1297/// Raise a `MisalignedAddress` exception if PC + imm is misaligned.
1298///
1299/// # Forms
1300/// Assembly: `bgeu xs1, xs2, imm`
1301/// Rust: `bgeu(rs1, rs2, imm)`
1302///
1303/// # Arguments
1304/// - `rs1` — Source register.
1305/// - `rs2` — Source register.
1306/// - `imm` — Immediate encoding value.
1307pub trait BgeuEmitter<T0, T1, T2> {
1308    fn bgeu(&mut self, rs1: T0, rs2: T1, imm: T2);
1309}
1310
1311/// RISC-V `bgez` instruction.
1312///
1313/// # Forms
1314/// Assembly: `bgez rs1 bimm12lohi`
1315/// Rust: `bgez(rs1, imm)`
1316///
1317/// # Arguments
1318/// - `rs1` — Source register.
1319/// - `imm` — Immediate encoding value.
1320pub trait BgezEmitter<T0, T1> {
1321    fn bgez(&mut self, rs1: T0, imm: T1);
1322}
1323
1324/// RISC-V `bgt` instruction.
1325///
1326/// # Forms
1327/// Assembly: `bgt rs1 rs2 bimm12lohi`
1328/// Rust: `bgt(rs1, rs2, imm)`
1329///
1330/// # Arguments
1331/// - `rs1` — Source register.
1332/// - `rs2` — Source register.
1333/// - `imm` — Immediate encoding value.
1334pub trait BgtEmitter<T0, T1, T2> {
1335    fn bgt(&mut self, rs1: T0, rs2: T1, imm: T2);
1336}
1337
1338/// RISC-V `bgtu` instruction.
1339///
1340/// # Forms
1341/// Assembly: `bgtu rs1 rs2 bimm12lohi`
1342/// Rust: `bgtu(rs1, rs2, imm)`
1343///
1344/// # Arguments
1345/// - `rs1` — Source register.
1346/// - `rs2` — Source register.
1347/// - `imm` — Immediate encoding value.
1348pub trait BgtuEmitter<T0, T1, T2> {
1349    fn bgtu(&mut self, rs1: T0, rs2: T1, imm: T2);
1350}
1351
1352/// RISC-V `bgtz` instruction.
1353///
1354/// # Forms
1355/// Assembly: `bgtz rs2 bimm12lohi`
1356/// Rust: `bgtz(rs2, imm)`
1357///
1358/// # Arguments
1359/// - `rs2` — Source register.
1360/// - `imm` — Immediate encoding value.
1361pub trait BgtzEmitter<T0, T1> {
1362    fn bgtz(&mut self, rs2: T0, imm: T1);
1363}
1364
1365/// Single-Bit invert (Register)
1366///
1367/// This instruction returns rs1 with a single bit inverted at the index specified in rs2.
1368/// The index is read from the lower log2(XLEN) bits of rs2.
1369///
1370/// # Forms
1371/// Assembly: `binv xd, xs1, xs2`
1372/// Rust: `binv(rd, rs1, rs2)`
1373///
1374/// # Arguments
1375/// - `rd` — Destination register.
1376/// - `rs1` — Source register.
1377/// - `rs2` — Source register.
1378pub trait BinvEmitter<T0, T1, T2> {
1379    fn binv(&mut self, rd: T0, rs1: T1, rs2: T2);
1380}
1381
1382/// Single-Bit invert (Immediate)
1383///
1384/// This instruction returns rs1 with a single bit inverted at the index specified in shamt.
1385/// The index is read from the lower log2(XLEN) bits of shamt.
1386/// For RV32, the encodings corresponding to shamt\[5\]=1 are reserved.
1387///
1388/// # Forms
1389/// Assembly: `binvi xd, xs1, shamt`
1390/// Rust: `binvi(rd, rs1, shamtd)`
1391///
1392/// # Arguments
1393/// - `rd` — Destination register.
1394/// - `rs1` — Source register.
1395/// - `shamtd` — Immediate encoding value.
1396pub trait BinviEmitter<T0, T1, T2> {
1397    fn binvi(&mut self, rd: T0, rs1: T1, shamtd: T2);
1398}
1399
1400/// Single-Bit invert (Immediate)
1401///
1402/// This instruction returns rs1 with a single bit inverted at the index specified in shamt.
1403/// The index is read from the lower log2(XLEN) bits of shamt.
1404/// For RV32, the encodings corresponding to shamt\[5\]=1 are reserved.
1405///
1406/// # Forms
1407/// Assembly: `binvi.rv32 xd, xs1, shamt`
1408/// Rust: `binvi_rv32(rd, rs1, shamtw)`
1409///
1410/// # Arguments
1411/// - `rd` — Destination register.
1412/// - `rs1` — Source register.
1413/// - `shamtw` — Immediate encoding value.
1414pub trait BinviRv32Emitter<T0, T1, T2> {
1415    fn binvi_rv32(&mut self, rd: T0, rs1: T1, shamtw: T2);
1416}
1417
1418/// RISC-V `ble` instruction.
1419///
1420/// # Forms
1421/// Assembly: `ble rs1 rs2 bimm12lohi`
1422/// Rust: `ble(rs1, rs2, imm)`
1423///
1424/// # Arguments
1425/// - `rs1` — Source register.
1426/// - `rs2` — Source register.
1427/// - `imm` — Immediate encoding value.
1428pub trait BleEmitter<T0, T1, T2> {
1429    fn ble(&mut self, rs1: T0, rs2: T1, imm: T2);
1430}
1431
1432/// RISC-V `bleu` instruction.
1433///
1434/// # Forms
1435/// Assembly: `bleu rs1 rs2 bimm12lohi`
1436/// Rust: `bleu(rs1, rs2, imm)`
1437///
1438/// # Arguments
1439/// - `rs1` — Source register.
1440/// - `rs2` — Source register.
1441/// - `imm` — Immediate encoding value.
1442pub trait BleuEmitter<T0, T1, T2> {
1443    fn bleu(&mut self, rs1: T0, rs2: T1, imm: T2);
1444}
1445
1446/// RISC-V `blez` instruction.
1447///
1448/// # Forms
1449/// Assembly: `blez rs2 bimm12lohi`
1450/// Rust: `blez(rs2, imm)`
1451///
1452/// # Arguments
1453/// - `rs2` — Source register.
1454/// - `imm` — Immediate encoding value.
1455pub trait BlezEmitter<T0, T1> {
1456    fn blez(&mut self, rs2: T0, imm: T1);
1457}
1458
1459/// Branch if less than
1460///
1461/// Branch to PC + imm if
1462/// the signed value in register rs1 is less than the signed value in register rs2.
1463///
1464/// Raise a `MisalignedAddress` exception if PC + imm is misaligned.
1465///
1466/// # Forms
1467/// Assembly: `blt xs1, xs2, imm`
1468/// Rust: `blt(rs1, rs2, imm)`
1469///
1470/// # Arguments
1471/// - `rs1` — Source register.
1472/// - `rs2` — Source register.
1473/// - `imm` — Immediate encoding value.
1474pub trait BltEmitter<T0, T1, T2> {
1475    fn blt(&mut self, rs1: T0, rs2: T1, imm: T2);
1476}
1477
1478/// Branch if less than unsigned
1479///
1480/// Branch to PC + imm if
1481/// the unsigned value in register rs1 is less than the unsigned value in register rs2.
1482///
1483/// Raise a `MisalignedAddress` exception if PC + imm is misaligned.
1484///
1485/// # Forms
1486/// Assembly: `bltu xs1, xs2, imm`
1487/// Rust: `bltu(rs1, rs2, imm)`
1488///
1489/// # Arguments
1490/// - `rs1` — Source register.
1491/// - `rs2` — Source register.
1492/// - `imm` — Immediate encoding value.
1493pub trait BltuEmitter<T0, T1, T2> {
1494    fn bltu(&mut self, rs1: T0, rs2: T1, imm: T2);
1495}
1496
1497/// RISC-V `bltz` instruction.
1498///
1499/// # Forms
1500/// Assembly: `bltz rs1 bimm12lohi`
1501/// Rust: `bltz(rs1, imm)`
1502///
1503/// # Arguments
1504/// - `rs1` — Source register.
1505/// - `imm` — Immediate encoding value.
1506pub trait BltzEmitter<T0, T1> {
1507    fn bltz(&mut self, rs1: T0, imm: T1);
1508}
1509
1510/// Branch if not equal
1511///
1512/// Branch to PC + imm if
1513/// the value in register rs1 is not equal to the value in register rs2.
1514///
1515/// Raise a `MisalignedAddress` exception if PC + imm is misaligned.
1516///
1517/// # Forms
1518/// Assembly: `bne xs1, xs2, imm`
1519/// Rust: `bne(rs1, rs2, imm)`
1520///
1521/// # Arguments
1522/// - `rs1` — Source register.
1523/// - `rs2` — Source register.
1524/// - `imm` — Immediate encoding value.
1525pub trait BneEmitter<T0, T1, T2> {
1526    fn bne(&mut self, rs1: T0, rs2: T1, imm: T2);
1527}
1528
1529/// RISC-V `bnez` instruction.
1530///
1531/// # Forms
1532/// Assembly: `bnez rs1 bimm12lohi`
1533/// Rust: `bnez(rs1, imm)`
1534///
1535/// # Arguments
1536/// - `rs1` — Source register.
1537/// - `imm` — Immediate encoding value.
1538pub trait BnezEmitter<T0, T1> {
1539    fn bnez(&mut self, rs1: T0, imm: T1);
1540}
1541
1542/// Reverse bits in bytes
1543///
1544/// This instruction reverses the order of the bits in every byte of a register.
1545///
1546/// # Forms
1547/// Assembly: `brev8 xd, xs1`
1548/// Rust: `brev8(rd, rs1)`
1549///
1550/// # Arguments
1551/// - `rd` — Destination register.
1552/// - `rs1` — Source register.
1553pub trait Brev8Emitter<T0, T1> {
1554    fn brev8(&mut self, rd: T0, rs1: T1);
1555}
1556
1557/// Single-Bit set (Register)
1558///
1559/// This instruction returns rs1 with a single bit set at the index specified in rs2.
1560/// The index is read from the lower log2(XLEN) bits of rs2.
1561///
1562/// # Forms
1563/// Assembly: `bset xd, xs1, xs2`
1564/// Rust: `bset(rd, rs1, rs2)`
1565///
1566/// # Arguments
1567/// - `rd` — Destination register.
1568/// - `rs1` — Source register.
1569/// - `rs2` — Source register.
1570pub trait BsetEmitter<T0, T1, T2> {
1571    fn bset(&mut self, rd: T0, rs1: T1, rs2: T2);
1572}
1573
1574/// Single-Bit set (Immediate)
1575///
1576/// This instruction returns rs1 with a single bit set at the index specified in shamt.
1577/// The index is read from the lower log2(XLEN) bits of shamt.
1578/// For RV32, the encodings corresponding to shamt\[5\]=1 are reserved.
1579///
1580/// # Forms
1581/// Assembly: `bseti xd, xs1, shamt`
1582/// Rust: `bseti(rd, rs1, shamtd)`
1583///
1584/// # Arguments
1585/// - `rd` — Destination register.
1586/// - `rs1` — Source register.
1587/// - `shamtd` — Immediate encoding value.
1588pub trait BsetiEmitter<T0, T1, T2> {
1589    fn bseti(&mut self, rd: T0, rs1: T1, shamtd: T2);
1590}
1591
1592/// Single-Bit set (Immediate)
1593///
1594/// This instruction returns rs1 with a single bit set at the index specified in shamt.
1595/// The index is read from the lower log2(XLEN) bits of shamt.
1596/// For RV32, the encodings corresponding to shamt\[5\]=1 are reserved.
1597///
1598/// # Forms
1599/// Assembly: `bseti.rv32 xd, xs1, shamt`
1600/// Rust: `bseti_rv32(rd, rs1, shamtw)`
1601///
1602/// # Arguments
1603/// - `rd` — Destination register.
1604/// - `rs1` — Source register.
1605/// - `shamtw` — Immediate encoding value.
1606pub trait BsetiRv32Emitter<T0, T1, T2> {
1607    fn bseti_rv32(&mut self, rd: T0, rs1: T1, shamtw: T2);
1608}
1609
1610/// Add
1611///
1612/// Add the value in rs2 to rd, and store the result in rd.
1613/// C.ADD expands into `add rd, rd, rs2`.
1614///
1615/// # Forms
1616/// Assembly: `c.add xd, rs2`
1617/// Rust: `c_add(rd, rs2)`
1618///
1619/// # Arguments
1620/// - `rd` — Destination/source register.
1621/// - `rs2` — Instruction operand.
1622pub trait CAddEmitter<T0, T1> {
1623    fn c_add(&mut self, rd: T0, rs2: T1);
1624}
1625
1626/// Add a sign-extended non-zero immediate
1627///
1628/// C.ADDI adds the non-zero sign-extended 6-bit immediate to the value in register rd then writes the result to rd.
1629/// C.ADDI expands into `addi rd, rd, imm`.
1630/// C.ADDI is only valid when rd &ne; x0 and imm &ne; 0.
1631/// The code points with rd=x0 encode the C.NOP instruction; the remaining code points with imm=0 encode HINTs.
1632///
1633/// # Forms
1634/// Assembly: `c.addi xd, imm`
1635/// Rust: `c_addi(rd, imm)`
1636///
1637/// # Arguments
1638/// - `rd` — Destination/source register.
1639/// - `imm` — Immediate encoding value.
1640pub trait CAddiEmitter<T0, T1> {
1641    fn c_addi(&mut self, rd: T0, imm: T1);
1642}
1643
1644/// Add a sign-extended non-zero immediate
1645///
1646/// C.ADDI16SP adds the non-zero sign-extended 6-bit immediate to the value in the stack pointer (sp=x2), where the immediate is scaled to represent multiples of 16 in the range (-512,496).
1647/// C.ADDI16SP is used to adjust the stack pointer in procedure prologues and epilogues.
1648/// It expands into `addi x2, x2, nzimm\[9:4\]`.
1649/// C.ADDI16SP is only valid when nzimm &ne; 0; the code point with nzimm=0 is reserved.
1650///
1651/// # Forms
1652/// Assembly: `c.addi16sp imm`
1653/// Rust: `c_addi16sp(imm)`
1654///
1655/// # Arguments
1656/// - `imm` — Immediate encoding value.
1657pub trait CAddi16spEmitter<T0> {
1658    fn c_addi16sp(&mut self, imm: T0);
1659}
1660
1661/// Add a zero-extended non-zero immediate, scaled by 4, to the stack pointer
1662///
1663/// Adds a zero-extended non-zero immediate, scaled by 4, to the stack pointer, x2, and writes the result to rd'.
1664/// This instruction is used to generate pointers to stack-allocated variables.
1665/// It expands to `addi rd', x2, nzuimm\[9:2\]`.
1666/// C.ADDI4SPN is only valid when nzuimm &ne; 0; the code points with nzuimm=0 are reserved.
1667///
1668/// # Forms
1669/// Assembly: `c.addi4spn xd, imm`
1670/// Rust: `c_addi4spn(rd, imm)`
1671///
1672/// # Arguments
1673/// - `rd` — Destination register.
1674/// - `imm` — Immediate encoding value.
1675pub trait CAddi4spnEmitter<T0, T1> {
1676    fn c_addi4spn(&mut self, rd: T0, imm: T1);
1677}
1678
1679/// Add a sign-extended non-zero immediate
1680///
1681/// C.ADDIW is an RV64C/RV128C-only instruction that performs the same computation as C.ADDI but produces a 32-bit result, then sign-extends result to 64 bits.
1682/// C.ADDIW expands into `addiw rd, rd, imm`.
1683/// The immediate can be zero for C.ADDIW, where this corresponds to `sext.w rd`.
1684/// C.ADDIW is only valid when rd &ne; x0; the code points with rd=x0 are reserved.
1685///
1686/// # Forms
1687/// Assembly: `c.addiw xd, imm`
1688/// Rust: `c_addiw(rd, imm)`
1689///
1690/// # Arguments
1691/// - `rd` — Destination/source register.
1692/// - `imm` — Immediate encoding value.
1693pub trait CAddiwEmitter<T0, T1> {
1694    fn c_addiw(&mut self, rd: T0, imm: T1);
1695}
1696
1697/// Add word
1698///
1699/// Add the 32-bit values in rs2 from rd, and store the result in rd.
1700/// The rd and rs2 register indexes should be used as rd+8 and rs2+8 (registers x8-x15).
1701/// C.ADDW expands into `addw rd, rd, rs2`.
1702///
1703/// # Forms
1704/// Assembly: `c.addw xd, rs2`
1705/// Rust: `c_addw(rd, rs2)`
1706///
1707/// # Arguments
1708/// - `rd` — Destination/source register.
1709/// - `rs2` — Source register.
1710pub trait CAddwEmitter<T0, T1> {
1711    fn c_addw(&mut self, rd: T0, rs2: T1);
1712}
1713
1714/// And
1715///
1716/// And rd with rs2, and store the result in rd
1717/// The rd and rs2 register indexes should be used as rd+8 and rs2+8 (registers x8-x15).
1718/// C.AND expands into `and rd, rd, rs2`.
1719///
1720/// # Forms
1721/// Assembly: `c.and xd, rs2`
1722/// Rust: `c_and(rd, rs2)`
1723///
1724/// # Arguments
1725/// - `rd` — Destination/source register.
1726/// - `rs2` — Source register.
1727pub trait CAndEmitter<T0, T1> {
1728    fn c_and(&mut self, rd: T0, rs2: T1);
1729}
1730
1731/// And immediate
1732///
1733/// And an immediate to the value in rd, and store the result in rd.
1734/// The rd register index should be used as rd+8 (registers x8-x15).
1735/// C.ANDI expands into `andi rd, rd, imm`.
1736///
1737/// # Forms
1738/// Assembly: `c.andi xd, imm`
1739/// Rust: `c_andi(rd, imm)`
1740///
1741/// # Arguments
1742/// - `rd` — Destination/source register.
1743/// - `imm` — Immediate encoding value.
1744pub trait CAndiEmitter<T0, T1> {
1745    fn c_andi(&mut self, rd: T0, imm: T1);
1746}
1747
1748/// Branch if Equal Zero
1749///
1750/// C.BEQZ performs conditional control transfers. The offset is sign-extended and added to the pc to form the branch target address. It can therefore target a &pm;256 B range. C.BEQZ takes the branch if the value in register rs1' is zero.
1751/// It expands to `beq` `rs1, x0, offset`.
1752///
1753/// # Forms
1754/// Assembly: `c.beqz xs1, imm`
1755/// Rust: `c_beqz(rs1, bimm9lohi)`
1756///
1757/// # Arguments
1758/// - `rs1` — Source register.
1759/// - `bimm9lohi` — Immediate encoding value.
1760pub trait CBeqzEmitter<T0, T1> {
1761    fn c_beqz(&mut self, rs1: T0, bimm9lohi: T1);
1762}
1763
1764/// Branch if NOT Equal Zero
1765///
1766/// C.BEQZ performs conditional control transfers. The offset is sign-extended and added to the pc to form the branch target address. It can therefore target a &pm;256 B range. C.BEQZ takes the branch if the value in register rs1' is NOT zero.
1767/// It expands to `beq` `rs1, x0, offset`.
1768///
1769/// # Forms
1770/// Assembly: `c.bnez xs1, imm`
1771/// Rust: `c_bnez(rs1, bimm9lohi)`
1772///
1773/// # Arguments
1774/// - `rs1` — Source register.
1775/// - `bimm9lohi` — Immediate encoding value.
1776pub trait CBnezEmitter<T0, T1> {
1777    fn c_bnez(&mut self, rs1: T0, bimm9lohi: T1);
1778}
1779
1780/// Breakpoint exception.
1781///
1782/// The C.EBREAK instruction is used by debuggers to cause control to be transferred back to
1783/// a debugging environment. Unless overridden by an external debug environment,
1784/// C.EBREAK raises a breakpoint exception and performs no other operation.
1785///
1786/// \[NOTE\]
1787/// As described in the `C` Standard Extension for Compressed Instructions, the `c.ebreak`
1788/// instruction performs the same operation as the EBREAK instruction.
1789///
1790/// EBREAK causes the receiving privilege mode's epc register to be set to the address of
1791/// the EBREAK instruction itself, not the address of the following instruction.
1792/// As EBREAK causes a synchronous exception, it is not considered to retire,
1793/// and should not increment the `minstret` CSR.
1794///
1795/// # Forms
1796/// Assembly: `c.ebreak " "`
1797/// Rust: `c_ebreak()`
1798///
1799/// # Arguments
1800pub trait CEbreakEmitter {
1801    fn c_ebreak(&mut self);
1802}
1803
1804/// Load double-precision
1805///
1806/// Loads a double precision floating-point value from memory into register rd.
1807/// It computes an effective address by adding the zero-extended offset, scaled by 8,
1808/// to the base address in register rs1.
1809/// It expands to `fld` `rd, offset(rs1)`.
1810///
1811/// # Forms
1812/// Assembly: `c.fld xd, imm(xs1)`
1813/// Rust: `c_fld(rd, rs1, imm)`
1814///
1815/// # Arguments
1816/// - `rd` — Destination register.
1817/// - `rs1` — Memory base register.
1818/// - `imm` — Immediate encoding value.
1819pub trait CFldEmitter<T0, T1, T2> {
1820    fn c_fld(&mut self, rd: T0, rs1: T1, imm: T2);
1821}
1822
1823/// Load doubleword into floating-point register from stack
1824///
1825/// Loads a double-precision floating-point value from memory into floating-point register rd.
1826/// It computes its effective address by adding the zero-extended offset, scaled by 8,
1827/// to the stack pointer, x2.
1828/// It expands to `fld` `rd, offset(x2)`.
1829///
1830/// # Forms
1831/// Assembly: `c.fldsp fd, imm(sp)`
1832/// Rust: `c_fldsp(rd, imm)`
1833///
1834/// # Arguments
1835/// - `rd` — Destination register.
1836/// - `imm` — Immediate encoding value.
1837pub trait CFldspEmitter<T0, T1> {
1838    fn c_fldsp(&mut self, rd: T0, imm: T1);
1839}
1840
1841/// Load single-precision
1842///
1843/// Loads a single precision floating-point value from memory into register rd.
1844/// It computes an effective address by adding the zero-extended offset, scaled by 4,
1845/// to the base address in register rs1.
1846/// It expands to `flw` `rd, offset(rs1)`.
1847///
1848/// # Forms
1849/// Assembly: `c.flw xd, imm(xs1)`
1850/// Rust: `c_flw(rd, rs1, imm)`
1851///
1852/// # Arguments
1853/// - `rd` — Destination register.
1854/// - `rs1` — Memory base register.
1855/// - `imm` — Immediate encoding value.
1856pub trait CFlwEmitter<T0, T1, T2> {
1857    fn c_flw(&mut self, rd: T0, rs1: T1, imm: T2);
1858}
1859
1860/// Load word into floating-point register from stack
1861///
1862/// Loads a single-precision floating-point value from memory into floating-point register rd.
1863/// It computes its effective address by adding the zero-extended offset, scaled by 4,
1864/// to the stack pointer, x2.
1865/// It expands to `flw` `rd, offset(x2)`.
1866///
1867/// # Forms
1868/// Assembly: `c.flwsp fd, imm(sp)`
1869/// Rust: `c_flwsp(rd, imm)`
1870///
1871/// # Arguments
1872/// - `rd` — Destination register.
1873/// - `imm` — Immediate encoding value.
1874pub trait CFlwspEmitter<T0, T1> {
1875    fn c_flwsp(&mut self, rd: T0, imm: T1);
1876}
1877
1878/// Store double-precision
1879///
1880/// Stores a double precision floating-point value in register rs2 to memory.
1881/// It computes an effective address by adding the zero-extended offset, scaled by 8,
1882/// to the base address in register rs1.
1883/// It expands to `fsd` `rs2, offset(rs1)`.
1884///
1885/// # Forms
1886/// Assembly: `c.fsd xs2, imm(xs1)`
1887/// Rust: `c_fsd(rs1, rs2, imm)`
1888///
1889/// # Arguments
1890/// - `rs1` — Memory base register.
1891/// - `rs2` — Source register.
1892/// - `imm` — Immediate encoding value.
1893pub trait CFsdEmitter<T0, T1, T2> {
1894    fn c_fsd(&mut self, rs1: T0, rs2: T1, imm: T2);
1895}
1896
1897/// Store double-precision value to stack
1898///
1899/// Stores a double-precision floating-point value in floating-point register rs2 to memory.
1900/// It computes an effective address by adding the zero-extended offset, scaled by 8,
1901/// to the stack pointer, x2.
1902/// It expands to `fsd` `rs2, offset(x2)`.
1903///
1904/// # Forms
1905/// Assembly: `c.fsdsp fs2, imm(sp)`
1906/// Rust: `c_fsdsp(rs2, imm)`
1907///
1908/// # Arguments
1909/// - `rs2` — Instruction operand.
1910/// - `imm` — Immediate encoding value.
1911pub trait CFsdspEmitter<T0, T1> {
1912    fn c_fsdsp(&mut self, rs2: T0, imm: T1);
1913}
1914
1915/// Store single-precision
1916///
1917/// Stores a single precision floating-point value in register rs2 to memory.
1918/// It computes an effective address by adding the zero-extended offset, scaled by 4,
1919/// to the base address in register rs1.
1920/// It expands to `fsw` `rs2, offset(rs1)`.
1921///
1922/// # Forms
1923/// Assembly: `c.fsw xs2, imm(xs1)`
1924/// Rust: `c_fsw(rs1, rs2, imm)`
1925///
1926/// # Arguments
1927/// - `rs1` — Memory base register.
1928/// - `rs2` — Source register.
1929/// - `imm` — Immediate encoding value.
1930pub trait CFswEmitter<T0, T1, T2> {
1931    fn c_fsw(&mut self, rs1: T0, rs2: T1, imm: T2);
1932}
1933
1934/// Store single-precision value to stack
1935///
1936/// Stores a single-precision floating-point value in floating-point register rs2 to memory.
1937/// It computes an effective address by adding the zero-extended offset, scaled by 4,
1938/// to the stack pointer, x2.
1939/// It expands to `fsw` `rs2, offset(x2)`.
1940///
1941/// # Forms
1942/// Assembly: `c.fswsp fs2, imm(sp)`
1943/// Rust: `c_fswsp(rs2, imm)`
1944///
1945/// # Arguments
1946/// - `rs2` — Instruction operand.
1947/// - `imm` — Immediate encoding value.
1948pub trait CFswspEmitter<T0, T1> {
1949    fn c_fswsp(&mut self, rs2: T0, imm: T1);
1950}
1951
1952/// Jump
1953///
1954/// C.J performs an unconditional control transfer. The offset is sign-extended and added to the pc to form the jump target address. C.J can therefore target a &pm;2 KiB range.
1955/// It expands to `jal` `x0, offset`.
1956///
1957/// # Forms
1958/// Assembly: `c.j imm`
1959/// Rust: `c_j(imm)`
1960///
1961/// # Arguments
1962/// - `imm` — Immediate encoding value.
1963pub trait CJEmitter<T0> {
1964    fn c_j(&mut self, imm: T0);
1965}
1966
1967/// Jump and Link
1968///
1969/// C.JAL is an RV32C-only instruction that performs the same operation as C.J, but additionally writes the address of the instruction following the jump (pc+2) to the link register, x1.
1970/// It expands to `jal` `x1, offset`.
1971///
1972/// # Forms
1973/// Assembly: `c.jal imm`
1974/// Rust: `c_jal(imm)`
1975///
1976/// # Arguments
1977/// - `imm` — Immediate encoding value.
1978pub trait CJalEmitter<T0> {
1979    fn c_jal(&mut self, imm: T0);
1980}
1981
1982/// Jump and Link Register.
1983///
1984/// C.JALR (jump and link register) performs the same operation as C.JR, but additionally writes the address of the instruction following the jump (pc+2) to the link register, x1.
1985/// C.JALR expands to jalr x1, 0(rs1).
1986///
1987/// # Forms
1988/// Assembly: `c.jalr xs1`
1989/// Rust: `c_jalr(rs1)`
1990///
1991/// # Arguments
1992/// - `rs1` — Instruction operand.
1993pub trait CJalrEmitter<T0> {
1994    fn c_jalr(&mut self, rs1: T0);
1995}
1996
1997/// Jump Register
1998///
1999/// C.JR (jump register) performs an unconditional control transfer to the address in register rs1.
2000/// C.JR expands to jalr x0, 0(rs1).
2001///
2002/// # Forms
2003/// Assembly: `c.jr xs1`
2004/// Rust: `c_jr(rs1)`
2005///
2006/// # Arguments
2007/// - `rs1` — Source register.
2008pub trait CJrEmitter<T0> {
2009    fn c_jr(&mut self, rs1: T0);
2010}
2011
2012/// Load unsigned byte, 16-bit encoding
2013///
2014/// Loads a 8-bit value from memory into register rd.
2015/// It computes an effective address by adding the zero-extended offset, to the base address in register rs1.
2016/// It expands to `lbu` `rd, offset(rs1)`.
2017///
2018/// # Forms
2019/// Assembly: `c.lbu xd, imm(xs1)`
2020/// Rust: `c_lbu(rd, rs1, imm)`
2021///
2022/// # Arguments
2023/// - `rd` — Destination register.
2024/// - `rs1` — Source register.
2025/// - `imm` — Immediate encoding value.
2026pub trait CLbuEmitter<T0, T1, T2> {
2027    fn c_lbu(&mut self, rd: T0, rs1: T1, imm: T2);
2028}
2029
2030/// Load double
2031///
2032/// Loads a 64-bit value from memory into register rd.
2033/// It computes an effective address by adding the zero-extended offset, scaled by 8,
2034/// to the base address in register rs1.
2035/// It expands to `ld` `rd, offset(rs1)`.
2036///
2037/// # Forms
2038/// Assembly: `c.ld xd, imm(xs1)`
2039/// Rust: `c_ld(rd, rs1, imm)`
2040///
2041/// # Arguments
2042/// - `rd` — Destination register.
2043/// - `rs1` — Memory base register.
2044/// - `imm` — Immediate encoding value.
2045pub trait CLdEmitter<T0, T1, T2> {
2046    fn c_ld(&mut self, rd: T0, rs1: T1, imm: T2);
2047}
2048
2049/// Load doubleword from stack pointer
2050///
2051/// C.LDSP is an RV64C/RV128C-only instruction that loads a 64-bit value from memory
2052/// into register rd.
2053/// It computes its effective address by adding the zero-extended offset, scaled by 8,
2054/// to the stack pointer, x2.
2055/// It expands to `ld` `rd, offset(x2)`.
2056/// C.LDSP is only valid when rd &ne; x0 the code points with rd=x0 are reserved.
2057///
2058/// # Forms
2059/// Assembly: `c.ldsp xd, imm(sp)`
2060/// Rust: `c_ldsp(rd, imm)`
2061///
2062/// # Arguments
2063/// - `rd` — Destination register.
2064/// - `imm` — Immediate encoding value.
2065pub trait CLdspEmitter<T0, T1> {
2066    fn c_ldsp(&mut self, rd: T0, imm: T1);
2067}
2068
2069/// Load signed halfword, 16-bit encoding
2070///
2071/// Loads a 16-bit value from memory into register rd.
2072/// It computes an effective address by adding the zero-extended offset, to the base address in register rs1.
2073/// It expands to `lh` `rd, offset(rs1)`.
2074///
2075/// # Forms
2076/// Assembly: `c.lh xd, imm(xs1)`
2077/// Rust: `c_lh(rd, rs1, imm)`
2078///
2079/// # Arguments
2080/// - `rd` — Destination register.
2081/// - `rs1` — Source register.
2082/// - `imm` — Immediate encoding value.
2083pub trait CLhEmitter<T0, T1, T2> {
2084    fn c_lh(&mut self, rd: T0, rs1: T1, imm: T2);
2085}
2086
2087/// Load unsigned halfword, 16-bit encoding
2088///
2089/// Loads a 16-bit value from memory into register rd.
2090/// It computes an effective address by adding the zero-extended offset, to the base address in register rs1.
2091/// It expands to `lhu` `rd, offset(rs1)`.
2092///
2093/// # Forms
2094/// Assembly: `c.lhu xd, imm(xs1)`
2095/// Rust: `c_lhu(rd, rs1, imm)`
2096///
2097/// # Arguments
2098/// - `rd` — Destination register.
2099/// - `rs1` — Source register.
2100/// - `imm` — Immediate encoding value.
2101pub trait CLhuEmitter<T0, T1, T2> {
2102    fn c_lhu(&mut self, rd: T0, rs1: T1, imm: T2);
2103}
2104
2105/// Load the sign-extended 6-bit immediate
2106///
2107/// C.LI loads the sign-extended 6-bit immediate, imm, into register rd.
2108/// C.LI expands into `addi rd, x0, imm`.
2109/// C.LI is only valid when rd &ne; x0; the code points with rd=x0 encode HINTs.
2110///
2111/// # Forms
2112/// Assembly: `c.li xd, imm`
2113/// Rust: `c_li(rd, imm)`
2114///
2115/// # Arguments
2116/// - `rd` — Destination register.
2117/// - `imm` — Immediate encoding value.
2118pub trait CLiEmitter<T0, T1> {
2119    fn c_li(&mut self, rd: T0, imm: T1);
2120}
2121
2122/// Load the non-zero 6-bit immediate field into bits 17-12 of the destination register
2123///
2124/// C.LUI loads the non-zero 6-bit immediate field into bits 17-12 of the destination register, clears the bottom 12 bits, and sign-extends bit 17 into all higher bits of the destination.
2125/// C.LUI expands into `lui rd, imm`.
2126/// C.LUI is only valid when rd&ne;x0 and rd&ne;x2, and when the immediate is not equal to zero.
2127/// The code points with imm=0 are reserved; the remaining code points with rd=x0 are HINTs; and the remaining code points with rd=x2 correspond to the C.ADDI16SP instruction
2128///
2129/// # Forms
2130/// Assembly: `c.lui xd, imm`
2131/// Rust: `c_lui(rd, imm)`
2132///
2133/// # Arguments
2134/// - `rd` — Destination register.
2135/// - `imm` — Immediate encoding value.
2136pub trait CLuiEmitter<T0, T1> {
2137    fn c_lui(&mut self, rd: T0, imm: T1);
2138}
2139
2140/// Load word
2141///
2142/// Loads a 32-bit value from memory into register rd.
2143/// It computes an effective address by adding the zero-extended offset, scaled by 4,
2144/// to the base address in register rs1.
2145/// It expands to `lw` `rd, offset(rs1)`.
2146///
2147/// # Forms
2148/// Assembly: `c.lw xd, imm(xs1)`
2149/// Rust: `c_lw(rd, rs1, imm)`
2150///
2151/// # Arguments
2152/// - `rd` — Destination register.
2153/// - `rs1` — Memory base register.
2154/// - `imm` — Immediate encoding value.
2155pub trait CLwEmitter<T0, T1, T2> {
2156    fn c_lw(&mut self, rd: T0, rs1: T1, imm: T2);
2157}
2158
2159/// Load word from stack pointer
2160///
2161/// Loads a 32-bit value from memory into register rd.
2162/// It computes an effective address by adding the zero-extended offset, scaled by 4,
2163/// to the stack pointer, x2.
2164/// It expands to `lw` `rd, offset(x2)`.
2165/// C.LWSP is only valid when rd &ne; x0. The code points with rd=x0 are reserved.
2166///
2167/// # Forms
2168/// Assembly: `c.lwsp xd, imm(sp)`
2169/// Rust: `c_lwsp(rd, imm)`
2170///
2171/// # Arguments
2172/// - `rd` — Destination register.
2173/// - `imm` — Immediate encoding value.
2174pub trait CLwspEmitter<T0, T1> {
2175    fn c_lwsp(&mut self, rd: T0, imm: T1);
2176}
2177
2178/// RISC-V `c.mop.1` instruction.
2179///
2180/// # Forms
2181/// Assembly: `c.mop.1`
2182/// Rust: `c_mop_1()`
2183///
2184/// # Arguments
2185pub trait CMop1Emitter {
2186    fn c_mop_1(&mut self);
2187}
2188
2189/// RISC-V `c.mop.11` instruction.
2190///
2191/// # Forms
2192/// Assembly: `c.mop.11`
2193/// Rust: `c_mop_11()`
2194///
2195/// # Arguments
2196pub trait CMop11Emitter {
2197    fn c_mop_11(&mut self);
2198}
2199
2200/// RISC-V `c.mop.13` instruction.
2201///
2202/// # Forms
2203/// Assembly: `c.mop.13`
2204/// Rust: `c_mop_13()`
2205///
2206/// # Arguments
2207pub trait CMop13Emitter {
2208    fn c_mop_13(&mut self);
2209}
2210
2211/// RISC-V `c.mop.15` instruction.
2212///
2213/// # Forms
2214/// Assembly: `c.mop.15`
2215/// Rust: `c_mop_15()`
2216///
2217/// # Arguments
2218pub trait CMop15Emitter {
2219    fn c_mop_15(&mut self);
2220}
2221
2222/// RISC-V `c.mop.3` instruction.
2223///
2224/// # Forms
2225/// Assembly: `c.mop.3`
2226/// Rust: `c_mop_3()`
2227///
2228/// # Arguments
2229pub trait CMop3Emitter {
2230    fn c_mop_3(&mut self);
2231}
2232
2233/// RISC-V `c.mop.5` instruction.
2234///
2235/// # Forms
2236/// Assembly: `c.mop.5`
2237/// Rust: `c_mop_5()`
2238///
2239/// # Arguments
2240pub trait CMop5Emitter {
2241    fn c_mop_5(&mut self);
2242}
2243
2244/// RISC-V `c.mop.7` instruction.
2245///
2246/// # Forms
2247/// Assembly: `c.mop.7`
2248/// Rust: `c_mop_7()`
2249///
2250/// # Arguments
2251pub trait CMop7Emitter {
2252    fn c_mop_7(&mut self);
2253}
2254
2255/// RISC-V `c.mop.9` instruction.
2256///
2257/// # Forms
2258/// Assembly: `c.mop.9`
2259/// Rust: `c_mop_9()`
2260///
2261/// # Arguments
2262pub trait CMop9Emitter {
2263    fn c_mop_9(&mut self);
2264}
2265
2266/// RISC-V `c.mop.n` instruction.
2267///
2268/// # Forms
2269/// Assembly: `c.mop.n c_mop_t`
2270/// Rust: `c_mop_n(mop_t)`
2271///
2272/// # Arguments
2273/// - `mop_t` — Instruction operand.
2274pub trait CMopNEmitter<T0> {
2275    fn c_mop_n(&mut self, mop_t: T0);
2276}
2277
2278/// Multiply, 16-bit encoding
2279///
2280/// This instruction multiplies XLEN bits of the source operands from rsd' and rs2' and writes the lowest XLEN bits of the result to rsd'.
2281///
2282/// # Forms
2283/// Assembly: `c.mul xd, xs2`
2284/// Rust: `c_mul(rd, rs2)`
2285///
2286/// # Arguments
2287/// - `rd` — Destination/source register.
2288/// - `rs2` — Source register.
2289pub trait CMulEmitter<T0, T1> {
2290    fn c_mul(&mut self, rd: T0, rs2: T1);
2291}
2292
2293/// Move Register
2294///
2295/// C.MV (move register) performs copy of the data in register rs2 to register rd
2296/// C.MV expands to addi rd, x0, rs2.
2297///
2298/// # Forms
2299/// Assembly: `c.mv xd, xs2`
2300/// Rust: `c_mv(rd, rs2)`
2301///
2302/// # Arguments
2303/// - `rd` — Destination register.
2304/// - `rs2` — Instruction operand.
2305pub trait CMvEmitter<T0, T1> {
2306    fn c_mv(&mut self, rd: T0, rs2: T1);
2307}
2308
2309/// Non-operation
2310///
2311/// C.NOP expands into `addi x0, x0, imm`.
2312///
2313/// # Forms
2314/// Assembly: `c.nop imm`
2315/// Rust: `c_nop(imm)`
2316///
2317/// # Arguments
2318/// - `imm` — Immediate encoding value.
2319pub trait CNopEmitter<T0> {
2320    fn c_nop(&mut self, imm: T0);
2321}
2322
2323/// Bitwise not, 16-bit encoding
2324///
2325/// This instruction takes a single source/destination operand.
2326/// This instruction takes the one's complement of rd'/rs1' and writes the result to the same register.
2327///
2328/// # Forms
2329/// Assembly: `c.not xd`
2330/// Rust: `c_not(rd)`
2331///
2332/// # Arguments
2333/// - `rd` — Destination/source register.
2334pub trait CNotEmitter<T0> {
2335    fn c_not(&mut self, rd: T0);
2336}
2337
2338/// RISC-V `c.ntl.all` instruction.
2339///
2340/// # Forms
2341/// Assembly: `c.ntl.all`
2342/// Rust: `c_ntl_all()`
2343///
2344/// # Arguments
2345pub trait CNtlAllEmitter {
2346    fn c_ntl_all(&mut self);
2347}
2348
2349/// RISC-V `c.ntl.p1` instruction.
2350///
2351/// # Forms
2352/// Assembly: `c.ntl.p1`
2353/// Rust: `c_ntl_p1()`
2354///
2355/// # Arguments
2356pub trait CNtlP1Emitter {
2357    fn c_ntl_p1(&mut self);
2358}
2359
2360/// RISC-V `c.ntl.pall` instruction.
2361///
2362/// # Forms
2363/// Assembly: `c.ntl.pall`
2364/// Rust: `c_ntl_pall()`
2365///
2366/// # Arguments
2367pub trait CNtlPallEmitter {
2368    fn c_ntl_pall(&mut self);
2369}
2370
2371/// RISC-V `c.ntl.s1` instruction.
2372///
2373/// # Forms
2374/// Assembly: `c.ntl.s1`
2375/// Rust: `c_ntl_s1()`
2376///
2377/// # Arguments
2378pub trait CNtlS1Emitter {
2379    fn c_ntl_s1(&mut self);
2380}
2381
2382/// Or
2383///
2384/// Or rd with rs2, and store the result in rd
2385/// The rd and rs2 register indexes should be used as rd+8 and rs2+8 (registers x8-x15).
2386/// C.OR expands into `or rd, rd, rs2`.
2387///
2388/// # Forms
2389/// Assembly: `c.or xd, rs2`
2390/// Rust: `c_or(rd, rs2)`
2391///
2392/// # Arguments
2393/// - `rd` — Destination/source register.
2394/// - `rs2` — Source register.
2395pub trait COrEmitter<T0, T1> {
2396    fn c_or(&mut self, rd: T0, rs2: T1);
2397}
2398
2399/// Store unsigned byte, 16-bit encoding
2400///
2401/// Stores a 8-bit value from register rs2 into memory.
2402/// It computes an effective address by adding the zero-extended offset, to the base address in register rs1.
2403/// It expands to `sb` `rs2, offset(rs1)`.
2404///
2405/// # Forms
2406/// Assembly: `c.sb xs2, imm(xs1)`
2407/// Rust: `c_sb(rs1, rs2, imm)`
2408///
2409/// # Arguments
2410/// - `rs1` — Source register.
2411/// - `rs2` — Source register.
2412/// - `imm` — Immediate encoding value.
2413pub trait CSbEmitter<T0, T1, T2> {
2414    fn c_sb(&mut self, rs1: T0, rs2: T1, imm: T2);
2415}
2416
2417/// Store double
2418///
2419/// Stores a 64-bit value in register rs2 to memory.
2420/// It computes an effective address by adding the zero-extended offset, scaled by 8,
2421/// to the base address in register rs1.
2422/// It expands to `sd` `rs2, offset(rs1)`.
2423///
2424/// # Forms
2425/// Assembly: `c.sd xs2, imm(xs1)`
2426/// Rust: `c_sd(rs1, rs2, imm)`
2427///
2428/// # Arguments
2429/// - `rs1` — Memory base register.
2430/// - `rs2` — Source register.
2431/// - `imm` — Immediate encoding value.
2432pub trait CSdEmitter<T0, T1, T2> {
2433    fn c_sd(&mut self, rs1: T0, rs2: T1, imm: T2);
2434}
2435
2436/// Store doubleword to stack
2437///
2438/// Stores a 64-bit value in register rs2 to memory.
2439/// It computes an effective address by adding the zero-extended offset, scaled by 8,
2440/// to the stack pointer, x2.
2441/// It expands to `sd` `rs2, offset(x2)`.
2442///
2443/// # Forms
2444/// Assembly: `c.sdsp xs2, imm(sp)`
2445/// Rust: `c_sdsp(rs2, imm)`
2446///
2447/// # Arguments
2448/// - `rs2` — Instruction operand.
2449/// - `imm` — Immediate encoding value.
2450pub trait CSdspEmitter<T0, T1> {
2451    fn c_sdsp(&mut self, rs2: T0, imm: T1);
2452}
2453
2454/// Sign-extend byte, 16-bit encoding
2455///
2456/// This instruction takes a single source/destination operand.
2457/// This instruction sign-extends the least-significant byte of the source to XLEN by copying
2458/// the most-significant bit in the byte (i.e., bit 7) to all of the more-significant bits.
2459///
2460/// # Forms
2461/// Assembly: `c.sext.b xd`
2462/// Rust: `c_sext_b(rd)`
2463///
2464/// # Arguments
2465/// - `rd` — Destination/source register.
2466pub trait CSextBEmitter<T0> {
2467    fn c_sext_b(&mut self, rd: T0);
2468}
2469
2470/// Sign-extend halfword, 16-bit encoding
2471///
2472/// This instruction takes a single source/destination operand.
2473/// This instruction sign-extends the least-significant halfword of the source to XLEN by copying
2474/// the most-significant bit in the halfword (i.e., bit 15) to all of the more-significant bits.
2475///
2476/// # Forms
2477/// Assembly: `c.sext.h xd`
2478/// Rust: `c_sext_h(rd)`
2479///
2480/// # Arguments
2481/// - `rd` — Destination/source register.
2482pub trait CSextHEmitter<T0> {
2483    fn c_sext_h(&mut self, rd: T0);
2484}
2485
2486/// Store unsigned halfword, 16-bit encoding
2487///
2488/// Stores a 16-bit value from register rs2 into memory.
2489/// It computes an effective address by adding the zero-extended offset, to the base address in register rs1.
2490/// It expands to `sh` `rs2, offset(rs1)`.
2491///
2492/// # Forms
2493/// Assembly: `c.sh xs2, imm(xs1)`
2494/// Rust: `c_sh(rs1, rs2, imm)`
2495///
2496/// # Arguments
2497/// - `rs1` — Source register.
2498/// - `rs2` — Source register.
2499/// - `imm` — Immediate encoding value.
2500pub trait CShEmitter<T0, T1, T2> {
2501    fn c_sh(&mut self, rs1: T0, rs2: T1, imm: T2);
2502}
2503
2504/// Shift left logical immediate
2505///
2506/// Shift the value in rd left by shamt, and store the result back in rd.
2507/// C.SLLI expands into `slli rd, rd, shamt`.
2508///
2509/// # Forms
2510/// Assembly: `c.slli xd, shamt`
2511/// Rust: `c_slli(rd, imm)`
2512///
2513/// # Arguments
2514/// - `rd` — Destination/source register.
2515/// - `imm` — Immediate encoding value.
2516pub trait CSlliEmitter<T0, T1> {
2517    fn c_slli(&mut self, rd: T0, imm: T1);
2518}
2519
2520/// Shift left logical immediate
2521///
2522/// Shift the value in rd left by shamt, and store the result back in rd.
2523/// C.SLLI expands into `slli rd, rd, shamt`.
2524///
2525/// # Forms
2526/// Assembly: `c.slli.rv32 xd, shamt`
2527/// Rust: `c_slli_rv32(rd, imm)`
2528///
2529/// # Arguments
2530/// - `rd` — Destination/source register.
2531/// - `imm` — Immediate encoding value.
2532pub trait CSlliRv32Emitter<T0, T1> {
2533    fn c_slli_rv32(&mut self, rd: T0, imm: T1);
2534}
2535
2536/// Shift right arithmetical immediate
2537///
2538/// Arithmetic shift (the original sign bit is copied into the vacated upper bits) the value in rd right by shamt, and store the result in rd.
2539/// The rd register index should be used as rd+8 (registers x8-x15).
2540/// C.SRAI expands into `srai rd, rd, shamt`.
2541///
2542/// # Forms
2543/// Assembly: `c.srai xd, shamt`
2544/// Rust: `c_srai(rd, imm)`
2545///
2546/// # Arguments
2547/// - `rd` — Destination/source register.
2548/// - `imm` — Immediate encoding value.
2549pub trait CSraiEmitter<T0, T1> {
2550    fn c_srai(&mut self, rd: T0, imm: T1);
2551}
2552
2553/// Shift right arithmetical immediate
2554///
2555/// Arithmetic shift (the original sign bit is copied into the vacated upper bits) the value in rd right by shamt, and store the result in rd.
2556/// The rd register index should be used as rd+8 (registers x8-x15).
2557/// C.SRAI expands into `srai rd, rd, shamt`.
2558///
2559/// # Forms
2560/// Assembly: `c.srai.rv32 xd, shamt`
2561/// Rust: `c_srai_rv32(rd, imm)`
2562///
2563/// # Arguments
2564/// - `rd` — Destination/source register.
2565/// - `imm` — Immediate encoding value.
2566pub trait CSraiRv32Emitter<T0, T1> {
2567    fn c_srai_rv32(&mut self, rd: T0, imm: T1);
2568}
2569
2570/// Shift right logical immediate
2571///
2572/// Shift the value in rd right by shamt, and store the result back in rd.
2573/// The rd register index should be used as rd+8 (registers x8-x15).
2574/// C.SRLI expands into `srli rd, rd, shamt`.
2575///
2576/// # Forms
2577/// Assembly: `c.srli xd, shamt`
2578/// Rust: `c_srli(rd, imm)`
2579///
2580/// # Arguments
2581/// - `rd` — Destination/source register.
2582/// - `imm` — Immediate encoding value.
2583pub trait CSrliEmitter<T0, T1> {
2584    fn c_srli(&mut self, rd: T0, imm: T1);
2585}
2586
2587/// Shift right logical immediate
2588///
2589/// Shift the value in rd right by shamt, and store the result back in rd.
2590/// The rd register index should be used as rd+8 (registers x8-x15).
2591/// C.SRLI expands into `srli rd, rd, shamt`.
2592///
2593/// # Forms
2594/// Assembly: `c.srli.rv32 xd, shamt`
2595/// Rust: `c_srli_rv32(rd, imm)`
2596///
2597/// # Arguments
2598/// - `rd` — Destination/source register.
2599/// - `imm` — Immediate encoding value.
2600pub trait CSrliRv32Emitter<T0, T1> {
2601    fn c_srli_rv32(&mut self, rd: T0, imm: T1);
2602}
2603
2604/// RISC-V `c.sspopchk.x5` instruction.
2605///
2606/// # Forms
2607/// Assembly: `c.sspopchk.x5`
2608/// Rust: `c_sspopchk_x5()`
2609///
2610/// # Arguments
2611pub trait CSspopchkX5Emitter {
2612    fn c_sspopchk_x5(&mut self);
2613}
2614
2615/// RISC-V `c.sspush.x1` instruction.
2616///
2617/// # Forms
2618/// Assembly: `c.sspush.x1`
2619/// Rust: `c_sspush_x1()`
2620///
2621/// # Arguments
2622pub trait CSspushX1Emitter {
2623    fn c_sspush_x1(&mut self);
2624}
2625
2626/// Subtract
2627///
2628/// Subtract the value in rs2 from rd, and store the result in rd.
2629/// The rd and rs2 register indexes should be used as rd+8 and rs2+8 (registers x8-x15).
2630/// C.SUB expands into `sub rd, rd, rs2`.
2631///
2632/// # Forms
2633/// Assembly: `c.sub xd, rs2`
2634/// Rust: `c_sub(rd, rs2)`
2635///
2636/// # Arguments
2637/// - `rd` — Destination/source register.
2638/// - `rs2` — Source register.
2639pub trait CSubEmitter<T0, T1> {
2640    fn c_sub(&mut self, rd: T0, rs2: T1);
2641}
2642
2643/// Subtract word
2644///
2645/// Subtract the 32-bit values in rs2 from rd, and store the result in rd.
2646/// The rd and rs2 register indexes should be used as rd+8 and rs2+8 (registers x8-x15).
2647/// C.SUBW expands into `subw rd, rd, rs2`.
2648///
2649/// # Forms
2650/// Assembly: `c.subw xd, rs2`
2651/// Rust: `c_subw(rd, rs2)`
2652///
2653/// # Arguments
2654/// - `rd` — Destination/source register.
2655/// - `rs2` — Source register.
2656pub trait CSubwEmitter<T0, T1> {
2657    fn c_subw(&mut self, rd: T0, rs2: T1);
2658}
2659
2660/// Store word
2661///
2662/// Stores a 32-bit value in register rs2 to memory.
2663/// It computes an effective address by adding the zero-extended offset, scaled by 4,
2664/// to the base address in register rs1.
2665/// It expands to `sw` `rs2, offset(rs1)`.
2666///
2667/// # Forms
2668/// Assembly: `c.sw xs2, imm(xs1)`
2669/// Rust: `c_sw(rs1, rs2, imm)`
2670///
2671/// # Arguments
2672/// - `rs1` — Memory base register.
2673/// - `rs2` — Source register.
2674/// - `imm` — Immediate encoding value.
2675pub trait CSwEmitter<T0, T1, T2> {
2676    fn c_sw(&mut self, rs1: T0, rs2: T1, imm: T2);
2677}
2678
2679/// Store word to stack
2680///
2681/// Stores a 32-bit value in register rs2 to memory.
2682/// It computes an effective address by adding the zero-extended offset, scaled by 4,
2683/// to the stack pointer, x2.
2684/// It expands to `sw` `rs2, offset(x2)`.
2685///
2686/// # Forms
2687/// Assembly: `c.swsp xs2, imm(sp)`
2688/// Rust: `c_swsp(rs2, imm)`
2689///
2690/// # Arguments
2691/// - `rs2` — Instruction operand.
2692/// - `imm` — Immediate encoding value.
2693pub trait CSwspEmitter<T0, T1> {
2694    fn c_swsp(&mut self, rs2: T0, imm: T1);
2695}
2696
2697/// Exclusive Or
2698///
2699/// Exclusive or rd with rs2, and store the result in rd
2700/// The rd and rs2 register indexes should be used as rd+8 and rs2+8 (registers x8-x15).
2701/// C.XOR expands into `xor rd, rd, rs2`.
2702///
2703/// # Forms
2704/// Assembly: `c.xor xd, rs2`
2705/// Rust: `c_xor(rd, rs2)`
2706///
2707/// # Arguments
2708/// - `rd` — Destination/source register.
2709/// - `rs2` — Source register.
2710pub trait CXorEmitter<T0, T1> {
2711    fn c_xor(&mut self, rd: T0, rs2: T1);
2712}
2713
2714/// Zero-extend byte, 16-bit encoding
2715///
2716/// This instruction takes a single source/destination operand.
2717/// This instruction zero-extends the least-significant byte of the source to XLEN by inserting
2718/// 0's into all of the bits more significant than 7.
2719///
2720/// # Forms
2721/// Assembly: `c.zext.b xd`
2722/// Rust: `c_zext_b(rd)`
2723///
2724/// # Arguments
2725/// - `rd` — Destination/source register.
2726pub trait CZextBEmitter<T0> {
2727    fn c_zext_b(&mut self, rd: T0);
2728}
2729
2730/// Zero-extend halfword, 16-bit encoding
2731///
2732/// This instruction takes a single source/destination operand.
2733/// This instruction zero-extends the least-significant halfword of the source to XLEN by inserting
2734/// 0's into all of the bits more significant than 15.
2735///
2736/// # Forms
2737/// Assembly: `c.zext.h xd`
2738/// Rust: `c_zext_h(rd)`
2739///
2740/// # Arguments
2741/// - `rd` — Destination/source register.
2742pub trait CZextHEmitter<T0> {
2743    fn c_zext_h(&mut self, rd: T0);
2744}
2745
2746/// Zero-extend word, 16-bit encoding
2747///
2748/// This instruction takes a single source/destination operand.
2749/// It zero-extends the least-significant word of the operand to XLEN bits by inserting zeros into all of the bits more significant than 31.
2750///
2751/// # Forms
2752/// Assembly: `c.zext.w xd`
2753/// Rust: `c_zext_w(rd)`
2754///
2755/// # Arguments
2756/// - `rd` — Destination/source register.
2757pub trait CZextWEmitter<T0> {
2758    fn c_zext_w(&mut self, rd: T0);
2759}
2760
2761/// Cache Block Clean
2762///
2763/// Cleans an entire cache block globally throughout the system.
2764///
2765/// Exactly what happens is coherence protocol-dependent, but in general it is expected that after this
2766/// operation():
2767///
2768///   * The cache block will be in the clean (not dirty) state in any coherent cache holding a valid copy of the line.
2769///   * The data will be cleaned to a point such that an incoherent load can observe the cleaned data.
2770///
2771/// `cbo.clean` is ordered by `FENCE` instructions but not `FENCE.I` or `SFENCE.VMA`.
2772///
2773/// &lt;%- if CACHE_BLOCK_SIZE.bit_length &gt; \[PMP_GRANULARITY, PMA_GRANULARITY\].min -%&gt;
2774/// Both PMP and PMA access control must be the same for all bytes in the block; otherwise, `cbo.clean` has UNSPECIFIED behavior.
2775/// &lt;%- end -%&gt;
2776///
2777/// Clean operations are treated as stores for page and access permissions. If permission checks fail,
2778/// one of the following exceptions will occur:
2779///
2780///   &lt;%- if ext?(:H) -%&gt;
2781///   * `Store/AMO Guest-Page Fault` if virtual memory translation fails during G-stage translation.
2782///   &lt;%- end -%&gt;
2783///   * `Store/AMO Page Fault` if virtual memory translation fails &lt;% if ext?(:H) %&gt;when V=0 or during VS-stage translation&lt;% end %&gt;
2784///   * `Store/AMO Access Fault` if a PMP or PMA access check fails
2785///
2786/// &lt;%- if CACHE_BLOCK_SIZE.bit_length &lt;= \[PMP_GRANULARITY, PMA_GRANULARITY\].min -%&gt;
2787/// Because cache blocks are naturally aligned and always fit in a single PMP or PMA regions, the PMP
2788/// and PMA access checks only need to check a single address in the line.
2789/// &lt;%- end -%&gt;
2790///
2791/// CBO operations never raise a misaligned address fault.
2792///
2793/// # Forms
2794/// Assembly: `cbo.clean "TODO"`
2795/// Rust: `cbo_clean(rs1)`
2796///
2797/// # Arguments
2798/// - `rs1` — Source register.
2799pub trait CboCleanEmitter<T0> {
2800    fn cbo_clean(&mut self, rs1: T0);
2801}
2802
2803/// Cache Block Flush
2804///
2805/// Flushes an entire cache block by cleaning it and then invalidating it in all caches.
2806///
2807/// `cbo.flush` is ordered by `FENCE` instructions but not `FENCE.I` or `SFENCE.VMA`.
2808///
2809/// &lt;%- if CACHE_BLOCK_SIZE.bit_length &gt; \[PMP_GRANULARITY, PMA_GRANULARITY\].min -%&gt;
2810/// Both PMP and PMA access control must be the same for all bytes in the block; otherwise, `cbo.flush` has UNSPECIFIED behavior.
2811/// &lt;%- end -%&gt;
2812///
2813/// Flush operations are treated as stores for page and access permissions. If permission checks fail,
2814/// one of the following exceptions will occur:
2815///
2816///   &lt;%- if ext?(:H) -%&gt;
2817///   * `Store/AMO Guest-Page Fault` if virtual memory translation fails during G-stage translation.
2818///   &lt;%- end -%&gt;
2819///   * `Store/AMO Page Fault` if virtual memory translation fails &lt;% if ext?(:H) %&gt;when V=0 or during VS-stage translation&lt;% end %&gt;
2820///   * `Store/AMO Access Fault` if a PMP or PMA access check fails.
2821///
2822/// &lt;%- if CACHE_BLOCK_SIZE.bit_length &lt;= \[PMP_GRANULARITY, PMA_GRANULARITY\].min -%&gt;
2823/// Because cache blocks are naturally aligned and always fit in a single PMP or PMA regions, the PMP
2824/// and PMA access checks only need to check a single address in the line.
2825/// &lt;%- end -%&gt;
2826///
2827/// CBO operations never raise a misaligned address fault.
2828///
2829/// # Forms
2830/// Assembly: `cbo.flush "TODO"`
2831/// Rust: `cbo_flush(rs1)`
2832///
2833/// # Arguments
2834/// - `rs1` — Source register.
2835pub trait CboFlushEmitter<T0> {
2836    fn cbo_flush(&mut self, rs1: T0);
2837}
2838
2839/// Cache Block Invalidate
2840///
2841/// Either invalidates or flushes (clean + invalidate) a cache block, depending on the current mode and value of
2842/// `menvcfg.CBIE`, `senvcfg.CBIE`, and/or `henvcfg.CBIE`.
2843///
2844/// The instruction is an invalidate (without a clean) when:
2845///
2846///   * In M-mode
2847///   * In (H)S-mode and `menvcfg.CBIE` == 11
2848///   * In U-mode and `menvcfg.CBIE` == 11 and `senvcfg.CBIE` == 11
2849///   * In VS-mode and `menvcfg.CBIE` == 11 and `henvcfg.CBIE` == 11
2850///   * In VU-mode and `menvcfg.CBIE` == 11 and `henvcfg.CBIE` == 11 and `senvcfg.CBIE` == 11
2851///
2852/// Otherwise, if the instruction does not trap (see Access section), the operation is a flush.
2853/// The table below summarizes the options.
2854///
2855/// \[%autowidth,cols="1,1,1,1,1,1,1,1",separator="!"\]
2856/// !===
2857/// .2+h!\[.rotate\]#`menvcfg.CBIE`# .2+h! \[.rotate\]#`senvcfg.CBIE`# .2+h! \[.rotate\]#`henvcfg.CBIE`#
2858/// 5+^.&gt;h! `cbe.inval` Operation
2859/// .^h! M-mode .^h! S-mode .^h! U-mode .^h! VS-mode .^h! VU-mode
2860///
2861/// ! 00 ! - ! - ! Invalidate ! `Illegal Instruction` ! `Illegal Instruction` ! `Virtual Instruction` ! `Virtual Instruction`
2862/// ! 01 ! 00 ! 00 ! Invalidate ! Flush  ! `Illegal Instruction` ! `Virtual Instruction` ! `Virtual Instruction`
2863/// ! 01 ! 00 ! 01 ! Invalidate ! Flush  ! `Illegal Instruction` ! Flush ! `Virtual Instruction`
2864/// ! 01 ! 00 ! 11 ! Invalidate ! Flush  ! `Illegal Instruction` ! Flush ! `Virtual Instruction`
2865/// ! 01 ! 01 ! 00 ! Invalidate ! Flush  ! Flush ! `Virtual Instruction` ! `Virtual Instruction`
2866/// ! 01 ! 01 ! 01 ! Invalidate ! Flush  ! Flush ! Flush ! Flush
2867/// ! 01 ! 01 ! 11 ! Invalidate ! Flush  ! Flush ! Flush ! Flush
2868/// ! 01 ! 11 ! 00 ! Invalidate ! Flush  ! Flush ! `Virtual Instruction` ! `Virtual Instruction`
2869/// ! 01 ! 11 ! 01 ! Invalidate ! Flush  ! Flush ! Flush ! Flush
2870/// ! 01 ! 11 ! 11 ! Invalidate ! Flush  ! Flush ! Flush ! Flush
2871/// ! 11 ! 00 ! 00  ! Invalidate ! Invalidate  ! `Illegal Instruction` ! `Virtual Instruction` ! `Virtual Instruction`
2872/// ! 11 ! 00 ! 01  ! Invalidate ! Invalidate  ! `Illegal Instruction` ! Flush ! `Virtual Instruction`
2873/// ! 11 ! 00 ! 11  ! Invalidate ! Invalidate  ! `Illegal Instruction` ! Invalidate ! `Virtual Instruction`
2874/// ! 11 ! 01 ! 00 ! Invalidate ! Invalidate  ! Flush ! `Virtual Instruction` ! `Virtual Instruction`
2875/// ! 11 ! 01 ! 01 ! Invalidate ! Invalidate  ! Flush ! Flush ! Flush
2876/// ! 11 ! 01 ! 11 ! Invalidate ! Invalidate  ! Flush ! Invalidate ! Flush
2877/// ! 11 ! 11 ! 00 ! Invalidate ! Invalidate  ! Invalidate ! `Virtual Instruction` ! `Virtual Instruction`
2878/// ! 11 ! 11 ! 01 ! Invalidate ! Invalidate  ! Invalidate ! Flush ! Flush
2879/// ! 11 ! 11 ! 11 ! Invalidate ! Invalidate  ! Invalidate ! Invalidate ! Invalidate
2880/// !===
2881///
2882/// `cbo.inval` is ordered by `FENCE` instructions but not `FENCE.I` or `SFENCE.VMA`.
2883///
2884/// &lt;%- if CACHE_BLOCK_SIZE.bit_length &gt; \[PMP_GRANULARITY, PMA_GRANULARITY\].min -%&gt;
2885/// Both PMP and PMA access control must be the same for all bytes in the block; otherwise, `cbo.zero` has UNSPECIFIED behavior.
2886/// &lt;%- end -%&gt;
2887///
2888/// Invalidate operations are treated as stores for page and access permissions. If permission checks fail,
2889/// one of the following exceptions will occur:
2890///
2891///   &lt;%- if ext?(:H) -%&gt;
2892///   * `Store/AMO Guest-Page Fault` if virtual memory translation fails during G-stage translation.
2893///   &lt;%- end -%&gt;
2894///   * `Store/AMO Page Fault` if virtual memory translation fails &lt;% if ext?(:H) %&gt;when V=0 or during VS-stage translation&lt;% end %&gt;
2895///   * `Store/AMO Access Fault` if a PMP or PMA access check fails.
2896///
2897/// &lt;%- if CACHE_BLOCK_SIZE.bit_length &lt;= \[PMP_GRANULARITY, PMA_GRANULARITY\].min -%&gt;
2898/// Because cache blocks are naturally aligned and always fit in a single PMP or PMA regions, the PMP
2899/// and PMA access checks only need to check a single address in the line.
2900/// &lt;%- end -%&gt;
2901///
2902/// CBO operations never raise a misaligned address fault.
2903///
2904/// # Forms
2905/// Assembly: `cbo.inval "TODO"`
2906/// Rust: `cbo_inval(rs1)`
2907///
2908/// # Arguments
2909/// - `rs1` — Source register.
2910pub trait CboInvalEmitter<T0> {
2911    fn cbo_inval(&mut self, rs1: T0);
2912}
2913
2914/// Cache Block Zero
2915///
2916/// Zeros an entire cache block
2917///
2918/// The block zeroing does not need to be atomic.
2919///
2920/// `cbo.zero` is ordered by `FENCE` instructions but not `FENCE.I` or `SFENCE.VMA`.
2921///
2922/// &lt;%- if CACHE_BLOCK_SIZE.bit_length &gt; \[PMP_GRANULARITY, PMA_GRANULARITY\].min -%&gt;
2923/// Both PMP and PMA access control must be the same for all bytes in the block; otherwise, `cbo.zero` has UNSPECIFIED behavior.
2924/// &lt;%- end -%&gt;
2925///
2926/// Clean operations are treated as stores for page and access permissions. If permission checks fail,
2927/// one of the following exceptions will occur:
2928///
2929///   &lt;%- if ext?(:H) -%&gt;
2930///   * `Store/AMO Guest-Page Fault` if virtual memory translation fails during G-stage translation.
2931///   &lt;%- end -%&gt;
2932///   * `Store/AMO Page Fault` if virtual memory translation fails &lt;% if ext?(:H) %&gt;when V=0 or during VS-stage translation&lt;% end %&gt;
2933///   * `Store/AMO Access Fault` if a PMP or PMA access check fails.
2934///
2935/// &lt;%- if CACHE_BLOCK_SIZE.bit_length &lt;= \[PMP_GRANULARITY, PMA_GRANULARITY\].min -%&gt;
2936/// Because cache blocks are naturally aligned and always fit in a single PMP or PMA regions, the PMP
2937/// and PMA access checks only need to check a single address in the line.
2938/// &lt;%- end -%&gt;
2939///
2940/// CBO operations never raise a misaligned address fault.
2941///
2942/// # Forms
2943/// Assembly: `cbo.zero "TODO"`
2944/// Rust: `cbo_zero(rs1)`
2945///
2946/// # Arguments
2947/// - `rs1` — Source register.
2948pub trait CboZeroEmitter<T0> {
2949    fn cbo_zero(&mut self, rs1: T0);
2950}
2951
2952/// Carry-less multiply (low-part)
2953///
2954/// `clmul` produces the lower half of the 2*XLEN carry-less product
2955///
2956/// # Forms
2957/// Assembly: `clmul xd, xs1, xs2`
2958/// Rust: `clmul(rd, rs1, rs2)`
2959///
2960/// # Arguments
2961/// - `rd` — Destination register.
2962/// - `rs1` — Source register.
2963/// - `rs2` — Source register.
2964pub trait ClmulEmitter<T0, T1, T2> {
2965    fn clmul(&mut self, rd: T0, rs1: T1, rs2: T2);
2966}
2967
2968/// Carry-less multiply (high-part)
2969///
2970/// `clmulh` produces the upper half of the 2*XLEN carry-less product
2971///
2972/// # Forms
2973/// Assembly: `clmulh xd, xs1, xs2`
2974/// Rust: `clmulh(rd, rs1, rs2)`
2975///
2976/// # Arguments
2977/// - `rd` — Destination register.
2978/// - `rs1` — Source register.
2979/// - `rs2` — Source register.
2980pub trait ClmulhEmitter<T0, T1, T2> {
2981    fn clmulh(&mut self, rd: T0, rs1: T1, rs2: T2);
2982}
2983
2984/// Carry-less multiply (reversed)
2985///
2986/// `clmulr` produces bits 2*XLEN-2:XLEN-1 of the 2*XLEN carry-less product
2987///
2988/// # Forms
2989/// Assembly: `clmulr xd, xs1, xs2`
2990/// Rust: `clmulr(rd, rs1, rs2)`
2991///
2992/// # Arguments
2993/// - `rd` — Destination register.
2994/// - `rs1` — Source register.
2995/// - `rs2` — Source register.
2996pub trait ClmulrEmitter<T0, T1, T2> {
2997    fn clmulr(&mut self, rd: T0, rs1: T1, rs2: T2);
2998}
2999
3000/// Count leading zero bits
3001///
3002/// This instruction counts the number of 0's before the first 1,
3003/// starting at the most-significant bit (i.e., XLEN-1) and progressing to bit 0.
3004/// Accordingly, if the input is 0, the output is XLEN, and if the most-significant
3005/// bit of the input is a 1, the output is 0.
3006///
3007/// # Forms
3008/// Assembly: `clz xd, xs1`
3009/// Rust: `clz(rd, rs1)`
3010///
3011/// # Arguments
3012/// - `rd` — Destination register.
3013/// - `rs1` — Source register.
3014pub trait ClzEmitter<T0, T1> {
3015    fn clz(&mut self, rd: T0, rs1: T1);
3016}
3017
3018/// Count leading zero bits in word
3019///
3020/// This instruction counts the number of 0's before the first 1 starting at bit 31 and progressing to bit 0.
3021/// Accordingly, if the least-significant word is 0, the output is 32, and if the most-significant
3022/// bit of the word (_i.e._, bit 31) is a 1, the output is 0.
3023///
3024/// # Forms
3025/// Assembly: `clzw xd, xs1`
3026/// Rust: `clzw(rd, rs1)`
3027///
3028/// # Arguments
3029/// - `rd` — Destination register.
3030/// - `rs1` — Source register.
3031pub trait ClzwEmitter<T0, T1> {
3032    fn clzw(&mut self, rd: T0, rs1: T1);
3033}
3034
3035/// RISC-V `cm.jalt` instruction.
3036///
3037/// # Forms
3038/// Assembly: `cm.jalt c_index`
3039/// Rust: `cm_jalt(index)`
3040///
3041/// # Arguments
3042/// - `index` — Instruction operand.
3043pub trait CmJaltEmitter<T0> {
3044    fn cm_jalt(&mut self, index: T0);
3045}
3046
3047/// Count set bits
3048///
3049/// This instructions counts the number of 1's (i.e., set bits) in the source register.
3050///
3051/// .Software Hint
3052/// \[NOTE\]
3053/// ----
3054/// This operations is known as population count, popcount, sideways sum,
3055/// bit summation, or Hamming weight.
3056///
3057/// The GCC builtin function `__builtin_popcount (unsigned int x)` is
3058/// implemented by cpop on RV32 and by cpopw on RV64. The GCC builtin
3059/// function `__builtin_popcountl (unsigned long x)` for LP64 is
3060/// implemented by cpop on RV64.
3061/// ----
3062///
3063/// # Forms
3064/// Assembly: `cpop xd, xs1`
3065/// Rust: `cpop(rd, rs1)`
3066///
3067/// # Arguments
3068/// - `rd` — Destination register.
3069/// - `rs1` — Source register.
3070pub trait CpopEmitter<T0, T1> {
3071    fn cpop(&mut self, rd: T0, rs1: T1);
3072}
3073
3074/// Count set bits in word
3075///
3076/// This instructions counts the number of 1's (i.e., set bits) in the least-significant word of the source register.
3077///
3078/// .Software Hint
3079/// \[NOTE\]
3080/// ----
3081/// This operations is known as population count, popcount, sideways sum,
3082/// bit summation, or Hamming weight.
3083///
3084/// The GCC builtin function `__builtin_popcount (unsigned int x)` is
3085/// implemented by cpop on RV32 and by cpopw on RV64. The GCC builtin
3086/// function `__builtin_popcountl (unsigned long x)` for LP64 is
3087/// implemented by cpop on RV64.
3088/// ----
3089///
3090/// # Forms
3091/// Assembly: `cpopw xd, xs1`
3092/// Rust: `cpopw(rd, rs1)`
3093///
3094/// # Arguments
3095/// - `rd` — Destination register.
3096/// - `rs1` — Source register.
3097pub trait CpopwEmitter<T0, T1> {
3098    fn cpopw(&mut self, rd: T0, rs1: T1);
3099}
3100
3101/// RISC-V `csrc` instruction.
3102///
3103/// # Forms
3104/// Assembly: `csrc rs1 csr`
3105/// Rust: `csrc(rs1, csr)`
3106///
3107/// # Arguments
3108/// - `rs1` — Source register.
3109/// - `csr` — Control and status register number.
3110pub trait CsrcEmitter<T0, T1> {
3111    fn csrc(&mut self, rs1: T0, csr: T1);
3112}
3113
3114/// RISC-V `csrci` instruction.
3115///
3116/// # Forms
3117/// Assembly: `csrci csr zimm5`
3118/// Rust: `csrci(csr, zimm5)`
3119///
3120/// # Arguments
3121/// - `csr` — Control and status register number.
3122/// - `zimm5` — Immediate encoding value.
3123pub trait CsrciEmitter<T0, T1> {
3124    fn csrci(&mut self, csr: T0, zimm5: T1);
3125}
3126
3127/// RISC-V `csrr` instruction.
3128///
3129/// # Forms
3130/// Assembly: `csrr rd csr`
3131/// Rust: `csrr(rd, csr)`
3132///
3133/// # Arguments
3134/// - `rd` — Destination register.
3135/// - `csr` — Control and status register number.
3136pub trait CsrrEmitter<T0, T1> {
3137    fn csrr(&mut self, rd: T0, csr: T1);
3138}
3139
3140/// RISC-V `csrrc` instruction.
3141///
3142/// # Forms
3143/// Assembly: `csrrc xd, xs1, csr`
3144/// Rust: `csrrc(rd, rs1, csr)`
3145///
3146/// # Arguments
3147/// - `rd` — Destination register.
3148/// - `rs1` — Source register.
3149/// - `csr` — Control and status register number.
3150pub trait CsrrcEmitter<T0, T1, T2> {
3151    fn csrrc(&mut self, rd: T0, rs1: T1, csr: T2);
3152}
3153
3154/// RISC-V `csrrci` instruction.
3155///
3156/// # Forms
3157/// Assembly: `csrrci xd, csr, imm`
3158/// Rust: `csrrci(rd, csr, zimm5)`
3159///
3160/// # Arguments
3161/// - `rd` — Destination register.
3162/// - `csr` — Control and status register number.
3163/// - `zimm5` — Immediate encoding value.
3164pub trait CsrrciEmitter<T0, T1, T2> {
3165    fn csrrci(&mut self, rd: T0, csr: T1, zimm5: T2);
3166}
3167
3168/// Atomic Read and Set Bits in CSR
3169///
3170/// Atomically read and set bits in a CSR.
3171///
3172/// Reads the value of the CSR, zero-extends the value to `XLEN` bits,
3173/// and writes it to integer register `rd`. The initial value in integer
3174/// register `rs1` is treated as a bit mask that specifies bit positions
3175/// to be set in the CSR. Any bit that is high in `rs1` will cause the
3176/// corresponding bit to be set in the CSR, if that CSR bit is writable.
3177/// Other bits in the CSR are not explicitly written.
3178///
3179/// # Forms
3180/// Assembly: `csrrs xd, xs1, csr`
3181/// Rust: `csrrs(rd, rs1, csr)`
3182///
3183/// # Arguments
3184/// - `rd` — Destination register.
3185/// - `rs1` — Source register.
3186/// - `csr` — Control and status register number.
3187pub trait CsrrsEmitter<T0, T1, T2> {
3188    fn csrrs(&mut self, rd: T0, rs1: T1, csr: T2);
3189}
3190
3191/// RISC-V `csrrsi` instruction.
3192///
3193/// # Forms
3194/// Assembly: `csrrsi xd, csr, imm`
3195/// Rust: `csrrsi(rd, csr, zimm5)`
3196///
3197/// # Arguments
3198/// - `rd` — Destination register.
3199/// - `csr` — Control and status register number.
3200/// - `zimm5` — Immediate encoding value.
3201pub trait CsrrsiEmitter<T0, T1, T2> {
3202    fn csrrsi(&mut self, rd: T0, csr: T1, zimm5: T2);
3203}
3204
3205/// Atomic Read/Write CSR
3206///
3207/// Atomically swap values in the CSRs and integer registers.
3208///
3209/// Read the old value of the CSR, zero-extends the value to `XLEN` bits,
3210/// and then write it to integer register rd.
3211/// The initial value in rs1 is written to the CSR.
3212/// If `rd=x0`, then the instruction shall not read the CSR and shall not
3213/// cause any of the side effects that might occur on a CSR read.
3214///
3215/// # Forms
3216/// Assembly: `csrrw xd, xs1, csr`
3217/// Rust: `csrrw(rd, rs1, csr)`
3218///
3219/// # Arguments
3220/// - `rd` — Destination register.
3221/// - `rs1` — Source register.
3222/// - `csr` — Control and status register number.
3223pub trait CsrrwEmitter<T0, T1, T2> {
3224    fn csrrw(&mut self, rd: T0, rs1: T1, csr: T2);
3225}
3226
3227/// Atomic Read/Write CSR Immediate
3228///
3229/// Atomically write CSR using a 5-bit immediate, and load the previous value into 'rd'.
3230///
3231/// Read the old value of the CSR, zero-extends the value to `XLEN` bits,
3232/// and then write it to integer register rd.
3233/// The 5-bit uimm field is zero-extended and written to the CSR.
3234/// If `rd=x0`, then the instruction shall not read the CSR and shall not
3235/// cause any of the side effects that might occur on a CSR read.
3236///
3237/// # Forms
3238/// Assembly: `csrrwi xd, zimm, csr`
3239/// Rust: `csrrwi(rd, csr, zimm5)`
3240///
3241/// # Arguments
3242/// - `rd` — Destination register.
3243/// - `csr` — Control and status register number.
3244/// - `zimm5` — Immediate encoding value.
3245pub trait CsrrwiEmitter<T0, T1, T2> {
3246    fn csrrwi(&mut self, rd: T0, csr: T1, zimm5: T2);
3247}
3248
3249/// RISC-V `csrs` instruction.
3250///
3251/// # Forms
3252/// Assembly: `csrs rs1 csr`
3253/// Rust: `csrs(rs1, csr)`
3254///
3255/// # Arguments
3256/// - `rs1` — Source register.
3257/// - `csr` — Control and status register number.
3258pub trait CsrsEmitter<T0, T1> {
3259    fn csrs(&mut self, rs1: T0, csr: T1);
3260}
3261
3262/// RISC-V `csrsi` instruction.
3263///
3264/// # Forms
3265/// Assembly: `csrsi csr zimm5`
3266/// Rust: `csrsi(csr, zimm5)`
3267///
3268/// # Arguments
3269/// - `csr` — Control and status register number.
3270/// - `zimm5` — Immediate encoding value.
3271pub trait CsrsiEmitter<T0, T1> {
3272    fn csrsi(&mut self, csr: T0, zimm5: T1);
3273}
3274
3275/// RISC-V `csrw` instruction.
3276///
3277/// # Forms
3278/// Assembly: `csrw rs1 csr`
3279/// Rust: `csrw(rs1, csr)`
3280///
3281/// # Arguments
3282/// - `rs1` — Source register.
3283/// - `csr` — Control and status register number.
3284pub trait CsrwEmitter<T0, T1> {
3285    fn csrw(&mut self, rs1: T0, csr: T1);
3286}
3287
3288/// RISC-V `csrwi` instruction.
3289///
3290/// # Forms
3291/// Assembly: `csrwi csr zimm5`
3292/// Rust: `csrwi(csr, zimm5)`
3293///
3294/// # Arguments
3295/// - `csr` — Control and status register number.
3296/// - `zimm5` — Immediate encoding value.
3297pub trait CsrwiEmitter<T0, T1> {
3298    fn csrwi(&mut self, csr: T0, zimm5: T1);
3299}
3300
3301/// Count trailing zero bits
3302///
3303/// This instruction counts the number of 0's before the first 1,
3304/// starting at the least-significant bit (i.e., 0) and progressing
3305/// to the most-significant bit (i.e., XLEN-1). Accordingly, if the
3306/// input is 0, the output is XLEN, and if the least-significant bit
3307/// of the input is a 1, the output is 0.
3308///
3309/// # Forms
3310/// Assembly: `ctz xd, xs1`
3311/// Rust: `ctz(rd, rs1)`
3312///
3313/// # Arguments
3314/// - `rd` — Destination register.
3315/// - `rs1` — Source register.
3316pub trait CtzEmitter<T0, T1> {
3317    fn ctz(&mut self, rd: T0, rs1: T1);
3318}
3319
3320/// Count trailing zero bits in word
3321///
3322/// This instruction counts the number of 0's before the first 1,
3323/// starting at the least-significant bit (i.e., 0) and progressing
3324/// to the most-significant bit of the least-significant word (i.e., 31). Accordingly, if the
3325/// least-significant word is 0, the output is 32, and if the least-significant bit
3326/// of the input is a 1, the output is 0.
3327///
3328/// # Forms
3329/// Assembly: `ctzw xd, xs1`
3330/// Rust: `ctzw(rd, rs1)`
3331///
3332/// # Arguments
3333/// - `rd` — Destination register.
3334/// - `rs1` — Source register.
3335pub trait CtzwEmitter<T0, T1> {
3336    fn ctzw(&mut self, rd: T0, rs1: T1);
3337}
3338
3339/// RISC-V `czero.eqz` instruction.
3340///
3341/// # Forms
3342/// Assembly: `czero.eqz xd, xs1, xs2`
3343/// Rust: `czero_eqz(rd, rs1, rs2)`
3344///
3345/// # Arguments
3346/// - `rd` — Destination register.
3347/// - `rs1` — Source register.
3348/// - `rs2` — Source register.
3349pub trait CzeroEqzEmitter<T0, T1, T2> {
3350    fn czero_eqz(&mut self, rd: T0, rs1: T1, rs2: T2);
3351}
3352
3353/// RISC-V `czero.nez` instruction.
3354///
3355/// # Forms
3356/// Assembly: `czero.nez xd, xs1, xs2`
3357/// Rust: `czero_nez(rd, rs1, rs2)`
3358///
3359/// # Arguments
3360/// - `rd` — Destination register.
3361/// - `rs1` — Source register.
3362/// - `rs2` — Source register.
3363pub trait CzeroNezEmitter<T0, T1, T2> {
3364    fn czero_nez(&mut self, rd: T0, rs1: T1, rs2: T2);
3365}
3366
3367/// Signed division
3368///
3369/// Divide rs1 by rs2, and store the result in rd. The remainder is discarded.
3370///
3371/// Division by zero will put -1 into rd.
3372///
3373/// Division resulting in signed overflow (when most negative number is divided by -1)
3374/// will put the most negative number into rd;
3375///
3376/// # Forms
3377/// Assembly: `div xd, xs1, xs2`
3378/// Rust: `div(rd, rs1, rs2)`
3379///
3380/// # Arguments
3381/// - `rd` — Destination register.
3382/// - `rs1` — Source register.
3383/// - `rs2` — Source register.
3384pub trait DivEmitter<T0, T1, T2> {
3385    fn div(&mut self, rd: T0, rs1: T1, rs2: T2);
3386}
3387
3388/// Unsigned division
3389///
3390/// Divide unsigned values in rs1 by rs2, and store the result in rd.
3391///
3392/// The remainder is discarded.
3393///
3394/// If the value in rs2 is zero, rd gets the largest unsigned value.
3395///
3396/// # Forms
3397/// Assembly: `divu xd, xs1, xs2`
3398/// Rust: `divu(rd, rs1, rs2)`
3399///
3400/// # Arguments
3401/// - `rd` — Destination register.
3402/// - `rs1` — Source register.
3403/// - `rs2` — Source register.
3404pub trait DivuEmitter<T0, T1, T2> {
3405    fn divu(&mut self, rd: T0, rs1: T1, rs2: T2);
3406}
3407
3408/// Unsigned 32-bit division
3409///
3410/// Divide the unsigned 32-bit values in rs1 and rs2, and store the sign-extended result in rd.
3411///
3412/// The remainder is discarded.
3413///
3414/// If the value in rs2 is zero, rd is written with all 1s.
3415///
3416/// # Forms
3417/// Assembly: `divuw xd, xs1, xs2`
3418/// Rust: `divuw(rd, rs1, rs2)`
3419///
3420/// # Arguments
3421/// - `rd` — Destination register.
3422/// - `rs1` — Source register.
3423/// - `rs2` — Source register.
3424pub trait DivuwEmitter<T0, T1, T2> {
3425    fn divuw(&mut self, rd: T0, rs1: T1, rs2: T2);
3426}
3427
3428/// Signed 32-bit division
3429///
3430/// Divide the lower 32-bits of register rs1 by the lower 32-bits of register rs2,
3431/// and store the sign-extended result in rd.
3432///
3433/// The remainder is discarded.
3434///
3435/// Division by zero will put -1 into rd.
3436///
3437/// Division resulting in signed overflow (when most negative number is divided by -1)
3438/// will put the most negative number into rd;
3439///
3440/// # Forms
3441/// Assembly: `divw xd, xs1, xs2`
3442/// Rust: `divw(rd, rs1, rs2)`
3443///
3444/// # Arguments
3445/// - `rd` — Destination register.
3446/// - `rs1` — Source register.
3447/// - `rs2` — Source register.
3448pub trait DivwEmitter<T0, T1, T2> {
3449    fn divw(&mut self, rd: T0, rs1: T1, rs2: T2);
3450}
3451
3452/// RISC-V `dret` instruction.
3453///
3454/// # Forms
3455/// Assembly: `dret dret`
3456/// Rust: `dret()`
3457///
3458/// # Arguments
3459pub trait DretEmitter {
3460    fn dret(&mut self);
3461}
3462
3463/// Breakpoint exception
3464///
3465/// The EBREAK instruction is used by debuggers to cause control to be transferred back to
3466/// a debugging environment. Unless overridden by an external debug environment,
3467/// EBREAK raises a breakpoint exception and performs no other operation.
3468///
3469/// \[NOTE\]
3470/// As described in the `C` Standard Extension for Compressed Instructions, the `c.ebreak`
3471/// instruction performs the same operation as the EBREAK instruction.
3472///
3473/// EBREAK causes the receiving privilege mode's epc register to be set to the address of
3474/// the EBREAK instruction itself, not the address of the following instruction.
3475/// As EBREAK causes a synchronous exception, it is not considered to retire,
3476/// and should not increment the `minstret` CSR.
3477///
3478/// # Forms
3479/// Assembly: `ebreak ""`
3480/// Rust: `ebreak()`
3481///
3482/// # Arguments
3483pub trait EbreakEmitter {
3484    fn ebreak(&mut self);
3485}
3486
3487/// Environment call
3488///
3489/// The ECALL instruction is used to make a request to the supporting execution environment.
3490/// When executed in U-mode, S-mode, or M-mode, it generates an environment-call-from-U-mode
3491/// exception, environment-call-from-S-mode exception, or environment-call-from-M-mode
3492/// exception, respectively, and performs no other operation.
3493///
3494/// \[NOTE\]
3495/// ECALL generates a different exception for each originating privilege mode so that
3496/// environment call exceptions can be selectively delegated.
3497/// A typical use case for Unix-like operating systems is to delegate to S-mode
3498/// the environment-call-from-U-mode exception but not the others.
3499///
3500/// ECALL causes the receiving privilege mode's epc register to be set to the address of
3501/// the ECALL instruction itself, not the address of the following instruction.
3502/// As ECALL causes a synchronous exception, it is not considered to retire,
3503/// and should not increment the `minstret` CSR.
3504///
3505/// # Forms
3506/// Assembly: `ecall ""`
3507/// Rust: `ecall()`
3508///
3509/// # Arguments
3510pub trait EcallEmitter {
3511    fn ecall(&mut self);
3512}
3513
3514/// RISC-V `fabs.d` instruction.
3515///
3516/// # Forms
3517/// Assembly: `fabs.d rd rs1 rs2_eq_rs1`
3518/// Rust: `fabs_d(rd, rs1, rs2)`
3519///
3520/// # Arguments
3521/// - `rd` — Destination register.
3522/// - `rs1` — Source register.
3523/// - `rs2` — Source register.
3524pub trait FabsDEmitter<T0, T1, T2> {
3525    fn fabs_d(&mut self, rd: T0, rs1: T1, rs2: T2);
3526}
3527
3528/// RISC-V `fabs.h` instruction.
3529///
3530/// # Forms
3531/// Assembly: `fabs.h rd rs1 rs2_eq_rs1`
3532/// Rust: `fabs_h(rd, rs1, rs2)`
3533///
3534/// # Arguments
3535/// - `rd` — Destination register.
3536/// - `rs1` — Source register.
3537/// - `rs2` — Source register.
3538pub trait FabsHEmitter<T0, T1, T2> {
3539    fn fabs_h(&mut self, rd: T0, rs1: T1, rs2: T2);
3540}
3541
3542/// RISC-V `fabs.q` instruction.
3543///
3544/// # Forms
3545/// Assembly: `fabs.q rd rs1 rs2_eq_rs1`
3546/// Rust: `fabs_q(rd, rs1, rs2)`
3547///
3548/// # Arguments
3549/// - `rd` — Destination register.
3550/// - `rs1` — Source register.
3551/// - `rs2` — Source register.
3552pub trait FabsQEmitter<T0, T1, T2> {
3553    fn fabs_q(&mut self, rd: T0, rs1: T1, rs2: T2);
3554}
3555
3556/// RISC-V `fabs.s` instruction.
3557///
3558/// # Forms
3559/// Assembly: `fabs.s rd rs1 rs2_eq_rs1`
3560/// Rust: `fabs_s(rd, rs1, rs2)`
3561///
3562/// # Arguments
3563/// - `rd` — Destination register.
3564/// - `rs1` — Source register.
3565/// - `rs2` — Source register.
3566pub trait FabsSEmitter<T0, T1, T2> {
3567    fn fabs_s(&mut self, rd: T0, rs1: T1, rs2: T2);
3568}
3569
3570/// RISC-V `fadd.d` instruction.
3571///
3572/// # Forms
3573/// Assembly: `fadd.d xd, xs1, xs2, rm`
3574/// Rust: `fadd_d(rd, rs1, rs2, rm)`
3575///
3576/// # Arguments
3577/// - `rd` — Destination register.
3578/// - `rs1` — Source register.
3579/// - `rs2` — Source register.
3580/// - `rm` — Rounding mode.
3581pub trait FaddDEmitter<T0, T1, T2, T3> {
3582    fn fadd_d(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3);
3583}
3584
3585/// RISC-V `fadd.h` instruction.
3586///
3587/// # Forms
3588/// Assembly: `fadd.h xd, xs1, xs2, rm`
3589/// Rust: `fadd_h(rd, rs1, rs2, rm)`
3590///
3591/// # Arguments
3592/// - `rd` — Destination register.
3593/// - `rs1` — Source register.
3594/// - `rs2` — Source register.
3595/// - `rm` — Rounding mode.
3596pub trait FaddHEmitter<T0, T1, T2, T3> {
3597    fn fadd_h(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3);
3598}
3599
3600/// RISC-V `fadd.q` instruction.
3601///
3602/// # Forms
3603/// Assembly: `fadd.q qd, qs1, qs2, rm`
3604/// Rust: `fadd_q(rd, rs1, rs2, rm)`
3605///
3606/// # Arguments
3607/// - `rd` — Destination register.
3608/// - `rs1` — Source register.
3609/// - `rs2` — Source register.
3610/// - `rm` — Rounding mode.
3611pub trait FaddQEmitter<T0, T1, T2, T3> {
3612    fn fadd_q(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3);
3613}
3614
3615/// Single-precision floating-point addition
3616///
3617/// Do the single-precision floating-point addition of fs1 and fs2 and store the result in fd.
3618/// rm is the dynamic Rounding Mode.
3619///
3620/// # Forms
3621/// Assembly: `fadd.s fd, fs1, fs2, rm`
3622/// Rust: `fadd_s(rd, rs1, rs2, rm)`
3623///
3624/// # Arguments
3625/// - `rd` — Destination register.
3626/// - `rs1` — Source register.
3627/// - `rs2` — Source register.
3628/// - `rm` — Rounding mode.
3629pub trait FaddSEmitter<T0, T1, T2, T3> {
3630    fn fadd_s(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3);
3631}
3632
3633/// RISC-V `fclass.d` instruction.
3634///
3635/// # Forms
3636/// Assembly: `fclass.d xd, xs1`
3637/// Rust: `fclass_d(rd, rs1)`
3638///
3639/// # Arguments
3640/// - `rd` — Destination register.
3641/// - `rs1` — Source register.
3642pub trait FclassDEmitter<T0, T1> {
3643    fn fclass_d(&mut self, rd: T0, rs1: T1);
3644}
3645
3646/// RISC-V `fclass.h` instruction.
3647///
3648/// # Forms
3649/// Assembly: `fclass.h xd, xs1`
3650/// Rust: `fclass_h(rd, rs1)`
3651///
3652/// # Arguments
3653/// - `rd` — Destination register.
3654/// - `rs1` — Source register.
3655pub trait FclassHEmitter<T0, T1> {
3656    fn fclass_h(&mut self, rd: T0, rs1: T1);
3657}
3658
3659/// RISC-V `fclass.q` instruction.
3660///
3661/// # Forms
3662/// Assembly: `fclass.q xd, qs1`
3663/// Rust: `fclass_q(rd, rs1)`
3664///
3665/// # Arguments
3666/// - `rd` — Destination register.
3667/// - `rs1` — Source register.
3668pub trait FclassQEmitter<T0, T1> {
3669    fn fclass_q(&mut self, rd: T0, rs1: T1);
3670}
3671
3672/// Single-precision floating-point classify.
3673///
3674/// The `fclass.s` instruction examines the value in floating-point register
3675/// _fs1_ and writes to integer register _rd_ a 10-bit mask that indicates
3676/// the class of the floating-point number.
3677/// The format of the mask is described in the table below.
3678/// The corresponding bit in _rd_ will be set if the property is true and
3679/// clear otherwise.
3680/// All other bits in _rd_ are cleared.
3681/// Note that exactly one bit in rd will be set.
3682/// `fclass.s` does not set the floating-point exception flags.
3683///
3684/// .Format of result of `fclass` instruction.
3685/// \[%autowidth,float="center",align="center",cols="^,&lt;",options="header",\]
3686/// |===
3687/// |_rd_ bit |Meaning
3688/// |0 |_rs1_ is latexmath:\[$-\infty$\].
3689/// |1 |_rs1_ is a negative normal number.
3690/// |2 |_rs1_ is a negative subnormal number.
3691/// |3 |_rs1_ is latexmath:\[$-0$\].
3692/// |4 |_rs1_ is latexmath:\[$+0$\].
3693/// |5 |_rs1_ is a positive subnormal number.
3694/// |6 |_rs1_ is a positive normal number.
3695/// |7 |_rs1_ is latexmath:\[$+\infty$\].
3696/// |8 |_rs1_ is a signaling NaN.
3697/// |9 |_rs1_ is a quiet NaN.
3698/// |===
3699///
3700/// # Forms
3701/// Assembly: `fclass.s xd, fs1`
3702/// Rust: `fclass_s(rd, rs1)`
3703///
3704/// # Arguments
3705/// - `rd` — Destination register.
3706/// - `rs1` — Source register.
3707pub trait FclassSEmitter<T0, T1> {
3708    fn fclass_s(&mut self, rd: T0, rs1: T1);
3709}
3710
3711/// RISC-V `fcvt.bf16.s` instruction.
3712///
3713/// # Forms
3714/// Assembly: `fcvt.bf16.s xd, xs1, rm`
3715/// Rust: `fcvt_bf16_s(rd, rs1, rm)`
3716///
3717/// # Arguments
3718/// - `rd` — Destination register.
3719/// - `rs1` — Source register.
3720/// - `rm` — Rounding mode.
3721pub trait FcvtBf16SEmitter<T0, T1, T2> {
3722    fn fcvt_bf16_s(&mut self, rd: T0, rs1: T1, rm: T2);
3723}
3724
3725/// RISC-V `fcvt.d.h` instruction.
3726///
3727/// # Forms
3728/// Assembly: `fcvt.d.h xd, xs1, rm`
3729/// Rust: `fcvt_d_h(rd, rs1, rm)`
3730///
3731/// # Arguments
3732/// - `rd` — Destination register.
3733/// - `rs1` — Source register.
3734/// - `rm` — Rounding mode.
3735pub trait FcvtDHEmitter<T0, T1, T2> {
3736    fn fcvt_d_h(&mut self, rd: T0, rs1: T1, rm: T2);
3737}
3738
3739/// RISC-V `fcvt.d.l` instruction.
3740///
3741/// # Forms
3742/// Assembly: `fcvt.d.l xd, xs1, rm`
3743/// Rust: `fcvt_d_l(rd, rs1, rm)`
3744///
3745/// # Arguments
3746/// - `rd` — Destination register.
3747/// - `rs1` — Source register.
3748/// - `rm` — Rounding mode.
3749pub trait FcvtDLEmitter<T0, T1, T2> {
3750    fn fcvt_d_l(&mut self, rd: T0, rs1: T1, rm: T2);
3751}
3752
3753/// RISC-V `fcvt.d.lu` instruction.
3754///
3755/// # Forms
3756/// Assembly: `fcvt.d.lu xd, xs1, rm`
3757/// Rust: `fcvt_d_lu(rd, rs1, rm)`
3758///
3759/// # Arguments
3760/// - `rd` — Destination register.
3761/// - `rs1` — Source register.
3762/// - `rm` — Rounding mode.
3763pub trait FcvtDLuEmitter<T0, T1, T2> {
3764    fn fcvt_d_lu(&mut self, rd: T0, rs1: T1, rm: T2);
3765}
3766
3767/// RISC-V `fcvt.d.q` instruction.
3768///
3769/// # Forms
3770/// Assembly: `fcvt.d.q xd, qs1, rm`
3771/// Rust: `fcvt_d_q(rd, rs1, rm)`
3772///
3773/// # Arguments
3774/// - `rd` — Destination register.
3775/// - `rs1` — Source register.
3776/// - `rm` — Rounding mode.
3777pub trait FcvtDQEmitter<T0, T1, T2> {
3778    fn fcvt_d_q(&mut self, rd: T0, rs1: T1, rm: T2);
3779}
3780
3781/// RISC-V `fcvt.d.s` instruction.
3782///
3783/// # Forms
3784/// Assembly: `fcvt.d.s xd, xs1, rm`
3785/// Rust: `fcvt_d_s(rd, rs1, rm)`
3786///
3787/// # Arguments
3788/// - `rd` — Destination register.
3789/// - `rs1` — Source register.
3790/// - `rm` — Rounding mode.
3791pub trait FcvtDSEmitter<T0, T1, T2> {
3792    fn fcvt_d_s(&mut self, rd: T0, rs1: T1, rm: T2);
3793}
3794
3795/// RISC-V `fcvt.d.w` instruction.
3796///
3797/// # Forms
3798/// Assembly: `fcvt.d.w xd, xs1, rm`
3799/// Rust: `fcvt_d_w(rd, rs1, rm)`
3800///
3801/// # Arguments
3802/// - `rd` — Destination register.
3803/// - `rs1` — Source register.
3804/// - `rm` — Rounding mode.
3805pub trait FcvtDWEmitter<T0, T1, T2> {
3806    fn fcvt_d_w(&mut self, rd: T0, rs1: T1, rm: T2);
3807}
3808
3809/// RISC-V `fcvt.d.wu` instruction.
3810///
3811/// # Forms
3812/// Assembly: `fcvt.d.wu xd, xs1, rm`
3813/// Rust: `fcvt_d_wu(rd, rs1, rm)`
3814///
3815/// # Arguments
3816/// - `rd` — Destination register.
3817/// - `rs1` — Source register.
3818/// - `rm` — Rounding mode.
3819pub trait FcvtDWuEmitter<T0, T1, T2> {
3820    fn fcvt_d_wu(&mut self, rd: T0, rs1: T1, rm: T2);
3821}
3822
3823/// RISC-V `fcvt.h.d` instruction.
3824///
3825/// # Forms
3826/// Assembly: `fcvt.h.d xd, xs1, rm`
3827/// Rust: `fcvt_h_d(rd, rs1, rm)`
3828///
3829/// # Arguments
3830/// - `rd` — Destination register.
3831/// - `rs1` — Source register.
3832/// - `rm` — Rounding mode.
3833pub trait FcvtHDEmitter<T0, T1, T2> {
3834    fn fcvt_h_d(&mut self, rd: T0, rs1: T1, rm: T2);
3835}
3836
3837/// RISC-V `fcvt.h.l` instruction.
3838///
3839/// # Forms
3840/// Assembly: `fcvt.h.l xd, xs1, rm`
3841/// Rust: `fcvt_h_l(rd, rs1, rm)`
3842///
3843/// # Arguments
3844/// - `rd` — Destination register.
3845/// - `rs1` — Source register.
3846/// - `rm` — Rounding mode.
3847pub trait FcvtHLEmitter<T0, T1, T2> {
3848    fn fcvt_h_l(&mut self, rd: T0, rs1: T1, rm: T2);
3849}
3850
3851/// RISC-V `fcvt.h.lu` instruction.
3852///
3853/// # Forms
3854/// Assembly: `fcvt.h.lu xd, xs1, rm`
3855/// Rust: `fcvt_h_lu(rd, rs1, rm)`
3856///
3857/// # Arguments
3858/// - `rd` — Destination register.
3859/// - `rs1` — Source register.
3860/// - `rm` — Rounding mode.
3861pub trait FcvtHLuEmitter<T0, T1, T2> {
3862    fn fcvt_h_lu(&mut self, rd: T0, rs1: T1, rm: T2);
3863}
3864
3865/// RISC-V `fcvt.h.q` instruction.
3866///
3867/// # Forms
3868/// Assembly: `fcvt.h.q xd, qs1, rm`
3869/// Rust: `fcvt_h_q(rd, rs1, rm)`
3870///
3871/// # Arguments
3872/// - `rd` — Destination register.
3873/// - `rs1` — Source register.
3874/// - `rm` — Rounding mode.
3875pub trait FcvtHQEmitter<T0, T1, T2> {
3876    fn fcvt_h_q(&mut self, rd: T0, rs1: T1, rm: T2);
3877}
3878
3879/// Convert half-precision float to a single-precision float
3880///
3881/// Converts a half-precision number in floating-point register _fs1_ into a single-precision floating-point number in
3882/// floating-point register _fd_.
3883///
3884/// `fcvt.h.s` rounds according to the _rm_ field.
3885///
3886/// All floating-point conversion instructions set the Inexact exception flag if the rounded
3887/// result differs from the operand value and the Invalid exception flag is not set.
3888///
3889/// # Forms
3890/// Assembly: `fcvt.h.s fd, xs1`
3891/// Rust: `fcvt_h_s(rd, rs1, rm)`
3892///
3893/// # Arguments
3894/// - `rd` — Destination register.
3895/// - `rs1` — Source register.
3896/// - `rm` — Rounding mode.
3897pub trait FcvtHSEmitter<T0, T1, T2> {
3898    fn fcvt_h_s(&mut self, rd: T0, rs1: T1, rm: T2);
3899}
3900
3901/// RISC-V `fcvt.h.w` instruction.
3902///
3903/// # Forms
3904/// Assembly: `fcvt.h.w xd, xs1, rm`
3905/// Rust: `fcvt_h_w(rd, rs1, rm)`
3906///
3907/// # Arguments
3908/// - `rd` — Destination register.
3909/// - `rs1` — Source register.
3910/// - `rm` — Rounding mode.
3911pub trait FcvtHWEmitter<T0, T1, T2> {
3912    fn fcvt_h_w(&mut self, rd: T0, rs1: T1, rm: T2);
3913}
3914
3915/// RISC-V `fcvt.h.wu` instruction.
3916///
3917/// # Forms
3918/// Assembly: `fcvt.h.wu xd, xs1, rm`
3919/// Rust: `fcvt_h_wu(rd, rs1, rm)`
3920///
3921/// # Arguments
3922/// - `rd` — Destination register.
3923/// - `rs1` — Source register.
3924/// - `rm` — Rounding mode.
3925pub trait FcvtHWuEmitter<T0, T1, T2> {
3926    fn fcvt_h_wu(&mut self, rd: T0, rs1: T1, rm: T2);
3927}
3928
3929/// RISC-V `fcvt.l.d` instruction.
3930///
3931/// # Forms
3932/// Assembly: `fcvt.l.d xd, xs1, rm`
3933/// Rust: `fcvt_l_d(rd, rs1, rm)`
3934///
3935/// # Arguments
3936/// - `rd` — Destination register.
3937/// - `rs1` — Source register.
3938/// - `rm` — Rounding mode.
3939pub trait FcvtLDEmitter<T0, T1, T2> {
3940    fn fcvt_l_d(&mut self, rd: T0, rs1: T1, rm: T2);
3941}
3942
3943/// RISC-V `fcvt.l.h` instruction.
3944///
3945/// # Forms
3946/// Assembly: `fcvt.l.h xd, xs1, rm`
3947/// Rust: `fcvt_l_h(rd, rs1, rm)`
3948///
3949/// # Arguments
3950/// - `rd` — Destination register.
3951/// - `rs1` — Source register.
3952/// - `rm` — Rounding mode.
3953pub trait FcvtLHEmitter<T0, T1, T2> {
3954    fn fcvt_l_h(&mut self, rd: T0, rs1: T1, rm: T2);
3955}
3956
3957/// RISC-V `fcvt.l.q` instruction.
3958///
3959/// # Forms
3960/// Assembly: `fcvt.l.q xd, qs1, rm`
3961/// Rust: `fcvt_l_q(rd, rs1, rm)`
3962///
3963/// # Arguments
3964/// - `rd` — Destination register.
3965/// - `rs1` — Source register.
3966/// - `rm` — Rounding mode.
3967pub trait FcvtLQEmitter<T0, T1, T2> {
3968    fn fcvt_l_q(&mut self, rd: T0, rs1: T1, rm: T2);
3969}
3970
3971/// RISC-V `fcvt.l.s` instruction.
3972///
3973/// # Forms
3974/// Assembly: `fcvt.l.s xd, fs1, rm`
3975/// Rust: `fcvt_l_s(rd, rs1, rm)`
3976///
3977/// # Arguments
3978/// - `rd` — Destination register.
3979/// - `rs1` — Source register.
3980/// - `rm` — Rounding mode.
3981pub trait FcvtLSEmitter<T0, T1, T2> {
3982    fn fcvt_l_s(&mut self, rd: T0, rs1: T1, rm: T2);
3983}
3984
3985/// RISC-V `fcvt.lu.d` instruction.
3986///
3987/// # Forms
3988/// Assembly: `fcvt.lu.d xd, xs1, rm`
3989/// Rust: `fcvt_lu_d(rd, rs1, rm)`
3990///
3991/// # Arguments
3992/// - `rd` — Destination register.
3993/// - `rs1` — Source register.
3994/// - `rm` — Rounding mode.
3995pub trait FcvtLuDEmitter<T0, T1, T2> {
3996    fn fcvt_lu_d(&mut self, rd: T0, rs1: T1, rm: T2);
3997}
3998
3999/// RISC-V `fcvt.lu.h` instruction.
4000///
4001/// # Forms
4002/// Assembly: `fcvt.lu.h xd, xs1, rm`
4003/// Rust: `fcvt_lu_h(rd, rs1, rm)`
4004///
4005/// # Arguments
4006/// - `rd` — Destination register.
4007/// - `rs1` — Source register.
4008/// - `rm` — Rounding mode.
4009pub trait FcvtLuHEmitter<T0, T1, T2> {
4010    fn fcvt_lu_h(&mut self, rd: T0, rs1: T1, rm: T2);
4011}
4012
4013/// RISC-V `fcvt.lu.q` instruction.
4014///
4015/// # Forms
4016/// Assembly: `fcvt.lu.q qd, hs1, rm`
4017/// Rust: `fcvt_lu_q(rd, rs1, rm)`
4018///
4019/// # Arguments
4020/// - `rd` — Destination register.
4021/// - `rs1` — Source register.
4022/// - `rm` — Rounding mode.
4023pub trait FcvtLuQEmitter<T0, T1, T2> {
4024    fn fcvt_lu_q(&mut self, rd: T0, rs1: T1, rm: T2);
4025}
4026
4027/// RISC-V `fcvt.lu.s` instruction.
4028///
4029/// # Forms
4030/// Assembly: `fcvt.lu.s xd, fs1, rm`
4031/// Rust: `fcvt_lu_s(rd, rs1, rm)`
4032///
4033/// # Arguments
4034/// - `rd` — Destination register.
4035/// - `rs1` — Source register.
4036/// - `rm` — Rounding mode.
4037pub trait FcvtLuSEmitter<T0, T1, T2> {
4038    fn fcvt_lu_s(&mut self, rd: T0, rs1: T1, rm: T2);
4039}
4040
4041/// RISC-V `fcvt.q.d` instruction.
4042///
4043/// # Forms
4044/// Assembly: `fcvt.q.d dd, fs1, rm`
4045/// Rust: `fcvt_q_d(rd, rs1, rm)`
4046///
4047/// # Arguments
4048/// - `rd` — Destination register.
4049/// - `rs1` — Source register.
4050/// - `rm` — Rounding mode.
4051pub trait FcvtQDEmitter<T0, T1, T2> {
4052    fn fcvt_q_d(&mut self, rd: T0, rs1: T1, rm: T2);
4053}
4054
4055/// RISC-V `fcvt.q.h` instruction.
4056///
4057/// # Forms
4058/// Assembly: `fcvt.q.h hd, qs1, rm`
4059/// Rust: `fcvt_q_h(rd, rs1, rm)`
4060///
4061/// # Arguments
4062/// - `rd` — Destination register.
4063/// - `rs1` — Source register.
4064/// - `rm` — Rounding mode.
4065pub trait FcvtQHEmitter<T0, T1, T2> {
4066    fn fcvt_q_h(&mut self, rd: T0, rs1: T1, rm: T2);
4067}
4068
4069/// RISC-V `fcvt.q.l` instruction.
4070///
4071/// # Forms
4072/// Assembly: `fcvt.q.l qd, xs1, rm`
4073/// Rust: `fcvt_q_l(rd, rs1, rm)`
4074///
4075/// # Arguments
4076/// - `rd` — Destination register.
4077/// - `rs1` — Source register.
4078/// - `rm` — Rounding mode.
4079pub trait FcvtQLEmitter<T0, T1, T2> {
4080    fn fcvt_q_l(&mut self, rd: T0, rs1: T1, rm: T2);
4081}
4082
4083/// RISC-V `fcvt.q.lu` instruction.
4084///
4085/// # Forms
4086/// Assembly: `fcvt.q.lu qd, xs1, rm`
4087/// Rust: `fcvt_q_lu(rd, rs1, rm)`
4088///
4089/// # Arguments
4090/// - `rd` — Destination register.
4091/// - `rs1` — Source register.
4092/// - `rm` — Rounding mode.
4093pub trait FcvtQLuEmitter<T0, T1, T2> {
4094    fn fcvt_q_lu(&mut self, rd: T0, rs1: T1, rm: T2);
4095}
4096
4097/// RISC-V `fcvt.q.s` instruction.
4098///
4099/// # Forms
4100/// Assembly: `fcvt.q.s qd, fs1, rm`
4101/// Rust: `fcvt_q_s(rd, rs1, rm)`
4102///
4103/// # Arguments
4104/// - `rd` — Destination register.
4105/// - `rs1` — Source register.
4106/// - `rm` — Rounding mode.
4107pub trait FcvtQSEmitter<T0, T1, T2> {
4108    fn fcvt_q_s(&mut self, rd: T0, rs1: T1, rm: T2);
4109}
4110
4111/// RISC-V `fcvt.q.w` instruction.
4112///
4113/// # Forms
4114/// Assembly: `fcvt.q.w fd, xs1, rm`
4115/// Rust: `fcvt_q_w(rd, rs1, rm)`
4116///
4117/// # Arguments
4118/// - `rd` — Destination register.
4119/// - `rs1` — Source register.
4120/// - `rm` — Rounding mode.
4121pub trait FcvtQWEmitter<T0, T1, T2> {
4122    fn fcvt_q_w(&mut self, rd: T0, rs1: T1, rm: T2);
4123}
4124
4125/// RISC-V `fcvt.q.wu` instruction.
4126///
4127/// # Forms
4128/// Assembly: `fcvt.q.wu qd, xs1, rm`
4129/// Rust: `fcvt_q_wu(rd, rs1, rm)`
4130///
4131/// # Arguments
4132/// - `rd` — Destination register.
4133/// - `rs1` — Source register.
4134/// - `rm` — Rounding mode.
4135pub trait FcvtQWuEmitter<T0, T1, T2> {
4136    fn fcvt_q_wu(&mut self, rd: T0, rs1: T1, rm: T2);
4137}
4138
4139/// RISC-V `fcvt.s.bf16` instruction.
4140///
4141/// # Forms
4142/// Assembly: `fcvt.s.bf16 xd, xs1, rm`
4143/// Rust: `fcvt_s_bf16(rd, rs1, rm)`
4144///
4145/// # Arguments
4146/// - `rd` — Destination register.
4147/// - `rs1` — Source register.
4148/// - `rm` — Rounding mode.
4149pub trait FcvtSBf16Emitter<T0, T1, T2> {
4150    fn fcvt_s_bf16(&mut self, rd: T0, rs1: T1, rm: T2);
4151}
4152
4153/// RISC-V `fcvt.s.d` instruction.
4154///
4155/// # Forms
4156/// Assembly: `fcvt.s.d xd, xs1, rm`
4157/// Rust: `fcvt_s_d(rd, rs1, rm)`
4158///
4159/// # Arguments
4160/// - `rd` — Destination register.
4161/// - `rs1` — Source register.
4162/// - `rm` — Rounding mode.
4163pub trait FcvtSDEmitter<T0, T1, T2> {
4164    fn fcvt_s_d(&mut self, rd: T0, rs1: T1, rm: T2);
4165}
4166
4167/// Convert single-precision float to a half-precision float
4168///
4169/// Converts a single-precision number in floating-point register _fs1_ into a half-precision floating-point number in
4170/// floating-point register _fd_.
4171///
4172/// `fcvt.s.h` will never round, and so the 'rm' field is effectively ignored.
4173///
4174/// # Forms
4175/// Assembly: `fcvt.s.h fd, xs1`
4176/// Rust: `fcvt_s_h(rd, rs1, rm)`
4177///
4178/// # Arguments
4179/// - `rd` — Destination register.
4180/// - `rs1` — Source register.
4181/// - `rm` — Rounding mode.
4182pub trait FcvtSHEmitter<T0, T1, T2> {
4183    fn fcvt_s_h(&mut self, rd: T0, rs1: T1, rm: T2);
4184}
4185
4186/// RISC-V `fcvt.s.l` instruction.
4187///
4188/// # Forms
4189/// Assembly: `fcvt.s.l fd, xs1, rm`
4190/// Rust: `fcvt_s_l(rd, rs1, rm)`
4191///
4192/// # Arguments
4193/// - `rd` — Destination register.
4194/// - `rs1` — Source register.
4195/// - `rm` — Rounding mode.
4196pub trait FcvtSLEmitter<T0, T1, T2> {
4197    fn fcvt_s_l(&mut self, rd: T0, rs1: T1, rm: T2);
4198}
4199
4200/// RISC-V `fcvt.s.lu` instruction.
4201///
4202/// # Forms
4203/// Assembly: `fcvt.s.lu fd, xs1, rm`
4204/// Rust: `fcvt_s_lu(rd, rs1, rm)`
4205///
4206/// # Arguments
4207/// - `rd` — Destination register.
4208/// - `rs1` — Source register.
4209/// - `rm` — Rounding mode.
4210pub trait FcvtSLuEmitter<T0, T1, T2> {
4211    fn fcvt_s_lu(&mut self, rd: T0, rs1: T1, rm: T2);
4212}
4213
4214/// RISC-V `fcvt.s.q` instruction.
4215///
4216/// # Forms
4217/// Assembly: `fcvt.s.q fd, qs1, rm`
4218/// Rust: `fcvt_s_q(rd, rs1, rm)`
4219///
4220/// # Arguments
4221/// - `rd` — Destination register.
4222/// - `rs1` — Source register.
4223/// - `rm` — Rounding mode.
4224pub trait FcvtSQEmitter<T0, T1, T2> {
4225    fn fcvt_s_q(&mut self, rd: T0, rs1: T1, rm: T2);
4226}
4227
4228/// Convert signed 32-bit integer to single-precision float
4229///
4230/// Converts a 32-bit signed integer in integer register _rs1_ into a floating-point number in
4231/// floating-point register _fd_.
4232///
4233/// All floating-point to integer and integer to floating-point conversion instructions round
4234/// according to the _rm_ field.
4235/// A floating-point register can be initialized to floating-point positive zero using
4236/// `fcvt.s.w rd, x0`, which will never set any exception flags.
4237///
4238/// All floating-point conversion instructions set the Inexact exception flag if the rounded
4239/// result differs from the operand value and the Invalid exception flag is not set.
4240///
4241/// # Forms
4242/// Assembly: `fcvt.s.w fd, xs1`
4243/// Rust: `fcvt_s_w(rd, rs1, rm)`
4244///
4245/// # Arguments
4246/// - `rd` — Destination register.
4247/// - `rs1` — Source register.
4248/// - `rm` — Rounding mode.
4249pub trait FcvtSWEmitter<T0, T1, T2> {
4250    fn fcvt_s_w(&mut self, rd: T0, rs1: T1, rm: T2);
4251}
4252
4253/// RISC-V `fcvt.s.wu` instruction.
4254///
4255/// # Forms
4256/// Assembly: `fcvt.s.wu fd, xs1, rm`
4257/// Rust: `fcvt_s_wu(rd, rs1, rm)`
4258///
4259/// # Arguments
4260/// - `rd` — Destination register.
4261/// - `rs1` — Source register.
4262/// - `rm` — Rounding mode.
4263pub trait FcvtSWuEmitter<T0, T1, T2> {
4264    fn fcvt_s_wu(&mut self, rd: T0, rs1: T1, rm: T2);
4265}
4266
4267/// RISC-V `fcvt.w.d` instruction.
4268///
4269/// # Forms
4270/// Assembly: `fcvt.w.d xd, xs1, rm`
4271/// Rust: `fcvt_w_d(rd, rs1, rm)`
4272///
4273/// # Arguments
4274/// - `rd` — Destination register.
4275/// - `rs1` — Source register.
4276/// - `rm` — Rounding mode.
4277pub trait FcvtWDEmitter<T0, T1, T2> {
4278    fn fcvt_w_d(&mut self, rd: T0, rs1: T1, rm: T2);
4279}
4280
4281/// RISC-V `fcvt.w.h` instruction.
4282///
4283/// # Forms
4284/// Assembly: `fcvt.w.h xd, xs1, rm`
4285/// Rust: `fcvt_w_h(rd, rs1, rm)`
4286///
4287/// # Arguments
4288/// - `rd` — Destination register.
4289/// - `rs1` — Source register.
4290/// - `rm` — Rounding mode.
4291pub trait FcvtWHEmitter<T0, T1, T2> {
4292    fn fcvt_w_h(&mut self, rd: T0, rs1: T1, rm: T2);
4293}
4294
4295/// RISC-V `fcvt.w.q` instruction.
4296///
4297/// # Forms
4298/// Assembly: `fcvt.w.q xd, qs1, rm`
4299/// Rust: `fcvt_w_q(rd, rs1, rm)`
4300///
4301/// # Arguments
4302/// - `rd` — Destination register.
4303/// - `rs1` — Source register.
4304/// - `rm` — Rounding mode.
4305pub trait FcvtWQEmitter<T0, T1, T2> {
4306    fn fcvt_w_q(&mut self, rd: T0, rs1: T1, rm: T2);
4307}
4308
4309/// Convert single-precision float to integer word to signed 32-bit integer.
4310///
4311/// Converts a floating-point number in floating-point register _fs1_ to a signed 32-bit integer indicates
4312/// integer register _rd_.
4313///
4314/// For XLEN &gt;32, `fcvt.w.s` sign-extends the 32-bit result to the destination register width.
4315///
4316/// If the rounded result is not representable as a 32-bit signed integer, it is clipped to the
4317/// nearest value and the invalid flag is set.
4318///
4319/// The range of valid inputs and behavior for invalid inputs are:
4320///
4321/// \[separator="!"\]
4322/// !===
4323/// ! ! Value
4324///
4325/// h! Minimum valid input (after rounding) ! `-2^31`
4326/// h! Maximum valid input (after rounding) ! `2^31 - 1`
4327/// h! Output for out-of-range negative input ! `-2^31`
4328/// h! Output for `-&infin;` ! `-2^31`
4329/// h! Output for out-of-range positive input ! `2^31 - 1`
4330/// h! Output for `+&infin;` for `NaN` ! `2^31 - 1`
4331/// !===
4332///
4333/// All floating-point to integer and integer to floating-point conversion instructions round
4334/// according to the _rm_ field.
4335/// A floating-point register can be initialized to floating-point positive zero using
4336/// `fcvt.s.w rd, x0`, which will never set any exception flags.
4337///
4338/// All floating-point conversion instructions set the Inexact exception flag if the rounded
4339/// result differs from the operand value and the Invalid exception flag is not set.
4340///
4341/// # Forms
4342/// Assembly: `fcvt.w.s xd, fs1`
4343/// Rust: `fcvt_w_s(rd, rs1, rm)`
4344///
4345/// # Arguments
4346/// - `rd` — Destination register.
4347/// - `rs1` — Source register.
4348/// - `rm` — Rounding mode.
4349pub trait FcvtWSEmitter<T0, T1, T2> {
4350    fn fcvt_w_s(&mut self, rd: T0, rs1: T1, rm: T2);
4351}
4352
4353/// RISC-V `fcvt.wu.d` instruction.
4354///
4355/// # Forms
4356/// Assembly: `fcvt.wu.d xd, xs1, rm`
4357/// Rust: `fcvt_wu_d(rd, rs1, rm)`
4358///
4359/// # Arguments
4360/// - `rd` — Destination register.
4361/// - `rs1` — Source register.
4362/// - `rm` — Rounding mode.
4363pub trait FcvtWuDEmitter<T0, T1, T2> {
4364    fn fcvt_wu_d(&mut self, rd: T0, rs1: T1, rm: T2);
4365}
4366
4367/// RISC-V `fcvt.wu.h` instruction.
4368///
4369/// # Forms
4370/// Assembly: `fcvt.wu.h xd, xs1, rm`
4371/// Rust: `fcvt_wu_h(rd, rs1, rm)`
4372///
4373/// # Arguments
4374/// - `rd` — Destination register.
4375/// - `rs1` — Source register.
4376/// - `rm` — Rounding mode.
4377pub trait FcvtWuHEmitter<T0, T1, T2> {
4378    fn fcvt_wu_h(&mut self, rd: T0, rs1: T1, rm: T2);
4379}
4380
4381/// RISC-V `fcvt.wu.q` instruction.
4382///
4383/// # Forms
4384/// Assembly: `fcvt.wu.q xd, xs1, rm`
4385/// Rust: `fcvt_wu_q(rd, rs1, rm)`
4386///
4387/// # Arguments
4388/// - `rd` — Destination register.
4389/// - `rs1` — Source register.
4390/// - `rm` — Rounding mode.
4391pub trait FcvtWuQEmitter<T0, T1, T2> {
4392    fn fcvt_wu_q(&mut self, rd: T0, rs1: T1, rm: T2);
4393}
4394
4395/// RISC-V `fcvt.wu.s` instruction.
4396///
4397/// # Forms
4398/// Assembly: `fcvt.wu.s xd, fs1, rm`
4399/// Rust: `fcvt_wu_s(rd, rs1, rm)`
4400///
4401/// # Arguments
4402/// - `rd` — Destination register.
4403/// - `rs1` — Source register.
4404/// - `rm` — Rounding mode.
4405pub trait FcvtWuSEmitter<T0, T1, T2> {
4406    fn fcvt_wu_s(&mut self, rd: T0, rs1: T1, rm: T2);
4407}
4408
4409/// RISC-V `fcvtmod.w.d` instruction.
4410///
4411/// # Forms
4412/// Assembly: `fcvtmod.w.d xd, xs1`
4413/// Rust: `fcvtmod_w_d(rd, rs1)`
4414///
4415/// # Arguments
4416/// - `rd` — Destination register.
4417/// - `rs1` — Source register.
4418pub trait FcvtmodWDEmitter<T0, T1> {
4419    fn fcvtmod_w_d(&mut self, rd: T0, rs1: T1);
4420}
4421
4422/// RISC-V `fdiv.d` instruction.
4423///
4424/// # Forms
4425/// Assembly: `fdiv.d xd, xs1, xs2, rm`
4426/// Rust: `fdiv_d(rd, rs1, rs2, rm)`
4427///
4428/// # Arguments
4429/// - `rd` — Destination register.
4430/// - `rs1` — Source register.
4431/// - `rs2` — Source register.
4432/// - `rm` — Rounding mode.
4433pub trait FdivDEmitter<T0, T1, T2, T3> {
4434    fn fdiv_d(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3);
4435}
4436
4437/// RISC-V `fdiv.h` instruction.
4438///
4439/// # Forms
4440/// Assembly: `fdiv.h xd, xs1, xs2, rm`
4441/// Rust: `fdiv_h(rd, rs1, rs2, rm)`
4442///
4443/// # Arguments
4444/// - `rd` — Destination register.
4445/// - `rs1` — Source register.
4446/// - `rs2` — Source register.
4447/// - `rm` — Rounding mode.
4448pub trait FdivHEmitter<T0, T1, T2, T3> {
4449    fn fdiv_h(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3);
4450}
4451
4452/// RISC-V `fdiv.q` instruction.
4453///
4454/// # Forms
4455/// Assembly: `fdiv.q qd, qs1, qs2, rm`
4456/// Rust: `fdiv_q(rd, rs1, rs2, rm)`
4457///
4458/// # Arguments
4459/// - `rd` — Destination register.
4460/// - `rs1` — Source register.
4461/// - `rs2` — Source register.
4462/// - `rm` — Rounding mode.
4463pub trait FdivQEmitter<T0, T1, T2, T3> {
4464    fn fdiv_q(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3);
4465}
4466
4467/// RISC-V `fdiv.s` instruction.
4468///
4469/// # Forms
4470/// Assembly: `fdiv.s fd, fs1, fs2, rm`
4471/// Rust: `fdiv_s(rd, rs1, rs2, rm)`
4472///
4473/// # Arguments
4474/// - `rd` — Destination register.
4475/// - `rs1` — Source register.
4476/// - `rs2` — Source register.
4477/// - `rm` — Rounding mode.
4478pub trait FdivSEmitter<T0, T1, T2, T3> {
4479    fn fdiv_s(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3);
4480}
4481
4482/// Memory ordering fence
4483///
4484/// Orders memory operations.
4485///
4486/// The `fence` instruction is used to order device I/O and memory accesses as
4487/// viewed by other RISC-V harts and external devices or coprocessors. Any
4488/// combination of device input (I), device output (O), memory reads \(R),
4489/// and memory writes (W) may be ordered with respect to any combination of
4490/// the same. Informally, no other RISC-V hart or external device can
4491/// observe any operation in the _successor_ set following a `fence` before
4492/// any operation in the _predecessor_ set preceding the `fence`.
4493///
4494/// The predecessor and successor fields have the same format to specify operation types:
4495///
4496/// \[%autowidth\]
4497/// |===
4498/// 4+| `pred` 4+| `succ`
4499///
4500/// | 27 | 26 |25 | 24 | 23 | 22 | 21| 20
4501/// | PI | PO |PR | PW | SI | SO |SR | SW
4502/// |===
4503///
4504/// \[%autowidth,align="center",cols="^1,^1,&lt;3",options="header"\]
4505/// .Fence mode encoding
4506/// |===
4507/// |_fm_ field |Mnemonic |Meaning
4508/// |0000 |_none_ |Normal Fence
4509/// |1000 |TSO |With `FENCE RW,RW`: exclude write-to-read ordering; otherwise: _Reserved for future use._
4510/// 2+|_other_ |_Reserved for future use._
4511/// |===
4512///
4513/// When the mode field _fm_ is `0001` and both the predecessor and successor sets are 'RW',
4514/// then the instruction acts as a special-case `fence.tso`. `fence.tso` orders all load operations
4515/// in its predecessor set before all memory operations in its successor set, and all store operations
4516/// in its predecessor set before all store operations in its successor set. This leaves non-AMO store
4517/// operations in the 'fence.tso's predecessor set unordered with non-AMO loads in its successor set.
4518///
4519/// When mode field _fm_ is not `0001`, or when mode field _fm_ is `0001` but the _pred_ and
4520/// _succ_ fields are not both 'RW' (0x3), then the fence acts as a baseline fence (_e.g._, _fm_ is
4521/// effectively `0000`). This is unaffected by the FIOM bits, described below (implicit promotion does
4522/// not change how `fence.tso` is decoded).
4523///
4524/// The `rs1` and `rd` fields are unused and ignored.
4525///
4526/// In modes other than M-mode, `fence` is further affected by `menvcfg.FIOM`,
4527/// `senvcfg.FIOM`&lt;% if ext?(:H) %&gt;, and/or `henvcfg.FIOM`&lt;% end %&gt;
4528/// as follows:
4529///
4530/// .Effective PR/PW/SR/SW in (H)S-mode
4531/// \[%autowidth,cols=",,,",options="header",separator="!"\]
4532/// !===
4533/// ! \[.rotate\]#`menvcfg.FIOM`# ! `pred.PI` +
4534/// `pred.PO` +
4535/// `succ.SI` +
4536/// `succ.SO`
4537/// ! -&gt; +
4538/// -&gt; +
4539/// -&gt; +
4540/// -&gt;
4541/// ! effective `PR` +
4542/// effective `PW` +
4543/// effective `SR` +
4544/// effective `SW`
4545///
4546/// ! 0 ! - ! ! from encoding
4547/// ! 1 ! 0 ! ! from encoding
4548/// ! 1 ! 1 ! ! 1
4549/// !===
4550///
4551/// .Effective PR/PW/SR/SW in U-mode
4552/// \[%autowidth,options="header",separator="!",cols=",,,,"\]
4553/// !===
4554/// ! \[.rotate\]#`menvcfg.FIOM`# ! \[.rotate\]#`senvcfg.FIOM`# !  `pred.PI` +
4555/// `pred.PO` +
4556/// `succ.SI` +
4557/// `succ.SO`
4558/// ! -&gt; +
4559/// -&gt; +
4560/// -&gt; +
4561/// -&gt;
4562/// ! effective `PR` +
4563/// effective `PW` +
4564/// effective `SR` +
4565/// effective `SW`
4566///
4567/// ! 0 ! 0 ! - ! ! from encoding
4568/// ! 0 ! 1 ! 0 ! ! from encoding
4569/// ! 0 ! 1 ! 1 ! ! 1
4570/// ! 1 ! - ! 0 ! ! from encoding
4571/// ! 1 ! - ! 1 ! ! 1
4572/// !===
4573///
4574/// &lt;%- if ext?(:H) -%&gt;
4575/// .Effective PR/PW/SR/SW in VS-mode and VU-mode
4576/// \[%autowidth,options="header",separator="!",cols=",,,,"\]
4577/// !===
4578/// ! \[.rotate\]#`menvcfg.FIOM`# ! \[.rotate\]#`henvcfg.FIOM`# !  `pred.PI` +
4579/// `pred.PO` +
4580/// `succ.SI` +
4581/// `succ.SO`
4582/// ! -&gt; +
4583/// -&gt; +
4584/// -&gt; +
4585/// -&gt;
4586/// ! effective `PR` +
4587/// effective `PW` +
4588/// effective `SR` +
4589/// effective `SW`
4590///
4591/// ! 0 ! 0 ! - ! ! from encoding
4592/// ! 0 ! 1 ! 0 ! ! from encoding
4593/// ! 0 ! 1 ! 1 ! ! 1
4594/// ! 1 ! - ! 0 ! ! from encoding
4595/// ! 1 ! - ! 1 ! ! 1
4596/// !===
4597/// &lt;%- end -%&gt;
4598///
4599/// # Forms
4600/// Assembly: `fence "TODO"`
4601/// Rust: `fence(fm, pred, succ, rs1, rd)`
4602///
4603/// # Arguments
4604/// - `fm` — Immediate encoding value.
4605/// - `pred` — Immediate encoding value.
4606/// - `succ` — Immediate encoding value.
4607/// - `rs1` — Source register.
4608/// - `rd` — Destination/source register.
4609pub trait FenceEmitter<T0, T1, T2, T3, T4> {
4610    fn fence(&mut self, fm: T0, pred: T1, succ: T2, rs1: T3, rd: T4);
4611}
4612
4613/// Instruction fence
4614///
4615/// The FENCE.I instruction is used to synchronize the instruction and data
4616/// streams. RISC-V does not guarantee that stores to instruction memory
4617/// will be made visible to instruction fetches on a RISC-V hart until that
4618/// hart executes a FENCE.I instruction. A FENCE.I instruction ensures that
4619/// a subsequent instruction fetch on a RISC-V hart will see any previous
4620/// data stores already visible to the same RISC-V hart. FENCE.I does _not_
4621/// ensure that other RISC-V harts' instruction fetches will observe the
4622/// local hart's stores in a multiprocessor system. To make a store to
4623/// instruction memory visible to all RISC-V harts, the writing hart also
4624/// has to execute a data FENCE before requesting that all remote RISC-V
4625/// harts execute a FENCE.I.
4626///
4627/// The unused fields in the FENCE.I instruction, _imm\[11:0\]_, _rs1_, and
4628/// _rd_, are reserved for finer-grain fences in future extensions. For
4629/// forward compatibility, base implementations shall ignore these fields,
4630/// and standard software shall zero these fields.
4631/// (((FENCE.I, finer-grained)))
4632/// (((FENCE.I, forward compatibility)))
4633///
4634/// \[NOTE\]
4635/// ====
4636/// Because FENCE.I only orders stores with a hart's own instruction
4637/// fetches, application code should only rely upon FENCE.I if the
4638/// application thread will not be migrated to a different hart. The EEI can
4639/// provide mechanisms for efficient multiprocessor instruction-stream
4640/// synchronization.
4641/// ====
4642///
4643/// # Forms
4644/// Assembly: `fence.i ""`
4645/// Rust: `fence_i()`
4646///
4647/// # Arguments
4648pub trait FenceIEmitter {
4649    fn fence_i(&mut self);
4650}
4651
4652/// RISC-V `fence.tso` instruction.
4653///
4654/// # Forms
4655/// Assembly: `fence.tso`
4656/// Rust: `fence_tso()`
4657///
4658/// # Arguments
4659pub trait FenceTsoEmitter {
4660    fn fence_tso(&mut self);
4661}
4662
4663/// RISC-V `feq.d` instruction.
4664///
4665/// # Forms
4666/// Assembly: `feq.d xd, xs1, xs2`
4667/// Rust: `feq_d(rd, rs1, rs2)`
4668///
4669/// # Arguments
4670/// - `rd` — Destination register.
4671/// - `rs1` — Source register.
4672/// - `rs2` — Source register.
4673pub trait FeqDEmitter<T0, T1, T2> {
4674    fn feq_d(&mut self, rd: T0, rs1: T1, rs2: T2);
4675}
4676
4677/// RISC-V `feq.h` instruction.
4678///
4679/// # Forms
4680/// Assembly: `feq.h xd, xs1, xs2`
4681/// Rust: `feq_h(rd, rs1, rs2)`
4682///
4683/// # Arguments
4684/// - `rd` — Destination register.
4685/// - `rs1` — Source register.
4686/// - `rs2` — Source register.
4687pub trait FeqHEmitter<T0, T1, T2> {
4688    fn feq_h(&mut self, rd: T0, rs1: T1, rs2: T2);
4689}
4690
4691/// RISC-V `feq.q` instruction.
4692///
4693/// # Forms
4694/// Assembly: `feq.q xd, qs1, qs2`
4695/// Rust: `feq_q(rd, rs1, rs2)`
4696///
4697/// # Arguments
4698/// - `rd` — Destination register.
4699/// - `rs1` — Source register.
4700/// - `rs2` — Source register.
4701pub trait FeqQEmitter<T0, T1, T2> {
4702    fn feq_q(&mut self, rd: T0, rs1: T1, rs2: T2);
4703}
4704
4705/// Single-precision floating-point equal
4706///
4707/// Writes 1 to _rd_ if _fs1_ and _fs2_ are equal, and 0 otherwise.
4708///
4709/// If either operand is NaN, the result is 0 (not equal). If either operand is a signaling NaN, the invalid flag is set.
4710///
4711/// Positive zero is considered equal to negative zero.
4712///
4713/// # Forms
4714/// Assembly: `feq.s xd, fs1, fs2`
4715/// Rust: `feq_s(rd, rs1, rs2)`
4716///
4717/// # Arguments
4718/// - `rd` — Destination register.
4719/// - `rs1` — Source register.
4720/// - `rs2` — Source register.
4721pub trait FeqSEmitter<T0, T1, T2> {
4722    fn feq_s(&mut self, rd: T0, rs1: T1, rs2: T2);
4723}
4724
4725/// RISC-V `fld` instruction.
4726///
4727/// # Forms
4728/// Assembly: `fld xd, xs1, imm`
4729/// Rust: `fld(rd, rs1, imm)`
4730///
4731/// # Arguments
4732/// - `rd` — Destination register.
4733/// - `rs1` — Memory base register.
4734/// - `imm` — Immediate encoding value.
4735pub trait FldEmitter<T0, T1, T2> {
4736    fn fld(&mut self, rd: T0, rs1: T1, imm: T2);
4737}
4738
4739/// RISC-V `fle.d` instruction.
4740///
4741/// # Forms
4742/// Assembly: `fle.d xd, xs1, xs2`
4743/// Rust: `fle_d(rd, rs1, rs2)`
4744///
4745/// # Arguments
4746/// - `rd` — Destination register.
4747/// - `rs1` — Source register.
4748/// - `rs2` — Source register.
4749pub trait FleDEmitter<T0, T1, T2> {
4750    fn fle_d(&mut self, rd: T0, rs1: T1, rs2: T2);
4751}
4752
4753/// RISC-V `fle.h` instruction.
4754///
4755/// # Forms
4756/// Assembly: `fle.h xd, xs1, xs2`
4757/// Rust: `fle_h(rd, rs1, rs2)`
4758///
4759/// # Arguments
4760/// - `rd` — Destination register.
4761/// - `rs1` — Source register.
4762/// - `rs2` — Source register.
4763pub trait FleHEmitter<T0, T1, T2> {
4764    fn fle_h(&mut self, rd: T0, rs1: T1, rs2: T2);
4765}
4766
4767/// RISC-V `fle.q` instruction.
4768///
4769/// # Forms
4770/// Assembly: `fle.q xd, qs1, qs2`
4771/// Rust: `fle_q(rd, rs1, rs2)`
4772///
4773/// # Arguments
4774/// - `rd` — Destination register.
4775/// - `rs1` — Source register.
4776/// - `rs2` — Source register.
4777pub trait FleQEmitter<T0, T1, T2> {
4778    fn fle_q(&mut self, rd: T0, rs1: T1, rs2: T2);
4779}
4780
4781/// Single-precision floating-point less than or equal
4782///
4783/// Writes 1 to _rd_ if _fs1_ is less than or equal to _fs2_, and 0 otherwise.
4784///
4785/// If either operand is NaN, the result is 0 (not equal).
4786/// If either operand is a NaN (signaling or quiet), the invalid flag is set.
4787///
4788/// Positive zero and negative zero are considered equal.
4789///
4790/// # Forms
4791/// Assembly: `fle.s xd, fs1, fs2`
4792/// Rust: `fle_s(rd, rs1, rs2)`
4793///
4794/// # Arguments
4795/// - `rd` — Destination register.
4796/// - `rs1` — Source register.
4797/// - `rs2` — Source register.
4798pub trait FleSEmitter<T0, T1, T2> {
4799    fn fle_s(&mut self, rd: T0, rs1: T1, rs2: T2);
4800}
4801
4802/// RISC-V `fleq.d` instruction.
4803///
4804/// # Forms
4805/// Assembly: `fleq.d xd, xs1, xs2`
4806/// Rust: `fleq_d(rd, rs1, rs2)`
4807///
4808/// # Arguments
4809/// - `rd` — Destination register.
4810/// - `rs1` — Source register.
4811/// - `rs2` — Source register.
4812pub trait FleqDEmitter<T0, T1, T2> {
4813    fn fleq_d(&mut self, rd: T0, rs1: T1, rs2: T2);
4814}
4815
4816/// RISC-V `fleq.h` instruction.
4817///
4818/// # Forms
4819/// Assembly: `fleq.h xd, xs1, xs2`
4820/// Rust: `fleq_h(rd, rs1, rs2)`
4821///
4822/// # Arguments
4823/// - `rd` — Destination register.
4824/// - `rs1` — Source register.
4825/// - `rs2` — Source register.
4826pub trait FleqHEmitter<T0, T1, T2> {
4827    fn fleq_h(&mut self, rd: T0, rs1: T1, rs2: T2);
4828}
4829
4830/// RISC-V `fleq.q` instruction.
4831///
4832/// # Forms
4833/// Assembly: `fleq.q xd, qs1, qs2`
4834/// Rust: `fleq_q(rd, rs1, rs2)`
4835///
4836/// # Arguments
4837/// - `rd` — Destination register.
4838/// - `rs1` — Source register.
4839/// - `rs2` — Source register.
4840pub trait FleqQEmitter<T0, T1, T2> {
4841    fn fleq_q(&mut self, rd: T0, rs1: T1, rs2: T2);
4842}
4843
4844/// RISC-V `fleq.s` instruction.
4845///
4846/// # Forms
4847/// Assembly: `fleq.s xd, fs1, fs2`
4848/// Rust: `fleq_s(rd, rs1, rs2)`
4849///
4850/// # Arguments
4851/// - `rd` — Destination register.
4852/// - `rs1` — Source register.
4853/// - `rs2` — Source register.
4854pub trait FleqSEmitter<T0, T1, T2> {
4855    fn fleq_s(&mut self, rd: T0, rs1: T1, rs2: T2);
4856}
4857
4858/// Half-precision floating-point load
4859///
4860/// The `flh` instruction loads a single-precision floating-point value from memory at address _rs1_ + _imm_ into floating-point register _rd_.
4861///
4862/// `flh` does not modify the bits being transferred; in particular, the payloads of non-canonical NaNs are preserved.
4863///
4864/// `flh` is only guaranteed to execute atomically if the effective address is naturally aligned.
4865///
4866/// # Forms
4867/// Assembly: `flh fd, imm(xs1)`
4868/// Rust: `flh(rd, rs1, imm)`
4869///
4870/// # Arguments
4871/// - `rd` — Destination register.
4872/// - `rs1` — Memory base register.
4873/// - `imm` — Immediate encoding value.
4874pub trait FlhEmitter<T0, T1, T2> {
4875    fn flh(&mut self, rd: T0, rs1: T1, imm: T2);
4876}
4877
4878/// RISC-V `fli.d` instruction.
4879///
4880/// # Forms
4881/// Assembly: `fli.d xd, xs1`
4882/// Rust: `fli_d(rd, rs1)`
4883///
4884/// # Arguments
4885/// - `rd` — Destination register.
4886/// - `rs1` — Source register.
4887pub trait FliDEmitter<T0, T1> {
4888    fn fli_d(&mut self, rd: T0, rs1: T1);
4889}
4890
4891/// RISC-V `fli.h` instruction.
4892///
4893/// # Forms
4894/// Assembly: `fli.h xd, xs1`
4895/// Rust: `fli_h(rd, rs1)`
4896///
4897/// # Arguments
4898/// - `rd` — Destination register.
4899/// - `rs1` — Source register.
4900pub trait FliHEmitter<T0, T1> {
4901    fn fli_h(&mut self, rd: T0, rs1: T1);
4902}
4903
4904/// RISC-V `fli.q` instruction.
4905///
4906/// # Forms
4907/// Assembly: `fli.q fd, qs1`
4908/// Rust: `fli_q(rd, rs1)`
4909///
4910/// # Arguments
4911/// - `rd` — Destination register.
4912/// - `rs1` — Source register.
4913pub trait FliQEmitter<T0, T1> {
4914    fn fli_q(&mut self, rd: T0, rs1: T1);
4915}
4916
4917/// RISC-V `fli.s` instruction.
4918///
4919/// # Forms
4920/// Assembly: `fli.s fd, fs1`
4921/// Rust: `fli_s(rd, rs1)`
4922///
4923/// # Arguments
4924/// - `rd` — Destination register.
4925/// - `rs1` — Source register.
4926pub trait FliSEmitter<T0, T1> {
4927    fn fli_s(&mut self, rd: T0, rs1: T1);
4928}
4929
4930/// RISC-V `flq` instruction.
4931///
4932/// # Forms
4933/// Assembly: `flq qd, xs1, imm`
4934/// Rust: `flq(rd, rs1, imm)`
4935///
4936/// # Arguments
4937/// - `rd` — Destination register.
4938/// - `rs1` — Memory base register.
4939/// - `imm` — Immediate encoding value.
4940pub trait FlqEmitter<T0, T1, T2> {
4941    fn flq(&mut self, rd: T0, rs1: T1, imm: T2);
4942}
4943
4944/// RISC-V `flt.d` instruction.
4945///
4946/// # Forms
4947/// Assembly: `flt.d xd, xs1, xs2`
4948/// Rust: `flt_d(rd, rs1, rs2)`
4949///
4950/// # Arguments
4951/// - `rd` — Destination register.
4952/// - `rs1` — Source register.
4953/// - `rs2` — Source register.
4954pub trait FltDEmitter<T0, T1, T2> {
4955    fn flt_d(&mut self, rd: T0, rs1: T1, rs2: T2);
4956}
4957
4958/// RISC-V `flt.h` instruction.
4959///
4960/// # Forms
4961/// Assembly: `flt.h xd, xs1, xs2`
4962/// Rust: `flt_h(rd, rs1, rs2)`
4963///
4964/// # Arguments
4965/// - `rd` — Destination register.
4966/// - `rs1` — Source register.
4967/// - `rs2` — Source register.
4968pub trait FltHEmitter<T0, T1, T2> {
4969    fn flt_h(&mut self, rd: T0, rs1: T1, rs2: T2);
4970}
4971
4972/// RISC-V `flt.q` instruction.
4973///
4974/// # Forms
4975/// Assembly: `flt.q xd, qs1, qs2`
4976/// Rust: `flt_q(rd, rs1, rs2)`
4977///
4978/// # Arguments
4979/// - `rd` — Destination register.
4980/// - `rs1` — Source register.
4981/// - `rs2` — Source register.
4982pub trait FltQEmitter<T0, T1, T2> {
4983    fn flt_q(&mut self, rd: T0, rs1: T1, rs2: T2);
4984}
4985
4986/// Single-precision floating-point less than
4987///
4988/// Writes 1 to _rd_ if _fs1_ is less than _fs2_, and 0 otherwise.
4989///
4990/// If either operand is NaN, the result is 0 (not equal).
4991/// If either operand is a NaN (signaling or quiet), the invalid flag is set.
4992///
4993/// # Forms
4994/// Assembly: `flt.s xd, fs1, fs2`
4995/// Rust: `flt_s(rd, rs1, rs2)`
4996///
4997/// # Arguments
4998/// - `rd` — Destination register.
4999/// - `rs1` — Source register.
5000/// - `rs2` — Source register.
5001pub trait FltSEmitter<T0, T1, T2> {
5002    fn flt_s(&mut self, rd: T0, rs1: T1, rs2: T2);
5003}
5004
5005/// RISC-V `fltq.d` instruction.
5006///
5007/// # Forms
5008/// Assembly: `fltq.d xd, xs1, xs2`
5009/// Rust: `fltq_d(rd, rs1, rs2)`
5010///
5011/// # Arguments
5012/// - `rd` — Destination register.
5013/// - `rs1` — Source register.
5014/// - `rs2` — Source register.
5015pub trait FltqDEmitter<T0, T1, T2> {
5016    fn fltq_d(&mut self, rd: T0, rs1: T1, rs2: T2);
5017}
5018
5019/// RISC-V `fltq.h` instruction.
5020///
5021/// # Forms
5022/// Assembly: `fltq.h xd, xs1, xs2`
5023/// Rust: `fltq_h(rd, rs1, rs2)`
5024///
5025/// # Arguments
5026/// - `rd` — Destination register.
5027/// - `rs1` — Source register.
5028/// - `rs2` — Source register.
5029pub trait FltqHEmitter<T0, T1, T2> {
5030    fn fltq_h(&mut self, rd: T0, rs1: T1, rs2: T2);
5031}
5032
5033/// RISC-V `fltq.q` instruction.
5034///
5035/// # Forms
5036/// Assembly: `fltq.q qd, qs1, qs2`
5037/// Rust: `fltq_q(rd, rs1, rs2)`
5038///
5039/// # Arguments
5040/// - `rd` — Destination register.
5041/// - `rs1` — Source register.
5042/// - `rs2` — Source register.
5043pub trait FltqQEmitter<T0, T1, T2> {
5044    fn fltq_q(&mut self, rd: T0, rs1: T1, rs2: T2);
5045}
5046
5047/// RISC-V `fltq.s` instruction.
5048///
5049/// # Forms
5050/// Assembly: `fltq.s xd, fs1, fs2`
5051/// Rust: `fltq_s(rd, rs1, rs2)`
5052///
5053/// # Arguments
5054/// - `rd` — Destination register.
5055/// - `rs1` — Source register.
5056/// - `rs2` — Source register.
5057pub trait FltqSEmitter<T0, T1, T2> {
5058    fn fltq_s(&mut self, rd: T0, rs1: T1, rs2: T2);
5059}
5060
5061/// Single-precision floating-point load
5062///
5063/// The `flw` instruction loads a single-precision floating-point value from memory at address _rs1_ + _imm_ into floating-point register _fd_.
5064///
5065/// `flw` does not modify the bits being transferred; in particular, the payloads of non-canonical NaNs are preserved.
5066///
5067/// # Forms
5068/// Assembly: `flw fd, xs1, imm`
5069/// Rust: `flw(rd, rs1, imm)`
5070///
5071/// # Arguments
5072/// - `rd` — Destination register.
5073/// - `rs1` — Memory base register.
5074/// - `imm` — Immediate encoding value.
5075pub trait FlwEmitter<T0, T1, T2> {
5076    fn flw(&mut self, rd: T0, rs1: T1, imm: T2);
5077}
5078
5079/// RISC-V `fmadd.d` instruction.
5080///
5081/// # Forms
5082/// Assembly: `fmadd.d xd, xs1, xs2, xs3, rm`
5083/// Rust: `fmadd_d(rd, rs1, rs2, rs3, rm)`
5084///
5085/// # Arguments
5086/// - `rd` — Destination register.
5087/// - `rs1` — Source register.
5088/// - `rs2` — Source register.
5089/// - `rs3` — Source register.
5090/// - `rm` — Rounding mode.
5091pub trait FmaddDEmitter<T0, T1, T2, T3, T4> {
5092    fn fmadd_d(&mut self, rd: T0, rs1: T1, rs2: T2, rs3: T3, rm: T4);
5093}
5094
5095/// RISC-V `fmadd.h` instruction.
5096///
5097/// # Forms
5098/// Assembly: `fmadd.h xd, xs1, xs2, xs3, rm`
5099/// Rust: `fmadd_h(rd, rs1, rs2, rs3, rm)`
5100///
5101/// # Arguments
5102/// - `rd` — Destination register.
5103/// - `rs1` — Source register.
5104/// - `rs2` — Source register.
5105/// - `rs3` — Source register.
5106/// - `rm` — Rounding mode.
5107pub trait FmaddHEmitter<T0, T1, T2, T3, T4> {
5108    fn fmadd_h(&mut self, rd: T0, rs1: T1, rs2: T2, rs3: T3, rm: T4);
5109}
5110
5111/// RISC-V `fmadd.q` instruction.
5112///
5113/// # Forms
5114/// Assembly: `fmadd.q qd, qs1, qs2, qs3, rm`
5115/// Rust: `fmadd_q(rd, rs1, rs2, rs3, rm)`
5116///
5117/// # Arguments
5118/// - `rd` — Destination register.
5119/// - `rs1` — Source register.
5120/// - `rs2` — Source register.
5121/// - `rs3` — Source register.
5122/// - `rm` — Rounding mode.
5123pub trait FmaddQEmitter<T0, T1, T2, T3, T4> {
5124    fn fmadd_q(&mut self, rd: T0, rs1: T1, rs2: T2, rs3: T3, rm: T4);
5125}
5126
5127/// RISC-V `fmadd.s` instruction.
5128///
5129/// # Forms
5130/// Assembly: `fmadd.s fd, fs1, fs2, fs3, rm`
5131/// Rust: `fmadd_s(rd, rs1, rs2, rs3, rm)`
5132///
5133/// # Arguments
5134/// - `rd` — Destination register.
5135/// - `rs1` — Source register.
5136/// - `rs2` — Source register.
5137/// - `rs3` — Source register.
5138/// - `rm` — Rounding mode.
5139pub trait FmaddSEmitter<T0, T1, T2, T3, T4> {
5140    fn fmadd_s(&mut self, rd: T0, rs1: T1, rs2: T2, rs3: T3, rm: T4);
5141}
5142
5143/// RISC-V `fmax.d` instruction.
5144///
5145/// # Forms
5146/// Assembly: `fmax.d xd, xs1, xs2`
5147/// Rust: `fmax_d(rd, rs1, rs2)`
5148///
5149/// # Arguments
5150/// - `rd` — Destination register.
5151/// - `rs1` — Source register.
5152/// - `rs2` — Source register.
5153pub trait FmaxDEmitter<T0, T1, T2> {
5154    fn fmax_d(&mut self, rd: T0, rs1: T1, rs2: T2);
5155}
5156
5157/// RISC-V `fmax.h` instruction.
5158///
5159/// # Forms
5160/// Assembly: `fmax.h xd, xs1, xs2`
5161/// Rust: `fmax_h(rd, rs1, rs2)`
5162///
5163/// # Arguments
5164/// - `rd` — Destination register.
5165/// - `rs1` — Source register.
5166/// - `rs2` — Source register.
5167pub trait FmaxHEmitter<T0, T1, T2> {
5168    fn fmax_h(&mut self, rd: T0, rs1: T1, rs2: T2);
5169}
5170
5171/// RISC-V `fmax.q` instruction.
5172///
5173/// # Forms
5174/// Assembly: `fmax.q qd, qs1, qs2`
5175/// Rust: `fmax_q(rd, rs1, rs2)`
5176///
5177/// # Arguments
5178/// - `rd` — Destination register.
5179/// - `rs1` — Source register.
5180/// - `rs2` — Source register.
5181pub trait FmaxQEmitter<T0, T1, T2> {
5182    fn fmax_q(&mut self, rd: T0, rs1: T1, rs2: T2);
5183}
5184
5185/// RISC-V `fmax.s` instruction.
5186///
5187/// # Forms
5188/// Assembly: `fmax.s fd, fs1, fs2`
5189/// Rust: `fmax_s(rd, rs1, rs2)`
5190///
5191/// # Arguments
5192/// - `rd` — Destination register.
5193/// - `rs1` — Source register.
5194/// - `rs2` — Source register.
5195pub trait FmaxSEmitter<T0, T1, T2> {
5196    fn fmax_s(&mut self, rd: T0, rs1: T1, rs2: T2);
5197}
5198
5199/// RISC-V `fmaxm.d` instruction.
5200///
5201/// # Forms
5202/// Assembly: `fmaxm.d xd, xs1, xs2`
5203/// Rust: `fmaxm_d(rd, rs1, rs2)`
5204///
5205/// # Arguments
5206/// - `rd` — Destination register.
5207/// - `rs1` — Source register.
5208/// - `rs2` — Source register.
5209pub trait FmaxmDEmitter<T0, T1, T2> {
5210    fn fmaxm_d(&mut self, rd: T0, rs1: T1, rs2: T2);
5211}
5212
5213/// RISC-V `fmaxm.h` instruction.
5214///
5215/// # Forms
5216/// Assembly: `fmaxm.h xd, xs1, xs2`
5217/// Rust: `fmaxm_h(rd, rs1, rs2)`
5218///
5219/// # Arguments
5220/// - `rd` — Destination register.
5221/// - `rs1` — Source register.
5222/// - `rs2` — Source register.
5223pub trait FmaxmHEmitter<T0, T1, T2> {
5224    fn fmaxm_h(&mut self, rd: T0, rs1: T1, rs2: T2);
5225}
5226
5227/// RISC-V `fmaxm.q` instruction.
5228///
5229/// # Forms
5230/// Assembly: `fmaxm.q qd, qs1, qs2`
5231/// Rust: `fmaxm_q(rd, rs1, rs2)`
5232///
5233/// # Arguments
5234/// - `rd` — Destination register.
5235/// - `rs1` — Source register.
5236/// - `rs2` — Source register.
5237pub trait FmaxmQEmitter<T0, T1, T2> {
5238    fn fmaxm_q(&mut self, rd: T0, rs1: T1, rs2: T2);
5239}
5240
5241/// RISC-V `fmaxm.s` instruction.
5242///
5243/// # Forms
5244/// Assembly: `fmaxm.s xd, xs1, xs2`
5245/// Rust: `fmaxm_s(rd, rs1, rs2)`
5246///
5247/// # Arguments
5248/// - `rd` — Destination register.
5249/// - `rs1` — Source register.
5250/// - `rs2` — Source register.
5251pub trait FmaxmSEmitter<T0, T1, T2> {
5252    fn fmaxm_s(&mut self, rd: T0, rs1: T1, rs2: T2);
5253}
5254
5255/// RISC-V `fmin.d` instruction.
5256///
5257/// # Forms
5258/// Assembly: `fmin.d xd, xs1, xs2`
5259/// Rust: `fmin_d(rd, rs1, rs2)`
5260///
5261/// # Arguments
5262/// - `rd` — Destination register.
5263/// - `rs1` — Source register.
5264/// - `rs2` — Source register.
5265pub trait FminDEmitter<T0, T1, T2> {
5266    fn fmin_d(&mut self, rd: T0, rs1: T1, rs2: T2);
5267}
5268
5269/// RISC-V `fmin.h` instruction.
5270///
5271/// # Forms
5272/// Assembly: `fmin.h xd, xs1, xs2`
5273/// Rust: `fmin_h(rd, rs1, rs2)`
5274///
5275/// # Arguments
5276/// - `rd` — Destination register.
5277/// - `rs1` — Source register.
5278/// - `rs2` — Source register.
5279pub trait FminHEmitter<T0, T1, T2> {
5280    fn fmin_h(&mut self, rd: T0, rs1: T1, rs2: T2);
5281}
5282
5283/// RISC-V `fmin.q` instruction.
5284///
5285/// # Forms
5286/// Assembly: `fmin.q xd, xs1, xs2`
5287/// Rust: `fmin_q(rd, rs1, rs2)`
5288///
5289/// # Arguments
5290/// - `rd` — Destination register.
5291/// - `rs1` — Source register.
5292/// - `rs2` — Source register.
5293pub trait FminQEmitter<T0, T1, T2> {
5294    fn fmin_q(&mut self, rd: T0, rs1: T1, rs2: T2);
5295}
5296
5297/// RISC-V `fmin.s` instruction.
5298///
5299/// # Forms
5300/// Assembly: `fmin.s xd, xs1, xs2`
5301/// Rust: `fmin_s(rd, rs1, rs2)`
5302///
5303/// # Arguments
5304/// - `rd` — Destination register.
5305/// - `rs1` — Source register.
5306/// - `rs2` — Source register.
5307pub trait FminSEmitter<T0, T1, T2> {
5308    fn fmin_s(&mut self, rd: T0, rs1: T1, rs2: T2);
5309}
5310
5311/// RISC-V `fminm.d` instruction.
5312///
5313/// # Forms
5314/// Assembly: `fminm.d xd, xs1, xs2`
5315/// Rust: `fminm_d(rd, rs1, rs2)`
5316///
5317/// # Arguments
5318/// - `rd` — Destination register.
5319/// - `rs1` — Source register.
5320/// - `rs2` — Source register.
5321pub trait FminmDEmitter<T0, T1, T2> {
5322    fn fminm_d(&mut self, rd: T0, rs1: T1, rs2: T2);
5323}
5324
5325/// RISC-V `fminm.h` instruction.
5326///
5327/// # Forms
5328/// Assembly: `fminm.h xd, xs1, xs2`
5329/// Rust: `fminm_h(rd, rs1, rs2)`
5330///
5331/// # Arguments
5332/// - `rd` — Destination register.
5333/// - `rs1` — Source register.
5334/// - `rs2` — Source register.
5335pub trait FminmHEmitter<T0, T1, T2> {
5336    fn fminm_h(&mut self, rd: T0, rs1: T1, rs2: T2);
5337}
5338
5339/// RISC-V `fminm.q` instruction.
5340///
5341/// # Forms
5342/// Assembly: `fminm.q qd, qs1, qs2`
5343/// Rust: `fminm_q(rd, rs1, rs2)`
5344///
5345/// # Arguments
5346/// - `rd` — Destination register.
5347/// - `rs1` — Source register.
5348/// - `rs2` — Source register.
5349pub trait FminmQEmitter<T0, T1, T2> {
5350    fn fminm_q(&mut self, rd: T0, rs1: T1, rs2: T2);
5351}
5352
5353/// RISC-V `fminm.s` instruction.
5354///
5355/// # Forms
5356/// Assembly: `fminm.s fd, fs1, fs2`
5357/// Rust: `fminm_s(rd, rs1, rs2)`
5358///
5359/// # Arguments
5360/// - `rd` — Destination register.
5361/// - `rs1` — Source register.
5362/// - `rs2` — Source register.
5363pub trait FminmSEmitter<T0, T1, T2> {
5364    fn fminm_s(&mut self, rd: T0, rs1: T1, rs2: T2);
5365}
5366
5367/// RISC-V `fmsub.d` instruction.
5368///
5369/// # Forms
5370/// Assembly: `fmsub.d xd, xs1, xs2, xs3, rm`
5371/// Rust: `fmsub_d(rd, rs1, rs2, rs3, rm)`
5372///
5373/// # Arguments
5374/// - `rd` — Destination register.
5375/// - `rs1` — Source register.
5376/// - `rs2` — Source register.
5377/// - `rs3` — Source register.
5378/// - `rm` — Rounding mode.
5379pub trait FmsubDEmitter<T0, T1, T2, T3, T4> {
5380    fn fmsub_d(&mut self, rd: T0, rs1: T1, rs2: T2, rs3: T3, rm: T4);
5381}
5382
5383/// RISC-V `fmsub.h` instruction.
5384///
5385/// # Forms
5386/// Assembly: `fmsub.h xd, xs1, xs2, xs3, rm`
5387/// Rust: `fmsub_h(rd, rs1, rs2, rs3, rm)`
5388///
5389/// # Arguments
5390/// - `rd` — Destination register.
5391/// - `rs1` — Source register.
5392/// - `rs2` — Source register.
5393/// - `rs3` — Source register.
5394/// - `rm` — Rounding mode.
5395pub trait FmsubHEmitter<T0, T1, T2, T3, T4> {
5396    fn fmsub_h(&mut self, rd: T0, rs1: T1, rs2: T2, rs3: T3, rm: T4);
5397}
5398
5399/// RISC-V `fmsub.q` instruction.
5400///
5401/// # Forms
5402/// Assembly: `fmsub.q qd, qs1, qs2, qs3, rm`
5403/// Rust: `fmsub_q(rd, rs1, rs2, rs3, rm)`
5404///
5405/// # Arguments
5406/// - `rd` — Destination register.
5407/// - `rs1` — Source register.
5408/// - `rs2` — Source register.
5409/// - `rs3` — Source register.
5410/// - `rm` — Rounding mode.
5411pub trait FmsubQEmitter<T0, T1, T2, T3, T4> {
5412    fn fmsub_q(&mut self, rd: T0, rs1: T1, rs2: T2, rs3: T3, rm: T4);
5413}
5414
5415/// RISC-V `fmsub.s` instruction.
5416///
5417/// # Forms
5418/// Assembly: `fmsub.s fd, fs1, fs2, fs3, rm`
5419/// Rust: `fmsub_s(rd, rs1, rs2, rs3, rm)`
5420///
5421/// # Arguments
5422/// - `rd` — Destination register.
5423/// - `rs1` — Source register.
5424/// - `rs2` — Source register.
5425/// - `rs3` — Source register.
5426/// - `rm` — Rounding mode.
5427pub trait FmsubSEmitter<T0, T1, T2, T3, T4> {
5428    fn fmsub_s(&mut self, rd: T0, rs1: T1, rs2: T2, rs3: T3, rm: T4);
5429}
5430
5431/// RISC-V `fmul.d` instruction.
5432///
5433/// # Forms
5434/// Assembly: `fmul.d xd, xs1, xs2, rm`
5435/// Rust: `fmul_d(rd, rs1, rs2, rm)`
5436///
5437/// # Arguments
5438/// - `rd` — Destination register.
5439/// - `rs1` — Source register.
5440/// - `rs2` — Source register.
5441/// - `rm` — Rounding mode.
5442pub trait FmulDEmitter<T0, T1, T2, T3> {
5443    fn fmul_d(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3);
5444}
5445
5446/// RISC-V `fmul.h` instruction.
5447///
5448/// # Forms
5449/// Assembly: `fmul.h xd, xs1, xs2, rm`
5450/// Rust: `fmul_h(rd, rs1, rs2, rm)`
5451///
5452/// # Arguments
5453/// - `rd` — Destination register.
5454/// - `rs1` — Source register.
5455/// - `rs2` — Source register.
5456/// - `rm` — Rounding mode.
5457pub trait FmulHEmitter<T0, T1, T2, T3> {
5458    fn fmul_h(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3);
5459}
5460
5461/// RISC-V `fmul.q` instruction.
5462///
5463/// # Forms
5464/// Assembly: `fmul.q qd, qs1, qs2, rm`
5465/// Rust: `fmul_q(rd, rs1, rs2, rm)`
5466///
5467/// # Arguments
5468/// - `rd` — Destination register.
5469/// - `rs1` — Source register.
5470/// - `rs2` — Source register.
5471/// - `rm` — Rounding mode.
5472pub trait FmulQEmitter<T0, T1, T2, T3> {
5473    fn fmul_q(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3);
5474}
5475
5476/// RISC-V `fmul.s` instruction.
5477///
5478/// # Forms
5479/// Assembly: `fmul.s fd, fs1, fs2, rm`
5480/// Rust: `fmul_s(rd, rs1, rs2, rm)`
5481///
5482/// # Arguments
5483/// - `rd` — Destination register.
5484/// - `rs1` — Source register.
5485/// - `rs2` — Source register.
5486/// - `rm` — Rounding mode.
5487pub trait FmulSEmitter<T0, T1, T2, T3> {
5488    fn fmul_s(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3);
5489}
5490
5491/// RISC-V `fmv.d` instruction.
5492///
5493/// # Forms
5494/// Assembly: `fmv.d rd rs1 rs2_eq_rs1`
5495/// Rust: `fmv_d(rd, rs1, rs2)`
5496///
5497/// # Arguments
5498/// - `rd` — Destination register.
5499/// - `rs1` — Source register.
5500/// - `rs2` — Source register.
5501pub trait FmvDEmitter<T0, T1, T2> {
5502    fn fmv_d(&mut self, rd: T0, rs1: T1, rs2: T2);
5503}
5504
5505/// RISC-V `fmv.d.x` instruction.
5506///
5507/// # Forms
5508/// Assembly: `fmv.d.x xd, xs1`
5509/// Rust: `fmv_d_x(rd, rs1)`
5510///
5511/// # Arguments
5512/// - `rd` — Destination register.
5513/// - `rs1` — Source register.
5514pub trait FmvDXEmitter<T0, T1> {
5515    fn fmv_d_x(&mut self, rd: T0, rs1: T1);
5516}
5517
5518/// RISC-V `fmv.h` instruction.
5519///
5520/// # Forms
5521/// Assembly: `fmv.h rd rs1 rs2_eq_rs1`
5522/// Rust: `fmv_h(rd, rs1, rs2)`
5523///
5524/// # Arguments
5525/// - `rd` — Destination register.
5526/// - `rs1` — Source register.
5527/// - `rs2` — Source register.
5528pub trait FmvHEmitter<T0, T1, T2> {
5529    fn fmv_h(&mut self, rd: T0, rs1: T1, rs2: T2);
5530}
5531
5532/// Half-precision floating-point move from integer
5533///
5534/// Moves the half-precision value encoded in IEEE 754-2008 standard encoding
5535/// from the lower 16 bits of integer register `rs1` to the floating-point
5536/// register `fd`. The bits are not modified in the transfer, and in particular,
5537/// the payloads of non-canonical NaNs are preserved.
5538///
5539/// # Forms
5540/// Assembly: `fmv.h.x fd, xs1`
5541/// Rust: `fmv_h_x(rd, rs1)`
5542///
5543/// # Arguments
5544/// - `rd` — Destination register.
5545/// - `rs1` — Source register.
5546pub trait FmvHXEmitter<T0, T1> {
5547    fn fmv_h_x(&mut self, rd: T0, rs1: T1);
5548}
5549
5550/// RISC-V `fmv.q` instruction.
5551///
5552/// # Forms
5553/// Assembly: `fmv.q rd rs1 rs2_eq_rs1`
5554/// Rust: `fmv_q(rd, rs1, rs2)`
5555///
5556/// # Arguments
5557/// - `rd` — Destination register.
5558/// - `rs1` — Source register.
5559/// - `rs2` — Source register.
5560pub trait FmvQEmitter<T0, T1, T2> {
5561    fn fmv_q(&mut self, rd: T0, rs1: T1, rs2: T2);
5562}
5563
5564/// RISC-V `fmv.s` instruction.
5565///
5566/// # Forms
5567/// Assembly: `fmv.s rd rs1 rs2_eq_rs1`
5568/// Rust: `fmv_s(rd, rs1, rs2)`
5569///
5570/// # Arguments
5571/// - `rd` — Destination register.
5572/// - `rs1` — Source register.
5573/// - `rs2` — Source register.
5574pub trait FmvSEmitter<T0, T1, T2> {
5575    fn fmv_s(&mut self, rd: T0, rs1: T1, rs2: T2);
5576}
5577
5578/// RISC-V `fmv.s.x` instruction.
5579///
5580/// # Forms
5581/// Assembly: `fmv.s.x rd rs1`
5582/// Rust: `fmv_s_x(rd, rs1)`
5583///
5584/// # Arguments
5585/// - `rd` — Destination register.
5586/// - `rs1` — Source register.
5587pub trait FmvSXEmitter<T0, T1> {
5588    fn fmv_s_x(&mut self, rd: T0, rs1: T1);
5589}
5590
5591/// Single-precision floating-point move from integer
5592///
5593/// Moves the single-precision value encoded in IEEE 754-2008 standard encoding
5594/// from the lower 32 bits of integer register `rs1` to the floating-point
5595/// register `fd`. The bits are not modified in the transfer, and in particular,
5596/// the payloads of non-canonical NaNs are preserved.
5597///
5598/// # Forms
5599/// Assembly: `fmv.w.x fd, xs1`
5600/// Rust: `fmv_w_x(rd, rs1)`
5601///
5602/// # Arguments
5603/// - `rd` — Destination register.
5604/// - `rs1` — Source register.
5605pub trait FmvWXEmitter<T0, T1> {
5606    fn fmv_w_x(&mut self, rd: T0, rs1: T1);
5607}
5608
5609/// RISC-V `fmv.x.d` instruction.
5610///
5611/// # Forms
5612/// Assembly: `fmv.x.d xd, xs1`
5613/// Rust: `fmv_x_d(rd, rs1)`
5614///
5615/// # Arguments
5616/// - `rd` — Destination register.
5617/// - `rs1` — Source register.
5618pub trait FmvXDEmitter<T0, T1> {
5619    fn fmv_x_d(&mut self, rd: T0, rs1: T1);
5620}
5621
5622/// Move half-precision value from floating-point to integer register
5623///
5624/// Moves the half-precision value in floating-point register rs1 represented in IEEE 754-2008
5625/// encoding to the lower 16 bits of integer register rd.
5626///
5627/// The bits are not modified in the transfer, and in particular, the payloads of non-canonical
5628/// NaNs are preserved.
5629///
5630/// The highest XLEN-16 bits of the destination register are filled with copies of the
5631/// floating-point number's sign bit.
5632///
5633/// # Forms
5634/// Assembly: `fmv.x.h rd, fs1`
5635/// Rust: `fmv_x_h(rd, rs1)`
5636///
5637/// # Arguments
5638/// - `rd` — Destination register.
5639/// - `rs1` — Source register.
5640pub trait FmvXHEmitter<T0, T1> {
5641    fn fmv_x_h(&mut self, rd: T0, rs1: T1);
5642}
5643
5644/// RISC-V `fmv.x.s` instruction.
5645///
5646/// # Forms
5647/// Assembly: `fmv.x.s rd rs1`
5648/// Rust: `fmv_x_s(rd, rs1)`
5649///
5650/// # Arguments
5651/// - `rd` — Destination register.
5652/// - `rs1` — Source register.
5653pub trait FmvXSEmitter<T0, T1> {
5654    fn fmv_x_s(&mut self, rd: T0, rs1: T1);
5655}
5656
5657/// Move single-precision value from floating-point to integer register
5658///
5659/// Moves the single-precision value in floating-point register rs1 represented in IEEE 754-2008
5660/// encoding to the lower 32 bits of integer register rd.
5661/// The bits are not modified in the transfer, and in particular, the payloads of non-canonical
5662/// NaNs are preserved.
5663/// For RV64, the higher 32 bits of the destination register are filled with copies of the
5664/// floating-point number's sign bit.
5665///
5666/// # Forms
5667/// Assembly: `fmv.x.w xd, fs1`
5668/// Rust: `fmv_x_w(rd, rs1)`
5669///
5670/// # Arguments
5671/// - `rd` — Destination register.
5672/// - `rs1` — Source register.
5673pub trait FmvXWEmitter<T0, T1> {
5674    fn fmv_x_w(&mut self, rd: T0, rs1: T1);
5675}
5676
5677/// RISC-V `fmvh.x.d` instruction.
5678///
5679/// # Forms
5680/// Assembly: `fmvh.x.d xd, xs1`
5681/// Rust: `fmvh_x_d(rd, rs1)`
5682///
5683/// # Arguments
5684/// - `rd` — Destination register.
5685/// - `rs1` — Source register.
5686pub trait FmvhXDEmitter<T0, T1> {
5687    fn fmvh_x_d(&mut self, rd: T0, rs1: T1);
5688}
5689
5690/// RISC-V `fmvh.x.q` instruction.
5691///
5692/// # Forms
5693/// Assembly: `fmvh.x.q xd, qs1`
5694/// Rust: `fmvh_x_q(rd, rs1)`
5695///
5696/// # Arguments
5697/// - `rd` — Destination register.
5698/// - `rs1` — Source register.
5699pub trait FmvhXQEmitter<T0, T1> {
5700    fn fmvh_x_q(&mut self, rd: T0, rs1: T1);
5701}
5702
5703/// RISC-V `fmvp.d.x` instruction.
5704///
5705/// # Forms
5706/// Assembly: `fmvp.d.x xd, xs1, xs2`
5707/// Rust: `fmvp_d_x(rd, rs1, rs2)`
5708///
5709/// # Arguments
5710/// - `rd` — Destination register.
5711/// - `rs1` — Source register.
5712/// - `rs2` — Source register.
5713pub trait FmvpDXEmitter<T0, T1, T2> {
5714    fn fmvp_d_x(&mut self, rd: T0, rs1: T1, rs2: T2);
5715}
5716
5717/// RISC-V `fmvp.q.x` instruction.
5718///
5719/// # Forms
5720/// Assembly: `fmvp.q.x qd, xs1, xs2`
5721/// Rust: `fmvp_q_x(rd, rs1, rs2)`
5722///
5723/// # Arguments
5724/// - `rd` — Destination register.
5725/// - `rs1` — Source register.
5726/// - `rs2` — Source register.
5727pub trait FmvpQXEmitter<T0, T1, T2> {
5728    fn fmvp_q_x(&mut self, rd: T0, rs1: T1, rs2: T2);
5729}
5730
5731/// RISC-V `fneg.d` instruction.
5732///
5733/// # Forms
5734/// Assembly: `fneg.d rd rs1 rs2_eq_rs1`
5735/// Rust: `fneg_d(rd, rs1, rs2)`
5736///
5737/// # Arguments
5738/// - `rd` — Destination register.
5739/// - `rs1` — Source register.
5740/// - `rs2` — Source register.
5741pub trait FnegDEmitter<T0, T1, T2> {
5742    fn fneg_d(&mut self, rd: T0, rs1: T1, rs2: T2);
5743}
5744
5745/// RISC-V `fneg.h` instruction.
5746///
5747/// # Forms
5748/// Assembly: `fneg.h rd rs1 rs2_eq_rs1`
5749/// Rust: `fneg_h(rd, rs1, rs2)`
5750///
5751/// # Arguments
5752/// - `rd` — Destination register.
5753/// - `rs1` — Source register.
5754/// - `rs2` — Source register.
5755pub trait FnegHEmitter<T0, T1, T2> {
5756    fn fneg_h(&mut self, rd: T0, rs1: T1, rs2: T2);
5757}
5758
5759/// RISC-V `fneg.q` instruction.
5760///
5761/// # Forms
5762/// Assembly: `fneg.q rd rs1 rs2_eq_rs1`
5763/// Rust: `fneg_q(rd, rs1, rs2)`
5764///
5765/// # Arguments
5766/// - `rd` — Destination register.
5767/// - `rs1` — Source register.
5768/// - `rs2` — Source register.
5769pub trait FnegQEmitter<T0, T1, T2> {
5770    fn fneg_q(&mut self, rd: T0, rs1: T1, rs2: T2);
5771}
5772
5773/// RISC-V `fneg.s` instruction.
5774///
5775/// # Forms
5776/// Assembly: `fneg.s rd rs1 rs2_eq_rs1`
5777/// Rust: `fneg_s(rd, rs1, rs2)`
5778///
5779/// # Arguments
5780/// - `rd` — Destination register.
5781/// - `rs1` — Source register.
5782/// - `rs2` — Source register.
5783pub trait FnegSEmitter<T0, T1, T2> {
5784    fn fneg_s(&mut self, rd: T0, rs1: T1, rs2: T2);
5785}
5786
5787/// RISC-V `fnmadd.d` instruction.
5788///
5789/// # Forms
5790/// Assembly: `fnmadd.d xd, xs1, xs2, xs3, rm`
5791/// Rust: `fnmadd_d(rd, rs1, rs2, rs3, rm)`
5792///
5793/// # Arguments
5794/// - `rd` — Destination register.
5795/// - `rs1` — Source register.
5796/// - `rs2` — Source register.
5797/// - `rs3` — Source register.
5798/// - `rm` — Rounding mode.
5799pub trait FnmaddDEmitter<T0, T1, T2, T3, T4> {
5800    fn fnmadd_d(&mut self, rd: T0, rs1: T1, rs2: T2, rs3: T3, rm: T4);
5801}
5802
5803/// RISC-V `fnmadd.h` instruction.
5804///
5805/// # Forms
5806/// Assembly: `fnmadd.h xd, xs1, xs2, xs3, rm`
5807/// Rust: `fnmadd_h(rd, rs1, rs2, rs3, rm)`
5808///
5809/// # Arguments
5810/// - `rd` — Destination register.
5811/// - `rs1` — Source register.
5812/// - `rs2` — Source register.
5813/// - `rs3` — Source register.
5814/// - `rm` — Rounding mode.
5815pub trait FnmaddHEmitter<T0, T1, T2, T3, T4> {
5816    fn fnmadd_h(&mut self, rd: T0, rs1: T1, rs2: T2, rs3: T3, rm: T4);
5817}
5818
5819/// RISC-V `fnmadd.q` instruction.
5820///
5821/// # Forms
5822/// Assembly: `fnmadd.q qd, qs1, qs2, qs3, rm`
5823/// Rust: `fnmadd_q(rd, rs1, rs2, rs3, rm)`
5824///
5825/// # Arguments
5826/// - `rd` — Destination register.
5827/// - `rs1` — Source register.
5828/// - `rs2` — Source register.
5829/// - `rs3` — Source register.
5830/// - `rm` — Rounding mode.
5831pub trait FnmaddQEmitter<T0, T1, T2, T3, T4> {
5832    fn fnmadd_q(&mut self, rd: T0, rs1: T1, rs2: T2, rs3: T3, rm: T4);
5833}
5834
5835/// RISC-V `fnmadd.s` instruction.
5836///
5837/// # Forms
5838/// Assembly: `fnmadd.s fd, fs1, fs2, fs3, rm`
5839/// Rust: `fnmadd_s(rd, rs1, rs2, rs3, rm)`
5840///
5841/// # Arguments
5842/// - `rd` — Destination register.
5843/// - `rs1` — Source register.
5844/// - `rs2` — Source register.
5845/// - `rs3` — Source register.
5846/// - `rm` — Rounding mode.
5847pub trait FnmaddSEmitter<T0, T1, T2, T3, T4> {
5848    fn fnmadd_s(&mut self, rd: T0, rs1: T1, rs2: T2, rs3: T3, rm: T4);
5849}
5850
5851/// RISC-V `fnmsub.d` instruction.
5852///
5853/// # Forms
5854/// Assembly: `fnmsub.d xd, xs1, xs2, xs3, rm`
5855/// Rust: `fnmsub_d(rd, rs1, rs2, rs3, rm)`
5856///
5857/// # Arguments
5858/// - `rd` — Destination register.
5859/// - `rs1` — Source register.
5860/// - `rs2` — Source register.
5861/// - `rs3` — Source register.
5862/// - `rm` — Rounding mode.
5863pub trait FnmsubDEmitter<T0, T1, T2, T3, T4> {
5864    fn fnmsub_d(&mut self, rd: T0, rs1: T1, rs2: T2, rs3: T3, rm: T4);
5865}
5866
5867/// RISC-V `fnmsub.h` instruction.
5868///
5869/// # Forms
5870/// Assembly: `fnmsub.h xd, xs1, xs2, xs3, rm`
5871/// Rust: `fnmsub_h(rd, rs1, rs2, rs3, rm)`
5872///
5873/// # Arguments
5874/// - `rd` — Destination register.
5875/// - `rs1` — Source register.
5876/// - `rs2` — Source register.
5877/// - `rs3` — Source register.
5878/// - `rm` — Rounding mode.
5879pub trait FnmsubHEmitter<T0, T1, T2, T3, T4> {
5880    fn fnmsub_h(&mut self, rd: T0, rs1: T1, rs2: T2, rs3: T3, rm: T4);
5881}
5882
5883/// RISC-V `fnmsub.q` instruction.
5884///
5885/// # Forms
5886/// Assembly: `fnmsub.q qd, qs1, qs2, qs3, rm`
5887/// Rust: `fnmsub_q(rd, rs1, rs2, rs3, rm)`
5888///
5889/// # Arguments
5890/// - `rd` — Destination register.
5891/// - `rs1` — Source register.
5892/// - `rs2` — Source register.
5893/// - `rs3` — Source register.
5894/// - `rm` — Rounding mode.
5895pub trait FnmsubQEmitter<T0, T1, T2, T3, T4> {
5896    fn fnmsub_q(&mut self, rd: T0, rs1: T1, rs2: T2, rs3: T3, rm: T4);
5897}
5898
5899/// RISC-V `fnmsub.s` instruction.
5900///
5901/// # Forms
5902/// Assembly: `fnmsub.s xd, xs1, xs2, xs3, rm`
5903/// Rust: `fnmsub_s(rd, rs1, rs2, rs3, rm)`
5904///
5905/// # Arguments
5906/// - `rd` — Destination register.
5907/// - `rs1` — Source register.
5908/// - `rs2` — Source register.
5909/// - `rs3` — Source register.
5910/// - `rm` — Rounding mode.
5911pub trait FnmsubSEmitter<T0, T1, T2, T3, T4> {
5912    fn fnmsub_s(&mut self, rd: T0, rs1: T1, rs2: T2, rs3: T3, rm: T4);
5913}
5914
5915/// RISC-V `frcsr` instruction.
5916///
5917/// # Forms
5918/// Assembly: `frcsr rd`
5919/// Rust: `frcsr(rd)`
5920///
5921/// # Arguments
5922/// - `rd` — Destination register.
5923pub trait FrcsrEmitter<T0> {
5924    fn frcsr(&mut self, rd: T0);
5925}
5926
5927/// RISC-V `frflags` instruction.
5928///
5929/// # Forms
5930/// Assembly: `frflags rd`
5931/// Rust: `frflags(rd)`
5932///
5933/// # Arguments
5934/// - `rd` — Destination register.
5935pub trait FrflagsEmitter<T0> {
5936    fn frflags(&mut self, rd: T0);
5937}
5938
5939/// RISC-V `fround.d` instruction.
5940///
5941/// # Forms
5942/// Assembly: `fround.d xd, xs1, rm`
5943/// Rust: `fround_d(rd, rs1, rm)`
5944///
5945/// # Arguments
5946/// - `rd` — Destination register.
5947/// - `rs1` — Source register.
5948/// - `rm` — Rounding mode.
5949pub trait FroundDEmitter<T0, T1, T2> {
5950    fn fround_d(&mut self, rd: T0, rs1: T1, rm: T2);
5951}
5952
5953/// RISC-V `fround.h` instruction.
5954///
5955/// # Forms
5956/// Assembly: `fround.h xd, xs1, rm`
5957/// Rust: `fround_h(rd, rs1, rm)`
5958///
5959/// # Arguments
5960/// - `rd` — Destination register.
5961/// - `rs1` — Source register.
5962/// - `rm` — Rounding mode.
5963pub trait FroundHEmitter<T0, T1, T2> {
5964    fn fround_h(&mut self, rd: T0, rs1: T1, rm: T2);
5965}
5966
5967/// RISC-V `fround.q` instruction.
5968///
5969/// # Forms
5970/// Assembly: `fround.q qd, qs1, rm`
5971/// Rust: `fround_q(rd, rs1, rm)`
5972///
5973/// # Arguments
5974/// - `rd` — Destination register.
5975/// - `rs1` — Source register.
5976/// - `rm` — Rounding mode.
5977pub trait FroundQEmitter<T0, T1, T2> {
5978    fn fround_q(&mut self, rd: T0, rs1: T1, rm: T2);
5979}
5980
5981/// RISC-V `fround.s` instruction.
5982///
5983/// # Forms
5984/// Assembly: `fround.s fd, xs1, rm`
5985/// Rust: `fround_s(rd, rs1, rm)`
5986///
5987/// # Arguments
5988/// - `rd` — Destination register.
5989/// - `rs1` — Source register.
5990/// - `rm` — Rounding mode.
5991pub trait FroundSEmitter<T0, T1, T2> {
5992    fn fround_s(&mut self, rd: T0, rs1: T1, rm: T2);
5993}
5994
5995/// RISC-V `froundnx.d` instruction.
5996///
5997/// # Forms
5998/// Assembly: `froundnx.d xd, xs1, rm`
5999/// Rust: `froundnx_d(rd, rs1, rm)`
6000///
6001/// # Arguments
6002/// - `rd` — Destination register.
6003/// - `rs1` — Source register.
6004/// - `rm` — Rounding mode.
6005pub trait FroundnxDEmitter<T0, T1, T2> {
6006    fn froundnx_d(&mut self, rd: T0, rs1: T1, rm: T2);
6007}
6008
6009/// RISC-V `froundnx.h` instruction.
6010///
6011/// # Forms
6012/// Assembly: `froundnx.h xd, xs1, rm`
6013/// Rust: `froundnx_h(rd, rs1, rm)`
6014///
6015/// # Arguments
6016/// - `rd` — Destination register.
6017/// - `rs1` — Source register.
6018/// - `rm` — Rounding mode.
6019pub trait FroundnxHEmitter<T0, T1, T2> {
6020    fn froundnx_h(&mut self, rd: T0, rs1: T1, rm: T2);
6021}
6022
6023/// RISC-V `froundnx.q` instruction.
6024///
6025/// # Forms
6026/// Assembly: `froundnx.q qd, qs1, rm`
6027/// Rust: `froundnx_q(rd, rs1, rm)`
6028///
6029/// # Arguments
6030/// - `rd` — Destination register.
6031/// - `rs1` — Source register.
6032/// - `rm` — Rounding mode.
6033pub trait FroundnxQEmitter<T0, T1, T2> {
6034    fn froundnx_q(&mut self, rd: T0, rs1: T1, rm: T2);
6035}
6036
6037/// RISC-V `froundnx.s` instruction.
6038///
6039/// # Forms
6040/// Assembly: `froundnx.s fd, rs1, rm`
6041/// Rust: `froundnx_s(rd, rs1, rm)`
6042///
6043/// # Arguments
6044/// - `rd` — Destination register.
6045/// - `rs1` — Source register.
6046/// - `rm` — Rounding mode.
6047pub trait FroundnxSEmitter<T0, T1, T2> {
6048    fn froundnx_s(&mut self, rd: T0, rs1: T1, rm: T2);
6049}
6050
6051/// RISC-V `frrm` instruction.
6052///
6053/// # Forms
6054/// Assembly: `frrm rd`
6055/// Rust: `frrm(rd)`
6056///
6057/// # Arguments
6058/// - `rd` — Destination register.
6059pub trait FrrmEmitter<T0> {
6060    fn frrm(&mut self, rd: T0);
6061}
6062
6063/// RISC-V `fscsr` instruction.
6064///
6065/// # Forms
6066/// Assembly: `fscsr rd rs1`
6067/// Rust: `fscsr(rd, rs1)`
6068///
6069/// # Arguments
6070/// - `rd` — Destination register.
6071/// - `rs1` — Source register.
6072pub trait FscsrEmitter<T0, T1> {
6073    fn fscsr(&mut self, rd: T0, rs1: T1);
6074}
6075
6076/// RISC-V `fsd` instruction.
6077///
6078/// # Forms
6079/// Assembly: `fsd xs1, xs2, imm`
6080/// Rust: `fsd(rs1, rs2, imm)`
6081///
6082/// # Arguments
6083/// - `rs1` — Memory base register.
6084/// - `rs2` — Source register.
6085/// - `imm` — Immediate encoding value.
6086pub trait FsdEmitter<T0, T1, T2> {
6087    fn fsd(&mut self, rs1: T0, rs2: T1, imm: T2);
6088}
6089
6090/// RISC-V `fsflags` instruction.
6091///
6092/// # Forms
6093/// Assembly: `fsflags rd rs1`
6094/// Rust: `fsflags(rd, rs1)`
6095///
6096/// # Arguments
6097/// - `rd` — Destination register.
6098/// - `rs1` — Source register.
6099pub trait FsflagsEmitter<T0, T1> {
6100    fn fsflags(&mut self, rd: T0, rs1: T1);
6101}
6102
6103/// RISC-V `fsflagsi` instruction.
6104///
6105/// # Forms
6106/// Assembly: `fsflagsi rd zimm5`
6107/// Rust: `fsflagsi(rd, zimm5)`
6108///
6109/// # Arguments
6110/// - `rd` — Destination register.
6111/// - `zimm5` — Immediate encoding value.
6112pub trait FsflagsiEmitter<T0, T1> {
6113    fn fsflagsi(&mut self, rd: T0, zimm5: T1);
6114}
6115
6116/// RISC-V `fsgnj.d` instruction.
6117///
6118/// # Forms
6119/// Assembly: `fsgnj.d xd, xs1, xs2`
6120/// Rust: `fsgnj_d(rd, rs1, rs2)`
6121///
6122/// # Arguments
6123/// - `rd` — Destination register.
6124/// - `rs1` — Source register.
6125/// - `rs2` — Source register.
6126pub trait FsgnjDEmitter<T0, T1, T2> {
6127    fn fsgnj_d(&mut self, rd: T0, rs1: T1, rs2: T2);
6128}
6129
6130/// RISC-V `fsgnj.h` instruction.
6131///
6132/// # Forms
6133/// Assembly: `fsgnj.h xd, xs1, xs2`
6134/// Rust: `fsgnj_h(rd, rs1, rs2)`
6135///
6136/// # Arguments
6137/// - `rd` — Destination register.
6138/// - `rs1` — Source register.
6139/// - `rs2` — Source register.
6140pub trait FsgnjHEmitter<T0, T1, T2> {
6141    fn fsgnj_h(&mut self, rd: T0, rs1: T1, rs2: T2);
6142}
6143
6144/// RISC-V `fsgnj.q` instruction.
6145///
6146/// # Forms
6147/// Assembly: `fsgnj.q qd, qs1, qs2`
6148/// Rust: `fsgnj_q(rd, rs1, rs2)`
6149///
6150/// # Arguments
6151/// - `rd` — Destination register.
6152/// - `rs1` — Source register.
6153/// - `rs2` — Source register.
6154pub trait FsgnjQEmitter<T0, T1, T2> {
6155    fn fsgnj_q(&mut self, rd: T0, rs1: T1, rs2: T2);
6156}
6157
6158/// Single-precision sign inject
6159///
6160/// Writes _fd_ with sign bit of _fs2_ and the exponent and mantissa of _fs1_.
6161///
6162/// Sign-injection instructions do not set floating-point exception flags, nor do they canonicalize NaNs.
6163///
6164/// # Forms
6165/// Assembly: `fsgnj.s fd, fs1, fs2`
6166/// Rust: `fsgnj_s(rd, rs1, rs2)`
6167///
6168/// # Arguments
6169/// - `rd` — Destination register.
6170/// - `rs1` — Source register.
6171/// - `rs2` — Source register.
6172pub trait FsgnjSEmitter<T0, T1, T2> {
6173    fn fsgnj_s(&mut self, rd: T0, rs1: T1, rs2: T2);
6174}
6175
6176/// RISC-V `fsgnjn.d` instruction.
6177///
6178/// # Forms
6179/// Assembly: `fsgnjn.d xd, xs1, xs2`
6180/// Rust: `fsgnjn_d(rd, rs1, rs2)`
6181///
6182/// # Arguments
6183/// - `rd` — Destination register.
6184/// - `rs1` — Source register.
6185/// - `rs2` — Source register.
6186pub trait FsgnjnDEmitter<T0, T1, T2> {
6187    fn fsgnjn_d(&mut self, rd: T0, rs1: T1, rs2: T2);
6188}
6189
6190/// RISC-V `fsgnjn.h` instruction.
6191///
6192/// # Forms
6193/// Assembly: `fsgnjn.h xd, xs1, xs2`
6194/// Rust: `fsgnjn_h(rd, rs1, rs2)`
6195///
6196/// # Arguments
6197/// - `rd` — Destination register.
6198/// - `rs1` — Source register.
6199/// - `rs2` — Source register.
6200pub trait FsgnjnHEmitter<T0, T1, T2> {
6201    fn fsgnjn_h(&mut self, rd: T0, rs1: T1, rs2: T2);
6202}
6203
6204/// RISC-V `fsgnjn.q` instruction.
6205///
6206/// # Forms
6207/// Assembly: `fsgnjn.q qd, qs1, qs2`
6208/// Rust: `fsgnjn_q(rd, rs1, rs2)`
6209///
6210/// # Arguments
6211/// - `rd` — Destination register.
6212/// - `rs1` — Source register.
6213/// - `rs2` — Source register.
6214pub trait FsgnjnQEmitter<T0, T1, T2> {
6215    fn fsgnjn_q(&mut self, rd: T0, rs1: T1, rs2: T2);
6216}
6217
6218/// Single-precision sign inject negate
6219///
6220/// Writes _fd_ with the opposite of the sign bit of _fs2_ and the exponent and mantissa of _fs1_.
6221///
6222/// Sign-injection instructions do not set floating-point exception flags, nor do they canonicalize NaNs.
6223///
6224/// # Forms
6225/// Assembly: `fsgnjn.s fd, fs1, fs2`
6226/// Rust: `fsgnjn_s(rd, rs1, rs2)`
6227///
6228/// # Arguments
6229/// - `rd` — Destination register.
6230/// - `rs1` — Source register.
6231/// - `rs2` — Source register.
6232pub trait FsgnjnSEmitter<T0, T1, T2> {
6233    fn fsgnjn_s(&mut self, rd: T0, rs1: T1, rs2: T2);
6234}
6235
6236/// RISC-V `fsgnjx.d` instruction.
6237///
6238/// # Forms
6239/// Assembly: `fsgnjx.d xd, xs1, xs2`
6240/// Rust: `fsgnjx_d(rd, rs1, rs2)`
6241///
6242/// # Arguments
6243/// - `rd` — Destination register.
6244/// - `rs1` — Source register.
6245/// - `rs2` — Source register.
6246pub trait FsgnjxDEmitter<T0, T1, T2> {
6247    fn fsgnjx_d(&mut self, rd: T0, rs1: T1, rs2: T2);
6248}
6249
6250/// RISC-V `fsgnjx.h` instruction.
6251///
6252/// # Forms
6253/// Assembly: `fsgnjx.h xd, xs1, xs2`
6254/// Rust: `fsgnjx_h(rd, rs1, rs2)`
6255///
6256/// # Arguments
6257/// - `rd` — Destination register.
6258/// - `rs1` — Source register.
6259/// - `rs2` — Source register.
6260pub trait FsgnjxHEmitter<T0, T1, T2> {
6261    fn fsgnjx_h(&mut self, rd: T0, rs1: T1, rs2: T2);
6262}
6263
6264/// RISC-V `fsgnjx.q` instruction.
6265///
6266/// # Forms
6267/// Assembly: `fsgnjx.q qd, qs1, qs2`
6268/// Rust: `fsgnjx_q(rd, rs1, rs2)`
6269///
6270/// # Arguments
6271/// - `rd` — Destination register.
6272/// - `rs1` — Source register.
6273/// - `rs2` — Source register.
6274pub trait FsgnjxQEmitter<T0, T1, T2> {
6275    fn fsgnjx_q(&mut self, rd: T0, rs1: T1, rs2: T2);
6276}
6277
6278/// Single-precision sign inject exclusive or
6279///
6280/// Writes _fd_ with the xor of the sign bits of _fs2_ and _fs1_ and the exponent and mantissa of _fs1_.
6281///
6282/// Sign-injection instructions do not set floating-point exception flags, nor do they canonicalize NaNs.
6283///
6284/// # Forms
6285/// Assembly: `fsgnjx.s fd, fs1, fs2`
6286/// Rust: `fsgnjx_s(rd, rs1, rs2)`
6287///
6288/// # Arguments
6289/// - `rd` — Destination register.
6290/// - `rs1` — Source register.
6291/// - `rs2` — Source register.
6292pub trait FsgnjxSEmitter<T0, T1, T2> {
6293    fn fsgnjx_s(&mut self, rd: T0, rs1: T1, rs2: T2);
6294}
6295
6296/// Half-precision floating-point store
6297///
6298/// The `fsh` instruction stores a half-precision floating-point value
6299/// from register _rd_ to memory at address _rs1_ + _imm_.
6300///
6301/// `fsh` does not modify the bits being transferred; in particular, the payloads of non-canonical NaNs are preserved.
6302///
6303/// `fsh` ignores all but the lower 16 bits in _rs2_.
6304///
6305/// `fsh` is only guaranteed to execute atomically if the effective address is naturally aligned.
6306///
6307/// # Forms
6308/// Assembly: `fsh fs2, imm(xs1)`
6309/// Rust: `fsh(rs1, rs2, imm)`
6310///
6311/// # Arguments
6312/// - `rs1` — Memory base register.
6313/// - `rs2` — Source register.
6314/// - `imm` — Immediate encoding value.
6315pub trait FshEmitter<T0, T1, T2> {
6316    fn fsh(&mut self, rs1: T0, rs2: T1, imm: T2);
6317}
6318
6319/// RISC-V `fsq` instruction.
6320///
6321/// # Forms
6322/// Assembly: `fsq xs1, qs2, imm`
6323/// Rust: `fsq(rs1, rs2, imm)`
6324///
6325/// # Arguments
6326/// - `rs1` — Memory base register.
6327/// - `rs2` — Source register.
6328/// - `imm` — Immediate encoding value.
6329pub trait FsqEmitter<T0, T1, T2> {
6330    fn fsq(&mut self, rs1: T0, rs2: T1, imm: T2);
6331}
6332
6333/// RISC-V `fsqrt.d` instruction.
6334///
6335/// # Forms
6336/// Assembly: `fsqrt.d xd, xs1, rm`
6337/// Rust: `fsqrt_d(rd, rs1, rm)`
6338///
6339/// # Arguments
6340/// - `rd` — Destination register.
6341/// - `rs1` — Source register.
6342/// - `rm` — Rounding mode.
6343pub trait FsqrtDEmitter<T0, T1, T2> {
6344    fn fsqrt_d(&mut self, rd: T0, rs1: T1, rm: T2);
6345}
6346
6347/// RISC-V `fsqrt.h` instruction.
6348///
6349/// # Forms
6350/// Assembly: `fsqrt.h xd, xs1, rm`
6351/// Rust: `fsqrt_h(rd, rs1, rm)`
6352///
6353/// # Arguments
6354/// - `rd` — Destination register.
6355/// - `rs1` — Source register.
6356/// - `rm` — Rounding mode.
6357pub trait FsqrtHEmitter<T0, T1, T2> {
6358    fn fsqrt_h(&mut self, rd: T0, rs1: T1, rm: T2);
6359}
6360
6361/// RISC-V `fsqrt.q` instruction.
6362///
6363/// # Forms
6364/// Assembly: `fsqrt.q qd, qs1, rm`
6365/// Rust: `fsqrt_q(rd, rs1, rm)`
6366///
6367/// # Arguments
6368/// - `rd` — Destination register.
6369/// - `rs1` — Source register.
6370/// - `rm` — Rounding mode.
6371pub trait FsqrtQEmitter<T0, T1, T2> {
6372    fn fsqrt_q(&mut self, rd: T0, rs1: T1, rm: T2);
6373}
6374
6375/// RISC-V `fsqrt.s` instruction.
6376///
6377/// # Forms
6378/// Assembly: `fsqrt.s fd, fs1, rm`
6379/// Rust: `fsqrt_s(rd, rs1, rm)`
6380///
6381/// # Arguments
6382/// - `rd` — Destination register.
6383/// - `rs1` — Source register.
6384/// - `rm` — Rounding mode.
6385pub trait FsqrtSEmitter<T0, T1, T2> {
6386    fn fsqrt_s(&mut self, rd: T0, rs1: T1, rm: T2);
6387}
6388
6389/// RISC-V `fsrm` instruction.
6390///
6391/// # Forms
6392/// Assembly: `fsrm rd rs1`
6393/// Rust: `fsrm(rd, rs1)`
6394///
6395/// # Arguments
6396/// - `rd` — Destination register.
6397/// - `rs1` — Source register.
6398pub trait FsrmEmitter<T0, T1> {
6399    fn fsrm(&mut self, rd: T0, rs1: T1);
6400}
6401
6402/// RISC-V `fsrmi` instruction.
6403///
6404/// # Forms
6405/// Assembly: `fsrmi rd zimm5`
6406/// Rust: `fsrmi(rd, zimm5)`
6407///
6408/// # Arguments
6409/// - `rd` — Destination register.
6410/// - `zimm5` — Immediate encoding value.
6411pub trait FsrmiEmitter<T0, T1> {
6412    fn fsrmi(&mut self, rd: T0, zimm5: T1);
6413}
6414
6415/// RISC-V `fsub.d` instruction.
6416///
6417/// # Forms
6418/// Assembly: `fsub.d xd, xs1, xs2, rm`
6419/// Rust: `fsub_d(rd, rs1, rs2, rm)`
6420///
6421/// # Arguments
6422/// - `rd` — Destination register.
6423/// - `rs1` — Source register.
6424/// - `rs2` — Source register.
6425/// - `rm` — Rounding mode.
6426pub trait FsubDEmitter<T0, T1, T2, T3> {
6427    fn fsub_d(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3);
6428}
6429
6430/// RISC-V `fsub.h` instruction.
6431///
6432/// # Forms
6433/// Assembly: `fsub.h xd, xs1, xs2, rm`
6434/// Rust: `fsub_h(rd, rs1, rs2, rm)`
6435///
6436/// # Arguments
6437/// - `rd` — Destination register.
6438/// - `rs1` — Source register.
6439/// - `rs2` — Source register.
6440/// - `rm` — Rounding mode.
6441pub trait FsubHEmitter<T0, T1, T2, T3> {
6442    fn fsub_h(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3);
6443}
6444
6445/// RISC-V `fsub.q` instruction.
6446///
6447/// # Forms
6448/// Assembly: `fsub.q qd, qs1, qs2, rm`
6449/// Rust: `fsub_q(rd, rs1, rs2, rm)`
6450///
6451/// # Arguments
6452/// - `rd` — Destination register.
6453/// - `rs1` — Source register.
6454/// - `rs2` — Source register.
6455/// - `rm` — Rounding mode.
6456pub trait FsubQEmitter<T0, T1, T2, T3> {
6457    fn fsub_q(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3);
6458}
6459
6460/// Single-precision floating-point subtraction
6461///
6462/// Do the single-precision floating-point subtraction of fs2 from fs1 and store the result in fd.
6463/// rm is the dynamic Rounding Mode.
6464///
6465/// # Forms
6466/// Assembly: `fsub.s fd, fs1, fs2, rm`
6467/// Rust: `fsub_s(rd, rs1, rs2, rm)`
6468///
6469/// # Arguments
6470/// - `rd` — Destination register.
6471/// - `rs1` — Source register.
6472/// - `rs2` — Source register.
6473/// - `rm` — Rounding mode.
6474pub trait FsubSEmitter<T0, T1, T2, T3> {
6475    fn fsub_s(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3);
6476}
6477
6478/// Single-precision floating-point store
6479///
6480/// The `fsw` instruction stores a single-precision floating-point value in _fs2_ to memory at address _rs1_ + _imm_.
6481///
6482/// `fsw` does not modify the bits being transferred; in particular, the payloads of non-canonical NaNs are preserved.
6483///
6484/// # Forms
6485/// Assembly: `fsw fs2, xs1, imm`
6486/// Rust: `fsw(rs1, rs2, imm)`
6487///
6488/// # Arguments
6489/// - `rs1` — Memory base register.
6490/// - `rs2` — Source register.
6491/// - `imm` — Immediate encoding value.
6492pub trait FswEmitter<T0, T1, T2> {
6493    fn fsw(&mut self, rs1: T0, rs2: T1, imm: T2);
6494}
6495
6496/// RISC-V `hfence.gvma` instruction.
6497///
6498/// # Forms
6499/// Assembly: `hfence.gvma xs1, xs2`
6500/// Rust: `hfence_gvma(rs1, rs2)`
6501///
6502/// # Arguments
6503/// - `rs1` — Source register.
6504/// - `rs2` — Source register.
6505pub trait HfenceGvmaEmitter<T0, T1> {
6506    fn hfence_gvma(&mut self, rs1: T0, rs2: T1);
6507}
6508
6509/// RISC-V `hfence.vvma` instruction.
6510///
6511/// # Forms
6512/// Assembly: `hfence.vvma xs1, xs2`
6513/// Rust: `hfence_vvma(rs1, rs2)`
6514///
6515/// # Arguments
6516/// - `rs1` — Source register.
6517/// - `rs2` — Source register.
6518pub trait HfenceVvmaEmitter<T0, T1> {
6519    fn hfence_vvma(&mut self, rs1: T0, rs2: T1);
6520}
6521
6522/// Invalidate cached address translations
6523///
6524/// `hinval.gvma` has the same semantics as `sinval.vma` except that it combines with
6525/// `sfence.w.inval` and `sfence.inval.ir` to replace `hfence.gvma` and uses VMID instead of ASID.
6526///
6527/// # Forms
6528/// Assembly: `hinval.gvma xs1, xs2`
6529/// Rust: `hinval_gvma(rs1, rs2)`
6530///
6531/// # Arguments
6532/// - `rs1` — Source register.
6533/// - `rs2` — Source register.
6534pub trait HinvalGvmaEmitter<T0, T1> {
6535    fn hinval_gvma(&mut self, rs1: T0, rs2: T1);
6536}
6537
6538/// Invalidate cached address translations
6539///
6540/// `hinval.vvma` has the same semantics as `sinval.vma` except that it combines with
6541/// `sfence.w.inval` and `sfence.inval.ir` to replace `hfence.vvma`.
6542///
6543/// # Forms
6544/// Assembly: `hinval.vvma xs1, xs2`
6545/// Rust: `hinval_vvma(rs1, rs2)`
6546///
6547/// # Arguments
6548/// - `rs1` — Source register.
6549/// - `rs2` — Source register.
6550pub trait HinvalVvmaEmitter<T0, T1> {
6551    fn hinval_vvma(&mut self, rs1: T0, rs2: T1);
6552}
6553
6554/// RISC-V `hlv.b` instruction.
6555///
6556/// # Forms
6557/// Assembly: `hlv.b xd, xs1`
6558/// Rust: `hlv_b(rd, rs1)`
6559///
6560/// # Arguments
6561/// - `rd` — Destination register.
6562/// - `rs1` — Source register.
6563pub trait HlvBEmitter<T0, T1> {
6564    fn hlv_b(&mut self, rd: T0, rs1: T1);
6565}
6566
6567/// RISC-V `hlv.bu` instruction.
6568///
6569/// # Forms
6570/// Assembly: `hlv.bu xd, xs1`
6571/// Rust: `hlv_bu(rd, rs1)`
6572///
6573/// # Arguments
6574/// - `rd` — Destination register.
6575/// - `rs1` — Source register.
6576pub trait HlvBuEmitter<T0, T1> {
6577    fn hlv_bu(&mut self, rd: T0, rs1: T1);
6578}
6579
6580/// RISC-V `hlv.d` instruction.
6581///
6582/// # Forms
6583/// Assembly: `hlv.d xd, xs1`
6584/// Rust: `hlv_d(rd, rs1)`
6585///
6586/// # Arguments
6587/// - `rd` — Destination register.
6588/// - `rs1` — Source register.
6589pub trait HlvDEmitter<T0, T1> {
6590    fn hlv_d(&mut self, rd: T0, rs1: T1);
6591}
6592
6593/// RISC-V `hlv.h` instruction.
6594///
6595/// # Forms
6596/// Assembly: `hlv.h xd, xs1`
6597/// Rust: `hlv_h(rd, rs1)`
6598///
6599/// # Arguments
6600/// - `rd` — Destination register.
6601/// - `rs1` — Source register.
6602pub trait HlvHEmitter<T0, T1> {
6603    fn hlv_h(&mut self, rd: T0, rs1: T1);
6604}
6605
6606/// RISC-V `hlv.hu` instruction.
6607///
6608/// # Forms
6609/// Assembly: `hlv.hu xd, xs1`
6610/// Rust: `hlv_hu(rd, rs1)`
6611///
6612/// # Arguments
6613/// - `rd` — Destination register.
6614/// - `rs1` — Source register.
6615pub trait HlvHuEmitter<T0, T1> {
6616    fn hlv_hu(&mut self, rd: T0, rs1: T1);
6617}
6618
6619/// RISC-V `hlv.w` instruction.
6620///
6621/// # Forms
6622/// Assembly: `hlv.w xd, xs1`
6623/// Rust: `hlv_w(rd, rs1)`
6624///
6625/// # Arguments
6626/// - `rd` — Destination register.
6627/// - `rs1` — Source register.
6628pub trait HlvWEmitter<T0, T1> {
6629    fn hlv_w(&mut self, rd: T0, rs1: T1);
6630}
6631
6632/// RISC-V `hlv.wu` instruction.
6633///
6634/// # Forms
6635/// Assembly: `hlv.wu xd, xs1`
6636/// Rust: `hlv_wu(rd, rs1)`
6637///
6638/// # Arguments
6639/// - `rd` — Destination register.
6640/// - `rs1` — Source register.
6641pub trait HlvWuEmitter<T0, T1> {
6642    fn hlv_wu(&mut self, rd: T0, rs1: T1);
6643}
6644
6645/// RISC-V `hlvx.hu` instruction.
6646///
6647/// # Forms
6648/// Assembly: `hlvx.hu xd, xs1`
6649/// Rust: `hlvx_hu(rd, rs1)`
6650///
6651/// # Arguments
6652/// - `rd` — Destination register.
6653/// - `rs1` — Source register.
6654pub trait HlvxHuEmitter<T0, T1> {
6655    fn hlvx_hu(&mut self, rd: T0, rs1: T1);
6656}
6657
6658/// RISC-V `hlvx.wu` instruction.
6659///
6660/// # Forms
6661/// Assembly: `hlvx.wu xd, xs1`
6662/// Rust: `hlvx_wu(rd, rs1)`
6663///
6664/// # Arguments
6665/// - `rd` — Destination register.
6666/// - `rs1` — Source register.
6667pub trait HlvxWuEmitter<T0, T1> {
6668    fn hlvx_wu(&mut self, rd: T0, rs1: T1);
6669}
6670
6671/// RISC-V `hsv.b` instruction.
6672///
6673/// # Forms
6674/// Assembly: `hsv.b xs1, xs2`
6675/// Rust: `hsv_b(rs1, rs2)`
6676///
6677/// # Arguments
6678/// - `rs1` — Source register.
6679/// - `rs2` — Source register.
6680pub trait HsvBEmitter<T0, T1> {
6681    fn hsv_b(&mut self, rs1: T0, rs2: T1);
6682}
6683
6684/// RISC-V `hsv.d` instruction.
6685///
6686/// # Forms
6687/// Assembly: `hsv.d xs1, xs2`
6688/// Rust: `hsv_d(rs1, rs2)`
6689///
6690/// # Arguments
6691/// - `rs1` — Source register.
6692/// - `rs2` — Source register.
6693pub trait HsvDEmitter<T0, T1> {
6694    fn hsv_d(&mut self, rs1: T0, rs2: T1);
6695}
6696
6697/// RISC-V `hsv.h` instruction.
6698///
6699/// # Forms
6700/// Assembly: `hsv.h xs1, xs2`
6701/// Rust: `hsv_h(rs1, rs2)`
6702///
6703/// # Arguments
6704/// - `rs1` — Source register.
6705/// - `rs2` — Source register.
6706pub trait HsvHEmitter<T0, T1> {
6707    fn hsv_h(&mut self, rs1: T0, rs2: T1);
6708}
6709
6710/// RISC-V `hsv.w` instruction.
6711///
6712/// # Forms
6713/// Assembly: `hsv.w xs1, xs2`
6714/// Rust: `hsv_w(rs1, rs2)`
6715///
6716/// # Arguments
6717/// - `rs1` — Source register.
6718/// - `rs2` — Source register.
6719pub trait HsvWEmitter<T0, T1> {
6720    fn hsv_w(&mut self, rs1: T0, rs2: T1);
6721}
6722
6723/// RISC-V `j` instruction.
6724///
6725/// # Forms
6726/// Assembly: `j jimm20`
6727/// Rust: `j(imm)`
6728///
6729/// # Arguments
6730/// - `imm` — Immediate encoding value.
6731pub trait JEmitter<T0> {
6732    fn j(&mut self, imm: T0);
6733}
6734
6735/// Jump and link
6736///
6737/// Jump to a PC-relative offset and store the return
6738/// address in rd.
6739///
6740/// # Forms
6741/// Assembly: `jal xd, imm`
6742/// Rust: `jal(rd, imm)`
6743///
6744/// # Arguments
6745/// - `rd` — Destination register.
6746/// - `imm` — Immediate encoding value.
6747pub trait JalEmitter<T0, T1> {
6748    fn jal(&mut self, rd: T0, imm: T1);
6749}
6750
6751/// RISC-V `jal.pseudo` instruction.
6752///
6753/// # Forms
6754/// Assembly: `jal.pseudo jimm20`
6755/// Rust: `jal_pseudo(imm)`
6756///
6757/// # Arguments
6758/// - `imm` — Immediate encoding value.
6759pub trait JalPseudoEmitter<T0> {
6760    fn jal_pseudo(&mut self, imm: T0);
6761}
6762
6763/// Jump and link register
6764///
6765/// Jump to an address formed by adding rs1
6766/// to a signed offset then clearing the least
6767/// significant bit, and store the return address
6768/// in rd.
6769///
6770/// # Forms
6771/// Assembly: `jalr xd, imm(rs1)`
6772/// Rust: `jalr(rd, rs1, imm)`
6773///
6774/// # Arguments
6775/// - `rd` — Destination register.
6776/// - `rs1` — Source register.
6777/// - `imm` — Immediate encoding value.
6778pub trait JalrEmitter<T0, T1, T2> {
6779    fn jalr(&mut self, rd: T0, rs1: T1, imm: T2);
6780}
6781
6782/// RISC-V `jalr.pseudo` instruction.
6783///
6784/// # Forms
6785/// Assembly: `jalr.pseudo rs1`
6786/// Rust: `jalr_pseudo(rs1)`
6787///
6788/// # Arguments
6789/// - `rs1` — Source register.
6790pub trait JalrPseudoEmitter<T0> {
6791    fn jalr_pseudo(&mut self, rs1: T0);
6792}
6793
6794/// RISC-V `jr` instruction.
6795///
6796/// # Forms
6797/// Assembly: `jr rs1`
6798/// Rust: `jr(rs1)`
6799///
6800/// # Arguments
6801/// - `rs1` — Source register.
6802pub trait JrEmitter<T0> {
6803    fn jr(&mut self, rs1: T0);
6804}
6805
6806/// Load byte
6807///
6808/// Load 8 bits of data into register `rd` from an
6809/// address formed by adding `rs1` to a signed offset.
6810/// Sign extend the result.
6811///
6812/// # Forms
6813/// Assembly: `lb xd, imm(rs1)`
6814/// Rust: `lb(rd, rs1, imm)`
6815///
6816/// # Arguments
6817/// - `rd` — Destination register.
6818/// - `rs1` — Memory base register.
6819/// - `imm` — Immediate encoding value.
6820pub trait LbEmitter<T0, T1, T2> {
6821    fn lb(&mut self, rd: T0, rs1: T1, imm: T2);
6822}
6823
6824/// Load byte unsigned
6825///
6826/// Load 8 bits of data into register `rd` from an
6827/// address formed by adding `rs1` to a signed offset.
6828/// Zero extend the result.
6829///
6830/// # Forms
6831/// Assembly: `lbu xd, imm(rs1)`
6832/// Rust: `lbu(rd, rs1, imm)`
6833///
6834/// # Arguments
6835/// - `rd` — Destination register.
6836/// - `rs1` — Memory base register.
6837/// - `imm` — Immediate encoding value.
6838pub trait LbuEmitter<T0, T1, T2> {
6839    fn lbu(&mut self, rd: T0, rs1: T1, imm: T2);
6840}
6841
6842/// Load doubleword
6843///
6844/// Load 64 bits of data into register `rd` from an
6845/// address formed by adding `rs1` to a signed offset.
6846///
6847/// # Forms
6848/// Assembly: `ld xd, imm(rs1)`
6849/// Rust: `ld(rd, rs1, imm)`
6850///
6851/// # Arguments
6852/// - `rd` — Destination register.
6853/// - `rs1` — Memory base register.
6854/// - `imm` — Immediate encoding value.
6855pub trait LdEmitter<T0, T1, T2> {
6856    fn ld(&mut self, rd: T0, rs1: T1, imm: T2);
6857}
6858
6859/// Load halfword
6860///
6861/// Load 16 bits of data into register `rd` from an
6862/// address formed by adding `rs1` to a signed offset.
6863/// Sign extend the result.
6864///
6865/// # Forms
6866/// Assembly: `lh xd, imm(rs1)`
6867/// Rust: `lh(rd, rs1, imm)`
6868///
6869/// # Arguments
6870/// - `rd` — Destination register.
6871/// - `rs1` — Memory base register.
6872/// - `imm` — Immediate encoding value.
6873pub trait LhEmitter<T0, T1, T2> {
6874    fn lh(&mut self, rd: T0, rs1: T1, imm: T2);
6875}
6876
6877/// Load halfword unsigned
6878///
6879/// Load 16 bits of data into register `rd` from an
6880/// address formed by adding `rs1` to a signed offset.
6881/// Zero extend the result.
6882///
6883/// # Forms
6884/// Assembly: `lhu xd, imm(rs1)`
6885/// Rust: `lhu(rd, rs1, imm)`
6886///
6887/// # Arguments
6888/// - `rd` — Destination register.
6889/// - `rs1` — Memory base register.
6890/// - `imm` — Immediate encoding value.
6891pub trait LhuEmitter<T0, T1, T2> {
6892    fn lhu(&mut self, rd: T0, rs1: T1, imm: T2);
6893}
6894
6895/// RISC-V `lpad` instruction.
6896///
6897/// # Forms
6898/// Assembly: `lpad imm`
6899/// Rust: `lpad(imm)`
6900///
6901/// # Arguments
6902/// - `imm` — Immediate encoding value.
6903pub trait LpadEmitter<T0> {
6904    fn lpad(&mut self, imm: T0);
6905}
6906
6907/// Load reserved doubleword
6908///
6909/// Loads a word from the address in rs1, places the value in rd,
6910/// and registers a _reservation set_  -- a set of bytes that subsumes the bytes in the
6911/// addressed word.
6912///
6913/// The address in rs1 must be 8-byte aligned.
6914///
6915/// If the address is not naturally aligned, a `LoadAddressMisaligned` exception or an
6916/// `LoadAccessFault` exception will be generated. The access-fault exception can be generated
6917/// for a memory access that would otherwise be able to complete except for the misalignment,
6918/// if the misaligned access should not be emulated.
6919///
6920/// An implementation can register an arbitrarily large reservation set on each LR, provided the
6921/// reservation set includes all bytes of the addressed data word or doubleword.
6922/// An SC can only pair with the most recent LR in program order.
6923/// An SC may succeed only if no store from another hart to the reservation set can be
6924/// observed to have occurred between the LR and the SC, and if there is no other SC between the
6925/// LR and itself in program order.
6926/// An SC may succeed only if no write from a device other than a hart to the bytes accessed by
6927/// the LR instruction can be observed to have occurred between the LR and SC. Note this LR
6928/// might have had a different effective address and data size, but reserved the SC's
6929/// address as part of the reservation set.
6930///
6931/// \[NOTE\]
6932/// ----
6933/// Following this model, in systems with memory translation, an SC is allowed to succeed if the
6934/// earlier LR reserved the same location using an alias with a different virtual address, but is
6935/// also allowed to fail if the virtual address is different.
6936///
6937/// To accommodate legacy devices and buses, writes from devices other than RISC-V harts are only
6938/// required to invalidate reservations when they overlap the bytes accessed by the LR.
6939/// These writes are not required to invalidate the reservation when they access other bytes in
6940/// the reservation set.
6941/// ----
6942///
6943/// Software should not set the _rl_ bit on an LR instruction unless the _aq_ bit is also set.
6944/// LR.rl and SC.aq instructions are not guaranteed to provide any stronger ordering than those
6945/// with both bits clear, but may result in lower performance.
6946///
6947/// # Forms
6948/// Assembly: `lr.d xd, xs1`
6949/// Rust: `lr_d(rd, rs1, aq, rl)`
6950///
6951/// # Arguments
6952/// - `rd` — Destination register.
6953/// - `rs1` — Memory base register.
6954/// - `aq` — Acquire-order bit.
6955/// - `rl` — Release-order bit; retained for the existing emitter API.
6956pub trait LrDEmitter<T0, T1, T2, T3> {
6957    fn lr_d(&mut self, rd: T0, rs1: T1, aq: T2, rl: T3);
6958}
6959
6960/// Load reserved word
6961///
6962/// Loads a word from the address in rs1, places the sign-extended value in rd,
6963/// and registers a _reservation set_  -- a set of bytes that subsumes the bytes in the
6964/// addressed word.
6965///
6966/// &lt;%- if XLEN == 64 -%&gt;
6967/// The 32-bit load result is sign-extended to 64-bits.
6968/// &lt;%- end -%&gt;
6969///
6970/// The address in rs1 must be naturally aligned to the size of the operand
6971/// (_i.e._, eight-byte aligned for doublewords and four-byte aligned for words).
6972///
6973/// If the address is not naturally aligned, a `LoadAddressMisaligned` exception or an
6974/// `LoadAccessFault` exception will be generated. The access-fault exception can be generated
6975/// for a memory access that would otherwise be able to complete except for the misalignment,
6976/// if the misaligned access should not be emulated.
6977///
6978/// An implementation can register an arbitrarily large reservation set on each LR, provided the
6979/// reservation set includes all bytes of the addressed data word or doubleword.
6980/// An SC can only pair with the most recent LR in program order.
6981/// An SC may succeed only if no store from another hart to the reservation set can be
6982/// observed to have occurred between the LR and the SC, and if there is no other SC between the
6983/// LR and itself in program order.
6984/// An SC may succeed only if no write from a device other than a hart to the bytes accessed by
6985/// the LR instruction can be observed to have occurred between the LR and SC. Note this LR
6986/// might have had a different effective address and data size, but reserved the SC's
6987/// address as part of the reservation set.
6988///
6989/// \[NOTE\]
6990/// ----
6991/// Following this model, in systems with memory translation, an SC is allowed to succeed if the
6992/// earlier LR reserved the same location using an alias with a different virtual address, but is
6993/// also allowed to fail if the virtual address is different.
6994///
6995/// To accommodate legacy devices and buses, writes from devices other than RISC-V harts are only
6996/// required to invalidate reservations when they overlap the bytes accessed by the LR.
6997/// These writes are not required to invalidate the reservation when they access other bytes in
6998/// the reservation set.
6999/// ----
7000///
7001/// Software should not set the _rl_ bit on an LR instruction unless the _aq_ bit is also set.
7002/// LR.rl and SC.aq instructions are not guaranteed to provide any stronger ordering than those
7003/// with both bits clear, but may result in lower performance.
7004///
7005/// # Forms
7006/// Assembly: `lr.w xd, xs1`
7007/// Rust: `lr_w(rd, rs1, aq, rl)`
7008///
7009/// # Arguments
7010/// - `rd` — Destination register.
7011/// - `rs1` — Memory base register.
7012/// - `aq` — Acquire-order bit.
7013/// - `rl` — Release-order bit; retained for the existing emitter API.
7014pub trait LrWEmitter<T0, T1, T2, T3> {
7015    fn lr_w(&mut self, rd: T0, rs1: T1, aq: T2, rl: T3);
7016}
7017
7018/// Load upper immediate
7019///
7020/// Load the zero-extended imm into rd.
7021///
7022/// # Forms
7023/// Assembly: `lui xd, imm`
7024/// Rust: `lui(rd, imm)`
7025///
7026/// # Arguments
7027/// - `rd` — Destination register.
7028/// - `imm` — Immediate encoding value.
7029pub trait LuiEmitter<T0, T1> {
7030    fn lui(&mut self, rd: T0, imm: T1);
7031}
7032
7033/// Load word
7034///
7035/// Load 32 bits of data into register `rd` from an
7036/// address formed by adding `rs1` to a signed offset.
7037/// Sign extend the result.
7038///
7039/// # Forms
7040/// Assembly: `lw xd, imm(rs1)`
7041/// Rust: `lw(rd, rs1, imm)`
7042///
7043/// # Arguments
7044/// - `rd` — Destination register.
7045/// - `rs1` — Memory base register.
7046/// - `imm` — Immediate encoding value.
7047pub trait LwEmitter<T0, T1, T2> {
7048    fn lw(&mut self, rd: T0, rs1: T1, imm: T2);
7049}
7050
7051/// Load word unsigned
7052///
7053/// Load 64 bits of data into register `rd` from an
7054/// address formed by adding `rs1` to a signed offset.
7055/// Zero extend the result.
7056///
7057/// # Forms
7058/// Assembly: `lwu xd, imm(rs1)`
7059/// Rust: `lwu(rd, rs1, imm)`
7060///
7061/// # Arguments
7062/// - `rd` — Destination register.
7063/// - `rs1` — Memory base register.
7064/// - `imm` — Immediate encoding value.
7065pub trait LwuEmitter<T0, T1, T2> {
7066    fn lwu(&mut self, rd: T0, rs1: T1, imm: T2);
7067}
7068
7069/// Maximum
7070///
7071/// This instruction returns the larger of two signed integers.
7072///
7073/// .Software Hint
7074/// \[NOTE\]
7075/// Calculating the absolute value of a signed integer can be performed using the
7076/// following sequence: `neg rD,rS` followed by `max rD,rS,rD. When using this
7077/// common sequence, it is suggested that they are scheduled with no intervening
7078/// instructions so that implementations that are so optimized can fuse them
7079/// together.
7080///
7081/// # Forms
7082/// Assembly: `max xd, xs1, xs2`
7083/// Rust: `max(rd, rs1, rs2)`
7084///
7085/// # Arguments
7086/// - `rd` — Destination register.
7087/// - `rs1` — Source register.
7088/// - `rs2` — Source register.
7089pub trait MaxEmitter<T0, T1, T2> {
7090    fn max(&mut self, rd: T0, rs1: T1, rs2: T2);
7091}
7092
7093/// Unsigned maximum
7094///
7095/// This instruction returns the larger of two unsigned integers.
7096///
7097/// # Forms
7098/// Assembly: `maxu xd, xs1, xs2`
7099/// Rust: `maxu(rd, rs1, rs2)`
7100///
7101/// # Arguments
7102/// - `rd` — Destination register.
7103/// - `rs1` — Source register.
7104/// - `rs2` — Source register.
7105pub trait MaxuEmitter<T0, T1, T2> {
7106    fn maxu(&mut self, rd: T0, rs1: T1, rs2: T2);
7107}
7108
7109/// Minimum
7110///
7111/// This instruction returns the smaller of two signed integers.
7112///
7113/// # Forms
7114/// Assembly: `min xd, xs1, xs2`
7115/// Rust: `min(rd, rs1, rs2)`
7116///
7117/// # Arguments
7118/// - `rd` — Destination register.
7119/// - `rs1` — Source register.
7120/// - `rs2` — Source register.
7121pub trait MinEmitter<T0, T1, T2> {
7122    fn min(&mut self, rd: T0, rs1: T1, rs2: T2);
7123}
7124
7125/// Unsigned minimum
7126///
7127/// This instruction returns the smaller of two unsigned integers.
7128///
7129/// # Forms
7130/// Assembly: `minu xd, xs1, xs2`
7131/// Rust: `minu(rd, rs1, rs2)`
7132///
7133/// # Arguments
7134/// - `rd` — Destination register.
7135/// - `rs1` — Source register.
7136/// - `rs2` — Source register.
7137pub trait MinuEmitter<T0, T1, T2> {
7138    fn minu(&mut self, rd: T0, rs1: T1, rs2: T2);
7139}
7140
7141/// RISC-V `mnret` instruction.
7142///
7143/// # Forms
7144/// Assembly: `mnret mnret`
7145/// Rust: `mnret()`
7146///
7147/// # Arguments
7148pub trait MnretEmitter {
7149    fn mnret(&mut self);
7150}
7151
7152/// RISC-V `mop.r.0` instruction.
7153///
7154/// # Forms
7155/// Assembly: `mop.r.0 rd rs1`
7156/// Rust: `mop_r_0(rd, rs1)`
7157///
7158/// # Arguments
7159/// - `rd` — Destination register.
7160/// - `rs1` — Source register.
7161pub trait MopR0Emitter<T0, T1> {
7162    fn mop_r_0(&mut self, rd: T0, rs1: T1);
7163}
7164
7165/// RISC-V `mop.r.1` instruction.
7166///
7167/// # Forms
7168/// Assembly: `mop.r.1 rd rs1`
7169/// Rust: `mop_r_1(rd, rs1)`
7170///
7171/// # Arguments
7172/// - `rd` — Destination register.
7173/// - `rs1` — Source register.
7174pub trait MopR1Emitter<T0, T1> {
7175    fn mop_r_1(&mut self, rd: T0, rs1: T1);
7176}
7177
7178/// RISC-V `mop.r.10` instruction.
7179///
7180/// # Forms
7181/// Assembly: `mop.r.10 rd rs1`
7182/// Rust: `mop_r_10(rd, rs1)`
7183///
7184/// # Arguments
7185/// - `rd` — Destination register.
7186/// - `rs1` — Source register.
7187pub trait MopR10Emitter<T0, T1> {
7188    fn mop_r_10(&mut self, rd: T0, rs1: T1);
7189}
7190
7191/// RISC-V `mop.r.11` instruction.
7192///
7193/// # Forms
7194/// Assembly: `mop.r.11 rd rs1`
7195/// Rust: `mop_r_11(rd, rs1)`
7196///
7197/// # Arguments
7198/// - `rd` — Destination register.
7199/// - `rs1` — Source register.
7200pub trait MopR11Emitter<T0, T1> {
7201    fn mop_r_11(&mut self, rd: T0, rs1: T1);
7202}
7203
7204/// RISC-V `mop.r.12` instruction.
7205///
7206/// # Forms
7207/// Assembly: `mop.r.12 rd rs1`
7208/// Rust: `mop_r_12(rd, rs1)`
7209///
7210/// # Arguments
7211/// - `rd` — Destination register.
7212/// - `rs1` — Source register.
7213pub trait MopR12Emitter<T0, T1> {
7214    fn mop_r_12(&mut self, rd: T0, rs1: T1);
7215}
7216
7217/// RISC-V `mop.r.13` instruction.
7218///
7219/// # Forms
7220/// Assembly: `mop.r.13 rd rs1`
7221/// Rust: `mop_r_13(rd, rs1)`
7222///
7223/// # Arguments
7224/// - `rd` — Destination register.
7225/// - `rs1` — Source register.
7226pub trait MopR13Emitter<T0, T1> {
7227    fn mop_r_13(&mut self, rd: T0, rs1: T1);
7228}
7229
7230/// RISC-V `mop.r.14` instruction.
7231///
7232/// # Forms
7233/// Assembly: `mop.r.14 rd rs1`
7234/// Rust: `mop_r_14(rd, rs1)`
7235///
7236/// # Arguments
7237/// - `rd` — Destination register.
7238/// - `rs1` — Source register.
7239pub trait MopR14Emitter<T0, T1> {
7240    fn mop_r_14(&mut self, rd: T0, rs1: T1);
7241}
7242
7243/// RISC-V `mop.r.15` instruction.
7244///
7245/// # Forms
7246/// Assembly: `mop.r.15 rd rs1`
7247/// Rust: `mop_r_15(rd, rs1)`
7248///
7249/// # Arguments
7250/// - `rd` — Destination register.
7251/// - `rs1` — Source register.
7252pub trait MopR15Emitter<T0, T1> {
7253    fn mop_r_15(&mut self, rd: T0, rs1: T1);
7254}
7255
7256/// RISC-V `mop.r.16` instruction.
7257///
7258/// # Forms
7259/// Assembly: `mop.r.16 rd rs1`
7260/// Rust: `mop_r_16(rd, rs1)`
7261///
7262/// # Arguments
7263/// - `rd` — Destination register.
7264/// - `rs1` — Source register.
7265pub trait MopR16Emitter<T0, T1> {
7266    fn mop_r_16(&mut self, rd: T0, rs1: T1);
7267}
7268
7269/// RISC-V `mop.r.17` instruction.
7270///
7271/// # Forms
7272/// Assembly: `mop.r.17 rd rs1`
7273/// Rust: `mop_r_17(rd, rs1)`
7274///
7275/// # Arguments
7276/// - `rd` — Destination register.
7277/// - `rs1` — Source register.
7278pub trait MopR17Emitter<T0, T1> {
7279    fn mop_r_17(&mut self, rd: T0, rs1: T1);
7280}
7281
7282/// RISC-V `mop.r.18` instruction.
7283///
7284/// # Forms
7285/// Assembly: `mop.r.18 rd rs1`
7286/// Rust: `mop_r_18(rd, rs1)`
7287///
7288/// # Arguments
7289/// - `rd` — Destination register.
7290/// - `rs1` — Source register.
7291pub trait MopR18Emitter<T0, T1> {
7292    fn mop_r_18(&mut self, rd: T0, rs1: T1);
7293}
7294
7295/// RISC-V `mop.r.19` instruction.
7296///
7297/// # Forms
7298/// Assembly: `mop.r.19 rd rs1`
7299/// Rust: `mop_r_19(rd, rs1)`
7300///
7301/// # Arguments
7302/// - `rd` — Destination register.
7303/// - `rs1` — Source register.
7304pub trait MopR19Emitter<T0, T1> {
7305    fn mop_r_19(&mut self, rd: T0, rs1: T1);
7306}
7307
7308/// RISC-V `mop.r.2` instruction.
7309///
7310/// # Forms
7311/// Assembly: `mop.r.2 rd rs1`
7312/// Rust: `mop_r_2(rd, rs1)`
7313///
7314/// # Arguments
7315/// - `rd` — Destination register.
7316/// - `rs1` — Source register.
7317pub trait MopR2Emitter<T0, T1> {
7318    fn mop_r_2(&mut self, rd: T0, rs1: T1);
7319}
7320
7321/// RISC-V `mop.r.20` instruction.
7322///
7323/// # Forms
7324/// Assembly: `mop.r.20 rd rs1`
7325/// Rust: `mop_r_20(rd, rs1)`
7326///
7327/// # Arguments
7328/// - `rd` — Destination register.
7329/// - `rs1` — Source register.
7330pub trait MopR20Emitter<T0, T1> {
7331    fn mop_r_20(&mut self, rd: T0, rs1: T1);
7332}
7333
7334/// RISC-V `mop.r.21` instruction.
7335///
7336/// # Forms
7337/// Assembly: `mop.r.21 rd rs1`
7338/// Rust: `mop_r_21(rd, rs1)`
7339///
7340/// # Arguments
7341/// - `rd` — Destination register.
7342/// - `rs1` — Source register.
7343pub trait MopR21Emitter<T0, T1> {
7344    fn mop_r_21(&mut self, rd: T0, rs1: T1);
7345}
7346
7347/// RISC-V `mop.r.22` instruction.
7348///
7349/// # Forms
7350/// Assembly: `mop.r.22 rd rs1`
7351/// Rust: `mop_r_22(rd, rs1)`
7352///
7353/// # Arguments
7354/// - `rd` — Destination register.
7355/// - `rs1` — Source register.
7356pub trait MopR22Emitter<T0, T1> {
7357    fn mop_r_22(&mut self, rd: T0, rs1: T1);
7358}
7359
7360/// RISC-V `mop.r.23` instruction.
7361///
7362/// # Forms
7363/// Assembly: `mop.r.23 rd rs1`
7364/// Rust: `mop_r_23(rd, rs1)`
7365///
7366/// # Arguments
7367/// - `rd` — Destination register.
7368/// - `rs1` — Source register.
7369pub trait MopR23Emitter<T0, T1> {
7370    fn mop_r_23(&mut self, rd: T0, rs1: T1);
7371}
7372
7373/// RISC-V `mop.r.24` instruction.
7374///
7375/// # Forms
7376/// Assembly: `mop.r.24 rd rs1`
7377/// Rust: `mop_r_24(rd, rs1)`
7378///
7379/// # Arguments
7380/// - `rd` — Destination register.
7381/// - `rs1` — Source register.
7382pub trait MopR24Emitter<T0, T1> {
7383    fn mop_r_24(&mut self, rd: T0, rs1: T1);
7384}
7385
7386/// RISC-V `mop.r.25` instruction.
7387///
7388/// # Forms
7389/// Assembly: `mop.r.25 rd rs1`
7390/// Rust: `mop_r_25(rd, rs1)`
7391///
7392/// # Arguments
7393/// - `rd` — Destination register.
7394/// - `rs1` — Source register.
7395pub trait MopR25Emitter<T0, T1> {
7396    fn mop_r_25(&mut self, rd: T0, rs1: T1);
7397}
7398
7399/// RISC-V `mop.r.26` instruction.
7400///
7401/// # Forms
7402/// Assembly: `mop.r.26 rd rs1`
7403/// Rust: `mop_r_26(rd, rs1)`
7404///
7405/// # Arguments
7406/// - `rd` — Destination register.
7407/// - `rs1` — Source register.
7408pub trait MopR26Emitter<T0, T1> {
7409    fn mop_r_26(&mut self, rd: T0, rs1: T1);
7410}
7411
7412/// RISC-V `mop.r.27` instruction.
7413///
7414/// # Forms
7415/// Assembly: `mop.r.27 rd rs1`
7416/// Rust: `mop_r_27(rd, rs1)`
7417///
7418/// # Arguments
7419/// - `rd` — Destination register.
7420/// - `rs1` — Source register.
7421pub trait MopR27Emitter<T0, T1> {
7422    fn mop_r_27(&mut self, rd: T0, rs1: T1);
7423}
7424
7425/// RISC-V `mop.r.28` instruction.
7426///
7427/// # Forms
7428/// Assembly: `mop.r.28 rd rs1`
7429/// Rust: `mop_r_28(rd, rs1)`
7430///
7431/// # Arguments
7432/// - `rd` — Destination register.
7433/// - `rs1` — Source register.
7434pub trait MopR28Emitter<T0, T1> {
7435    fn mop_r_28(&mut self, rd: T0, rs1: T1);
7436}
7437
7438/// RISC-V `mop.r.29` instruction.
7439///
7440/// # Forms
7441/// Assembly: `mop.r.29 rd rs1`
7442/// Rust: `mop_r_29(rd, rs1)`
7443///
7444/// # Arguments
7445/// - `rd` — Destination register.
7446/// - `rs1` — Source register.
7447pub trait MopR29Emitter<T0, T1> {
7448    fn mop_r_29(&mut self, rd: T0, rs1: T1);
7449}
7450
7451/// RISC-V `mop.r.3` instruction.
7452///
7453/// # Forms
7454/// Assembly: `mop.r.3 rd rs1`
7455/// Rust: `mop_r_3(rd, rs1)`
7456///
7457/// # Arguments
7458/// - `rd` — Destination register.
7459/// - `rs1` — Source register.
7460pub trait MopR3Emitter<T0, T1> {
7461    fn mop_r_3(&mut self, rd: T0, rs1: T1);
7462}
7463
7464/// RISC-V `mop.r.30` instruction.
7465///
7466/// # Forms
7467/// Assembly: `mop.r.30 rd rs1`
7468/// Rust: `mop_r_30(rd, rs1)`
7469///
7470/// # Arguments
7471/// - `rd` — Destination register.
7472/// - `rs1` — Source register.
7473pub trait MopR30Emitter<T0, T1> {
7474    fn mop_r_30(&mut self, rd: T0, rs1: T1);
7475}
7476
7477/// RISC-V `mop.r.31` instruction.
7478///
7479/// # Forms
7480/// Assembly: `mop.r.31 rd rs1`
7481/// Rust: `mop_r_31(rd, rs1)`
7482///
7483/// # Arguments
7484/// - `rd` — Destination register.
7485/// - `rs1` — Source register.
7486pub trait MopR31Emitter<T0, T1> {
7487    fn mop_r_31(&mut self, rd: T0, rs1: T1);
7488}
7489
7490/// RISC-V `mop.r.4` instruction.
7491///
7492/// # Forms
7493/// Assembly: `mop.r.4 rd rs1`
7494/// Rust: `mop_r_4(rd, rs1)`
7495///
7496/// # Arguments
7497/// - `rd` — Destination register.
7498/// - `rs1` — Source register.
7499pub trait MopR4Emitter<T0, T1> {
7500    fn mop_r_4(&mut self, rd: T0, rs1: T1);
7501}
7502
7503/// RISC-V `mop.r.5` instruction.
7504///
7505/// # Forms
7506/// Assembly: `mop.r.5 rd rs1`
7507/// Rust: `mop_r_5(rd, rs1)`
7508///
7509/// # Arguments
7510/// - `rd` — Destination register.
7511/// - `rs1` — Source register.
7512pub trait MopR5Emitter<T0, T1> {
7513    fn mop_r_5(&mut self, rd: T0, rs1: T1);
7514}
7515
7516/// RISC-V `mop.r.6` instruction.
7517///
7518/// # Forms
7519/// Assembly: `mop.r.6 rd rs1`
7520/// Rust: `mop_r_6(rd, rs1)`
7521///
7522/// # Arguments
7523/// - `rd` — Destination register.
7524/// - `rs1` — Source register.
7525pub trait MopR6Emitter<T0, T1> {
7526    fn mop_r_6(&mut self, rd: T0, rs1: T1);
7527}
7528
7529/// RISC-V `mop.r.7` instruction.
7530///
7531/// # Forms
7532/// Assembly: `mop.r.7 rd rs1`
7533/// Rust: `mop_r_7(rd, rs1)`
7534///
7535/// # Arguments
7536/// - `rd` — Destination register.
7537/// - `rs1` — Source register.
7538pub trait MopR7Emitter<T0, T1> {
7539    fn mop_r_7(&mut self, rd: T0, rs1: T1);
7540}
7541
7542/// RISC-V `mop.r.8` instruction.
7543///
7544/// # Forms
7545/// Assembly: `mop.r.8 rd rs1`
7546/// Rust: `mop_r_8(rd, rs1)`
7547///
7548/// # Arguments
7549/// - `rd` — Destination register.
7550/// - `rs1` — Source register.
7551pub trait MopR8Emitter<T0, T1> {
7552    fn mop_r_8(&mut self, rd: T0, rs1: T1);
7553}
7554
7555/// RISC-V `mop.r.9` instruction.
7556///
7557/// # Forms
7558/// Assembly: `mop.r.9 rd rs1`
7559/// Rust: `mop_r_9(rd, rs1)`
7560///
7561/// # Arguments
7562/// - `rd` — Destination register.
7563/// - `rs1` — Source register.
7564pub trait MopR9Emitter<T0, T1> {
7565    fn mop_r_9(&mut self, rd: T0, rs1: T1);
7566}
7567
7568/// RISC-V `mop.rr.0` instruction.
7569///
7570/// # Forms
7571/// Assembly: `mop.rr.0 rd rs1 rs2`
7572/// Rust: `mop_rr_0(rd, rs1, rs2)`
7573///
7574/// # Arguments
7575/// - `rd` — Destination register.
7576/// - `rs1` — Source register.
7577/// - `rs2` — Source register.
7578pub trait MopRr0Emitter<T0, T1, T2> {
7579    fn mop_rr_0(&mut self, rd: T0, rs1: T1, rs2: T2);
7580}
7581
7582/// RISC-V `mop.rr.1` instruction.
7583///
7584/// # Forms
7585/// Assembly: `mop.rr.1 rd rs1 rs2`
7586/// Rust: `mop_rr_1(rd, rs1, rs2)`
7587///
7588/// # Arguments
7589/// - `rd` — Destination register.
7590/// - `rs1` — Source register.
7591/// - `rs2` — Source register.
7592pub trait MopRr1Emitter<T0, T1, T2> {
7593    fn mop_rr_1(&mut self, rd: T0, rs1: T1, rs2: T2);
7594}
7595
7596/// RISC-V `mop.rr.2` instruction.
7597///
7598/// # Forms
7599/// Assembly: `mop.rr.2 rd rs1 rs2`
7600/// Rust: `mop_rr_2(rd, rs1, rs2)`
7601///
7602/// # Arguments
7603/// - `rd` — Destination register.
7604/// - `rs1` — Source register.
7605/// - `rs2` — Source register.
7606pub trait MopRr2Emitter<T0, T1, T2> {
7607    fn mop_rr_2(&mut self, rd: T0, rs1: T1, rs2: T2);
7608}
7609
7610/// RISC-V `mop.rr.3` instruction.
7611///
7612/// # Forms
7613/// Assembly: `mop.rr.3 rd rs1 rs2`
7614/// Rust: `mop_rr_3(rd, rs1, rs2)`
7615///
7616/// # Arguments
7617/// - `rd` — Destination register.
7618/// - `rs1` — Source register.
7619/// - `rs2` — Source register.
7620pub trait MopRr3Emitter<T0, T1, T2> {
7621    fn mop_rr_3(&mut self, rd: T0, rs1: T1, rs2: T2);
7622}
7623
7624/// RISC-V `mop.rr.4` instruction.
7625///
7626/// # Forms
7627/// Assembly: `mop.rr.4 rd rs1 rs2`
7628/// Rust: `mop_rr_4(rd, rs1, rs2)`
7629///
7630/// # Arguments
7631/// - `rd` — Destination register.
7632/// - `rs1` — Source register.
7633/// - `rs2` — Source register.
7634pub trait MopRr4Emitter<T0, T1, T2> {
7635    fn mop_rr_4(&mut self, rd: T0, rs1: T1, rs2: T2);
7636}
7637
7638/// RISC-V `mop.rr.5` instruction.
7639///
7640/// # Forms
7641/// Assembly: `mop.rr.5 rd rs1 rs2`
7642/// Rust: `mop_rr_5(rd, rs1, rs2)`
7643///
7644/// # Arguments
7645/// - `rd` — Destination register.
7646/// - `rs1` — Source register.
7647/// - `rs2` — Source register.
7648pub trait MopRr5Emitter<T0, T1, T2> {
7649    fn mop_rr_5(&mut self, rd: T0, rs1: T1, rs2: T2);
7650}
7651
7652/// RISC-V `mop.rr.6` instruction.
7653///
7654/// # Forms
7655/// Assembly: `mop.rr.6 rd rs1 rs2`
7656/// Rust: `mop_rr_6(rd, rs1, rs2)`
7657///
7658/// # Arguments
7659/// - `rd` — Destination register.
7660/// - `rs1` — Source register.
7661/// - `rs2` — Source register.
7662pub trait MopRr6Emitter<T0, T1, T2> {
7663    fn mop_rr_6(&mut self, rd: T0, rs1: T1, rs2: T2);
7664}
7665
7666/// RISC-V `mop.rr.7` instruction.
7667///
7668/// # Forms
7669/// Assembly: `mop.rr.7 rd rs1 rs2`
7670/// Rust: `mop_rr_7(rd, rs1, rs2)`
7671///
7672/// # Arguments
7673/// - `rd` — Destination register.
7674/// - `rs1` — Source register.
7675/// - `rs2` — Source register.
7676pub trait MopRr7Emitter<T0, T1, T2> {
7677    fn mop_rr_7(&mut self, rd: T0, rs1: T1, rs2: T2);
7678}
7679
7680/// Machine Exception Return
7681///
7682/// Returns from an exception in M-mode.
7683///
7684/// # Forms
7685/// Assembly: `mret ""`
7686/// Rust: `mret()`
7687///
7688/// # Arguments
7689pub trait MretEmitter {
7690    fn mret(&mut self);
7691}
7692
7693/// Signed multiply
7694///
7695/// MUL performs an XLEN-bitxXLEN-bit multiplication of `rs1` by `rs2` and places the lower
7696/// XLEN bits in the destination register.
7697/// Any overflow is thrown away.
7698///
7699/// \[NOTE\]
7700/// If both the high and low bits of the same product are required, then the recommended code
7701/// sequence is:
7702/// MULH\[\[S\]U\] rdh, rs1, rs2; MUL rdl, rs1, rs2
7703/// (source register specifiers must be in same order and rdh cannot be the same as rs1 or rs2).
7704/// Microarchitectures can then fuse these into a single multiply operation instead of
7705/// performing two separate multiplies.
7706///
7707/// # Forms
7708/// Assembly: `mul xd, xs1, xs2`
7709/// Rust: `mul(rd, rs1, rs2)`
7710///
7711/// # Arguments
7712/// - `rd` — Destination register.
7713/// - `rs1` — Source register.
7714/// - `rs2` — Source register.
7715pub trait MulEmitter<T0, T1, T2> {
7716    fn mul(&mut self, rd: T0, rs1: T1, rs2: T2);
7717}
7718
7719/// Signed multiply high
7720///
7721/// Multiply the signed values in rs1 to rs2, and store the upper half of the result in rd.
7722/// The lower half is thrown away.
7723///
7724/// If both the upper and lower halves are needed, it suggested to use the sequence:
7725///
7726/// ---
7727///   mulh rdh, rs1, rs2
7728///   mul  rdl, rs1, rs2
7729/// ---
7730///
7731/// Microarchitectures may look for that sequence and fuse the operations.
7732///
7733/// # Forms
7734/// Assembly: `mulh xd, xs1, xs2`
7735/// Rust: `mulh(rd, rs1, rs2)`
7736///
7737/// # Arguments
7738/// - `rd` — Destination register.
7739/// - `rs1` — Source register.
7740/// - `rs2` — Source register.
7741pub trait MulhEmitter<T0, T1, T2> {
7742    fn mulh(&mut self, rd: T0, rs1: T1, rs2: T2);
7743}
7744
7745/// Signed/unsigned multiply high
7746///
7747/// Multiply the signed value in rs1 by the unsigned value in rs2, and store the upper half of the result in rd.
7748/// The lower half is thrown away.
7749///
7750/// If both the upper and lower halves are needed, it suggested to use the sequence:
7751///
7752/// ---
7753///   mulhsu rdh, rs1, rs2
7754///   mul    rdl, rs1, rs2
7755/// ---
7756///
7757/// Microarchitectures may look for that sequence and fuse the operations.
7758///
7759/// # Forms
7760/// Assembly: `mulhsu xd, xs1, xs2`
7761/// Rust: `mulhsu(rd, rs1, rs2)`
7762///
7763/// # Arguments
7764/// - `rd` — Destination register.
7765/// - `rs1` — Source register.
7766/// - `rs2` — Source register.
7767pub trait MulhsuEmitter<T0, T1, T2> {
7768    fn mulhsu(&mut self, rd: T0, rs1: T1, rs2: T2);
7769}
7770
7771/// Unsigned multiply high
7772///
7773/// Multiply the unsigned values in rs1 to rs2, and store the upper half of the result in rd.
7774/// The lower half is thrown away.
7775///
7776/// If both the upper and lower halves are needed, it suggested to use the sequence:
7777///
7778/// ---
7779///   mulhu rdh, rs1, rs2
7780///   mul   rdl, rs1, rs2
7781/// ---
7782///
7783/// Microarchitectures may look for that sequence and fuse the operations.
7784///
7785/// # Forms
7786/// Assembly: `mulhu xd, xs1, xs2`
7787/// Rust: `mulhu(rd, rs1, rs2)`
7788///
7789/// # Arguments
7790/// - `rd` — Destination register.
7791/// - `rs1` — Source register.
7792/// - `rs2` — Source register.
7793pub trait MulhuEmitter<T0, T1, T2> {
7794    fn mulhu(&mut self, rd: T0, rs1: T1, rs2: T2);
7795}
7796
7797/// Signed 32-bit multiply
7798///
7799/// Multiplies the lower 32 bits of the source registers, placing the sign-extension of the
7800/// lower 32 bits of the result into the destination register.
7801///
7802/// Any overflow is thrown away.
7803///
7804/// \[NOTE\]
7805/// In RV64, MUL can be used to obtain the upper 32 bits of the 64-bit product,
7806/// but signed arguments must be proper 32-bit signed values, whereas unsigned arguments
7807/// must have their upper 32 bits clear. If the arguments are not known to be sign- or zero-extended,
7808/// an alternative is to shift both arguments left by 32 bits, then use MULH\[\[S\]U\].
7809///
7810/// # Forms
7811/// Assembly: `mulw xd, xs1, xs2`
7812/// Rust: `mulw(rd, rs1, rs2)`
7813///
7814/// # Arguments
7815/// - `rd` — Destination register.
7816/// - `rs1` — Source register.
7817/// - `rs2` — Source register.
7818pub trait MulwEmitter<T0, T1, T2> {
7819    fn mulw(&mut self, rd: T0, rs1: T1, rs2: T2);
7820}
7821
7822/// RISC-V `mv` instruction.
7823///
7824/// # Forms
7825/// Assembly: `mv rd rs1`
7826/// Rust: `mv(rd, rs1)`
7827///
7828/// # Arguments
7829/// - `rd` — Destination register.
7830/// - `rs1` — Source register.
7831pub trait MvEmitter<T0, T1> {
7832    fn mv(&mut self, rd: T0, rs1: T1);
7833}
7834
7835/// RISC-V `neg` instruction.
7836///
7837/// # Forms
7838/// Assembly: `neg rd rs1`
7839/// Rust: `neg(rd, rs1)`
7840///
7841/// # Arguments
7842/// - `rd` — Destination register.
7843/// - `rs1` — Source register.
7844pub trait NegEmitter<T0, T1> {
7845    fn neg(&mut self, rd: T0, rs1: T1);
7846}
7847
7848/// RISC-V `nop` instruction.
7849///
7850/// # Forms
7851/// Assembly: `nop`
7852/// Rust: `nop()`
7853///
7854/// # Arguments
7855pub trait NopEmitter {
7856    fn nop(&mut self);
7857}
7858
7859/// RISC-V `ntl.all` instruction.
7860///
7861/// # Forms
7862/// Assembly: `ntl.all`
7863/// Rust: `ntl_all()`
7864///
7865/// # Arguments
7866pub trait NtlAllEmitter {
7867    fn ntl_all(&mut self);
7868}
7869
7870/// RISC-V `ntl.p1` instruction.
7871///
7872/// # Forms
7873/// Assembly: `ntl.p1`
7874/// Rust: `ntl_p1()`
7875///
7876/// # Arguments
7877pub trait NtlP1Emitter {
7878    fn ntl_p1(&mut self);
7879}
7880
7881/// RISC-V `ntl.pall` instruction.
7882///
7883/// # Forms
7884/// Assembly: `ntl.pall`
7885/// Rust: `ntl_pall()`
7886///
7887/// # Arguments
7888pub trait NtlPallEmitter {
7889    fn ntl_pall(&mut self);
7890}
7891
7892/// RISC-V `ntl.s1` instruction.
7893///
7894/// # Forms
7895/// Assembly: `ntl.s1`
7896/// Rust: `ntl_s1()`
7897///
7898/// # Arguments
7899pub trait NtlS1Emitter {
7900    fn ntl_s1(&mut self);
7901}
7902
7903/// Or
7904///
7905/// Or rs1 with rs2, and store the result in rd
7906///
7907/// # Forms
7908/// Assembly: `or xd, xs1, xs2`
7909/// Rust: `or(rd, rs1, rs2)`
7910///
7911/// # Arguments
7912/// - `rd` — Destination register.
7913/// - `rs1` — Source register.
7914/// - `rs2` — Source register.
7915pub trait OrEmitter<T0, T1, T2> {
7916    fn or(&mut self, rd: T0, rs1: T1, rs2: T2);
7917}
7918
7919/// Bitware OR-combine, byte granule
7920///
7921/// Combines the bits within each byte using bitwise logical OR. This sets the bits
7922/// of each byte in the result rd to all zeros if no bit within the respective byte
7923/// of rs is set, or to all ones if any bit within the respective byte of rs is set.
7924///
7925/// # Forms
7926/// Assembly: `orc.b xd, xs1, xs2`
7927/// Rust: `orc_b(rd, rs1)`
7928///
7929/// # Arguments
7930/// - `rd` — Destination register.
7931/// - `rs1` — Source register.
7932pub trait OrcBEmitter<T0, T1> {
7933    fn orc_b(&mut self, rd: T0, rs1: T1);
7934}
7935
7936/// Or immediate
7937///
7938/// Or an immediate to the value in rs1, and store the result in rd
7939///
7940/// # Forms
7941/// Assembly: `ori xd, xs1, imm`
7942/// Rust: `ori(rd, rs1, imm)`
7943///
7944/// # Arguments
7945/// - `rd` — Destination register.
7946/// - `rs1` — Source register.
7947/// - `imm` — Immediate encoding value.
7948pub trait OriEmitter<T0, T1, T2> {
7949    fn ori(&mut self, rd: T0, rs1: T1, imm: T2);
7950}
7951
7952/// OR with inverted operand
7953///
7954/// This instruction performs the bitwise logical OR operation between rs1 and the bitwise inversion of rs2.
7955///
7956/// # Forms
7957/// Assembly: `orn xd, xs1, xs2`
7958/// Rust: `orn(rd, rs1, rs2)`
7959///
7960/// # Arguments
7961/// - `rd` — Destination register.
7962/// - `rs1` — Source register.
7963/// - `rs2` — Source register.
7964pub trait OrnEmitter<T0, T1, T2> {
7965    fn orn(&mut self, rd: T0, rs1: T1, rs2: T2);
7966}
7967
7968/// RISC-V `pack` instruction.
7969///
7970/// # Forms
7971/// Assembly: `pack xd, xs1, xs2`
7972/// Rust: `pack(rd, rs1, rs2)`
7973///
7974/// # Arguments
7975/// - `rd` — Destination register.
7976/// - `rs1` — Source register.
7977/// - `rs2` — Source register.
7978pub trait PackEmitter<T0, T1, T2> {
7979    fn pack(&mut self, rd: T0, rs1: T1, rs2: T2);
7980}
7981
7982/// RISC-V `packh` instruction.
7983///
7984/// # Forms
7985/// Assembly: `packh xd, xs1, xs2`
7986/// Rust: `packh(rd, rs1, rs2)`
7987///
7988/// # Arguments
7989/// - `rd` — Destination register.
7990/// - `rs1` — Source register.
7991/// - `rs2` — Source register.
7992pub trait PackhEmitter<T0, T1, T2> {
7993    fn packh(&mut self, rd: T0, rs1: T1, rs2: T2);
7994}
7995
7996/// RISC-V `packw` instruction.
7997///
7998/// # Forms
7999/// Assembly: `packw xd, xs1, xs2`
8000/// Rust: `packw(rd, rs1, rs2)`
8001///
8002/// # Arguments
8003/// - `rd` — Destination register.
8004/// - `rs1` — Source register.
8005/// - `rs2` — Source register.
8006pub trait PackwEmitter<T0, T1, T2> {
8007    fn packw(&mut self, rd: T0, rs1: T1, rs2: T2);
8008}
8009
8010/// RISC-V `pause` instruction.
8011///
8012/// # Forms
8013/// Assembly: `pause`
8014/// Rust: `pause()`
8015///
8016/// # Arguments
8017pub trait PauseEmitter {
8018    fn pause(&mut self);
8019}
8020
8021/// RISC-V `prefetch.i` instruction.
8022///
8023/// # Forms
8024/// Assembly: `prefetch.i rs1 imm12lohi`
8025/// Rust: `prefetch_i(rs1, imm)`
8026///
8027/// # Arguments
8028/// - `rs1` — Source register.
8029/// - `imm` — Immediate encoding value.
8030pub trait PrefetchIEmitter<T0, T1> {
8031    fn prefetch_i(&mut self, rs1: T0, imm: T1);
8032}
8033
8034/// RISC-V `prefetch.r` instruction.
8035///
8036/// # Forms
8037/// Assembly: `prefetch.r rs1 imm12lohi`
8038/// Rust: `prefetch_r(rs1, imm)`
8039///
8040/// # Arguments
8041/// - `rs1` — Source register.
8042/// - `imm` — Immediate encoding value.
8043pub trait PrefetchREmitter<T0, T1> {
8044    fn prefetch_r(&mut self, rs1: T0, imm: T1);
8045}
8046
8047/// RISC-V `prefetch.w` instruction.
8048///
8049/// # Forms
8050/// Assembly: `prefetch.w rs1 imm12lohi`
8051/// Rust: `prefetch_w(rs1, imm)`
8052///
8053/// # Arguments
8054/// - `rs1` — Source register.
8055/// - `imm` — Immediate encoding value.
8056pub trait PrefetchWEmitter<T0, T1> {
8057    fn prefetch_w(&mut self, rs1: T0, imm: T1);
8058}
8059
8060/// RISC-V `rdcycle` instruction.
8061///
8062/// # Forms
8063/// Assembly: `rdcycle rd`
8064/// Rust: `rdcycle(rd)`
8065///
8066/// # Arguments
8067/// - `rd` — Destination register.
8068pub trait RdcycleEmitter<T0> {
8069    fn rdcycle(&mut self, rd: T0);
8070}
8071
8072/// RISC-V `rdcycleh` instruction.
8073///
8074/// # Forms
8075/// Assembly: `rdcycleh rd`
8076/// Rust: `rdcycleh(rd)`
8077///
8078/// # Arguments
8079/// - `rd` — Destination register.
8080pub trait RdcyclehEmitter<T0> {
8081    fn rdcycleh(&mut self, rd: T0);
8082}
8083
8084/// RISC-V `rdinstret` instruction.
8085///
8086/// # Forms
8087/// Assembly: `rdinstret rd`
8088/// Rust: `rdinstret(rd)`
8089///
8090/// # Arguments
8091/// - `rd` — Destination register.
8092pub trait RdinstretEmitter<T0> {
8093    fn rdinstret(&mut self, rd: T0);
8094}
8095
8096/// RISC-V `rdinstreth` instruction.
8097///
8098/// # Forms
8099/// Assembly: `rdinstreth rd`
8100/// Rust: `rdinstreth(rd)`
8101///
8102/// # Arguments
8103/// - `rd` — Destination register.
8104pub trait RdinstrethEmitter<T0> {
8105    fn rdinstreth(&mut self, rd: T0);
8106}
8107
8108/// RISC-V `rdtime` instruction.
8109///
8110/// # Forms
8111/// Assembly: `rdtime rd`
8112/// Rust: `rdtime(rd)`
8113///
8114/// # Arguments
8115/// - `rd` — Destination register.
8116pub trait RdtimeEmitter<T0> {
8117    fn rdtime(&mut self, rd: T0);
8118}
8119
8120/// RISC-V `rdtimeh` instruction.
8121///
8122/// # Forms
8123/// Assembly: `rdtimeh rd`
8124/// Rust: `rdtimeh(rd)`
8125///
8126/// # Arguments
8127/// - `rd` — Destination register.
8128pub trait RdtimehEmitter<T0> {
8129    fn rdtimeh(&mut self, rd: T0);
8130}
8131
8132/// Signed remainder
8133///
8134/// Calculate the remainder of signed division of rs1 by rs2, and store the result in rd.
8135///
8136/// If the value in register rs2 is zero, write the value in rs1 into rd;
8137///
8138/// If the result of the division overflows, write zero into rd;
8139///
8140/// # Forms
8141/// Assembly: `rem xd, xs1, xs2`
8142/// Rust: `rem(rd, rs1, rs2)`
8143///
8144/// # Arguments
8145/// - `rd` — Destination register.
8146/// - `rs1` — Source register.
8147/// - `rs2` — Source register.
8148pub trait RemEmitter<T0, T1, T2> {
8149    fn rem(&mut self, rd: T0, rs1: T1, rs2: T2);
8150}
8151
8152/// Unsigned remainder
8153///
8154/// Calculate the remainder of unsigned division of rs1 by rs2, and store the result in rd.
8155///
8156/// # Forms
8157/// Assembly: `remu xd, xs1, xs2`
8158/// Rust: `remu(rd, rs1, rs2)`
8159///
8160/// # Arguments
8161/// - `rd` — Destination register.
8162/// - `rs1` — Source register.
8163/// - `rs2` — Source register.
8164pub trait RemuEmitter<T0, T1, T2> {
8165    fn remu(&mut self, rd: T0, rs1: T1, rs2: T2);
8166}
8167
8168/// Unsigned 32-bit remainder
8169///
8170/// Calculate the remainder of unsigned division of the 32-bit values in rs1 by rs2,
8171/// and store the sign-extended result in rd.
8172///
8173/// If the value in rs2 is zero, rd gets the sign-extended value in rs1.
8174///
8175/// # Forms
8176/// Assembly: `remuw xd, xs1, xs2`
8177/// Rust: `remuw(rd, rs1, rs2)`
8178///
8179/// # Arguments
8180/// - `rd` — Destination register.
8181/// - `rs1` — Source register.
8182/// - `rs2` — Source register.
8183pub trait RemuwEmitter<T0, T1, T2> {
8184    fn remuw(&mut self, rd: T0, rs1: T1, rs2: T2);
8185}
8186
8187/// Signed 32-bit remainder
8188///
8189/// Calculate the remainder of signed division of the 32-bit values rs1 by rs2,
8190/// and store the sign-extended result in rd.
8191///
8192/// If the value in register rs2 is zero, write the sign-extended 32-bit value in rs1 into rd;
8193///
8194/// If the result of the division overflows, write zero into rd;
8195///
8196/// # Forms
8197/// Assembly: `remw xd, xs1, xs2`
8198/// Rust: `remw(rd, rs1, rs2)`
8199///
8200/// # Arguments
8201/// - `rd` — Destination register.
8202/// - `rs1` — Source register.
8203/// - `rs2` — Source register.
8204pub trait RemwEmitter<T0, T1, T2> {
8205    fn remw(&mut self, rd: T0, rs1: T1, rs2: T2);
8206}
8207
8208/// RISC-V `ret` instruction.
8209///
8210/// # Forms
8211/// Assembly: `ret`
8212/// Rust: `ret()`
8213///
8214/// # Arguments
8215pub trait RetEmitter {
8216    fn ret(&mut self);
8217}
8218
8219/// Byte-reverse register (RV64 encoding)
8220///
8221/// This instruction reverses the order of the bytes in rs1.
8222///
8223/// \[NOTE\]
8224/// The rev8 mnemonic corresponds to different instruction encodings in RV32 and RV64.
8225///
8226/// \[NOTE\]
8227/// The byte-reverse operation is only available for the full register width. To emulate word-sized
8228/// and halfword-sized byte-reversal, perform a `rev8 rd,rs` followed by a `srai rd,rd,K`, where K
8229/// is XLEN-32 and XLEN-16, respectively.
8230///
8231/// # Forms
8232/// Assembly: `rev8 xd, xs1`
8233/// Rust: `rev8(rd, rs1)`
8234///
8235/// # Arguments
8236/// - `rd` — Destination register.
8237/// - `rs1` — Source register.
8238pub trait Rev8Emitter<T0, T1> {
8239    fn rev8(&mut self, rd: T0, rs1: T1);
8240}
8241
8242/// Byte-reverse register (RV64 encoding)
8243///
8244/// This instruction reverses the order of the bytes in rs1.
8245///
8246/// \[NOTE\]
8247/// The rev8 mnemonic corresponds to different instruction encodings in RV32 and RV64.
8248///
8249/// \[NOTE\]
8250/// The byte-reverse operation is only available for the full register width. To emulate word-sized
8251/// and halfword-sized byte-reversal, perform a `rev8 rd,rs` followed by a `srai rd,rd,K`, where K
8252/// is XLEN-32 and XLEN-16, respectively.
8253///
8254/// # Forms
8255/// Assembly: `rev8.rv32 xd, xs1`
8256/// Rust: `rev8_rv32(rd, rs1)`
8257///
8258/// # Arguments
8259/// - `rd` — Destination register.
8260/// - `rs1` — Source register.
8261pub trait Rev8Rv32Emitter<T0, T1> {
8262    fn rev8_rv32(&mut self, rd: T0, rs1: T1);
8263}
8264
8265/// Rotate left (Register)
8266///
8267/// This instruction performs a rotate left of rs1 by the amount in least-significant `log2(XLEN)` bits of rs2.
8268///
8269/// # Forms
8270/// Assembly: `rol xd, xs1, xs2`
8271/// Rust: `rol(rd, rs1, rs2)`
8272///
8273/// # Arguments
8274/// - `rd` — Destination register.
8275/// - `rs1` — Source register.
8276/// - `rs2` — Source register.
8277pub trait RolEmitter<T0, T1, T2> {
8278    fn rol(&mut self, rd: T0, rs1: T1, rs2: T2);
8279}
8280
8281/// Rotate left word (Register)
8282///
8283/// This instruction performs a rotate left of the least-significant word of rs1 by the amount in least-significant 5 bits of rs2.
8284/// The resulting word value is sign-extended by copying bit 31 to all of the more-significant bits.
8285///
8286/// # Forms
8287/// Assembly: `rolw xd, xs1, xs2`
8288/// Rust: `rolw(rd, rs1, rs2)`
8289///
8290/// # Arguments
8291/// - `rd` — Destination register.
8292/// - `rs1` — Source register.
8293/// - `rs2` — Source register.
8294pub trait RolwEmitter<T0, T1, T2> {
8295    fn rolw(&mut self, rd: T0, rs1: T1, rs2: T2);
8296}
8297
8298/// Rotate right (Register)
8299///
8300/// This instruction performs a rotate right of rs1 by the amount in least-significant `log2(XLEN)` bits of rs2.
8301///
8302/// # Forms
8303/// Assembly: `ror xd, xs1, xs2`
8304/// Rust: `ror(rd, rs1, rs2)`
8305///
8306/// # Arguments
8307/// - `rd` — Destination register.
8308/// - `rs1` — Source register.
8309/// - `rs2` — Source register.
8310pub trait RorEmitter<T0, T1, T2> {
8311    fn ror(&mut self, rd: T0, rs1: T1, rs2: T2);
8312}
8313
8314/// Rotate right (Immediate)
8315///
8316/// This instruction performs a rotate right of rs1 by the amount in the least-significant log2(XLEN) bits of shamt.
8317/// For RV32, the encodings corresponding to shamt\[5\]=1 are reserved.
8318///
8319/// # Forms
8320/// Assembly: `rori xd, xs1, shamt`
8321/// Rust: `rori(rd, rs1, shamtd)`
8322///
8323/// # Arguments
8324/// - `rd` — Destination register.
8325/// - `rs1` — Source register.
8326/// - `shamtd` — Immediate encoding value.
8327pub trait RoriEmitter<T0, T1, T2> {
8328    fn rori(&mut self, rd: T0, rs1: T1, shamtd: T2);
8329}
8330
8331/// Rotate right (Immediate)
8332///
8333/// This instruction performs a rotate right of rs1 by the amount in the least-significant log2(XLEN) bits of shamt.
8334/// For RV32, the encodings corresponding to shamt\[5\]=1 are reserved.
8335///
8336/// # Forms
8337/// Assembly: `rori.rv32 xd, xs1, shamt`
8338/// Rust: `rori_rv32(rd, rs1, shamtw)`
8339///
8340/// # Arguments
8341/// - `rd` — Destination register.
8342/// - `rs1` — Source register.
8343/// - `shamtw` — Immediate encoding value.
8344pub trait RoriRv32Emitter<T0, T1, T2> {
8345    fn rori_rv32(&mut self, rd: T0, rs1: T1, shamtw: T2);
8346}
8347
8348/// Rotate right word (Immediate)
8349///
8350/// This instruction performs a rotate right on the least-significant word of rs1 by the amount in
8351/// the least-significant log2(XLEN) bits of shamt. The resulting word value is sign-extended by
8352/// copying bit 31 to all of the more-significant bits.
8353///
8354/// # Forms
8355/// Assembly: `roriw xd, xs1, shamt`
8356/// Rust: `roriw(rd, rs1, shamtw)`
8357///
8358/// # Arguments
8359/// - `rd` — Destination register.
8360/// - `rs1` — Source register.
8361/// - `shamtw` — Immediate encoding value.
8362pub trait RoriwEmitter<T0, T1, T2> {
8363    fn roriw(&mut self, rd: T0, rs1: T1, shamtw: T2);
8364}
8365
8366/// Rotate right word (Register)
8367///
8368/// This instruction performs a rotate right on the least-significant word of rs1 by the amount in
8369/// least-significant 5 bits of rs2. The resultant word is sign-extended by copying bit 31 to all
8370/// of the more-significant bits.
8371///
8372/// # Forms
8373/// Assembly: `rorw xd, xs1, xs2`
8374/// Rust: `rorw(rd, rs1, rs2)`
8375///
8376/// # Arguments
8377/// - `rd` — Destination register.
8378/// - `rs1` — Source register.
8379/// - `rs2` — Source register.
8380pub trait RorwEmitter<T0, T1, T2> {
8381    fn rorw(&mut self, rd: T0, rs1: T1, rs2: T2);
8382}
8383
8384/// Store byte
8385///
8386/// Store 8 bits of data from register `rs2` to an
8387/// address formed by adding `rs1` to a signed offset.
8388///
8389/// # Forms
8390/// Assembly: `sb xs2, imm(xs1)`
8391/// Rust: `sb(rs1, rs2, imm)`
8392///
8393/// # Arguments
8394/// - `rs1` — Memory base register.
8395/// - `rs2` — Source register.
8396/// - `imm` — Immediate encoding value.
8397pub trait SbEmitter<T0, T1, T2> {
8398    fn sb(&mut self, rs1: T0, rs2: T1, imm: T2);
8399}
8400
8401/// RISC-V `sbreak` instruction.
8402///
8403/// # Forms
8404/// Assembly: `sbreak`
8405/// Rust: `sbreak()`
8406///
8407/// # Arguments
8408pub trait SbreakEmitter {
8409    fn sbreak(&mut self);
8410}
8411
8412/// Store conditional doubleword
8413///
8414/// `sc.d` conditionally writes a doubleword in _rs2_ to the address in _rs1_:
8415/// the `sc.d` succeeds only if the reservation is still valid and the
8416/// reservation set contains the bytes being written. If the `sc.d` succeeds,
8417/// the instruction writes the doubleword in _rs2_ to memory, and it writes zero to _rd_.
8418/// If the `sc.d` fails, the instruction does not write to memory, and it writes a
8419/// nonzero value to _rd_. For the purposes of memory protection, a failed `sc.d`
8420/// may be treated like a store. Regardless of success or failure, executing an
8421/// `sc.d` instruction invalidates any reservation held by this hart.
8422///
8423/// The failure code with value 1 encodes an unspecified failure.
8424/// Other failure codes are reserved at this time.
8425/// Portable software should only assume the failure code will be non-zero.
8426///
8427/// The address held in _rs1_ must be naturally aligned to the size of the operand
8428/// (_i.e._, eight-byte aligned).
8429/// If the address is not naturally aligned, an address-misaligned exception or an
8430/// access-fault exception will be generated.
8431/// The access-fault exception can be generated for a memory access that would otherwise
8432/// be able to complete except for the misalignment,
8433/// if the misaligned access should not be emulated.
8434///
8435/// \[NOTE\]
8436/// --
8437/// Emulating misaligned LR/SC sequences is impractical in most systems.
8438///
8439/// Misaligned LR/SC sequences also raise the possibility of accessing multiple
8440/// reservation sets at once, which present definitions do not provide for.
8441/// --
8442///
8443/// An implementation can register an arbitrarily large reservation set on each LR,
8444/// provided the reservation set includes all bytes of the addressed data word or
8445/// doubleword.
8446/// An SC can only pair with the most recent LR in program order.
8447/// An SC may succeed only if no store from another hart to the reservation set
8448/// can be observed to have occurred between the LR and the SC,
8449/// and if there is no other SC between the LR and itself in program order.
8450/// An SC may succeed only if no write from a device other than a hart to the bytes
8451/// accessed by the LR instruction can be observed to have occurred between the LR
8452/// and SC.
8453/// Note this LR might have had a different effective address and data size,
8454/// but reserved the SC's address as part of the reservation set.
8455///
8456/// \[NOTE\]
8457/// ----
8458/// Following this model, in systems with memory translation, an SC is allowed to succeed if the
8459/// earlier LR reserved the same location using an alias with a different virtual address, but is
8460/// also allowed to fail if the virtual address is different.
8461///
8462/// To accommodate legacy devices and buses, writes from devices other than RISC-V harts are only
8463/// required to invalidate reservations when they overlap the bytes accessed by the LR.
8464/// These writes are not required to invalidate the reservation when they access other bytes in
8465/// the reservation set.
8466/// ----
8467///
8468/// The SC must fail if the address is not within the reservation set of the most
8469/// recent LR in program order.
8470/// The SC must fail if a store to the reservation set from another hart can be
8471/// observed to occur between the LR and SC.
8472/// The SC must fail if a write from some other device to the bytes accessed by the
8473/// LR can be observed to occur between the LR and SC.
8474/// (If such a device writes the reservation set but does not write the bytes accessed
8475/// by the LR, the SC may or may not fail.)
8476/// An SC must fail if there is another SC (to any address) between the LR and the SC
8477/// in program order.
8478/// The precise statement of the atomicity requirements for successful LR/SC sequences
8479/// is defined by the Atomicity Axiom of the memory model.
8480///
8481/// \[NOTE\]
8482/// --
8483/// The platform should provide a means to determine the size and shape of the reservation set.
8484///
8485/// A platform specification may constrain the size and shape of the reservation set.
8486///
8487/// A store-conditional instruction to a scratch word of memory should be used to forcibly invalidate any existing load reservation:
8488///
8489///   * during a preemptive context switch, and
8490///   * if necessary when changing virtual to physical address mappings, such as when migrating pages that might contain an active reservation.
8491///
8492/// The invalidation of a hart's reservation when it executes an LR or SC imply that a hart can only hold one reservation at a time, and that an SC can only pair with the most recent LR, and LR with the next following SC, in program order. This is a restriction to the Atomicity Axiom in Section 18.1 that ensures software runs correctly on expected common implementations that operate in this manner.
8493/// --
8494///
8495/// An SC instruction can never be observed by another RISC-V hart before the LR instruction that established the reservation.
8496///
8497/// \[NOTE\]
8498/// --
8499/// The LR/SC sequence can be given acquire semantics by setting the aq bit on the LR instruction. The LR/SC sequence can be given release semantics by by setting the rl bit on the SC instruction. Assuming suitable mappings for other atomic operations, setting the aq bit on the LR instruction, and setting the rl bit on the SC instruction makes the LR/SC sequence sequentially consistent in the C++ memory_order_seq_cst sense. Such a sequence does not act as a fence for ordering ordinary load and store instructions before and after the sequence. Specific instruction mappings for other C++ atomic operations, or stronger notions of "sequential consistency", may require both bits to be set on either or both of the LR or SC instruction.
8500///
8501/// If neither bit is set on either LR or SC, the LR/SC sequence can be observed to occur before or after surrounding memory operations from the same RISC-V hart. This can be appropriate when the LR/SC sequence is used to implement a parallel reduction operation.
8502/// --
8503///
8504/// Software should not set the _rl_ bit on an LR instruction unless the _aq_ bit is also set.
8505/// LR.rl and SC.aq instructions are not guaranteed to provide any stronger ordering than those
8506/// with both bits clear, but may result in lower performance.
8507///
8508/// # Forms
8509/// Assembly: `sc.d xd, xs2, xs1`
8510/// Rust: `sc_d(rd, rs1, rs2, aq, rl)`
8511///
8512/// # Arguments
8513/// - `rd` — Destination register.
8514/// - `rs1` — Memory base register.
8515/// - `rs2` — Source register.
8516/// - `aq` — Acquire-order bit.
8517/// - `rl` — Release-order bit; retained for the existing emitter API.
8518pub trait ScDEmitter<T0, T1, T2, T3, T4> {
8519    fn sc_d(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
8520}
8521
8522/// Store conditional word
8523///
8524/// `sc.w` conditionally writes a word in _rs2_ to the address in _rs1_:
8525/// the `sc.w` succeeds only if the reservation is still valid and the
8526/// reservation set contains the bytes being written. If the `sc.w` succeeds,
8527/// the instruction writes the word in _rs2_ to memory, and it writes zero to _rd_.
8528/// If the `sc.w` fails, the instruction does not write to memory, and it writes a
8529/// nonzero value to _rd_. For the purposes of memory protection, a failed `sc.w`
8530/// may be treated like a store. Regardless of success or failure, executing an
8531/// `sc.w` instruction invalidates any reservation held by this hart.
8532///
8533/// &lt;%- if XLEN == 64 -%&gt;
8534/// \[NOTE\]
8535/// If a value other than 0 or 1 is defined as a result for `sc.w`, the value will before
8536/// sign-extended into _rd_.
8537/// &lt;%- end -%&gt;
8538///
8539/// The failure code with value 1 encodes an unspecified failure.
8540/// Other failure codes are reserved at this time.
8541/// Portable software should only assume the failure code will be non-zero.
8542///
8543/// The address held in _rs1_ must be naturally aligned to the size of the operand
8544/// (_i.e._, eight-byte aligned for doublewords and four-byte aligned for words).
8545/// If the address is not naturally aligned, an address-misaligned exception or an
8546/// access-fault exception will be generated.
8547/// The access-fault exception can be generated for a memory access that would otherwise
8548/// be able to complete except for the misalignment,
8549/// if the misaligned access should not be emulated.
8550///
8551/// \[NOTE\]
8552/// --
8553/// Emulating misaligned LR/SC sequences is impractical in most systems.
8554///
8555/// Misaligned LR/SC sequences also raise the possibility of accessing multiple
8556/// reservation sets at once, which present definitions do not provide for.
8557/// --
8558///
8559/// An implementation can register an arbitrarily large reservation set on each LR,
8560/// provided the reservation set includes all bytes of the addressed data word or
8561/// doubleword.
8562/// An SC can only pair with the most recent LR in program order.
8563/// An SC may succeed only if no store from another hart to the reservation set
8564/// can be observed to have occurred between the LR and the SC,
8565/// and if there is no other SC between the LR and itself in program order.
8566/// An SC may succeed only if no write from a device other than a hart to the bytes
8567/// accessed by the LR instruction can be observed to have occurred between the LR
8568/// and SC.
8569/// Note this LR might have had a different effective address and data size,
8570/// but reserved the SC's address as part of the reservation set.
8571///
8572/// \[NOTE\]
8573/// ----
8574/// Following this model, in systems with memory translation, an SC is allowed to succeed if the
8575/// earlier LR reserved the same location using an alias with a different virtual address, but is
8576/// also allowed to fail if the virtual address is different.
8577///
8578/// To accommodate legacy devices and buses, writes from devices other than RISC-V harts are only
8579/// required to invalidate reservations when they overlap the bytes accessed by the LR.
8580/// These writes are not required to invalidate the reservation when they access other bytes in
8581/// the reservation set.
8582/// ----
8583///
8584/// The SC must fail if the address is not within the reservation set of the most
8585/// recent LR in program order.
8586/// The SC must fail if a store to the reservation set from another hart can be
8587/// observed to occur between the LR and SC.
8588/// The SC must fail if a write from some other device to the bytes accessed by the
8589/// LR can be observed to occur between the LR and SC.
8590/// (If such a device writes the reservation set but does not write the bytes accessed
8591/// by the LR, the SC may or may not fail.)
8592/// An SC must fail if there is another SC (to any address) between the LR and the SC
8593/// in program order.
8594/// The precise statement of the atomicity requirements for successful LR/SC sequences
8595/// is defined by the Atomicity Axiom of the memory model.
8596///
8597/// \[NOTE\]
8598/// --
8599/// The platform should provide a means to determine the size and shape of the reservation set.
8600///
8601/// A platform specification may constrain the size and shape of the reservation set.
8602///
8603/// A store-conditional instruction to a scratch word of memory should be used to forcibly invalidate any existing load reservation:
8604///
8605///   * during a preemptive context switch, and
8606///   * if necessary when changing virtual to physical address mappings, such as when migrating pages that might contain an active reservation.
8607///
8608/// The invalidation of a hart's reservation when it executes an LR or SC imply that a hart can only hold one reservation at a time, and that an SC can only pair with the most recent LR, and LR with the next following SC, in program order. This is a restriction to the Atomicity Axiom in Section 18.1 that ensures software runs correctly on expected common implementations that operate in this manner.
8609/// --
8610///
8611/// An SC instruction can never be observed by another RISC-V hart before the LR instruction that established the reservation.
8612///
8613/// \[NOTE\]
8614/// --
8615/// The LR/SC sequence can be given acquire semantics by setting the aq bit on the LR instruction. The LR/SC sequence can be given release semantics by by setting the rl bit on the SC instruction. Assuming suitable mappings for other atomic operations, setting the aq bit on the LR instruction, and setting the rl bit on the SC instruction makes the LR/SC sequence sequentially consistent in the C++ memory_order_seq_cst sense. Such a sequence does not act as a fence for ordering ordinary load and store instructions before and after the sequence. Specific instruction mappings for other C++ atomic operations, or stronger notions of "sequential consistency", may require both bits to be set on either or both of the LR or SC instruction.
8616///
8617/// If neither bit is set on either LR or SC, the LR/SC sequence can be observed to occur before or after surrounding memory operations from the same RISC-V hart. This can be appropriate when the LR/SC sequence is used to implement a parallel reduction operation.
8618/// --
8619///
8620/// Software should not set the _rl_ bit on an LR instruction unless the _aq_ bit is also set.
8621/// LR.rl and SC.aq instructions are not guaranteed to provide any stronger ordering than those
8622/// with both bits clear, but may result in lower performance.
8623///
8624/// # Forms
8625/// Assembly: `sc.w xd, xs2, xs1`
8626/// Rust: `sc_w(rd, rs1, rs2, aq, rl)`
8627///
8628/// # Arguments
8629/// - `rd` — Destination register.
8630/// - `rs1` — Memory base register.
8631/// - `rs2` — Source register.
8632/// - `aq` — Acquire-order bit.
8633/// - `rl` — Release-order bit; retained for the existing emitter API.
8634pub trait ScWEmitter<T0, T1, T2, T3, T4> {
8635    fn sc_w(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
8636}
8637
8638/// RISC-V `scall` instruction.
8639///
8640/// # Forms
8641/// Assembly: `scall`
8642/// Rust: `scall()`
8643///
8644/// # Arguments
8645pub trait ScallEmitter {
8646    fn scall(&mut self);
8647}
8648
8649/// RISC-V `sctrclr` instruction.
8650///
8651/// # Forms
8652/// Assembly: `sctrclr sctrclr`
8653/// Rust: `sctrclr()`
8654///
8655/// # Arguments
8656pub trait SctrclrEmitter {
8657    fn sctrclr(&mut self);
8658}
8659
8660/// Store doubleword
8661///
8662/// Store 64 bits of data from register `rs2` to an
8663/// address formed by adding `rs1` to a signed offset.
8664///
8665/// # Forms
8666/// Assembly: `sd xs2, imm(xs1)`
8667/// Rust: `sd(rs1, rs2, imm)`
8668///
8669/// # Arguments
8670/// - `rs1` — Memory base register.
8671/// - `rs2` — Source register.
8672/// - `imm` — Immediate encoding value.
8673pub trait SdEmitter<T0, T1, T2> {
8674    fn sd(&mut self, rs1: T0, rs2: T1, imm: T2);
8675}
8676
8677/// RISC-V `seqz` instruction.
8678///
8679/// # Forms
8680/// Assembly: `seqz rd rs1`
8681/// Rust: `seqz(rd, rs1)`
8682///
8683/// # Arguments
8684/// - `rd` — Destination register.
8685/// - `rs1` — Source register.
8686pub trait SeqzEmitter<T0, T1> {
8687    fn seqz(&mut self, rd: T0, rs1: T1);
8688}
8689
8690/// Sign-extend byte
8691///
8692/// This instruction sign-extends the least-significant byte in the source to XLEN by copying the
8693/// most-significant bit in the byte (i.e., bit 7) to all of the more-significant bits.
8694///
8695/// # Forms
8696/// Assembly: `sext.b xd, xs1`
8697/// Rust: `sext_b(rd, rs1)`
8698///
8699/// # Arguments
8700/// - `rd` — Destination register.
8701/// - `rs1` — Source register.
8702pub trait SextBEmitter<T0, T1> {
8703    fn sext_b(&mut self, rd: T0, rs1: T1);
8704}
8705
8706/// Sign-extend halfword
8707///
8708/// This instruction sign-extends the least-significant halfword in the source to XLEN by copying the
8709/// most-significant bit in the halfword (i.e., bit 15) to all of the more-significant bits.
8710///
8711/// # Forms
8712/// Assembly: `sext.h xd, xs1`
8713/// Rust: `sext_h(rd, rs1)`
8714///
8715/// # Arguments
8716/// - `rd` — Destination register.
8717/// - `rs1` — Source register.
8718pub trait SextHEmitter<T0, T1> {
8719    fn sext_h(&mut self, rd: T0, rs1: T1);
8720}
8721
8722/// RISC-V `sext.w` instruction.
8723///
8724/// # Forms
8725/// Assembly: `sext.w rd rs1`
8726/// Rust: `sext_w(rd, rs1)`
8727///
8728/// # Arguments
8729/// - `rd` — Destination register.
8730/// - `rs1` — Source register.
8731pub trait SextWEmitter<T0, T1> {
8732    fn sext_w(&mut self, rd: T0, rs1: T1);
8733}
8734
8735/// Order implicit page table reads after invalidation
8736///
8737/// The `sfence.inval.ir` instruction guarantees that any previous `sinval.vma`
8738/// instructions executed by the current hart are ordered before subsequent implicit references by
8739/// that hart to the memory-management data structures.
8740///
8741/// # Forms
8742/// Assembly: `sfence.inval.ir ""`
8743/// Rust: `sfence_inval_ir()`
8744///
8745/// # Arguments
8746pub trait SfenceInvalIrEmitter {
8747    fn sfence_inval_ir(&mut self);
8748}
8749
8750/// Supervisor memory-management fence
8751///
8752/// The supervisor memory-management fence instruction `SFENCE.VMA` is used to
8753/// synchronize updates to in-memory memory-management data structures with
8754/// current execution. Instruction execution causes implicit reads and
8755/// writes to these data structures; however, these implicit references are
8756/// ordinarily not ordered with respect to explicit loads and stores.
8757/// Executing an SFENCE.VMA instruction guarantees that any previous stores
8758/// already visible to the current RISC-V hart are ordered before certain
8759/// implicit references by subsequent instructions in that hart to the
8760/// memory-management data structures. The specific set of operations
8761/// ordered by SFENCE.VMA is determined by _rs1_ and _rs2_, as described
8762/// below. SFENCE.VMA is also used to invalidate entries in the
8763/// address-translation cache associated with a hart (see &lt;&lt;sv32algorithm&gt;&gt;). Further details on the behavior of this instruction are described in &lt;&lt;virt-control&gt;&gt; and &lt;&lt;pmp-vmem&gt;&gt;.
8764///
8765/// \[NOTE\]
8766/// ====
8767/// The SFENCE.VMA is used to flush any local hardware caches related to
8768/// address translation. It is specified as a fence rather than a TLB flush
8769/// to provide cleaner semantics with respect to which instructions are
8770/// affected by the flush operation and to support a wider variety of
8771/// dynamic caching structures and memory-management schemes. SFENCE.VMA is
8772/// also used by higher privilege levels to synchronize page table writes
8773/// and the address translation hardware.
8774/// ====
8775///
8776/// SFENCE.VMA orders only the local hart's implicit references to the
8777/// memory-management data structures.
8778///
8779/// \[NOTE\]
8780/// ====
8781/// Consequently, other harts must be notified separately when the
8782/// memory-management data structures have been modified. One approach is to
8783/// use 1) a local data fence to ensure local writes are visible globally,
8784/// then 2) an interprocessor interrupt to the other thread, then 3) a local
8785/// SFENCE.VMA in the interrupt handler of the remote thread, and finally 4)
8786/// signal back to originating thread that operation is complete. This is,
8787/// of course, the RISC-V analog to a TLB shootdown.
8788/// ====
8789///
8790/// For the common case that the translation data structures have only been
8791/// modified for a single address mapping (i.e., one page or superpage),
8792/// _rs1_ can specify a virtual address within that mapping to effect a
8793/// translation fence for that mapping only. Furthermore, for the common
8794/// case that the translation data structures have only been modified for a
8795/// single address-space identifier, _rs2_ can specify the address space.
8796/// The behavior of SFENCE.VMA depends on _rs1_ and _rs2_ as follows:
8797///
8798/// * If __rs1__=`x0` and __rs2__=`x0`, the fence orders all reads and writes
8799/// made to any level of the page tables, for all address spaces. The fence
8800/// also invalidates all address-translation cache entries, for all address
8801/// spaces.
8802/// * If __rs1__=`x0` and __rs2__&#8800;``x0``, the fence orders all
8803/// reads and writes made to any level of the page tables, but only for the
8804/// address space identified by integer register _rs2_. Accesses to _global_
8805/// mappings (see &lt;&lt;translation&gt;&gt;) are not ordered. The
8806/// fence also invalidates all address-translation cache entries matching
8807/// the address space identified by integer register _rs2_, except for
8808/// entries containing global mappings.
8809/// * If __rs1__&#8800;``x0`` and __rs2__=`x0`, the fence orders only
8810/// reads and writes made to leaf page table entries corresponding to the
8811/// virtual address in __rs1__, for all address spaces. The fence also
8812/// invalidates all address-translation cache entries that contain leaf page
8813/// table entries corresponding to the virtual address in _rs1_, for all
8814/// address spaces.
8815/// * If __rs1__&#8800;``x0`` and __rs2__&#8800;``x0``, the
8816/// fence orders only reads and writes made to leaf page table entries
8817/// corresponding to the virtual address in _rs1_, for the address space
8818/// identified by integer register _rs2_. Accesses to global mappings are
8819/// not ordered. The fence also invalidates all address-translation cache
8820/// entries that contain leaf page table entries corresponding to the
8821/// virtual address in _rs1_ and that match the address space identified by
8822/// integer register _rs2_, except for entries containing global mappings.
8823///
8824/// If the value held in _rs1_ is not a valid virtual address, then the
8825/// SFENCE.VMA instruction has no effect. No exception is raised in this
8826/// case.
8827///
8828/// When __rs2__&#8800;``x0``, bits SXLEN-1:ASIDMAX of the value held
8829/// in _rs2_ are reserved for future standard use. Until their use is
8830/// defined by a standard extension, they should be zeroed by software and
8831/// ignored by current implementations. Furthermore, if
8832/// ASIDLEN&lt;ASIDMAX, the implementation shall ignore bits
8833/// ASIDMAX-1:ASIDLEN of the value held in _rs2_.
8834///
8835/// \[NOTE\]
8836/// ====
8837/// It is always legal to over-fence, e.g., by fencing only based on a
8838/// subset of the bits in _rs1_ and/or _rs2_, and/or by simply treating all
8839/// SFENCE.VMA instructions as having _rs1_=`x0` and/or _rs2_=`x0`. For
8840/// example, simpler implementations can ignore the virtual address in _rs1_
8841/// and the ASID value in _rs2_ and always perform a global fence. The
8842/// choice not to raise an exception when an invalid virtual address is held
8843/// in _rs1_ facilitates this type of simplification.
8844/// ====
8845///
8846/// An implicit read of the memory-management data structures may return any
8847/// translation for an address that was valid at any time since the most
8848/// recent SFENCE.VMA that subsumes that address. The ordering implied by
8849/// SFENCE.VMA does not place implicit reads and writes to the
8850/// memory-management data structures into the global memory order in a way
8851/// that interacts cleanly with the standard RVWMO ordering rules. In
8852/// particular, even though an SFENCE.VMA orders prior explicit accesses
8853/// before subsequent implicit accesses, and those implicit accesses are
8854/// ordered before their associated explicit accesses, SFENCE.VMA does not
8855/// necessarily place prior explicit accesses before subsequent explicit
8856/// accesses in the global memory order. These implicit loads also need not
8857/// otherwise obey normal program order semantics with respect to prior
8858/// loads or stores to the same address.
8859///
8860/// \[NOTE\]
8861/// ====
8862/// A consequence of this specification is that an implementation may use
8863/// any translation for an address that was valid at any time since the most
8864/// recent SFENCE.VMA that subsumes that address. In particular, if a leaf
8865/// PTE is modified but a subsuming SFENCE.VMA is not executed, either the
8866/// old translation or the new translation will be used, but the choice is
8867/// unpredictable. The behavior is otherwise well-defined.
8868///
8869/// In a conventional TLB design, it is possible for multiple entries to
8870/// match a single address if, for example, a page is upgraded to a
8871/// superpage without first clearing the original non-leaf PTE's valid bit
8872/// and executing an SFENCE.VMA with __rs1__=`x0`. In this case, a similar
8873/// remark applies: it is unpredictable whether the old non-leaf PTE or the
8874/// new leaf PTE is used, but the behavior is otherwise well defined.
8875///
8876/// Another consequence of this specification is that it is generally unsafe
8877/// to update a PTE using a set of stores of a width less than the width of
8878/// the PTE, as it is legal for the implementation to read the PTE at any
8879/// time, including when only some of the partial stores have taken effect.
8880///
8881/// ***
8882///
8883/// This specification permits the caching of PTEs whose V (Valid) bit is
8884/// clear. Operating systems must be written to cope with this possibility,
8885/// but implementers are reminded that eagerly caching invalid PTEs will
8886/// reduce performance by causing additional page faults.
8887/// ====
8888///
8889/// Implementations must only perform implicit reads of the translation data
8890/// structures pointed to by the current contents of the `satp` register or
8891/// a subsequent valid (V=1) translation data structure entry, and must only
8892/// raise exceptions for implicit accesses that are generated as a result of
8893/// instruction execution, not those that are performed speculatively.
8894///
8895/// Changes to the `sstatus` fields SUM and MXR take effect immediately,
8896/// without the need to execute an SFENCE.VMA instruction. Changing
8897/// `satp`.MODE from Bare to other modes and vice versa also takes effect
8898/// immediately, without the need to execute an SFENCE.VMA instruction.
8899/// Likewise, changes to `satp`.ASID take effect immediately.
8900///
8901/// \[TIP\]
8902/// ====
8903/// The following common situations typically require executing an
8904/// SFENCE.VMA instruction:
8905///
8906/// * When software recycles an ASID (i.e., reassociates it with a different
8907/// page table), it should _first_ change `satp` to point to the new page
8908/// table using the recycled ASID, _then_ execute SFENCE.VMA with __rs1__=`x0`
8909/// and _rs2_ set to the recycled ASID. Alternatively, software can execute
8910/// the same SFENCE.VMA instruction while a different ASID is loaded into
8911/// `satp`, provided the next time `satp` is loaded with the recycled ASID,
8912/// it is simultaneously loaded with the new page table.
8913/// * If the implementation does not provide ASIDs, or software chooses to
8914/// always use ASID 0, then after every `satp` write, software should
8915/// execute SFENCE.VMA with __rs1__=`x0`. In the common case that no global
8916/// translations have been modified, _rs2_ should be set to a register other
8917/// than `x0` but which contains the value zero, so that global translations
8918/// are not flushed.
8919/// * If software modifies a non-leaf PTE, it should execute SFENCE.VMA with
8920/// __rs1__=`x0`. If any PTE along the traversal path had its G bit set, _rs2_
8921/// must be `x0`; otherwise, _rs2_ should be set to the ASID for which the
8922/// translation is being modified.
8923/// * If software modifies a leaf PTE, it should execute SFENCE.VMA with
8924/// _rs1_ set to a virtual address within the page. If any PTE along the
8925/// traversal path had its G bit set, _rs2_ must be `x0`; otherwise, _rs2_
8926/// should be set to the ASID for which the translation is being modified.
8927/// * For the special cases of increasing the permissions on a leaf PTE and
8928/// changing an invalid PTE to a valid leaf, software may choose to execute
8929/// the SFENCE.VMA lazily. After modifying the PTE but before executing
8930/// SFENCE.VMA, either the new or old permissions will be used. In the
8931/// latter case, a page-fault exception might occur, at which point software
8932/// should execute SFENCE.VMA in accordance with the previous bullet point.
8933/// ====
8934///
8935/// If a hart employs an address-translation cache, that cache must appear
8936/// to be private to that hart. In particular, the meaning of an ASID is
8937/// local to a hart; software may choose to use the same ASID to refer to
8938/// different address spaces on different harts.
8939///
8940/// \[NOTE\]
8941/// ====
8942/// A future extension could redefine ASIDs to be global across the SEE,
8943/// enabling such options as shared translation caches and hardware support
8944/// for broadcast TLB shootdown. However, as OSes have evolved to
8945/// significantly reduce the scope of TLB shootdowns using novel
8946/// ASID-management techniques, we expect the local-ASID scheme to remain
8947/// attractive for its simplicity and possibly better scalability.
8948/// ====
8949///
8950/// For implementations that make `satp`.MODE read-only zero (always Bare),
8951/// attempts to execute an SFENCE.VMA instruction might raise an
8952/// illegal-instruction exception.
8953///
8954/// # Forms
8955/// Assembly: `sfence.vma xs1, xs2`
8956/// Rust: `sfence_vma(rs1, rs2)`
8957///
8958/// # Arguments
8959/// - `rs1` — Source register.
8960/// - `rs2` — Source register.
8961pub trait SfenceVmaEmitter<T0, T1> {
8962    fn sfence_vma(&mut self, rs1: T0, rs2: T1);
8963}
8964
8965/// Order writes before sfence
8966///
8967/// The `sfence.w.inval` instruction guarantees that any previous stores already visible to the
8968/// current RISC-V hart are ordered before subsequent `sinval.vma` instructions executed by the
8969/// same hart.
8970///
8971/// # Forms
8972/// Assembly: `sfence.w.inval ""`
8973/// Rust: `sfence_w_inval()`
8974///
8975/// # Arguments
8976pub trait SfenceWInvalEmitter {
8977    fn sfence_w_inval(&mut self);
8978}
8979
8980/// RISC-V `sgtz` instruction.
8981///
8982/// # Forms
8983/// Assembly: `sgtz rd rs2`
8984/// Rust: `sgtz(rd, rs2)`
8985///
8986/// # Arguments
8987/// - `rd` — Destination register.
8988/// - `rs2` — Source register.
8989pub trait SgtzEmitter<T0, T1> {
8990    fn sgtz(&mut self, rd: T0, rs2: T1);
8991}
8992
8993/// Store halfword
8994///
8995/// Store 16 bits of data from register `rs2` to an
8996/// address formed by adding `rs1` to a signed offset.
8997///
8998/// # Forms
8999/// Assembly: `sh xs2, imm(xs1)`
9000/// Rust: `sh(rs1, rs2, imm)`
9001///
9002/// # Arguments
9003/// - `rs1` — Memory base register.
9004/// - `rs2` — Source register.
9005/// - `imm` — Immediate encoding value.
9006pub trait ShEmitter<T0, T1, T2> {
9007    fn sh(&mut self, rs1: T0, rs2: T1, imm: T2);
9008}
9009
9010/// Shift left by 1 and add
9011///
9012/// This instruction shifts `rs1` to the left by 1 bit and adds it to `rs2`.
9013///
9014/// # Forms
9015/// Assembly: `sh1add xd, xs1, xs2`
9016/// Rust: `sh1add(rd, rs1, rs2)`
9017///
9018/// # Arguments
9019/// - `rd` — Destination register.
9020/// - `rs1` — Source register.
9021/// - `rs2` — Source register.
9022pub trait Sh1AddEmitter<T0, T1, T2> {
9023    fn sh1add(&mut self, rd: T0, rs1: T1, rs2: T2);
9024}
9025
9026/// Shift unsigned word left by 1 and add
9027///
9028/// This instruction performs an XLEN-wide addition of two addends. The first addend is rs2.
9029/// The second addend is the unsigned value formed by extracting the least-significant word of rs1
9030/// and shifting it left by 1 place.
9031///
9032/// # Forms
9033/// Assembly: `sh1add.uw xd, xs1, xs2`
9034/// Rust: `sh1add_uw(rd, rs1, rs2)`
9035///
9036/// # Arguments
9037/// - `rd` — Destination register.
9038/// - `rs1` — Source register.
9039/// - `rs2` — Source register.
9040pub trait Sh1AddUwEmitter<T0, T1, T2> {
9041    fn sh1add_uw(&mut self, rd: T0, rs1: T1, rs2: T2);
9042}
9043
9044/// Shift left by 2 and add
9045///
9046/// This instruction shifts `rs1` to the left by 2 places and adds it to `rs2`.
9047///
9048/// # Forms
9049/// Assembly: `sh2add xd, xs1, xs2`
9050/// Rust: `sh2add(rd, rs1, rs2)`
9051///
9052/// # Arguments
9053/// - `rd` — Destination register.
9054/// - `rs1` — Source register.
9055/// - `rs2` — Source register.
9056pub trait Sh2AddEmitter<T0, T1, T2> {
9057    fn sh2add(&mut self, rd: T0, rs1: T1, rs2: T2);
9058}
9059
9060/// Shift unsigned word left by 2 and add
9061///
9062/// This instruction performs an XLEN-wide addition of two addends. The first addend is rs2.
9063/// The second addend is the unsigned value formed by extracting the least-significant word of rs1
9064/// and shifting it left by 2 places.
9065///
9066/// # Forms
9067/// Assembly: `sh2add.uw xd, xs1, xs2`
9068/// Rust: `sh2add_uw(rd, rs1, rs2)`
9069///
9070/// # Arguments
9071/// - `rd` — Destination register.
9072/// - `rs1` — Source register.
9073/// - `rs2` — Source register.
9074pub trait Sh2AddUwEmitter<T0, T1, T2> {
9075    fn sh2add_uw(&mut self, rd: T0, rs1: T1, rs2: T2);
9076}
9077
9078/// Shift left by 3 and add
9079///
9080/// This instruction shifts `rs1` to the left by 3 places and adds it to `rs2`.
9081///
9082/// # Forms
9083/// Assembly: `sh3add xd, xs1, xs2`
9084/// Rust: `sh3add(rd, rs1, rs2)`
9085///
9086/// # Arguments
9087/// - `rd` — Destination register.
9088/// - `rs1` — Source register.
9089/// - `rs2` — Source register.
9090pub trait Sh3AddEmitter<T0, T1, T2> {
9091    fn sh3add(&mut self, rd: T0, rs1: T1, rs2: T2);
9092}
9093
9094/// Shift unsigned word left by 3 and add
9095///
9096/// This instruction performs an XLEN-wide addition of two addends. The first addend is rs2.
9097/// The second addend is the unsigned value formed by extracting the least-significant word of rs1
9098/// and shifting it left by 3 places.
9099///
9100/// # Forms
9101/// Assembly: `sh3add.uw xd, xs1, xs2`
9102/// Rust: `sh3add_uw(rd, rs1, rs2)`
9103///
9104/// # Arguments
9105/// - `rd` — Destination register.
9106/// - `rs1` — Source register.
9107/// - `rs2` — Source register.
9108pub trait Sh3AddUwEmitter<T0, T1, T2> {
9109    fn sh3add_uw(&mut self, rd: T0, rs1: T1, rs2: T2);
9110}
9111
9112/// RISC-V `sha256sig0` instruction.
9113///
9114/// # Forms
9115/// Assembly: `sha256sig0 xd, xs1`
9116/// Rust: `sha256sig0(rd, rs1)`
9117///
9118/// # Arguments
9119/// - `rd` — Destination register.
9120/// - `rs1` — Source register.
9121pub trait Sha256Sig0Emitter<T0, T1> {
9122    fn sha256sig0(&mut self, rd: T0, rs1: T1);
9123}
9124
9125/// RISC-V `sha256sig1` instruction.
9126///
9127/// # Forms
9128/// Assembly: `sha256sig1 xd, xs1`
9129/// Rust: `sha256sig1(rd, rs1)`
9130///
9131/// # Arguments
9132/// - `rd` — Destination register.
9133/// - `rs1` — Source register.
9134pub trait Sha256Sig1Emitter<T0, T1> {
9135    fn sha256sig1(&mut self, rd: T0, rs1: T1);
9136}
9137
9138/// RISC-V `sha256sum0` instruction.
9139///
9140/// # Forms
9141/// Assembly: `sha256sum0 xd, xs1`
9142/// Rust: `sha256sum0(rd, rs1)`
9143///
9144/// # Arguments
9145/// - `rd` — Destination register.
9146/// - `rs1` — Source register.
9147pub trait Sha256Sum0Emitter<T0, T1> {
9148    fn sha256sum0(&mut self, rd: T0, rs1: T1);
9149}
9150
9151/// RISC-V `sha256sum1` instruction.
9152///
9153/// # Forms
9154/// Assembly: `sha256sum1 xd, xs1`
9155/// Rust: `sha256sum1(rd, rs1)`
9156///
9157/// # Arguments
9158/// - `rd` — Destination register.
9159/// - `rs1` — Source register.
9160pub trait Sha256Sum1Emitter<T0, T1> {
9161    fn sha256sum1(&mut self, rd: T0, rs1: T1);
9162}
9163
9164/// RISC-V `sha512sig0` instruction.
9165///
9166/// # Forms
9167/// Assembly: `sha512sig0 xd, xs1`
9168/// Rust: `sha512sig0(rd, rs1)`
9169///
9170/// # Arguments
9171/// - `rd` — Destination register.
9172/// - `rs1` — Source register.
9173pub trait Sha512Sig0Emitter<T0, T1> {
9174    fn sha512sig0(&mut self, rd: T0, rs1: T1);
9175}
9176
9177/// RISC-V `sha512sig0h` instruction.
9178///
9179/// # Forms
9180/// Assembly: `sha512sig0h xd, xs1, xs2`
9181/// Rust: `sha512sig0h(rd, rs1, rs2)`
9182///
9183/// # Arguments
9184/// - `rd` — Destination register.
9185/// - `rs1` — Source register.
9186/// - `rs2` — Source register.
9187pub trait Sha512Sig0HEmitter<T0, T1, T2> {
9188    fn sha512sig0h(&mut self, rd: T0, rs1: T1, rs2: T2);
9189}
9190
9191/// RISC-V `sha512sig0l` instruction.
9192///
9193/// # Forms
9194/// Assembly: `sha512sig0l xd, xs1, xs2`
9195/// Rust: `sha512sig0l(rd, rs1, rs2)`
9196///
9197/// # Arguments
9198/// - `rd` — Destination register.
9199/// - `rs1` — Source register.
9200/// - `rs2` — Source register.
9201pub trait Sha512Sig0LEmitter<T0, T1, T2> {
9202    fn sha512sig0l(&mut self, rd: T0, rs1: T1, rs2: T2);
9203}
9204
9205/// RISC-V `sha512sig1` instruction.
9206///
9207/// # Forms
9208/// Assembly: `sha512sig1 xd, xs1`
9209/// Rust: `sha512sig1(rd, rs1)`
9210///
9211/// # Arguments
9212/// - `rd` — Destination register.
9213/// - `rs1` — Source register.
9214pub trait Sha512Sig1Emitter<T0, T1> {
9215    fn sha512sig1(&mut self, rd: T0, rs1: T1);
9216}
9217
9218/// RISC-V `sha512sig1h` instruction.
9219///
9220/// # Forms
9221/// Assembly: `sha512sig1h xd, xs1, xs2`
9222/// Rust: `sha512sig1h(rd, rs1, rs2)`
9223///
9224/// # Arguments
9225/// - `rd` — Destination register.
9226/// - `rs1` — Source register.
9227/// - `rs2` — Source register.
9228pub trait Sha512Sig1HEmitter<T0, T1, T2> {
9229    fn sha512sig1h(&mut self, rd: T0, rs1: T1, rs2: T2);
9230}
9231
9232/// RISC-V `sha512sig1l` instruction.
9233///
9234/// # Forms
9235/// Assembly: `sha512sig1l xd, xs1, xs2`
9236/// Rust: `sha512sig1l(rd, rs1, rs2)`
9237///
9238/// # Arguments
9239/// - `rd` — Destination register.
9240/// - `rs1` — Source register.
9241/// - `rs2` — Source register.
9242pub trait Sha512Sig1LEmitter<T0, T1, T2> {
9243    fn sha512sig1l(&mut self, rd: T0, rs1: T1, rs2: T2);
9244}
9245
9246/// RISC-V `sha512sum0` instruction.
9247///
9248/// # Forms
9249/// Assembly: `sha512sum0 xd, xs1`
9250/// Rust: `sha512sum0(rd, rs1)`
9251///
9252/// # Arguments
9253/// - `rd` — Destination register.
9254/// - `rs1` — Source register.
9255pub trait Sha512Sum0Emitter<T0, T1> {
9256    fn sha512sum0(&mut self, rd: T0, rs1: T1);
9257}
9258
9259/// RISC-V `sha512sum0r` instruction.
9260///
9261/// # Forms
9262/// Assembly: `sha512sum0r xd, xs1, xs2`
9263/// Rust: `sha512sum0r(rd, rs1, rs2)`
9264///
9265/// # Arguments
9266/// - `rd` — Destination register.
9267/// - `rs1` — Source register.
9268/// - `rs2` — Source register.
9269pub trait Sha512Sum0REmitter<T0, T1, T2> {
9270    fn sha512sum0r(&mut self, rd: T0, rs1: T1, rs2: T2);
9271}
9272
9273/// RISC-V `sha512sum1` instruction.
9274///
9275/// # Forms
9276/// Assembly: `sha512sum1 xd, xs1`
9277/// Rust: `sha512sum1(rd, rs1)`
9278///
9279/// # Arguments
9280/// - `rd` — Destination register.
9281/// - `rs1` — Source register.
9282pub trait Sha512Sum1Emitter<T0, T1> {
9283    fn sha512sum1(&mut self, rd: T0, rs1: T1);
9284}
9285
9286/// RISC-V `sha512sum1r` instruction.
9287///
9288/// # Forms
9289/// Assembly: `sha512sum1r xd, xs1, xs2`
9290/// Rust: `sha512sum1r(rd, rs1, rs2)`
9291///
9292/// # Arguments
9293/// - `rd` — Destination register.
9294/// - `rs1` — Source register.
9295/// - `rs2` — Source register.
9296pub trait Sha512Sum1REmitter<T0, T1, T2> {
9297    fn sha512sum1r(&mut self, rd: T0, rs1: T1, rs2: T2);
9298}
9299
9300/// Invalidate cached address translations
9301///
9302/// # Forms
9303/// Assembly: `sinval.vma xs1, xs2`
9304/// Rust: `sinval_vma(rs1, rs2)`
9305///
9306/// # Arguments
9307/// - `rs1` — Source register.
9308/// - `rs2` — Source register.
9309pub trait SinvalVmaEmitter<T0, T1> {
9310    fn sinval_vma(&mut self, rs1: T0, rs2: T1);
9311}
9312
9313/// Shift left logical
9314///
9315/// Shift the value in `rs1` left by the value in the lower 6 bits of `rs2`, and store the result in `rd`.
9316///
9317/// # Forms
9318/// Assembly: `sll xd, xs1, xs2`
9319/// Rust: `sll(rd, rs1, rs2)`
9320///
9321/// # Arguments
9322/// - `rd` — Destination register.
9323/// - `rs1` — Source register.
9324/// - `rs2` — Source register.
9325pub trait SllEmitter<T0, T1, T2> {
9326    fn sll(&mut self, rd: T0, rs1: T1, rs2: T2);
9327}
9328
9329/// Shift left logical immediate
9330///
9331/// Shift the value in rs1 left by shamt, and store the result in rd
9332///
9333/// # Forms
9334/// Assembly: `slli xd, xs1, shamt`
9335/// Rust: `slli(rd, rs1, shamtd)`
9336///
9337/// # Arguments
9338/// - `rd` — Destination register.
9339/// - `rs1` — Source register.
9340/// - `shamtd` — Immediate encoding value.
9341pub trait SlliEmitter<T0, T1, T2> {
9342    fn slli(&mut self, rd: T0, rs1: T1, shamtd: T2);
9343}
9344
9345/// Shift left logical immediate
9346///
9347/// Shift the value in rs1 left by shamt, and store the result in rd
9348///
9349/// # Forms
9350/// Assembly: `slli.rv32 xd, xs1, shamt`
9351/// Rust: `slli_rv32(rd, rs1, shamtw)`
9352///
9353/// # Arguments
9354/// - `rd` — Destination register.
9355/// - `rs1` — Source register.
9356/// - `shamtw` — Immediate encoding value.
9357pub trait SlliRv32Emitter<T0, T1, T2> {
9358    fn slli_rv32(&mut self, rd: T0, rs1: T1, shamtw: T2);
9359}
9360
9361/// Shift left unsigned word (Immediate)
9362///
9363/// This instruction takes the least-significant word of rs1, zero-extends it, and shifts it
9364/// left by the immediate.
9365///
9366/// \[NOTE\]
9367/// This instruction is the same as `slli` with `zext.w` performed on rs1 before shifting.
9368///
9369/// # Forms
9370/// Assembly: `slli.uw xd, xs1, shamt`
9371/// Rust: `slli_uw(rd, rs1, shamtd)`
9372///
9373/// # Arguments
9374/// - `rd` — Destination register.
9375/// - `rs1` — Source register.
9376/// - `shamtd` — Immediate encoding value.
9377pub trait SlliUwEmitter<T0, T1, T2> {
9378    fn slli_uw(&mut self, rd: T0, rs1: T1, shamtd: T2);
9379}
9380
9381/// Shift left logical immediate word
9382///
9383/// Shift the 32-bit value in rs1 left by shamt, and store the sign-extended result in rd
9384///
9385/// # Forms
9386/// Assembly: `slliw xd, xs1, shamt`
9387/// Rust: `slliw(rd, rs1, shamtw)`
9388///
9389/// # Arguments
9390/// - `rd` — Destination register.
9391/// - `rs1` — Source register.
9392/// - `shamtw` — Immediate encoding value.
9393pub trait SlliwEmitter<T0, T1, T2> {
9394    fn slliw(&mut self, rd: T0, rs1: T1, shamtw: T2);
9395}
9396
9397/// Shift left logical word
9398///
9399/// Shift the 32-bit value in `rs1` left by the value in the lower 5 bits of `rs2`, and store the sign-extended result in `rd`.
9400///
9401/// # Forms
9402/// Assembly: `sllw xd, xs1, xs2`
9403/// Rust: `sllw(rd, rs1, rs2)`
9404///
9405/// # Arguments
9406/// - `rd` — Destination register.
9407/// - `rs1` — Source register.
9408/// - `rs2` — Source register.
9409pub trait SllwEmitter<T0, T1, T2> {
9410    fn sllw(&mut self, rd: T0, rs1: T1, rs2: T2);
9411}
9412
9413/// Set on less than
9414///
9415/// Places the value 1 in register `rd` if register `rs1` is less than the value in register `rs2`, where
9416/// both sources are treated as signed numbers, else 0 is written to `rd`.
9417///
9418/// # Forms
9419/// Assembly: `slt xd, xs1, rs2`
9420/// Rust: `slt(rd, rs1, rs2)`
9421///
9422/// # Arguments
9423/// - `rd` — Destination register.
9424/// - `rs1` — Source register.
9425/// - `rs2` — Source register.
9426pub trait SltEmitter<T0, T1, T2> {
9427    fn slt(&mut self, rd: T0, rs1: T1, rs2: T2);
9428}
9429
9430/// Set on less than immediate
9431///
9432/// Places the value 1 in register `rd` if register `rs1` is less than the sign-extended immediate
9433/// when both are treated as signed numbers, else 0 is written to `rd`.
9434///
9435/// # Forms
9436/// Assembly: `slti xd, xs1, imm`
9437/// Rust: `slti(rd, rs1, imm)`
9438///
9439/// # Arguments
9440/// - `rd` — Destination register.
9441/// - `rs1` — Source register.
9442/// - `imm` — Immediate encoding value.
9443pub trait SltiEmitter<T0, T1, T2> {
9444    fn slti(&mut self, rd: T0, rs1: T1, imm: T2);
9445}
9446
9447/// Set on less than immediate unsigned
9448///
9449/// Places the value 1 in register `rd` if register `rs1` is less than the sign-extended immediate
9450/// when both are treated as unsigned numbers (_i.e._, the immediate is first sign-extended to
9451/// XLEN bits then treated as an unsigned number), else 0 is written to `rd`.
9452///
9453/// NOTE: `sltiu rd, rs1, 1` sets `rd` to 1 if `rs1` equals zero, otherwise sets `rd` to 0
9454/// (assembler pseudoinstruction `SEQZ rd, rs`).
9455///
9456/// # Forms
9457/// Assembly: `sltiu xd, xs1, imm`
9458/// Rust: `sltiu(rd, rs1, imm)`
9459///
9460/// # Arguments
9461/// - `rd` — Destination register.
9462/// - `rs1` — Source register.
9463/// - `imm` — Immediate encoding value.
9464pub trait SltiuEmitter<T0, T1, T2> {
9465    fn sltiu(&mut self, rd: T0, rs1: T1, imm: T2);
9466}
9467
9468/// Set on less than unsigned
9469///
9470/// Places the value 1 in register `rd` if register `rs1` is less than the value in register `rs2`, where
9471/// both sources are treated as unsigned numbers, else 0 is written to `rd`.
9472///
9473/// # Forms
9474/// Assembly: `sltu xd, xs1, xs2`
9475/// Rust: `sltu(rd, rs1, rs2)`
9476///
9477/// # Arguments
9478/// - `rd` — Destination register.
9479/// - `rs1` — Source register.
9480/// - `rs2` — Source register.
9481pub trait SltuEmitter<T0, T1, T2> {
9482    fn sltu(&mut self, rd: T0, rs1: T1, rs2: T2);
9483}
9484
9485/// RISC-V `sltz` instruction.
9486///
9487/// # Forms
9488/// Assembly: `sltz rd rs1`
9489/// Rust: `sltz(rd, rs1)`
9490///
9491/// # Arguments
9492/// - `rd` — Destination register.
9493/// - `rs1` — Source register.
9494pub trait SltzEmitter<T0, T1> {
9495    fn sltz(&mut self, rd: T0, rs1: T1);
9496}
9497
9498/// RISC-V `sm3p0` instruction.
9499///
9500/// # Forms
9501/// Assembly: `sm3p0 xd, xs1`
9502/// Rust: `sm3p0(rd, rs1)`
9503///
9504/// # Arguments
9505/// - `rd` — Destination register.
9506/// - `rs1` — Source register.
9507pub trait Sm3P0Emitter<T0, T1> {
9508    fn sm3p0(&mut self, rd: T0, rs1: T1);
9509}
9510
9511/// RISC-V `sm3p1` instruction.
9512///
9513/// # Forms
9514/// Assembly: `sm3p1 xd, xs1`
9515/// Rust: `sm3p1(rd, rs1)`
9516///
9517/// # Arguments
9518/// - `rd` — Destination register.
9519/// - `rs1` — Source register.
9520pub trait Sm3P1Emitter<T0, T1> {
9521    fn sm3p1(&mut self, rd: T0, rs1: T1);
9522}
9523
9524/// RISC-V `sm4ed` instruction.
9525///
9526/// # Forms
9527/// Assembly: `sm4ed xd, xs1, xs2, bs`
9528/// Rust: `sm4ed(rd, rs1, rs2, bs)`
9529///
9530/// # Arguments
9531/// - `rd` — Destination register.
9532/// - `rs1` — Source register.
9533/// - `rs2` — Source register.
9534/// - `bs` — Immediate encoding value.
9535pub trait Sm4EdEmitter<T0, T1, T2, T3> {
9536    fn sm4ed(&mut self, rd: T0, rs1: T1, rs2: T2, bs: T3);
9537}
9538
9539/// RISC-V `sm4ks` instruction.
9540///
9541/// # Forms
9542/// Assembly: `sm4ks xd, xs1, xs2, bs`
9543/// Rust: `sm4ks(rd, rs1, rs2, bs)`
9544///
9545/// # Arguments
9546/// - `rd` — Destination register.
9547/// - `rs1` — Source register.
9548/// - `rs2` — Source register.
9549/// - `bs` — Immediate encoding value.
9550pub trait Sm4KsEmitter<T0, T1, T2, T3> {
9551    fn sm4ks(&mut self, rd: T0, rs1: T1, rs2: T2, bs: T3);
9552}
9553
9554/// RISC-V `snez` instruction.
9555///
9556/// # Forms
9557/// Assembly: `snez rd rs2`
9558/// Rust: `snez(rd, rs2)`
9559///
9560/// # Arguments
9561/// - `rd` — Destination register.
9562/// - `rs2` — Source register.
9563pub trait SnezEmitter<T0, T1> {
9564    fn snez(&mut self, rd: T0, rs2: T1);
9565}
9566
9567/// Shift right arithmetic
9568///
9569/// Arithmetic shift the value in `rs1` right by the value in the lower 5 bits of `rs2`, and store the result in `rd`.
9570///
9571/// # Forms
9572/// Assembly: `sra xd, xs1, xs2`
9573/// Rust: `sra(rd, rs1, rs2)`
9574///
9575/// # Arguments
9576/// - `rd` — Destination register.
9577/// - `rs1` — Source register.
9578/// - `rs2` — Source register.
9579pub trait SraEmitter<T0, T1, T2> {
9580    fn sra(&mut self, rd: T0, rs1: T1, rs2: T2);
9581}
9582
9583/// Shift right arithmetic immediate
9584///
9585/// Arithmetic shift (the original sign bit is copied into the vacated upper bits) the
9586/// value in rs1 right by shamt, and store the result in rd.
9587///
9588/// # Forms
9589/// Assembly: `srai xd, xs1, shamt`
9590/// Rust: `srai(rd, rs1, shamtd)`
9591///
9592/// # Arguments
9593/// - `rd` — Destination register.
9594/// - `rs1` — Source register.
9595/// - `shamtd` — Immediate encoding value.
9596pub trait SraiEmitter<T0, T1, T2> {
9597    fn srai(&mut self, rd: T0, rs1: T1, shamtd: T2);
9598}
9599
9600/// Shift right arithmetic immediate
9601///
9602/// Arithmetic shift (the original sign bit is copied into the vacated upper bits) the
9603/// value in rs1 right by shamt, and store the result in rd.
9604///
9605/// # Forms
9606/// Assembly: `srai.rv32 xd, xs1, shamt`
9607/// Rust: `srai_rv32(rd, rs1, shamtw)`
9608///
9609/// # Arguments
9610/// - `rd` — Destination register.
9611/// - `rs1` — Source register.
9612/// - `shamtw` — Immediate encoding value.
9613pub trait SraiRv32Emitter<T0, T1, T2> {
9614    fn srai_rv32(&mut self, rd: T0, rs1: T1, shamtw: T2);
9615}
9616
9617/// Shift right arithmetic immediate word
9618///
9619/// Arithmetic shift (the original sign bit is copied into the vacated upper bits) the
9620/// 32-bit value in rs1 right by shamt, and store the sign-extended result in rd.
9621///
9622/// # Forms
9623/// Assembly: `sraiw xd, xs1, shamt`
9624/// Rust: `sraiw(rd, rs1, shamtw)`
9625///
9626/// # Arguments
9627/// - `rd` — Destination register.
9628/// - `rs1` — Source register.
9629/// - `shamtw` — Immediate encoding value.
9630pub trait SraiwEmitter<T0, T1, T2> {
9631    fn sraiw(&mut self, rd: T0, rs1: T1, shamtw: T2);
9632}
9633
9634/// Shift right arithmetic word
9635///
9636/// Arithmetic shift the 32-bit value in `rs1` right by the value in the lower 5 bits of `rs2`, and store the sign-extended result in `rd`.
9637///
9638/// # Forms
9639/// Assembly: `sraw xd, xs1, xs2`
9640/// Rust: `sraw(rd, rs1, rs2)`
9641///
9642/// # Arguments
9643/// - `rd` — Destination register.
9644/// - `rs1` — Source register.
9645/// - `rs2` — Source register.
9646pub trait SrawEmitter<T0, T1, T2> {
9647    fn sraw(&mut self, rd: T0, rs1: T1, rs2: T2);
9648}
9649
9650/// Supervisor Exception Return
9651///
9652/// Returns from an exception.
9653///
9654/// When `sret` is allowed to execute, its behavior depends on whether or not the current privilege
9655/// mode is virtualized.
9656///
9657/// *When the current privilege mode is (H)S-mode or M-mode*
9658///
9659/// `sret` sets  `hstatus.HPV` = 0, `mstatus.SPP` = 0,
9660/// `mstatus.SIE` = `mstatus.SPIE`, and `mstatus.SPIE` = 1,
9661/// changes the privilege mode according to the table below,
9662/// and then jumps to the address in `sepc`.
9663///
9664/// .Next privilege mode following an `sret` in (H)S-mode or M-mode
9665/// \[%autowidth\]
9666/// |===
9667/// | \[.rotate\]#`mstatus.SPP`# | \[.rotate\]#`hstatus.SPV`# .&gt;| Mode after `sret`
9668///
9669/// | 0 | 0 | U-mode
9670/// | 0 | 1 | VU-mode
9671/// | 1 | 0 | (H)S-mode
9672/// | 1 | 1 | VS-mode
9673/// |===
9674///
9675/// *When the current privilege mode is VS-mode*
9676///
9677/// `sret` sets
9678/// `vsstatus.SPP` = 0, `vsstatus.SIE` = `vstatus.SPIE`, and `vsstatus.SPIE` = 1,
9679/// changes the privilege mode according to the table below,
9680/// and then jumps to the address in `vsepc`.
9681///
9682/// .Next privilege mode following an `sret` in (H)S-mode or M-mode
9683/// \[%autowidth\]
9684/// |===
9685/// | \[.rotate\]#`vsstatus.SPP`# .&gt;| Mode after `sret`
9686///
9687/// | 0 | VU-mode
9688/// | 1 | VS-mode
9689/// |===
9690///
9691/// # Forms
9692/// Assembly: `sret ""`
9693/// Rust: `sret()`
9694///
9695/// # Arguments
9696pub trait SretEmitter {
9697    fn sret(&mut self);
9698}
9699
9700/// Shift right logical
9701///
9702/// Logical shift the value in `rs1` right by the value in the lower bits of `rs2`, and store the result in `rd`.
9703///
9704/// # Forms
9705/// Assembly: `srl xd, xs1, xs2`
9706/// Rust: `srl(rd, rs1, rs2)`
9707///
9708/// # Arguments
9709/// - `rd` — Destination register.
9710/// - `rs1` — Source register.
9711/// - `rs2` — Source register.
9712pub trait SrlEmitter<T0, T1, T2> {
9713    fn srl(&mut self, rd: T0, rs1: T1, rs2: T2);
9714}
9715
9716/// Shift right logical immediate
9717///
9718/// Shift the value in rs1 right by shamt, and store the result in rd
9719///
9720/// # Forms
9721/// Assembly: `srli xd, xs1, shamt`
9722/// Rust: `srli(rd, rs1, shamtd)`
9723///
9724/// # Arguments
9725/// - `rd` — Destination register.
9726/// - `rs1` — Source register.
9727/// - `shamtd` — Immediate encoding value.
9728pub trait SrliEmitter<T0, T1, T2> {
9729    fn srli(&mut self, rd: T0, rs1: T1, shamtd: T2);
9730}
9731
9732/// Shift right logical immediate
9733///
9734/// Shift the value in rs1 right by shamt, and store the result in rd
9735///
9736/// # Forms
9737/// Assembly: `srli.rv32 xd, xs1, shamt`
9738/// Rust: `srli_rv32(rd, rs1, shamtw)`
9739///
9740/// # Arguments
9741/// - `rd` — Destination register.
9742/// - `rs1` — Source register.
9743/// - `shamtw` — Immediate encoding value.
9744pub trait SrliRv32Emitter<T0, T1, T2> {
9745    fn srli_rv32(&mut self, rd: T0, rs1: T1, shamtw: T2);
9746}
9747
9748/// Shift right logical immediate word
9749///
9750/// Shift the 32-bit value in rs1 right by shamt, and store the sign-extended result in rd
9751///
9752/// # Forms
9753/// Assembly: `srliw xd, xs1, shamt`
9754/// Rust: `srliw(rd, rs1, shamtw)`
9755///
9756/// # Arguments
9757/// - `rd` — Destination register.
9758/// - `rs1` — Source register.
9759/// - `shamtw` — Immediate encoding value.
9760pub trait SrliwEmitter<T0, T1, T2> {
9761    fn srliw(&mut self, rd: T0, rs1: T1, shamtw: T2);
9762}
9763
9764/// Shift right logical word
9765///
9766/// Logical shift the 32-bit value in `rs1` right by the value in the lower 5 bits of `rs2`, and store the sign-extended result in `rd`.
9767///
9768/// # Forms
9769/// Assembly: `srlw xd, xs1, xs2`
9770/// Rust: `srlw(rd, rs1, rs2)`
9771///
9772/// # Arguments
9773/// - `rd` — Destination register.
9774/// - `rs1` — Source register.
9775/// - `rs2` — Source register.
9776pub trait SrlwEmitter<T0, T1, T2> {
9777    fn srlw(&mut self, rd: T0, rs1: T1, rs2: T2);
9778}
9779
9780/// RISC-V `ssamoswap.d` instruction.
9781///
9782/// # Forms
9783/// Assembly: `ssamoswap.d xd, xs1, xs2, aq, rl`
9784/// Rust: `ssamoswap_d(rd, rs1, rs2, aq, rl)`
9785///
9786/// # Arguments
9787/// - `rd` — Destination register.
9788/// - `rs1` — Memory base register.
9789/// - `rs2` — Source register.
9790/// - `aq` — Acquire-order bit.
9791/// - `rl` — Release-order bit; retained for the existing emitter API.
9792pub trait SsamoswapDEmitter<T0, T1, T2, T3, T4> {
9793    fn ssamoswap_d(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
9794}
9795
9796/// RISC-V `ssamoswap.w` instruction.
9797///
9798/// # Forms
9799/// Assembly: `ssamoswap.w xd, xs1, xs2, aq, rl`
9800/// Rust: `ssamoswap_w(rd, rs1, rs2, aq, rl)`
9801///
9802/// # Arguments
9803/// - `rd` — Destination register.
9804/// - `rs1` — Memory base register.
9805/// - `rs2` — Source register.
9806/// - `aq` — Acquire-order bit.
9807/// - `rl` — Release-order bit; retained for the existing emitter API.
9808pub trait SsamoswapWEmitter<T0, T1, T2, T3, T4> {
9809    fn ssamoswap_w(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4);
9810}
9811
9812/// RISC-V `sspopchk.x1` instruction.
9813///
9814/// # Forms
9815/// Assembly: `sspopchk.x1 sspopchk_x1`
9816/// Rust: `sspopchk_x1()`
9817///
9818/// # Arguments
9819pub trait SspopchkX1Emitter {
9820    fn sspopchk_x1(&mut self);
9821}
9822
9823/// RISC-V `sspopchk.x5` instruction.
9824///
9825/// # Forms
9826/// Assembly: `sspopchk.x5 sspopchk_x5`
9827/// Rust: `sspopchk_x5()`
9828///
9829/// # Arguments
9830pub trait SspopchkX5Emitter {
9831    fn sspopchk_x5(&mut self);
9832}
9833
9834/// RISC-V `sspush.x1` instruction.
9835///
9836/// # Forms
9837/// Assembly: `sspush.x1 sspush_x1`
9838/// Rust: `sspush_x1()`
9839///
9840/// # Arguments
9841pub trait SspushX1Emitter {
9842    fn sspush_x1(&mut self);
9843}
9844
9845/// RISC-V `sspush.x5` instruction.
9846///
9847/// # Forms
9848/// Assembly: `sspush.x5 sspush_x5`
9849/// Rust: `sspush_x5()`
9850///
9851/// # Arguments
9852pub trait SspushX5Emitter {
9853    fn sspush_x5(&mut self);
9854}
9855
9856/// RISC-V `ssrdp` instruction.
9857///
9858/// # Forms
9859/// Assembly: `ssrdp xd`
9860/// Rust: `ssrdp(rd)`
9861///
9862/// # Arguments
9863/// - `rd` — Destination register.
9864pub trait SsrdpEmitter<T0> {
9865    fn ssrdp(&mut self, rd: T0);
9866}
9867
9868/// Subtract
9869///
9870/// Subtract the value in rs2 from rs1, and store the result in rd
9871///
9872/// # Forms
9873/// Assembly: `sub xd, xs1, xs2`
9874/// Rust: `sub(rd, rs1, rs2)`
9875///
9876/// # Arguments
9877/// - `rd` — Destination register.
9878/// - `rs1` — Source register.
9879/// - `rs2` — Source register.
9880pub trait SubEmitter<T0, T1, T2> {
9881    fn sub(&mut self, rd: T0, rs1: T1, rs2: T2);
9882}
9883
9884/// Subtract word
9885///
9886/// Subtract the 32-bit values in rs2 from rs1, and store the sign-extended result in rd
9887///
9888/// # Forms
9889/// Assembly: `subw xd, xs1, xs2`
9890/// Rust: `subw(rd, rs1, rs2)`
9891///
9892/// # Arguments
9893/// - `rd` — Destination register.
9894/// - `rs1` — Source register.
9895/// - `rs2` — Source register.
9896pub trait SubwEmitter<T0, T1, T2> {
9897    fn subw(&mut self, rd: T0, rs1: T1, rs2: T2);
9898}
9899
9900/// Store word
9901///
9902/// Store 32 bits of data from register `rs2` to an
9903/// address formed by adding `rs1` to a signed offset.
9904///
9905/// # Forms
9906/// Assembly: `sw xs2, imm(xs1)`
9907/// Rust: `sw(rs1, rs2, imm)`
9908///
9909/// # Arguments
9910/// - `rs1` — Memory base register.
9911/// - `rs2` — Source register.
9912/// - `imm` — Immediate encoding value.
9913pub trait SwEmitter<T0, T1, T2> {
9914    fn sw(&mut self, rs1: T0, rs2: T1, imm: T2);
9915}
9916
9917/// Bit deinterleave
9918///
9919/// This instruction gathers bits from the high and low halves of the source word into odd/even bit
9920/// positions in the destination word. It is the inverse of the zip instruction. This instruction is
9921/// available only on RV32.
9922///
9923/// # Forms
9924/// Assembly: `unzip xd, xs1`
9925/// Rust: `unzip(rd, rs1)`
9926///
9927/// # Arguments
9928/// - `rd` — Destination register.
9929/// - `rs1` — Source register.
9930pub trait UnzipEmitter<T0, T1> {
9931    fn unzip(&mut self, rd: T0, rs1: T1);
9932}
9933
9934/// RISC-V `vaadd.vv` instruction.
9935///
9936/// # Forms
9937/// Assembly: `vaadd.vv vm, vs2, vs1, vd`
9938/// Rust: `vaadd_vv(vd, vs1, vs2, vm)`
9939///
9940/// # Arguments
9941/// - `vd` — Vector register operand.
9942/// - `vs1` — Vector register operand.
9943/// - `vs2` — Vector register operand.
9944/// - `vm` — Vector mask control.
9945pub trait VaaddVvEmitter<T0, T1, T2, T3> {
9946    fn vaadd_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
9947}
9948
9949/// RISC-V `vaadd.vx` instruction.
9950///
9951/// # Forms
9952/// Assembly: `vaadd.vx vm, vs2, xs1, vd`
9953/// Rust: `vaadd_vx(vd, vs2, rs1, vm)`
9954///
9955/// # Arguments
9956/// - `vd` — Vector register operand.
9957/// - `vs2` — Vector register operand.
9958/// - `rs1` — Source register.
9959/// - `vm` — Vector mask control.
9960pub trait VaaddVxEmitter<T0, T1, T2, T3> {
9961    fn vaadd_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
9962}
9963
9964/// RISC-V `vaaddu.vv` instruction.
9965///
9966/// # Forms
9967/// Assembly: `vaaddu.vv vm, vs2, vs1, vd`
9968/// Rust: `vaaddu_vv(vd, vs1, vs2, vm)`
9969///
9970/// # Arguments
9971/// - `vd` — Vector register operand.
9972/// - `vs1` — Vector register operand.
9973/// - `vs2` — Vector register operand.
9974/// - `vm` — Vector mask control.
9975pub trait VaadduVvEmitter<T0, T1, T2, T3> {
9976    fn vaaddu_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
9977}
9978
9979/// RISC-V `vaaddu.vx` instruction.
9980///
9981/// # Forms
9982/// Assembly: `vaaddu.vx vm, vs2, xs1, vd`
9983/// Rust: `vaaddu_vx(vd, vs2, rs1, vm)`
9984///
9985/// # Arguments
9986/// - `vd` — Vector register operand.
9987/// - `vs2` — Vector register operand.
9988/// - `rs1` — Source register.
9989/// - `vm` — Vector mask control.
9990pub trait VaadduVxEmitter<T0, T1, T2, T3> {
9991    fn vaaddu_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
9992}
9993
9994/// RISC-V `vadc.vim` instruction.
9995///
9996/// # Forms
9997/// Assembly: `vadc.vim vs2, vd, imm`
9998/// Rust: `vadc_vim(vd, vs2, simm5)`
9999///
10000/// # Arguments
10001/// - `vd` — Vector register operand.
10002/// - `vs2` — Vector register operand.
10003/// - `simm5` — Immediate encoding value.
10004pub trait VadcVimEmitter<T0, T1, T2> {
10005    fn vadc_vim(&mut self, vd: T0, vs2: T1, simm5: T2);
10006}
10007
10008/// RISC-V `vadc.vvm` instruction.
10009///
10010/// # Forms
10011/// Assembly: `vadc.vvm vs2, vs1, vd`
10012/// Rust: `vadc_vvm(vd, vs1, vs2)`
10013///
10014/// # Arguments
10015/// - `vd` — Vector register operand.
10016/// - `vs1` — Vector register operand.
10017/// - `vs2` — Vector register operand.
10018pub trait VadcVvmEmitter<T0, T1, T2> {
10019    fn vadc_vvm(&mut self, vd: T0, vs1: T1, vs2: T2);
10020}
10021
10022/// RISC-V `vadc.vxm` instruction.
10023///
10024/// # Forms
10025/// Assembly: `vadc.vxm vs2, xs1, vd`
10026/// Rust: `vadc_vxm(vd, rs1, vs2)`
10027///
10028/// # Arguments
10029/// - `vd` — Vector register operand.
10030/// - `rs1` — Source register.
10031/// - `vs2` — Vector register operand.
10032pub trait VadcVxmEmitter<T0, T1, T2> {
10033    fn vadc_vxm(&mut self, vd: T0, rs1: T1, vs2: T2);
10034}
10035
10036/// RISC-V `vadd.vi` instruction.
10037///
10038/// # Forms
10039/// Assembly: `vadd.vi vm, vs2, vd, imm`
10040/// Rust: `vadd_vi(vd, vs2, simm5, vm)`
10041///
10042/// # Arguments
10043/// - `vd` — Vector register operand.
10044/// - `vs2` — Vector register operand.
10045/// - `simm5` — Immediate encoding value.
10046/// - `vm` — Vector mask control.
10047pub trait VaddViEmitter<T0, T1, T2, T3> {
10048    fn vadd_vi(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3);
10049}
10050
10051/// RISC-V `vadd.vv` instruction.
10052///
10053/// # Forms
10054/// Assembly: `vadd.vv vm, vs2, vs1, vd`
10055/// Rust: `vadd_vv(vd, vs1, vs2, vm)`
10056///
10057/// # Arguments
10058/// - `vd` — Vector register operand.
10059/// - `vs1` — Vector register operand.
10060/// - `vs2` — Vector register operand.
10061/// - `vm` — Vector mask control.
10062pub trait VaddVvEmitter<T0, T1, T2, T3> {
10063    fn vadd_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
10064}
10065
10066/// RISC-V `vadd.vx` instruction.
10067///
10068/// # Forms
10069/// Assembly: `vadd.vx vm, vs2, xs1, vd`
10070/// Rust: `vadd_vx(vd, vs2, rs1, vm)`
10071///
10072/// # Arguments
10073/// - `vd` — Vector register operand.
10074/// - `vs2` — Vector register operand.
10075/// - `rs1` — Source register.
10076/// - `vm` — Vector mask control.
10077pub trait VaddVxEmitter<T0, T1, T2, T3> {
10078    fn vadd_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
10079}
10080
10081/// RISC-V `vaesdf.vs` instruction.
10082///
10083/// # Forms
10084/// Assembly: `vaesdf.vs vs2, vd`
10085/// Rust: `vaesdf_vs(vd, vs2)`
10086///
10087/// # Arguments
10088/// - `vd` — Vector register operand.
10089/// - `vs2` — Vector register operand.
10090pub trait VaesdfVsEmitter<T0, T1> {
10091    fn vaesdf_vs(&mut self, vd: T0, vs2: T1);
10092}
10093
10094/// RISC-V `vaesdf.vv` instruction.
10095///
10096/// # Forms
10097/// Assembly: `vaesdf.vv vs2, vd`
10098/// Rust: `vaesdf_vv(vd, vs2)`
10099///
10100/// # Arguments
10101/// - `vd` — Vector register operand.
10102/// - `vs2` — Vector register operand.
10103pub trait VaesdfVvEmitter<T0, T1> {
10104    fn vaesdf_vv(&mut self, vd: T0, vs2: T1);
10105}
10106
10107/// RISC-V `vaesdm.vs` instruction.
10108///
10109/// # Forms
10110/// Assembly: `vaesdm.vs vs2, vd`
10111/// Rust: `vaesdm_vs(vd, vs2)`
10112///
10113/// # Arguments
10114/// - `vd` — Vector register operand.
10115/// - `vs2` — Vector register operand.
10116pub trait VaesdmVsEmitter<T0, T1> {
10117    fn vaesdm_vs(&mut self, vd: T0, vs2: T1);
10118}
10119
10120/// RISC-V `vaesdm.vv` instruction.
10121///
10122/// # Forms
10123/// Assembly: `vaesdm.vv vs2, vd`
10124/// Rust: `vaesdm_vv(vd, vs2)`
10125///
10126/// # Arguments
10127/// - `vd` — Vector register operand.
10128/// - `vs2` — Vector register operand.
10129pub trait VaesdmVvEmitter<T0, T1> {
10130    fn vaesdm_vv(&mut self, vd: T0, vs2: T1);
10131}
10132
10133/// RISC-V `vaesef.vs` instruction.
10134///
10135/// # Forms
10136/// Assembly: `vaesef.vs vs2, vd`
10137/// Rust: `vaesef_vs(vd, vs2)`
10138///
10139/// # Arguments
10140/// - `vd` — Vector register operand.
10141/// - `vs2` — Vector register operand.
10142pub trait VaesefVsEmitter<T0, T1> {
10143    fn vaesef_vs(&mut self, vd: T0, vs2: T1);
10144}
10145
10146/// RISC-V `vaesef.vv` instruction.
10147///
10148/// # Forms
10149/// Assembly: `vaesef.vv vs2, vd`
10150/// Rust: `vaesef_vv(vd, vs2)`
10151///
10152/// # Arguments
10153/// - `vd` — Vector register operand.
10154/// - `vs2` — Vector register operand.
10155pub trait VaesefVvEmitter<T0, T1> {
10156    fn vaesef_vv(&mut self, vd: T0, vs2: T1);
10157}
10158
10159/// RISC-V `vaesem.vs` instruction.
10160///
10161/// # Forms
10162/// Assembly: `vaesem.vs vs2, vd`
10163/// Rust: `vaesem_vs(vd, vs2)`
10164///
10165/// # Arguments
10166/// - `vd` — Vector register operand.
10167/// - `vs2` — Vector register operand.
10168pub trait VaesemVsEmitter<T0, T1> {
10169    fn vaesem_vs(&mut self, vd: T0, vs2: T1);
10170}
10171
10172/// RISC-V `vaesem.vv` instruction.
10173///
10174/// # Forms
10175/// Assembly: `vaesem.vv vs2, vd`
10176/// Rust: `vaesem_vv(vd, vs2)`
10177///
10178/// # Arguments
10179/// - `vd` — Vector register operand.
10180/// - `vs2` — Vector register operand.
10181pub trait VaesemVvEmitter<T0, T1> {
10182    fn vaesem_vv(&mut self, vd: T0, vs2: T1);
10183}
10184
10185/// RISC-V `vaeskf1.vi` instruction.
10186///
10187/// # Forms
10188/// Assembly: `vaeskf1.vi vs2, vd, imm`
10189/// Rust: `vaeskf1_vi(vd, vs2, zimm5)`
10190///
10191/// # Arguments
10192/// - `vd` — Vector register operand.
10193/// - `vs2` — Vector register operand.
10194/// - `zimm5` — Immediate encoding value.
10195pub trait Vaeskf1ViEmitter<T0, T1, T2> {
10196    fn vaeskf1_vi(&mut self, vd: T0, vs2: T1, zimm5: T2);
10197}
10198
10199/// RISC-V `vaeskf2.vi` instruction.
10200///
10201/// # Forms
10202/// Assembly: `vaeskf2.vi vs2, vd, imm`
10203/// Rust: `vaeskf2_vi(vd, vs2, zimm5)`
10204///
10205/// # Arguments
10206/// - `vd` — Vector register operand.
10207/// - `vs2` — Vector register operand.
10208/// - `zimm5` — Immediate encoding value.
10209pub trait Vaeskf2ViEmitter<T0, T1, T2> {
10210    fn vaeskf2_vi(&mut self, vd: T0, vs2: T1, zimm5: T2);
10211}
10212
10213/// Vector AES round zero
10214///
10215/// # Forms
10216/// Assembly: `vaesz.vs vs2, vd`
10217/// Rust: `vaesz_vs(vd, vs2)`
10218///
10219/// # Arguments
10220/// - `vd` — Vector register operand.
10221/// - `vs2` — Vector register operand.
10222pub trait VaeszVsEmitter<T0, T1> {
10223    fn vaesz_vs(&mut self, vd: T0, vs2: T1);
10224}
10225
10226/// RISC-V `vand.vi` instruction.
10227///
10228/// # Forms
10229/// Assembly: `vand.vi vm, vs2, vd, imm`
10230/// Rust: `vand_vi(vd, vs2, simm5, vm)`
10231///
10232/// # Arguments
10233/// - `vd` — Vector register operand.
10234/// - `vs2` — Vector register operand.
10235/// - `simm5` — Immediate encoding value.
10236/// - `vm` — Vector mask control.
10237pub trait VandViEmitter<T0, T1, T2, T3> {
10238    fn vand_vi(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3);
10239}
10240
10241/// RISC-V `vand.vv` instruction.
10242///
10243/// # Forms
10244/// Assembly: `vand.vv vm, vs2, vs1, vd`
10245/// Rust: `vand_vv(vd, vs1, vs2, vm)`
10246///
10247/// # Arguments
10248/// - `vd` — Vector register operand.
10249/// - `vs1` — Vector register operand.
10250/// - `vs2` — Vector register operand.
10251/// - `vm` — Vector mask control.
10252pub trait VandVvEmitter<T0, T1, T2, T3> {
10253    fn vand_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
10254}
10255
10256/// RISC-V `vand.vx` instruction.
10257///
10258/// # Forms
10259/// Assembly: `vand.vx vm, vs2, xs1, vd`
10260/// Rust: `vand_vx(vd, vs2, rs1, vm)`
10261///
10262/// # Arguments
10263/// - `vd` — Vector register operand.
10264/// - `vs2` — Vector register operand.
10265/// - `rs1` — Source register.
10266/// - `vm` — Vector mask control.
10267pub trait VandVxEmitter<T0, T1, T2, T3> {
10268    fn vand_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
10269}
10270
10271/// RISC-V `vandn.vv` instruction.
10272///
10273/// # Forms
10274/// Assembly: `vandn.vv vm, vs2, vs1, vd`
10275/// Rust: `vandn_vv(vd, vs1, vs2, vm)`
10276///
10277/// # Arguments
10278/// - `vd` — Vector register operand.
10279/// - `vs1` — Vector register operand.
10280/// - `vs2` — Vector register operand.
10281/// - `vm` — Vector mask control.
10282pub trait VandnVvEmitter<T0, T1, T2, T3> {
10283    fn vandn_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
10284}
10285
10286/// RISC-V `vandn.vx` instruction.
10287///
10288/// # Forms
10289/// Assembly: `vandn.vx vm, vs2, xs1, vd`
10290/// Rust: `vandn_vx(vd, vs2, rs1, vm)`
10291///
10292/// # Arguments
10293/// - `vd` — Vector register operand.
10294/// - `vs2` — Vector register operand.
10295/// - `rs1` — Source register.
10296/// - `vm` — Vector mask control.
10297pub trait VandnVxEmitter<T0, T1, T2, T3> {
10298    fn vandn_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
10299}
10300
10301/// RISC-V `vasub.vv` instruction.
10302///
10303/// # Forms
10304/// Assembly: `vasub.vv vm, vs2, vs1, vd`
10305/// Rust: `vasub_vv(vd, vs1, vs2, vm)`
10306///
10307/// # Arguments
10308/// - `vd` — Vector register operand.
10309/// - `vs1` — Vector register operand.
10310/// - `vs2` — Vector register operand.
10311/// - `vm` — Vector mask control.
10312pub trait VasubVvEmitter<T0, T1, T2, T3> {
10313    fn vasub_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
10314}
10315
10316/// RISC-V `vasub.vx` instruction.
10317///
10318/// # Forms
10319/// Assembly: `vasub.vx vm, vs2, xs1, vd`
10320/// Rust: `vasub_vx(vd, vs2, rs1, vm)`
10321///
10322/// # Arguments
10323/// - `vd` — Vector register operand.
10324/// - `vs2` — Vector register operand.
10325/// - `rs1` — Source register.
10326/// - `vm` — Vector mask control.
10327pub trait VasubVxEmitter<T0, T1, T2, T3> {
10328    fn vasub_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
10329}
10330
10331/// RISC-V `vasubu.vv` instruction.
10332///
10333/// # Forms
10334/// Assembly: `vasubu.vv vm, vs2, vs1, vd`
10335/// Rust: `vasubu_vv(vd, vs1, vs2, vm)`
10336///
10337/// # Arguments
10338/// - `vd` — Vector register operand.
10339/// - `vs1` — Vector register operand.
10340/// - `vs2` — Vector register operand.
10341/// - `vm` — Vector mask control.
10342pub trait VasubuVvEmitter<T0, T1, T2, T3> {
10343    fn vasubu_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
10344}
10345
10346/// RISC-V `vasubu.vx` instruction.
10347///
10348/// # Forms
10349/// Assembly: `vasubu.vx vm, vs2, xs1, vd`
10350/// Rust: `vasubu_vx(vd, vs2, rs1, vm)`
10351///
10352/// # Arguments
10353/// - `vd` — Vector register operand.
10354/// - `vs2` — Vector register operand.
10355/// - `rs1` — Source register.
10356/// - `vm` — Vector mask control.
10357pub trait VasubuVxEmitter<T0, T1, T2, T3> {
10358    fn vasubu_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
10359}
10360
10361/// RISC-V `vbrev8.v` instruction.
10362///
10363/// # Forms
10364/// Assembly: `vbrev8.v vm, vs2, vd`
10365/// Rust: `vbrev8_v(vd, vs2, vm)`
10366///
10367/// # Arguments
10368/// - `vd` — Vector register operand.
10369/// - `vs2` — Vector register operand.
10370/// - `vm` — Vector mask control.
10371pub trait Vbrev8VEmitter<T0, T1, T2> {
10372    fn vbrev8_v(&mut self, vd: T0, vs2: T1, vm: T2);
10373}
10374
10375/// RISC-V `vbrev.v` instruction.
10376///
10377/// # Forms
10378/// Assembly: `vbrev.v vm, vs2, vd`
10379/// Rust: `vbrev_v(vd, vs2, vm)`
10380///
10381/// # Arguments
10382/// - `vd` — Vector register operand.
10383/// - `vs2` — Vector register operand.
10384/// - `vm` — Vector mask control.
10385pub trait VbrevVEmitter<T0, T1, T2> {
10386    fn vbrev_v(&mut self, vd: T0, vs2: T1, vm: T2);
10387}
10388
10389/// RISC-V `vclmul.vv` instruction.
10390///
10391/// # Forms
10392/// Assembly: `vclmul.vv vm, vs2, vs1, vd`
10393/// Rust: `vclmul_vv(vd, vs1, vs2, vm)`
10394///
10395/// # Arguments
10396/// - `vd` — Vector register operand.
10397/// - `vs1` — Vector register operand.
10398/// - `vs2` — Vector register operand.
10399/// - `vm` — Vector mask control.
10400pub trait VclmulVvEmitter<T0, T1, T2, T3> {
10401    fn vclmul_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
10402}
10403
10404/// RISC-V `vclmul.vx` instruction.
10405///
10406/// # Forms
10407/// Assembly: `vclmul.vx vm, vs2, xs1, vd`
10408/// Rust: `vclmul_vx(vd, vs2, rs1, vm)`
10409///
10410/// # Arguments
10411/// - `vd` — Vector register operand.
10412/// - `vs2` — Vector register operand.
10413/// - `rs1` — Source register.
10414/// - `vm` — Vector mask control.
10415pub trait VclmulVxEmitter<T0, T1, T2, T3> {
10416    fn vclmul_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
10417}
10418
10419/// RISC-V `vclmulh.vv` instruction.
10420///
10421/// # Forms
10422/// Assembly: `vclmulh.vv vm, vs2, vs1, vd`
10423/// Rust: `vclmulh_vv(vd, vs1, vs2, vm)`
10424///
10425/// # Arguments
10426/// - `vd` — Vector register operand.
10427/// - `vs1` — Vector register operand.
10428/// - `vs2` — Vector register operand.
10429/// - `vm` — Vector mask control.
10430pub trait VclmulhVvEmitter<T0, T1, T2, T3> {
10431    fn vclmulh_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
10432}
10433
10434/// RISC-V `vclmulh.vx` instruction.
10435///
10436/// # Forms
10437/// Assembly: `vclmulh.vx vm, vs2, xs1, vd`
10438/// Rust: `vclmulh_vx(vd, vs2, rs1, vm)`
10439///
10440/// # Arguments
10441/// - `vd` — Vector register operand.
10442/// - `vs2` — Vector register operand.
10443/// - `rs1` — Source register.
10444/// - `vm` — Vector mask control.
10445pub trait VclmulhVxEmitter<T0, T1, T2, T3> {
10446    fn vclmulh_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
10447}
10448
10449/// RISC-V `vclz.v` instruction.
10450///
10451/// # Forms
10452/// Assembly: `vclz.v vm, vs2, vd`
10453/// Rust: `vclz_v(vd, vs2, vm)`
10454///
10455/// # Arguments
10456/// - `vd` — Vector register operand.
10457/// - `vs2` — Vector register operand.
10458/// - `vm` — Vector mask control.
10459pub trait VclzVEmitter<T0, T1, T2> {
10460    fn vclz_v(&mut self, vd: T0, vs2: T1, vm: T2);
10461}
10462
10463/// RISC-V `vcompress.vm` instruction.
10464///
10465/// # Forms
10466/// Assembly: `vcompress.vm vs2, vs1, vd`
10467/// Rust: `vcompress_vm(vd, vs1, vs2)`
10468///
10469/// # Arguments
10470/// - `vd` — Vector register operand.
10471/// - `vs1` — Vector register operand.
10472/// - `vs2` — Vector register operand.
10473pub trait VcompressVmEmitter<T0, T1, T2> {
10474    fn vcompress_vm(&mut self, vd: T0, vs1: T1, vs2: T2);
10475}
10476
10477/// RISC-V `vcpop.m` instruction.
10478///
10479/// # Forms
10480/// Assembly: `vcpop.m vm, vs2, xd`
10481/// Rust: `vcpop_m(rd, vs2, vm)`
10482///
10483/// # Arguments
10484/// - `rd` — Destination register.
10485/// - `vs2` — Vector register operand.
10486/// - `vm` — Vector mask control.
10487pub trait VcpopMEmitter<T0, T1, T2> {
10488    fn vcpop_m(&mut self, rd: T0, vs2: T1, vm: T2);
10489}
10490
10491/// RISC-V `vcpop.v` instruction.
10492///
10493/// # Forms
10494/// Assembly: `vcpop.v vm, vs2, vd`
10495/// Rust: `vcpop_v(vd, vs2, vm)`
10496///
10497/// # Arguments
10498/// - `vd` — Vector register operand.
10499/// - `vs2` — Vector register operand.
10500/// - `vm` — Vector mask control.
10501pub trait VcpopVEmitter<T0, T1, T2> {
10502    fn vcpop_v(&mut self, vd: T0, vs2: T1, vm: T2);
10503}
10504
10505/// RISC-V `vctz.v` instruction.
10506///
10507/// # Forms
10508/// Assembly: `vctz.v vm, vs2, vd`
10509/// Rust: `vctz_v(vd, vs2, vm)`
10510///
10511/// # Arguments
10512/// - `vd` — Vector register operand.
10513/// - `vs2` — Vector register operand.
10514/// - `vm` — Vector mask control.
10515pub trait VctzVEmitter<T0, T1, T2> {
10516    fn vctz_v(&mut self, vd: T0, vs2: T1, vm: T2);
10517}
10518
10519/// RISC-V `vdiv.vv` instruction.
10520///
10521/// # Forms
10522/// Assembly: `vdiv.vv vm, vs2, vs1, vd`
10523/// Rust: `vdiv_vv(vd, vs1, vs2, vm)`
10524///
10525/// # Arguments
10526/// - `vd` — Vector register operand.
10527/// - `vs1` — Vector register operand.
10528/// - `vs2` — Vector register operand.
10529/// - `vm` — Vector mask control.
10530pub trait VdivVvEmitter<T0, T1, T2, T3> {
10531    fn vdiv_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
10532}
10533
10534/// RISC-V `vdiv.vx` instruction.
10535///
10536/// # Forms
10537/// Assembly: `vdiv.vx vm, vs2, xs1, vd`
10538/// Rust: `vdiv_vx(vd, vs2, rs1, vm)`
10539///
10540/// # Arguments
10541/// - `vd` — Vector register operand.
10542/// - `vs2` — Vector register operand.
10543/// - `rs1` — Source register.
10544/// - `vm` — Vector mask control.
10545pub trait VdivVxEmitter<T0, T1, T2, T3> {
10546    fn vdiv_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
10547}
10548
10549/// RISC-V `vdivu.vv` instruction.
10550///
10551/// # Forms
10552/// Assembly: `vdivu.vv vm, vs2, vs1, vd`
10553/// Rust: `vdivu_vv(vd, vs1, vs2, vm)`
10554///
10555/// # Arguments
10556/// - `vd` — Vector register operand.
10557/// - `vs1` — Vector register operand.
10558/// - `vs2` — Vector register operand.
10559/// - `vm` — Vector mask control.
10560pub trait VdivuVvEmitter<T0, T1, T2, T3> {
10561    fn vdivu_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
10562}
10563
10564/// RISC-V `vdivu.vx` instruction.
10565///
10566/// # Forms
10567/// Assembly: `vdivu.vx vm, vs2, xs1, vd`
10568/// Rust: `vdivu_vx(vd, vs2, rs1, vm)`
10569///
10570/// # Arguments
10571/// - `vd` — Vector register operand.
10572/// - `vs2` — Vector register operand.
10573/// - `rs1` — Source register.
10574/// - `vm` — Vector mask control.
10575pub trait VdivuVxEmitter<T0, T1, T2, T3> {
10576    fn vdivu_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
10577}
10578
10579/// RISC-V `vfadd.vf` instruction.
10580///
10581/// # Forms
10582/// Assembly: `vfadd.vf vm, vs2, xs1, vd`
10583/// Rust: `vfadd_vf(vd, vs2, rs1, vm)`
10584///
10585/// # Arguments
10586/// - `vd` — Vector register operand.
10587/// - `vs2` — Vector register operand.
10588/// - `rs1` — Source register.
10589/// - `vm` — Vector mask control.
10590pub trait VfaddVfEmitter<T0, T1, T2, T3> {
10591    fn vfadd_vf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
10592}
10593
10594/// RISC-V `vfadd.vv` instruction.
10595///
10596/// # Forms
10597/// Assembly: `vfadd.vv vm, vs2, vs1, vd`
10598/// Rust: `vfadd_vv(vd, vs1, vs2, vm)`
10599///
10600/// # Arguments
10601/// - `vd` — Vector register operand.
10602/// - `vs1` — Vector register operand.
10603/// - `vs2` — Vector register operand.
10604/// - `vm` — Vector mask control.
10605pub trait VfaddVvEmitter<T0, T1, T2, T3> {
10606    fn vfadd_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
10607}
10608
10609/// RISC-V `vfclass.v` instruction.
10610///
10611/// # Forms
10612/// Assembly: `vfclass.v vm, vs2, vd`
10613/// Rust: `vfclass_v(vd, vs2, vm)`
10614///
10615/// # Arguments
10616/// - `vd` — Vector register operand.
10617/// - `vs2` — Vector register operand.
10618/// - `vm` — Vector mask control.
10619pub trait VfclassVEmitter<T0, T1, T2> {
10620    fn vfclass_v(&mut self, vd: T0, vs2: T1, vm: T2);
10621}
10622
10623/// RISC-V `vfcvt.f.x.v` instruction.
10624///
10625/// # Forms
10626/// Assembly: `vfcvt.f.x.v vm, vs2, vd`
10627/// Rust: `vfcvt_f_x_v(vd, vs2, vm)`
10628///
10629/// # Arguments
10630/// - `vd` — Vector register operand.
10631/// - `vs2` — Vector register operand.
10632/// - `vm` — Vector mask control.
10633pub trait VfcvtFXVEmitter<T0, T1, T2> {
10634    fn vfcvt_f_x_v(&mut self, vd: T0, vs2: T1, vm: T2);
10635}
10636
10637/// RISC-V `vfcvt.f.xu.v` instruction.
10638///
10639/// # Forms
10640/// Assembly: `vfcvt.f.xu.v vm, vs2, vd`
10641/// Rust: `vfcvt_f_xu_v(vd, vs2, vm)`
10642///
10643/// # Arguments
10644/// - `vd` — Vector register operand.
10645/// - `vs2` — Vector register operand.
10646/// - `vm` — Vector mask control.
10647pub trait VfcvtFXuVEmitter<T0, T1, T2> {
10648    fn vfcvt_f_xu_v(&mut self, vd: T0, vs2: T1, vm: T2);
10649}
10650
10651/// RISC-V `vfcvt.rtz.x.f.v` instruction.
10652///
10653/// # Forms
10654/// Assembly: `vfcvt.rtz.x.f.v vm, vs2, vd`
10655/// Rust: `vfcvt_rtz_x_f_v(vd, vs2, vm)`
10656///
10657/// # Arguments
10658/// - `vd` — Vector register operand.
10659/// - `vs2` — Vector register operand.
10660/// - `vm` — Vector mask control.
10661pub trait VfcvtRtzXFVEmitter<T0, T1, T2> {
10662    fn vfcvt_rtz_x_f_v(&mut self, vd: T0, vs2: T1, vm: T2);
10663}
10664
10665/// RISC-V `vfcvt.rtz.xu.f.v` instruction.
10666///
10667/// # Forms
10668/// Assembly: `vfcvt.rtz.xu.f.v vm, vs2, vd`
10669/// Rust: `vfcvt_rtz_xu_f_v(vd, vs2, vm)`
10670///
10671/// # Arguments
10672/// - `vd` — Vector register operand.
10673/// - `vs2` — Vector register operand.
10674/// - `vm` — Vector mask control.
10675pub trait VfcvtRtzXuFVEmitter<T0, T1, T2> {
10676    fn vfcvt_rtz_xu_f_v(&mut self, vd: T0, vs2: T1, vm: T2);
10677}
10678
10679/// RISC-V `vfcvt.x.f.v` instruction.
10680///
10681/// # Forms
10682/// Assembly: `vfcvt.x.f.v vm, vs2, vd`
10683/// Rust: `vfcvt_x_f_v(vd, vs2, vm)`
10684///
10685/// # Arguments
10686/// - `vd` — Vector register operand.
10687/// - `vs2` — Vector register operand.
10688/// - `vm` — Vector mask control.
10689pub trait VfcvtXFVEmitter<T0, T1, T2> {
10690    fn vfcvt_x_f_v(&mut self, vd: T0, vs2: T1, vm: T2);
10691}
10692
10693/// RISC-V `vfcvt.xu.f.v` instruction.
10694///
10695/// # Forms
10696/// Assembly: `vfcvt.xu.f.v vm, vs2, vd`
10697/// Rust: `vfcvt_xu_f_v(vd, vs2, vm)`
10698///
10699/// # Arguments
10700/// - `vd` — Vector register operand.
10701/// - `vs2` — Vector register operand.
10702/// - `vm` — Vector mask control.
10703pub trait VfcvtXuFVEmitter<T0, T1, T2> {
10704    fn vfcvt_xu_f_v(&mut self, vd: T0, vs2: T1, vm: T2);
10705}
10706
10707/// RISC-V `vfdiv.vf` instruction.
10708///
10709/// # Forms
10710/// Assembly: `vfdiv.vf vm, vs2, xs1, vd`
10711/// Rust: `vfdiv_vf(vd, vs2, rs1, vm)`
10712///
10713/// # Arguments
10714/// - `vd` — Vector register operand.
10715/// - `vs2` — Vector register operand.
10716/// - `rs1` — Source register.
10717/// - `vm` — Vector mask control.
10718pub trait VfdivVfEmitter<T0, T1, T2, T3> {
10719    fn vfdiv_vf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
10720}
10721
10722/// RISC-V `vfdiv.vv` instruction.
10723///
10724/// # Forms
10725/// Assembly: `vfdiv.vv vm, vs2, vs1, vd`
10726/// Rust: `vfdiv_vv(vd, vs1, vs2, vm)`
10727///
10728/// # Arguments
10729/// - `vd` — Vector register operand.
10730/// - `vs1` — Vector register operand.
10731/// - `vs2` — Vector register operand.
10732/// - `vm` — Vector mask control.
10733pub trait VfdivVvEmitter<T0, T1, T2, T3> {
10734    fn vfdiv_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
10735}
10736
10737/// RISC-V `vfirst.m` instruction.
10738///
10739/// # Forms
10740/// Assembly: `vfirst.m vm, vs2, xd`
10741/// Rust: `vfirst_m(rd, vs2, vm)`
10742///
10743/// # Arguments
10744/// - `rd` — Destination register.
10745/// - `vs2` — Vector register operand.
10746/// - `vm` — Vector mask control.
10747pub trait VfirstMEmitter<T0, T1, T2> {
10748    fn vfirst_m(&mut self, rd: T0, vs2: T1, vm: T2);
10749}
10750
10751/// RISC-V `vfmacc.vf` instruction.
10752///
10753/// # Forms
10754/// Assembly: `vfmacc.vf vm, vs2, xs1, vd`
10755/// Rust: `vfmacc_vf(vd, vs2, rs1, vm)`
10756///
10757/// # Arguments
10758/// - `vd` — Vector register operand.
10759/// - `vs2` — Vector register operand.
10760/// - `rs1` — Source register.
10761/// - `vm` — Vector mask control.
10762pub trait VfmaccVfEmitter<T0, T1, T2, T3> {
10763    fn vfmacc_vf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
10764}
10765
10766/// RISC-V `vfmacc.vv` instruction.
10767///
10768/// # Forms
10769/// Assembly: `vfmacc.vv vm, vs2, vs1, vd`
10770/// Rust: `vfmacc_vv(vd, vs1, vs2, vm)`
10771///
10772/// # Arguments
10773/// - `vd` — Vector register operand.
10774/// - `vs1` — Vector register operand.
10775/// - `vs2` — Vector register operand.
10776/// - `vm` — Vector mask control.
10777pub trait VfmaccVvEmitter<T0, T1, T2, T3> {
10778    fn vfmacc_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
10779}
10780
10781/// RISC-V `vfmadd.vf` instruction.
10782///
10783/// # Forms
10784/// Assembly: `vfmadd.vf vm, vs2, xs1, vd`
10785/// Rust: `vfmadd_vf(vd, vs2, rs1, vm)`
10786///
10787/// # Arguments
10788/// - `vd` — Vector register operand.
10789/// - `vs2` — Vector register operand.
10790/// - `rs1` — Source register.
10791/// - `vm` — Vector mask control.
10792pub trait VfmaddVfEmitter<T0, T1, T2, T3> {
10793    fn vfmadd_vf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
10794}
10795
10796/// RISC-V `vfmadd.vv` instruction.
10797///
10798/// # Forms
10799/// Assembly: `vfmadd.vv vm, vs2, vs1, vd`
10800/// Rust: `vfmadd_vv(vd, vs1, vs2, vm)`
10801///
10802/// # Arguments
10803/// - `vd` — Vector register operand.
10804/// - `vs1` — Vector register operand.
10805/// - `vs2` — Vector register operand.
10806/// - `vm` — Vector mask control.
10807pub trait VfmaddVvEmitter<T0, T1, T2, T3> {
10808    fn vfmadd_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
10809}
10810
10811/// RISC-V `vfmax.vf` instruction.
10812///
10813/// # Forms
10814/// Assembly: `vfmax.vf vm, vs2, xs1, vd`
10815/// Rust: `vfmax_vf(vd, vs2, rs1, vm)`
10816///
10817/// # Arguments
10818/// - `vd` — Vector register operand.
10819/// - `vs2` — Vector register operand.
10820/// - `rs1` — Source register.
10821/// - `vm` — Vector mask control.
10822pub trait VfmaxVfEmitter<T0, T1, T2, T3> {
10823    fn vfmax_vf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
10824}
10825
10826/// RISC-V `vfmax.vv` instruction.
10827///
10828/// # Forms
10829/// Assembly: `vfmax.vv vm, vs2, vs1, vd`
10830/// Rust: `vfmax_vv(vd, vs1, vs2, vm)`
10831///
10832/// # Arguments
10833/// - `vd` — Vector register operand.
10834/// - `vs1` — Vector register operand.
10835/// - `vs2` — Vector register operand.
10836/// - `vm` — Vector mask control.
10837pub trait VfmaxVvEmitter<T0, T1, T2, T3> {
10838    fn vfmax_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
10839}
10840
10841/// RISC-V `vfmerge.vfm` instruction.
10842///
10843/// # Forms
10844/// Assembly: `vfmerge.vfm vs2, xs1, vd`
10845/// Rust: `vfmerge_vfm(vd, rs1, vs2)`
10846///
10847/// # Arguments
10848/// - `vd` — Vector register operand.
10849/// - `rs1` — Source register.
10850/// - `vs2` — Vector register operand.
10851pub trait VfmergeVfmEmitter<T0, T1, T2> {
10852    fn vfmerge_vfm(&mut self, vd: T0, rs1: T1, vs2: T2);
10853}
10854
10855/// RISC-V `vfmin.vf` instruction.
10856///
10857/// # Forms
10858/// Assembly: `vfmin.vf vm, vs2, xs1, vd`
10859/// Rust: `vfmin_vf(vd, vs2, rs1, vm)`
10860///
10861/// # Arguments
10862/// - `vd` — Vector register operand.
10863/// - `vs2` — Vector register operand.
10864/// - `rs1` — Source register.
10865/// - `vm` — Vector mask control.
10866pub trait VfminVfEmitter<T0, T1, T2, T3> {
10867    fn vfmin_vf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
10868}
10869
10870/// RISC-V `vfmin.vv` instruction.
10871///
10872/// # Forms
10873/// Assembly: `vfmin.vv vm, vs2, vs1, vd`
10874/// Rust: `vfmin_vv(vd, vs1, vs2, vm)`
10875///
10876/// # Arguments
10877/// - `vd` — Vector register operand.
10878/// - `vs1` — Vector register operand.
10879/// - `vs2` — Vector register operand.
10880/// - `vm` — Vector mask control.
10881pub trait VfminVvEmitter<T0, T1, T2, T3> {
10882    fn vfmin_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
10883}
10884
10885/// RISC-V `vfmsac.vf` instruction.
10886///
10887/// # Forms
10888/// Assembly: `vfmsac.vf vm, vs2, xs1, vd`
10889/// Rust: `vfmsac_vf(vd, vs2, rs1, vm)`
10890///
10891/// # Arguments
10892/// - `vd` — Vector register operand.
10893/// - `vs2` — Vector register operand.
10894/// - `rs1` — Source register.
10895/// - `vm` — Vector mask control.
10896pub trait VfmsacVfEmitter<T0, T1, T2, T3> {
10897    fn vfmsac_vf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
10898}
10899
10900/// RISC-V `vfmsac.vv` instruction.
10901///
10902/// # Forms
10903/// Assembly: `vfmsac.vv vm, vs2, vs1, vd`
10904/// Rust: `vfmsac_vv(vd, vs1, vs2, vm)`
10905///
10906/// # Arguments
10907/// - `vd` — Vector register operand.
10908/// - `vs1` — Vector register operand.
10909/// - `vs2` — Vector register operand.
10910/// - `vm` — Vector mask control.
10911pub trait VfmsacVvEmitter<T0, T1, T2, T3> {
10912    fn vfmsac_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
10913}
10914
10915/// RISC-V `vfmsub.vf` instruction.
10916///
10917/// # Forms
10918/// Assembly: `vfmsub.vf vm, vs2, xs1, vd`
10919/// Rust: `vfmsub_vf(vd, vs2, rs1, vm)`
10920///
10921/// # Arguments
10922/// - `vd` — Vector register operand.
10923/// - `vs2` — Vector register operand.
10924/// - `rs1` — Source register.
10925/// - `vm` — Vector mask control.
10926pub trait VfmsubVfEmitter<T0, T1, T2, T3> {
10927    fn vfmsub_vf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
10928}
10929
10930/// RISC-V `vfmsub.vv` instruction.
10931///
10932/// # Forms
10933/// Assembly: `vfmsub.vv vm, vs2, vs1, vd`
10934/// Rust: `vfmsub_vv(vd, vs1, vs2, vm)`
10935///
10936/// # Arguments
10937/// - `vd` — Vector register operand.
10938/// - `vs1` — Vector register operand.
10939/// - `vs2` — Vector register operand.
10940/// - `vm` — Vector mask control.
10941pub trait VfmsubVvEmitter<T0, T1, T2, T3> {
10942    fn vfmsub_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
10943}
10944
10945/// RISC-V `vfmul.vf` instruction.
10946///
10947/// # Forms
10948/// Assembly: `vfmul.vf vm, vs2, xs1, vd`
10949/// Rust: `vfmul_vf(vd, vs2, rs1, vm)`
10950///
10951/// # Arguments
10952/// - `vd` — Vector register operand.
10953/// - `vs2` — Vector register operand.
10954/// - `rs1` — Source register.
10955/// - `vm` — Vector mask control.
10956pub trait VfmulVfEmitter<T0, T1, T2, T3> {
10957    fn vfmul_vf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
10958}
10959
10960/// RISC-V `vfmul.vv` instruction.
10961///
10962/// # Forms
10963/// Assembly: `vfmul.vv vm, vs2, vs1, vd`
10964/// Rust: `vfmul_vv(vd, vs1, vs2, vm)`
10965///
10966/// # Arguments
10967/// - `vd` — Vector register operand.
10968/// - `vs1` — Vector register operand.
10969/// - `vs2` — Vector register operand.
10970/// - `vm` — Vector mask control.
10971pub trait VfmulVvEmitter<T0, T1, T2, T3> {
10972    fn vfmul_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
10973}
10974
10975/// RISC-V `vfmv.f.s` instruction.
10976///
10977/// # Forms
10978/// Assembly: `vfmv.f.s vs2, xd`
10979/// Rust: `vfmv_f_s(rd, vs2)`
10980///
10981/// # Arguments
10982/// - `rd` — Destination register.
10983/// - `vs2` — Vector register operand.
10984pub trait VfmvFSEmitter<T0, T1> {
10985    fn vfmv_f_s(&mut self, rd: T0, vs2: T1);
10986}
10987
10988/// RISC-V `vfmv.s.f` instruction.
10989///
10990/// # Forms
10991/// Assembly: `vfmv.s.f xs1, vd`
10992/// Rust: `vfmv_s_f(vd, rs1)`
10993///
10994/// # Arguments
10995/// - `vd` — Vector register operand.
10996/// - `rs1` — Source register.
10997pub trait VfmvSFEmitter<T0, T1> {
10998    fn vfmv_s_f(&mut self, vd: T0, rs1: T1);
10999}
11000
11001/// RISC-V `vfmv.v.f` instruction.
11002///
11003/// # Forms
11004/// Assembly: `vfmv.v.f xs1, vd`
11005/// Rust: `vfmv_v_f(vd, rs1)`
11006///
11007/// # Arguments
11008/// - `vd` — Vector register operand.
11009/// - `rs1` — Source register.
11010pub trait VfmvVFEmitter<T0, T1> {
11011    fn vfmv_v_f(&mut self, vd: T0, rs1: T1);
11012}
11013
11014/// RISC-V `vfncvt.f.f.w` instruction.
11015///
11016/// # Forms
11017/// Assembly: `vfncvt.f.f.w vm, vs2, vd`
11018/// Rust: `vfncvt_f_f_w(vd, vs2, vm)`
11019///
11020/// # Arguments
11021/// - `vd` — Vector register operand.
11022/// - `vs2` — Vector register operand.
11023/// - `vm` — Vector mask control.
11024pub trait VfncvtFFWEmitter<T0, T1, T2> {
11025    fn vfncvt_f_f_w(&mut self, vd: T0, vs2: T1, vm: T2);
11026}
11027
11028/// RISC-V `vfncvt.f.x.w` instruction.
11029///
11030/// # Forms
11031/// Assembly: `vfncvt.f.x.w vm, vs2, vd`
11032/// Rust: `vfncvt_f_x_w(vd, vs2, vm)`
11033///
11034/// # Arguments
11035/// - `vd` — Vector register operand.
11036/// - `vs2` — Vector register operand.
11037/// - `vm` — Vector mask control.
11038pub trait VfncvtFXWEmitter<T0, T1, T2> {
11039    fn vfncvt_f_x_w(&mut self, vd: T0, vs2: T1, vm: T2);
11040}
11041
11042/// RISC-V `vfncvt.f.xu.w` instruction.
11043///
11044/// # Forms
11045/// Assembly: `vfncvt.f.xu.w vm, vs2, vd`
11046/// Rust: `vfncvt_f_xu_w(vd, vs2, vm)`
11047///
11048/// # Arguments
11049/// - `vd` — Vector register operand.
11050/// - `vs2` — Vector register operand.
11051/// - `vm` — Vector mask control.
11052pub trait VfncvtFXuWEmitter<T0, T1, T2> {
11053    fn vfncvt_f_xu_w(&mut self, vd: T0, vs2: T1, vm: T2);
11054}
11055
11056/// RISC-V `vfncvt.rod.f.f.w` instruction.
11057///
11058/// # Forms
11059/// Assembly: `vfncvt.rod.f.f.w vm, vs2, vd`
11060/// Rust: `vfncvt_rod_f_f_w(vd, vs2, vm)`
11061///
11062/// # Arguments
11063/// - `vd` — Vector register operand.
11064/// - `vs2` — Vector register operand.
11065/// - `vm` — Vector mask control.
11066pub trait VfncvtRodFFWEmitter<T0, T1, T2> {
11067    fn vfncvt_rod_f_f_w(&mut self, vd: T0, vs2: T1, vm: T2);
11068}
11069
11070/// RISC-V `vfncvt.rtz.x.f.w` instruction.
11071///
11072/// # Forms
11073/// Assembly: `vfncvt.rtz.x.f.w vm, vs2, vd`
11074/// Rust: `vfncvt_rtz_x_f_w(vd, vs2, vm)`
11075///
11076/// # Arguments
11077/// - `vd` — Vector register operand.
11078/// - `vs2` — Vector register operand.
11079/// - `vm` — Vector mask control.
11080pub trait VfncvtRtzXFWEmitter<T0, T1, T2> {
11081    fn vfncvt_rtz_x_f_w(&mut self, vd: T0, vs2: T1, vm: T2);
11082}
11083
11084/// RISC-V `vfncvt.rtz.xu.f.w` instruction.
11085///
11086/// # Forms
11087/// Assembly: `vfncvt.rtz.xu.f.w vm, vs2, vd`
11088/// Rust: `vfncvt_rtz_xu_f_w(vd, vs2, vm)`
11089///
11090/// # Arguments
11091/// - `vd` — Vector register operand.
11092/// - `vs2` — Vector register operand.
11093/// - `vm` — Vector mask control.
11094pub trait VfncvtRtzXuFWEmitter<T0, T1, T2> {
11095    fn vfncvt_rtz_xu_f_w(&mut self, vd: T0, vs2: T1, vm: T2);
11096}
11097
11098/// RISC-V `vfncvt.x.f.w` instruction.
11099///
11100/// # Forms
11101/// Assembly: `vfncvt.x.f.w vm, vs2, vd`
11102/// Rust: `vfncvt_x_f_w(vd, vs2, vm)`
11103///
11104/// # Arguments
11105/// - `vd` — Vector register operand.
11106/// - `vs2` — Vector register operand.
11107/// - `vm` — Vector mask control.
11108pub trait VfncvtXFWEmitter<T0, T1, T2> {
11109    fn vfncvt_x_f_w(&mut self, vd: T0, vs2: T1, vm: T2);
11110}
11111
11112/// RISC-V `vfncvt.xu.f.w` instruction.
11113///
11114/// # Forms
11115/// Assembly: `vfncvt.xu.f.w vm, vs2, vd`
11116/// Rust: `vfncvt_xu_f_w(vd, vs2, vm)`
11117///
11118/// # Arguments
11119/// - `vd` — Vector register operand.
11120/// - `vs2` — Vector register operand.
11121/// - `vm` — Vector mask control.
11122pub trait VfncvtXuFWEmitter<T0, T1, T2> {
11123    fn vfncvt_xu_f_w(&mut self, vd: T0, vs2: T1, vm: T2);
11124}
11125
11126/// RISC-V `vfncvtbf16.f.f.w` instruction.
11127///
11128/// # Forms
11129/// Assembly: `vfncvtbf16.f.f.w vm, vs2, vd`
11130/// Rust: `vfncvtbf16_f_f_w(vd, vs2, vm)`
11131///
11132/// # Arguments
11133/// - `vd` — Vector register operand.
11134/// - `vs2` — Vector register operand.
11135/// - `vm` — Vector mask control.
11136pub trait Vfncvtbf16FFWEmitter<T0, T1, T2> {
11137    fn vfncvtbf16_f_f_w(&mut self, vd: T0, vs2: T1, vm: T2);
11138}
11139
11140/// RISC-V `vfnmacc.vf` instruction.
11141///
11142/// # Forms
11143/// Assembly: `vfnmacc.vf vm, vs2, xs1, vd`
11144/// Rust: `vfnmacc_vf(vd, vs2, rs1, vm)`
11145///
11146/// # Arguments
11147/// - `vd` — Vector register operand.
11148/// - `vs2` — Vector register operand.
11149/// - `rs1` — Source register.
11150/// - `vm` — Vector mask control.
11151pub trait VfnmaccVfEmitter<T0, T1, T2, T3> {
11152    fn vfnmacc_vf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
11153}
11154
11155/// RISC-V `vfnmacc.vv` instruction.
11156///
11157/// # Forms
11158/// Assembly: `vfnmacc.vv vm, vs2, vs1, vd`
11159/// Rust: `vfnmacc_vv(vd, vs1, vs2, vm)`
11160///
11161/// # Arguments
11162/// - `vd` — Vector register operand.
11163/// - `vs1` — Vector register operand.
11164/// - `vs2` — Vector register operand.
11165/// - `vm` — Vector mask control.
11166pub trait VfnmaccVvEmitter<T0, T1, T2, T3> {
11167    fn vfnmacc_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
11168}
11169
11170/// RISC-V `vfnmadd.vf` instruction.
11171///
11172/// # Forms
11173/// Assembly: `vfnmadd.vf vm, vs2, xs1, vd`
11174/// Rust: `vfnmadd_vf(vd, vs2, rs1, vm)`
11175///
11176/// # Arguments
11177/// - `vd` — Vector register operand.
11178/// - `vs2` — Vector register operand.
11179/// - `rs1` — Source register.
11180/// - `vm` — Vector mask control.
11181pub trait VfnmaddVfEmitter<T0, T1, T2, T3> {
11182    fn vfnmadd_vf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
11183}
11184
11185/// RISC-V `vfnmadd.vv` instruction.
11186///
11187/// # Forms
11188/// Assembly: `vfnmadd.vv vm, vs2, vs1, vd`
11189/// Rust: `vfnmadd_vv(vd, vs1, vs2, vm)`
11190///
11191/// # Arguments
11192/// - `vd` — Vector register operand.
11193/// - `vs1` — Vector register operand.
11194/// - `vs2` — Vector register operand.
11195/// - `vm` — Vector mask control.
11196pub trait VfnmaddVvEmitter<T0, T1, T2, T3> {
11197    fn vfnmadd_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
11198}
11199
11200/// RISC-V `vfnmsac.vf` instruction.
11201///
11202/// # Forms
11203/// Assembly: `vfnmsac.vf vm, vs2, xs1, vd`
11204/// Rust: `vfnmsac_vf(vd, vs2, rs1, vm)`
11205///
11206/// # Arguments
11207/// - `vd` — Vector register operand.
11208/// - `vs2` — Vector register operand.
11209/// - `rs1` — Source register.
11210/// - `vm` — Vector mask control.
11211pub trait VfnmsacVfEmitter<T0, T1, T2, T3> {
11212    fn vfnmsac_vf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
11213}
11214
11215/// RISC-V `vfnmsac.vv` instruction.
11216///
11217/// # Forms
11218/// Assembly: `vfnmsac.vv vm, vs2, vs1, vd`
11219/// Rust: `vfnmsac_vv(vd, vs1, vs2, vm)`
11220///
11221/// # Arguments
11222/// - `vd` — Vector register operand.
11223/// - `vs1` — Vector register operand.
11224/// - `vs2` — Vector register operand.
11225/// - `vm` — Vector mask control.
11226pub trait VfnmsacVvEmitter<T0, T1, T2, T3> {
11227    fn vfnmsac_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
11228}
11229
11230/// RISC-V `vfnmsub.vf` instruction.
11231///
11232/// # Forms
11233/// Assembly: `vfnmsub.vf vm, vs2, xs1, vd`
11234/// Rust: `vfnmsub_vf(vd, vs2, rs1, vm)`
11235///
11236/// # Arguments
11237/// - `vd` — Vector register operand.
11238/// - `vs2` — Vector register operand.
11239/// - `rs1` — Source register.
11240/// - `vm` — Vector mask control.
11241pub trait VfnmsubVfEmitter<T0, T1, T2, T3> {
11242    fn vfnmsub_vf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
11243}
11244
11245/// RISC-V `vfnmsub.vv` instruction.
11246///
11247/// # Forms
11248/// Assembly: `vfnmsub.vv vm, vs2, vs1, vd`
11249/// Rust: `vfnmsub_vv(vd, vs1, vs2, vm)`
11250///
11251/// # Arguments
11252/// - `vd` — Vector register operand.
11253/// - `vs1` — Vector register operand.
11254/// - `vs2` — Vector register operand.
11255/// - `vm` — Vector mask control.
11256pub trait VfnmsubVvEmitter<T0, T1, T2, T3> {
11257    fn vfnmsub_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
11258}
11259
11260/// RISC-V `vfrdiv.vf` instruction.
11261///
11262/// # Forms
11263/// Assembly: `vfrdiv.vf vm, vs2, xs1, vd`
11264/// Rust: `vfrdiv_vf(vd, vs2, rs1, vm)`
11265///
11266/// # Arguments
11267/// - `vd` — Vector register operand.
11268/// - `vs2` — Vector register operand.
11269/// - `rs1` — Source register.
11270/// - `vm` — Vector mask control.
11271pub trait VfrdivVfEmitter<T0, T1, T2, T3> {
11272    fn vfrdiv_vf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
11273}
11274
11275/// RISC-V `vfrec7.v` instruction.
11276///
11277/// # Forms
11278/// Assembly: `vfrec7.v vm, vs2, vd`
11279/// Rust: `vfrec7_v(vd, vs2, vm)`
11280///
11281/// # Arguments
11282/// - `vd` — Vector register operand.
11283/// - `vs2` — Vector register operand.
11284/// - `vm` — Vector mask control.
11285pub trait Vfrec7VEmitter<T0, T1, T2> {
11286    fn vfrec7_v(&mut self, vd: T0, vs2: T1, vm: T2);
11287}
11288
11289/// RISC-V `vfredmax.vs` instruction.
11290///
11291/// # Forms
11292/// Assembly: `vfredmax.vs vm, vs2, vs1, vd`
11293/// Rust: `vfredmax_vs(vd, vs1, vs2, vm)`
11294///
11295/// # Arguments
11296/// - `vd` — Vector register operand.
11297/// - `vs1` — Vector register operand.
11298/// - `vs2` — Vector register operand.
11299/// - `vm` — Vector mask control.
11300pub trait VfredmaxVsEmitter<T0, T1, T2, T3> {
11301    fn vfredmax_vs(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
11302}
11303
11304/// RISC-V `vfredmin.vs` instruction.
11305///
11306/// # Forms
11307/// Assembly: `vfredmin.vs vm, vs2, vs1, vd`
11308/// Rust: `vfredmin_vs(vd, vs1, vs2, vm)`
11309///
11310/// # Arguments
11311/// - `vd` — Vector register operand.
11312/// - `vs1` — Vector register operand.
11313/// - `vs2` — Vector register operand.
11314/// - `vm` — Vector mask control.
11315pub trait VfredminVsEmitter<T0, T1, T2, T3> {
11316    fn vfredmin_vs(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
11317}
11318
11319/// RISC-V `vfredosum.vs` instruction.
11320///
11321/// # Forms
11322/// Assembly: `vfredosum.vs vm, vs2, vs1, vd`
11323/// Rust: `vfredosum_vs(vd, vs1, vs2, vm)`
11324///
11325/// # Arguments
11326/// - `vd` — Vector register operand.
11327/// - `vs1` — Vector register operand.
11328/// - `vs2` — Vector register operand.
11329/// - `vm` — Vector mask control.
11330pub trait VfredosumVsEmitter<T0, T1, T2, T3> {
11331    fn vfredosum_vs(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
11332}
11333
11334/// RISC-V `vfredsum.vs` instruction.
11335///
11336/// # Forms
11337/// Assembly: `vfredsum.vs vd vs1 vs2 vm`
11338/// Rust: `vfredsum_vs(vd, vs1, vs2, vm)`
11339///
11340/// # Arguments
11341/// - `vd` — Vector register operand.
11342/// - `vs1` — Vector register operand.
11343/// - `vs2` — Vector register operand.
11344/// - `vm` — Vector mask control.
11345pub trait VfredsumVsEmitter<T0, T1, T2, T3> {
11346    fn vfredsum_vs(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
11347}
11348
11349/// RISC-V `vfredusum.vs` instruction.
11350///
11351/// # Forms
11352/// Assembly: `vfredusum.vs vm, vs2, vs1, vd`
11353/// Rust: `vfredusum_vs(vd, vs1, vs2, vm)`
11354///
11355/// # Arguments
11356/// - `vd` — Vector register operand.
11357/// - `vs1` — Vector register operand.
11358/// - `vs2` — Vector register operand.
11359/// - `vm` — Vector mask control.
11360pub trait VfredusumVsEmitter<T0, T1, T2, T3> {
11361    fn vfredusum_vs(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
11362}
11363
11364/// RISC-V `vfrsqrt7.v` instruction.
11365///
11366/// # Forms
11367/// Assembly: `vfrsqrt7.v vm, vs2, vd`
11368/// Rust: `vfrsqrt7_v(vd, vs2, vm)`
11369///
11370/// # Arguments
11371/// - `vd` — Vector register operand.
11372/// - `vs2` — Vector register operand.
11373/// - `vm` — Vector mask control.
11374pub trait Vfrsqrt7VEmitter<T0, T1, T2> {
11375    fn vfrsqrt7_v(&mut self, vd: T0, vs2: T1, vm: T2);
11376}
11377
11378/// RISC-V `vfrsub.vf` instruction.
11379///
11380/// # Forms
11381/// Assembly: `vfrsub.vf vm, vs2, xs1, vd`
11382/// Rust: `vfrsub_vf(vd, vs2, rs1, vm)`
11383///
11384/// # Arguments
11385/// - `vd` — Vector register operand.
11386/// - `vs2` — Vector register operand.
11387/// - `rs1` — Source register.
11388/// - `vm` — Vector mask control.
11389pub trait VfrsubVfEmitter<T0, T1, T2, T3> {
11390    fn vfrsub_vf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
11391}
11392
11393/// RISC-V `vfsgnj.vf` instruction.
11394///
11395/// # Forms
11396/// Assembly: `vfsgnj.vf vm, vs2, xs1, vd`
11397/// Rust: `vfsgnj_vf(vd, vs2, rs1, vm)`
11398///
11399/// # Arguments
11400/// - `vd` — Vector register operand.
11401/// - `vs2` — Vector register operand.
11402/// - `rs1` — Source register.
11403/// - `vm` — Vector mask control.
11404pub trait VfsgnjVfEmitter<T0, T1, T2, T3> {
11405    fn vfsgnj_vf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
11406}
11407
11408/// RISC-V `vfsgnj.vv` instruction.
11409///
11410/// # Forms
11411/// Assembly: `vfsgnj.vv vm, vs2, vs1, vd`
11412/// Rust: `vfsgnj_vv(vd, vs1, vs2, vm)`
11413///
11414/// # Arguments
11415/// - `vd` — Vector register operand.
11416/// - `vs1` — Vector register operand.
11417/// - `vs2` — Vector register operand.
11418/// - `vm` — Vector mask control.
11419pub trait VfsgnjVvEmitter<T0, T1, T2, T3> {
11420    fn vfsgnj_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
11421}
11422
11423/// RISC-V `vfsgnjn.vf` instruction.
11424///
11425/// # Forms
11426/// Assembly: `vfsgnjn.vf vm, vs2, xs1, vd`
11427/// Rust: `vfsgnjn_vf(vd, vs2, rs1, vm)`
11428///
11429/// # Arguments
11430/// - `vd` — Vector register operand.
11431/// - `vs2` — Vector register operand.
11432/// - `rs1` — Source register.
11433/// - `vm` — Vector mask control.
11434pub trait VfsgnjnVfEmitter<T0, T1, T2, T3> {
11435    fn vfsgnjn_vf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
11436}
11437
11438/// RISC-V `vfsgnjn.vv` instruction.
11439///
11440/// # Forms
11441/// Assembly: `vfsgnjn.vv vm, vs2, vs1, vd`
11442/// Rust: `vfsgnjn_vv(vd, vs1, vs2, vm)`
11443///
11444/// # Arguments
11445/// - `vd` — Vector register operand.
11446/// - `vs1` — Vector register operand.
11447/// - `vs2` — Vector register operand.
11448/// - `vm` — Vector mask control.
11449pub trait VfsgnjnVvEmitter<T0, T1, T2, T3> {
11450    fn vfsgnjn_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
11451}
11452
11453/// RISC-V `vfsgnjx.vf` instruction.
11454///
11455/// # Forms
11456/// Assembly: `vfsgnjx.vf vm, vs2, xs1, vd`
11457/// Rust: `vfsgnjx_vf(vd, vs2, rs1, vm)`
11458///
11459/// # Arguments
11460/// - `vd` — Vector register operand.
11461/// - `vs2` — Vector register operand.
11462/// - `rs1` — Source register.
11463/// - `vm` — Vector mask control.
11464pub trait VfsgnjxVfEmitter<T0, T1, T2, T3> {
11465    fn vfsgnjx_vf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
11466}
11467
11468/// RISC-V `vfsgnjx.vv` instruction.
11469///
11470/// # Forms
11471/// Assembly: `vfsgnjx.vv vm, vs2, vs1, vd`
11472/// Rust: `vfsgnjx_vv(vd, vs1, vs2, vm)`
11473///
11474/// # Arguments
11475/// - `vd` — Vector register operand.
11476/// - `vs1` — Vector register operand.
11477/// - `vs2` — Vector register operand.
11478/// - `vm` — Vector mask control.
11479pub trait VfsgnjxVvEmitter<T0, T1, T2, T3> {
11480    fn vfsgnjx_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
11481}
11482
11483/// RISC-V `vfslide1down.vf` instruction.
11484///
11485/// # Forms
11486/// Assembly: `vfslide1down.vf vm, vs2, xs1, vd`
11487/// Rust: `vfslide1down_vf(vd, vs2, rs1, vm)`
11488///
11489/// # Arguments
11490/// - `vd` — Vector register operand.
11491/// - `vs2` — Vector register operand.
11492/// - `rs1` — Source register.
11493/// - `vm` — Vector mask control.
11494pub trait Vfslide1DownVfEmitter<T0, T1, T2, T3> {
11495    fn vfslide1down_vf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
11496}
11497
11498/// RISC-V `vfslide1up.vf` instruction.
11499///
11500/// # Forms
11501/// Assembly: `vfslide1up.vf vm, vs2, xs1, vd`
11502/// Rust: `vfslide1up_vf(vd, vs2, rs1, vm)`
11503///
11504/// # Arguments
11505/// - `vd` — Vector register operand.
11506/// - `vs2` — Vector register operand.
11507/// - `rs1` — Source register.
11508/// - `vm` — Vector mask control.
11509pub trait Vfslide1UpVfEmitter<T0, T1, T2, T3> {
11510    fn vfslide1up_vf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
11511}
11512
11513/// RISC-V `vfsqrt.v` instruction.
11514///
11515/// # Forms
11516/// Assembly: `vfsqrt.v vm, vs2, vd`
11517/// Rust: `vfsqrt_v(vd, vs2, vm)`
11518///
11519/// # Arguments
11520/// - `vd` — Vector register operand.
11521/// - `vs2` — Vector register operand.
11522/// - `vm` — Vector mask control.
11523pub trait VfsqrtVEmitter<T0, T1, T2> {
11524    fn vfsqrt_v(&mut self, vd: T0, vs2: T1, vm: T2);
11525}
11526
11527/// RISC-V `vfsub.vf` instruction.
11528///
11529/// # Forms
11530/// Assembly: `vfsub.vf vm, vs2, xs1, vd`
11531/// Rust: `vfsub_vf(vd, vs2, rs1, vm)`
11532///
11533/// # Arguments
11534/// - `vd` — Vector register operand.
11535/// - `vs2` — Vector register operand.
11536/// - `rs1` — Source register.
11537/// - `vm` — Vector mask control.
11538pub trait VfsubVfEmitter<T0, T1, T2, T3> {
11539    fn vfsub_vf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
11540}
11541
11542/// RISC-V `vfsub.vv` instruction.
11543///
11544/// # Forms
11545/// Assembly: `vfsub.vv vm, vs2, vs1, vd`
11546/// Rust: `vfsub_vv(vd, vs1, vs2, vm)`
11547///
11548/// # Arguments
11549/// - `vd` — Vector register operand.
11550/// - `vs1` — Vector register operand.
11551/// - `vs2` — Vector register operand.
11552/// - `vm` — Vector mask control.
11553pub trait VfsubVvEmitter<T0, T1, T2, T3> {
11554    fn vfsub_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
11555}
11556
11557/// RISC-V `vfwadd.vf` instruction.
11558///
11559/// # Forms
11560/// Assembly: `vfwadd.vf vm, vs2, xs1, vd`
11561/// Rust: `vfwadd_vf(vd, vs2, rs1, vm)`
11562///
11563/// # Arguments
11564/// - `vd` — Vector register operand.
11565/// - `vs2` — Vector register operand.
11566/// - `rs1` — Source register.
11567/// - `vm` — Vector mask control.
11568pub trait VfwaddVfEmitter<T0, T1, T2, T3> {
11569    fn vfwadd_vf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
11570}
11571
11572/// RISC-V `vfwadd.vv` instruction.
11573///
11574/// # Forms
11575/// Assembly: `vfwadd.vv vm, vs2, vs1, vd`
11576/// Rust: `vfwadd_vv(vd, vs1, vs2, vm)`
11577///
11578/// # Arguments
11579/// - `vd` — Vector register operand.
11580/// - `vs1` — Vector register operand.
11581/// - `vs2` — Vector register operand.
11582/// - `vm` — Vector mask control.
11583pub trait VfwaddVvEmitter<T0, T1, T2, T3> {
11584    fn vfwadd_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
11585}
11586
11587/// RISC-V `vfwadd.wf` instruction.
11588///
11589/// # Forms
11590/// Assembly: `vfwadd.wf vm, vs2, xs1, vd`
11591/// Rust: `vfwadd_wf(vd, vs2, rs1, vm)`
11592///
11593/// # Arguments
11594/// - `vd` — Vector register operand.
11595/// - `vs2` — Vector register operand.
11596/// - `rs1` — Source register.
11597/// - `vm` — Vector mask control.
11598pub trait VfwaddWfEmitter<T0, T1, T2, T3> {
11599    fn vfwadd_wf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
11600}
11601
11602/// RISC-V `vfwadd.wv` instruction.
11603///
11604/// # Forms
11605/// Assembly: `vfwadd.wv vm, vs2, vs1, vd`
11606/// Rust: `vfwadd_wv(vd, vs1, vs2, vm)`
11607///
11608/// # Arguments
11609/// - `vd` — Vector register operand.
11610/// - `vs1` — Vector register operand.
11611/// - `vs2` — Vector register operand.
11612/// - `vm` — Vector mask control.
11613pub trait VfwaddWvEmitter<T0, T1, T2, T3> {
11614    fn vfwadd_wv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
11615}
11616
11617/// RISC-V `vfwcvt.f.f.v` instruction.
11618///
11619/// # Forms
11620/// Assembly: `vfwcvt.f.f.v vm, vs2, vd`
11621/// Rust: `vfwcvt_f_f_v(vd, vs2, vm)`
11622///
11623/// # Arguments
11624/// - `vd` — Vector register operand.
11625/// - `vs2` — Vector register operand.
11626/// - `vm` — Vector mask control.
11627pub trait VfwcvtFFVEmitter<T0, T1, T2> {
11628    fn vfwcvt_f_f_v(&mut self, vd: T0, vs2: T1, vm: T2);
11629}
11630
11631/// RISC-V `vfwcvt.f.x.v` instruction.
11632///
11633/// # Forms
11634/// Assembly: `vfwcvt.f.x.v vm, vs2, vd`
11635/// Rust: `vfwcvt_f_x_v(vd, vs2, vm)`
11636///
11637/// # Arguments
11638/// - `vd` — Vector register operand.
11639/// - `vs2` — Vector register operand.
11640/// - `vm` — Vector mask control.
11641pub trait VfwcvtFXVEmitter<T0, T1, T2> {
11642    fn vfwcvt_f_x_v(&mut self, vd: T0, vs2: T1, vm: T2);
11643}
11644
11645/// RISC-V `vfwcvt.f.xu.v` instruction.
11646///
11647/// # Forms
11648/// Assembly: `vfwcvt.f.xu.v vm, vs2, vd`
11649/// Rust: `vfwcvt_f_xu_v(vd, vs2, vm)`
11650///
11651/// # Arguments
11652/// - `vd` — Vector register operand.
11653/// - `vs2` — Vector register operand.
11654/// - `vm` — Vector mask control.
11655pub trait VfwcvtFXuVEmitter<T0, T1, T2> {
11656    fn vfwcvt_f_xu_v(&mut self, vd: T0, vs2: T1, vm: T2);
11657}
11658
11659/// RISC-V `vfwcvt.rtz.x.f.v` instruction.
11660///
11661/// # Forms
11662/// Assembly: `vfwcvt.rtz.x.f.v vm, vs2, vd`
11663/// Rust: `vfwcvt_rtz_x_f_v(vd, vs2, vm)`
11664///
11665/// # Arguments
11666/// - `vd` — Vector register operand.
11667/// - `vs2` — Vector register operand.
11668/// - `vm` — Vector mask control.
11669pub trait VfwcvtRtzXFVEmitter<T0, T1, T2> {
11670    fn vfwcvt_rtz_x_f_v(&mut self, vd: T0, vs2: T1, vm: T2);
11671}
11672
11673/// RISC-V `vfwcvt.rtz.xu.f.v` instruction.
11674///
11675/// # Forms
11676/// Assembly: `vfwcvt.rtz.xu.f.v vm, vs2, vd`
11677/// Rust: `vfwcvt_rtz_xu_f_v(vd, vs2, vm)`
11678///
11679/// # Arguments
11680/// - `vd` — Vector register operand.
11681/// - `vs2` — Vector register operand.
11682/// - `vm` — Vector mask control.
11683pub trait VfwcvtRtzXuFVEmitter<T0, T1, T2> {
11684    fn vfwcvt_rtz_xu_f_v(&mut self, vd: T0, vs2: T1, vm: T2);
11685}
11686
11687/// RISC-V `vfwcvt.x.f.v` instruction.
11688///
11689/// # Forms
11690/// Assembly: `vfwcvt.x.f.v vm, vs2, vd`
11691/// Rust: `vfwcvt_x_f_v(vd, vs2, vm)`
11692///
11693/// # Arguments
11694/// - `vd` — Vector register operand.
11695/// - `vs2` — Vector register operand.
11696/// - `vm` — Vector mask control.
11697pub trait VfwcvtXFVEmitter<T0, T1, T2> {
11698    fn vfwcvt_x_f_v(&mut self, vd: T0, vs2: T1, vm: T2);
11699}
11700
11701/// RISC-V `vfwcvt.xu.f.v` instruction.
11702///
11703/// # Forms
11704/// Assembly: `vfwcvt.xu.f.v vm, vs2, vd`
11705/// Rust: `vfwcvt_xu_f_v(vd, vs2, vm)`
11706///
11707/// # Arguments
11708/// - `vd` — Vector register operand.
11709/// - `vs2` — Vector register operand.
11710/// - `vm` — Vector mask control.
11711pub trait VfwcvtXuFVEmitter<T0, T1, T2> {
11712    fn vfwcvt_xu_f_v(&mut self, vd: T0, vs2: T1, vm: T2);
11713}
11714
11715/// RISC-V `vfwcvtbf16.f.f.v` instruction.
11716///
11717/// # Forms
11718/// Assembly: `vfwcvtbf16.f.f.v vm, vs2, vd`
11719/// Rust: `vfwcvtbf16_f_f_v(vd, vs2, vm)`
11720///
11721/// # Arguments
11722/// - `vd` — Vector register operand.
11723/// - `vs2` — Vector register operand.
11724/// - `vm` — Vector mask control.
11725pub trait Vfwcvtbf16FFVEmitter<T0, T1, T2> {
11726    fn vfwcvtbf16_f_f_v(&mut self, vd: T0, vs2: T1, vm: T2);
11727}
11728
11729/// RISC-V `vfwmacc.vf` instruction.
11730///
11731/// # Forms
11732/// Assembly: `vfwmacc.vf vm, vs2, xs1, vd`
11733/// Rust: `vfwmacc_vf(vd, vs2, rs1, vm)`
11734///
11735/// # Arguments
11736/// - `vd` — Vector register operand.
11737/// - `vs2` — Vector register operand.
11738/// - `rs1` — Source register.
11739/// - `vm` — Vector mask control.
11740pub trait VfwmaccVfEmitter<T0, T1, T2, T3> {
11741    fn vfwmacc_vf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
11742}
11743
11744/// RISC-V `vfwmacc.vv` instruction.
11745///
11746/// # Forms
11747/// Assembly: `vfwmacc.vv vm, vs2, vs1, vd`
11748/// Rust: `vfwmacc_vv(vd, vs1, vs2, vm)`
11749///
11750/// # Arguments
11751/// - `vd` — Vector register operand.
11752/// - `vs1` — Vector register operand.
11753/// - `vs2` — Vector register operand.
11754/// - `vm` — Vector mask control.
11755pub trait VfwmaccVvEmitter<T0, T1, T2, T3> {
11756    fn vfwmacc_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
11757}
11758
11759/// RISC-V `vfwmaccbf16.vf` instruction.
11760///
11761/// # Forms
11762/// Assembly: `vfwmaccbf16.vf vm, vs2, xs1, vd`
11763/// Rust: `vfwmaccbf16_vf(vd, vs2, rs1, vm)`
11764///
11765/// # Arguments
11766/// - `vd` — Vector register operand.
11767/// - `vs2` — Vector register operand.
11768/// - `rs1` — Source register.
11769/// - `vm` — Vector mask control.
11770pub trait Vfwmaccbf16VfEmitter<T0, T1, T2, T3> {
11771    fn vfwmaccbf16_vf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
11772}
11773
11774/// RISC-V `vfwmaccbf16.vv` instruction.
11775///
11776/// # Forms
11777/// Assembly: `vfwmaccbf16.vv vm, vs2, vs1, vd`
11778/// Rust: `vfwmaccbf16_vv(vd, vs1, vs2, vm)`
11779///
11780/// # Arguments
11781/// - `vd` — Vector register operand.
11782/// - `vs1` — Vector register operand.
11783/// - `vs2` — Vector register operand.
11784/// - `vm` — Vector mask control.
11785pub trait Vfwmaccbf16VvEmitter<T0, T1, T2, T3> {
11786    fn vfwmaccbf16_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
11787}
11788
11789/// RISC-V `vfwmsac.vf` instruction.
11790///
11791/// # Forms
11792/// Assembly: `vfwmsac.vf vm, vs2, xs1, vd`
11793/// Rust: `vfwmsac_vf(vd, vs2, rs1, vm)`
11794///
11795/// # Arguments
11796/// - `vd` — Vector register operand.
11797/// - `vs2` — Vector register operand.
11798/// - `rs1` — Source register.
11799/// - `vm` — Vector mask control.
11800pub trait VfwmsacVfEmitter<T0, T1, T2, T3> {
11801    fn vfwmsac_vf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
11802}
11803
11804/// RISC-V `vfwmsac.vv` instruction.
11805///
11806/// # Forms
11807/// Assembly: `vfwmsac.vv vm, vs2, vs1, vd`
11808/// Rust: `vfwmsac_vv(vd, vs1, vs2, vm)`
11809///
11810/// # Arguments
11811/// - `vd` — Vector register operand.
11812/// - `vs1` — Vector register operand.
11813/// - `vs2` — Vector register operand.
11814/// - `vm` — Vector mask control.
11815pub trait VfwmsacVvEmitter<T0, T1, T2, T3> {
11816    fn vfwmsac_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
11817}
11818
11819/// RISC-V `vfwmul.vf` instruction.
11820///
11821/// # Forms
11822/// Assembly: `vfwmul.vf vm, vs2, xs1, vd`
11823/// Rust: `vfwmul_vf(vd, vs2, rs1, vm)`
11824///
11825/// # Arguments
11826/// - `vd` — Vector register operand.
11827/// - `vs2` — Vector register operand.
11828/// - `rs1` — Source register.
11829/// - `vm` — Vector mask control.
11830pub trait VfwmulVfEmitter<T0, T1, T2, T3> {
11831    fn vfwmul_vf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
11832}
11833
11834/// RISC-V `vfwmul.vv` instruction.
11835///
11836/// # Forms
11837/// Assembly: `vfwmul.vv vm, vs2, vs1, vd`
11838/// Rust: `vfwmul_vv(vd, vs1, vs2, vm)`
11839///
11840/// # Arguments
11841/// - `vd` — Vector register operand.
11842/// - `vs1` — Vector register operand.
11843/// - `vs2` — Vector register operand.
11844/// - `vm` — Vector mask control.
11845pub trait VfwmulVvEmitter<T0, T1, T2, T3> {
11846    fn vfwmul_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
11847}
11848
11849/// RISC-V `vfwnmacc.vf` instruction.
11850///
11851/// # Forms
11852/// Assembly: `vfwnmacc.vf vm, vs2, xs1, vd`
11853/// Rust: `vfwnmacc_vf(vd, vs2, rs1, vm)`
11854///
11855/// # Arguments
11856/// - `vd` — Vector register operand.
11857/// - `vs2` — Vector register operand.
11858/// - `rs1` — Source register.
11859/// - `vm` — Vector mask control.
11860pub trait VfwnmaccVfEmitter<T0, T1, T2, T3> {
11861    fn vfwnmacc_vf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
11862}
11863
11864/// RISC-V `vfwnmacc.vv` instruction.
11865///
11866/// # Forms
11867/// Assembly: `vfwnmacc.vv vm, vs2, vs1, vd`
11868/// Rust: `vfwnmacc_vv(vd, vs1, vs2, vm)`
11869///
11870/// # Arguments
11871/// - `vd` — Vector register operand.
11872/// - `vs1` — Vector register operand.
11873/// - `vs2` — Vector register operand.
11874/// - `vm` — Vector mask control.
11875pub trait VfwnmaccVvEmitter<T0, T1, T2, T3> {
11876    fn vfwnmacc_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
11877}
11878
11879/// RISC-V `vfwnmsac.vf` instruction.
11880///
11881/// # Forms
11882/// Assembly: `vfwnmsac.vf vm, vs2, xs1, vd`
11883/// Rust: `vfwnmsac_vf(vd, vs2, rs1, vm)`
11884///
11885/// # Arguments
11886/// - `vd` — Vector register operand.
11887/// - `vs2` — Vector register operand.
11888/// - `rs1` — Source register.
11889/// - `vm` — Vector mask control.
11890pub trait VfwnmsacVfEmitter<T0, T1, T2, T3> {
11891    fn vfwnmsac_vf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
11892}
11893
11894/// RISC-V `vfwnmsac.vv` instruction.
11895///
11896/// # Forms
11897/// Assembly: `vfwnmsac.vv vm, vs2, vs1, vd`
11898/// Rust: `vfwnmsac_vv(vd, vs1, vs2, vm)`
11899///
11900/// # Arguments
11901/// - `vd` — Vector register operand.
11902/// - `vs1` — Vector register operand.
11903/// - `vs2` — Vector register operand.
11904/// - `vm` — Vector mask control.
11905pub trait VfwnmsacVvEmitter<T0, T1, T2, T3> {
11906    fn vfwnmsac_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
11907}
11908
11909/// RISC-V `vfwredosum.vs` instruction.
11910///
11911/// # Forms
11912/// Assembly: `vfwredosum.vs vm, vs2, vs1, vd`
11913/// Rust: `vfwredosum_vs(vd, vs1, vs2, vm)`
11914///
11915/// # Arguments
11916/// - `vd` — Vector register operand.
11917/// - `vs1` — Vector register operand.
11918/// - `vs2` — Vector register operand.
11919/// - `vm` — Vector mask control.
11920pub trait VfwredosumVsEmitter<T0, T1, T2, T3> {
11921    fn vfwredosum_vs(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
11922}
11923
11924/// RISC-V `vfwredsum.vs` instruction.
11925///
11926/// # Forms
11927/// Assembly: `vfwredsum.vs vd vs1 vs2 vm`
11928/// Rust: `vfwredsum_vs(vd, vs1, vs2, vm)`
11929///
11930/// # Arguments
11931/// - `vd` — Vector register operand.
11932/// - `vs1` — Vector register operand.
11933/// - `vs2` — Vector register operand.
11934/// - `vm` — Vector mask control.
11935pub trait VfwredsumVsEmitter<T0, T1, T2, T3> {
11936    fn vfwredsum_vs(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
11937}
11938
11939/// RISC-V `vfwredusum.vs` instruction.
11940///
11941/// # Forms
11942/// Assembly: `vfwredusum.vs vm, vs2, vs1, vd`
11943/// Rust: `vfwredusum_vs(vd, vs1, vs2, vm)`
11944///
11945/// # Arguments
11946/// - `vd` — Vector register operand.
11947/// - `vs1` — Vector register operand.
11948/// - `vs2` — Vector register operand.
11949/// - `vm` — Vector mask control.
11950pub trait VfwredusumVsEmitter<T0, T1, T2, T3> {
11951    fn vfwredusum_vs(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
11952}
11953
11954/// RISC-V `vfwsub.vf` instruction.
11955///
11956/// # Forms
11957/// Assembly: `vfwsub.vf vm, vs2, xs1, vd`
11958/// Rust: `vfwsub_vf(vd, vs2, rs1, vm)`
11959///
11960/// # Arguments
11961/// - `vd` — Vector register operand.
11962/// - `vs2` — Vector register operand.
11963/// - `rs1` — Source register.
11964/// - `vm` — Vector mask control.
11965pub trait VfwsubVfEmitter<T0, T1, T2, T3> {
11966    fn vfwsub_vf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
11967}
11968
11969/// RISC-V `vfwsub.vv` instruction.
11970///
11971/// # Forms
11972/// Assembly: `vfwsub.vv vm, vs2, vs1, vd`
11973/// Rust: `vfwsub_vv(vd, vs1, vs2, vm)`
11974///
11975/// # Arguments
11976/// - `vd` — Vector register operand.
11977/// - `vs1` — Vector register operand.
11978/// - `vs2` — Vector register operand.
11979/// - `vm` — Vector mask control.
11980pub trait VfwsubVvEmitter<T0, T1, T2, T3> {
11981    fn vfwsub_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
11982}
11983
11984/// RISC-V `vfwsub.wf` instruction.
11985///
11986/// # Forms
11987/// Assembly: `vfwsub.wf vm, vs2, xs1, vd`
11988/// Rust: `vfwsub_wf(vd, vs2, rs1, vm)`
11989///
11990/// # Arguments
11991/// - `vd` — Vector register operand.
11992/// - `vs2` — Vector register operand.
11993/// - `rs1` — Source register.
11994/// - `vm` — Vector mask control.
11995pub trait VfwsubWfEmitter<T0, T1, T2, T3> {
11996    fn vfwsub_wf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
11997}
11998
11999/// RISC-V `vfwsub.wv` instruction.
12000///
12001/// # Forms
12002/// Assembly: `vfwsub.wv vm, vs2, vs1, vd`
12003/// Rust: `vfwsub_wv(vd, vs1, vs2, vm)`
12004///
12005/// # Arguments
12006/// - `vd` — Vector register operand.
12007/// - `vs1` — Vector register operand.
12008/// - `vs2` — Vector register operand.
12009/// - `vm` — Vector mask control.
12010pub trait VfwsubWvEmitter<T0, T1, T2, T3> {
12011    fn vfwsub_wv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
12012}
12013
12014/// RISC-V `vghsh.vv` instruction.
12015///
12016/// # Forms
12017/// Assembly: `vghsh.vv vs2, vs1, vd`
12018/// Rust: `vghsh_vv(vd, vs1, vs2)`
12019///
12020/// # Arguments
12021/// - `vd` — Vector register operand.
12022/// - `vs1` — Vector register operand.
12023/// - `vs2` — Vector register operand.
12024pub trait VghshVvEmitter<T0, T1, T2> {
12025    fn vghsh_vv(&mut self, vd: T0, vs1: T1, vs2: T2);
12026}
12027
12028/// RISC-V `vgmul.vv` instruction.
12029///
12030/// # Forms
12031/// Assembly: `vgmul.vv vs2, vd`
12032/// Rust: `vgmul_vv(vd, vs2)`
12033///
12034/// # Arguments
12035/// - `vd` — Vector register operand.
12036/// - `vs2` — Vector register operand.
12037pub trait VgmulVvEmitter<T0, T1> {
12038    fn vgmul_vv(&mut self, vd: T0, vs2: T1);
12039}
12040
12041/// RISC-V `vid.v` instruction.
12042///
12043/// # Forms
12044/// Assembly: `vid.v vm, vd`
12045/// Rust: `vid_v(vd, vm)`
12046///
12047/// # Arguments
12048/// - `vd` — Vector register operand.
12049/// - `vm` — Vector mask control.
12050pub trait VidVEmitter<T0, T1> {
12051    fn vid_v(&mut self, vd: T0, vm: T1);
12052}
12053
12054/// RISC-V `viota.m` instruction.
12055///
12056/// # Forms
12057/// Assembly: `viota.m vm, vs2, vd`
12058/// Rust: `viota_m(vd, vs2, vm)`
12059///
12060/// # Arguments
12061/// - `vd` — Vector register operand.
12062/// - `vs2` — Vector register operand.
12063/// - `vm` — Vector mask control.
12064pub trait ViotaMEmitter<T0, T1, T2> {
12065    fn viota_m(&mut self, vd: T0, vs2: T1, vm: T2);
12066}
12067
12068/// RISC-V `vl1r.v` instruction.
12069///
12070/// # Forms
12071/// Assembly: `vl1r.v vd rs1`
12072/// Rust: `vl1r_v(vd, rs1)`
12073///
12074/// # Arguments
12075/// - `vd` — Vector register operand.
12076/// - `rs1` — Memory base register.
12077pub trait Vl1RVEmitter<T0, T1> {
12078    fn vl1r_v(&mut self, vd: T0, rs1: T1);
12079}
12080
12081/// RISC-V `vl1re16.v` instruction.
12082///
12083/// # Forms
12084/// Assembly: `vl1re16.v xs1, vd`
12085/// Rust: `vl1re16_v(vd, rs1)`
12086///
12087/// # Arguments
12088/// - `vd` — Vector register operand.
12089/// - `rs1` — Memory base register.
12090pub trait Vl1Re16VEmitter<T0, T1> {
12091    fn vl1re16_v(&mut self, vd: T0, rs1: T1);
12092}
12093
12094/// RISC-V `vl1re32.v` instruction.
12095///
12096/// # Forms
12097/// Assembly: `vl1re32.v xs1, vd`
12098/// Rust: `vl1re32_v(vd, rs1)`
12099///
12100/// # Arguments
12101/// - `vd` — Vector register operand.
12102/// - `rs1` — Memory base register.
12103pub trait Vl1Re32VEmitter<T0, T1> {
12104    fn vl1re32_v(&mut self, vd: T0, rs1: T1);
12105}
12106
12107/// RISC-V `vl1re64.v` instruction.
12108///
12109/// # Forms
12110/// Assembly: `vl1re64.v xs1, vd`
12111/// Rust: `vl1re64_v(vd, rs1)`
12112///
12113/// # Arguments
12114/// - `vd` — Vector register operand.
12115/// - `rs1` — Memory base register.
12116pub trait Vl1Re64VEmitter<T0, T1> {
12117    fn vl1re64_v(&mut self, vd: T0, rs1: T1);
12118}
12119
12120/// RISC-V `vl1re8.v` instruction.
12121///
12122/// # Forms
12123/// Assembly: `vl1re8.v xs1, vd`
12124/// Rust: `vl1re8_v(vd, rs1)`
12125///
12126/// # Arguments
12127/// - `vd` — Vector register operand.
12128/// - `rs1` — Memory base register.
12129pub trait Vl1Re8VEmitter<T0, T1> {
12130    fn vl1re8_v(&mut self, vd: T0, rs1: T1);
12131}
12132
12133/// RISC-V `vl2r.v` instruction.
12134///
12135/// # Forms
12136/// Assembly: `vl2r.v vd rs1`
12137/// Rust: `vl2r_v(vd, rs1)`
12138///
12139/// # Arguments
12140/// - `vd` — Vector register operand.
12141/// - `rs1` — Memory base register.
12142pub trait Vl2RVEmitter<T0, T1> {
12143    fn vl2r_v(&mut self, vd: T0, rs1: T1);
12144}
12145
12146/// RISC-V `vl2re16.v` instruction.
12147///
12148/// # Forms
12149/// Assembly: `vl2re16.v xs1, vd`
12150/// Rust: `vl2re16_v(vd, rs1)`
12151///
12152/// # Arguments
12153/// - `vd` — Vector register operand.
12154/// - `rs1` — Memory base register.
12155pub trait Vl2Re16VEmitter<T0, T1> {
12156    fn vl2re16_v(&mut self, vd: T0, rs1: T1);
12157}
12158
12159/// RISC-V `vl2re32.v` instruction.
12160///
12161/// # Forms
12162/// Assembly: `vl2re32.v xs1, vd`
12163/// Rust: `vl2re32_v(vd, rs1)`
12164///
12165/// # Arguments
12166/// - `vd` — Vector register operand.
12167/// - `rs1` — Memory base register.
12168pub trait Vl2Re32VEmitter<T0, T1> {
12169    fn vl2re32_v(&mut self, vd: T0, rs1: T1);
12170}
12171
12172/// RISC-V `vl2re64.v` instruction.
12173///
12174/// # Forms
12175/// Assembly: `vl2re64.v xs1, vd`
12176/// Rust: `vl2re64_v(vd, rs1)`
12177///
12178/// # Arguments
12179/// - `vd` — Vector register operand.
12180/// - `rs1` — Memory base register.
12181pub trait Vl2Re64VEmitter<T0, T1> {
12182    fn vl2re64_v(&mut self, vd: T0, rs1: T1);
12183}
12184
12185/// RISC-V `vl2re8.v` instruction.
12186///
12187/// # Forms
12188/// Assembly: `vl2re8.v xs1, vd`
12189/// Rust: `vl2re8_v(vd, rs1)`
12190///
12191/// # Arguments
12192/// - `vd` — Vector register operand.
12193/// - `rs1` — Memory base register.
12194pub trait Vl2Re8VEmitter<T0, T1> {
12195    fn vl2re8_v(&mut self, vd: T0, rs1: T1);
12196}
12197
12198/// RISC-V `vl4r.v` instruction.
12199///
12200/// # Forms
12201/// Assembly: `vl4r.v vd rs1`
12202/// Rust: `vl4r_v(vd, rs1)`
12203///
12204/// # Arguments
12205/// - `vd` — Vector register operand.
12206/// - `rs1` — Memory base register.
12207pub trait Vl4RVEmitter<T0, T1> {
12208    fn vl4r_v(&mut self, vd: T0, rs1: T1);
12209}
12210
12211/// RISC-V `vl4re16.v` instruction.
12212///
12213/// # Forms
12214/// Assembly: `vl4re16.v xs1, vd`
12215/// Rust: `vl4re16_v(vd, rs1)`
12216///
12217/// # Arguments
12218/// - `vd` — Vector register operand.
12219/// - `rs1` — Memory base register.
12220pub trait Vl4Re16VEmitter<T0, T1> {
12221    fn vl4re16_v(&mut self, vd: T0, rs1: T1);
12222}
12223
12224/// RISC-V `vl4re32.v` instruction.
12225///
12226/// # Forms
12227/// Assembly: `vl4re32.v xs1, vd`
12228/// Rust: `vl4re32_v(vd, rs1)`
12229///
12230/// # Arguments
12231/// - `vd` — Vector register operand.
12232/// - `rs1` — Memory base register.
12233pub trait Vl4Re32VEmitter<T0, T1> {
12234    fn vl4re32_v(&mut self, vd: T0, rs1: T1);
12235}
12236
12237/// RISC-V `vl4re64.v` instruction.
12238///
12239/// # Forms
12240/// Assembly: `vl4re64.v xs1, vd`
12241/// Rust: `vl4re64_v(vd, rs1)`
12242///
12243/// # Arguments
12244/// - `vd` — Vector register operand.
12245/// - `rs1` — Memory base register.
12246pub trait Vl4Re64VEmitter<T0, T1> {
12247    fn vl4re64_v(&mut self, vd: T0, rs1: T1);
12248}
12249
12250/// RISC-V `vl4re8.v` instruction.
12251///
12252/// # Forms
12253/// Assembly: `vl4re8.v xs1, vd`
12254/// Rust: `vl4re8_v(vd, rs1)`
12255///
12256/// # Arguments
12257/// - `vd` — Vector register operand.
12258/// - `rs1` — Memory base register.
12259pub trait Vl4Re8VEmitter<T0, T1> {
12260    fn vl4re8_v(&mut self, vd: T0, rs1: T1);
12261}
12262
12263/// RISC-V `vl8r.v` instruction.
12264///
12265/// # Forms
12266/// Assembly: `vl8r.v vd rs1`
12267/// Rust: `vl8r_v(vd, rs1)`
12268///
12269/// # Arguments
12270/// - `vd` — Vector register operand.
12271/// - `rs1` — Memory base register.
12272pub trait Vl8RVEmitter<T0, T1> {
12273    fn vl8r_v(&mut self, vd: T0, rs1: T1);
12274}
12275
12276/// RISC-V `vl8re16.v` instruction.
12277///
12278/// # Forms
12279/// Assembly: `vl8re16.v xs1, vd`
12280/// Rust: `vl8re16_v(vd, rs1)`
12281///
12282/// # Arguments
12283/// - `vd` — Vector register operand.
12284/// - `rs1` — Memory base register.
12285pub trait Vl8Re16VEmitter<T0, T1> {
12286    fn vl8re16_v(&mut self, vd: T0, rs1: T1);
12287}
12288
12289/// RISC-V `vl8re32.v` instruction.
12290///
12291/// # Forms
12292/// Assembly: `vl8re32.v xs1, vd`
12293/// Rust: `vl8re32_v(vd, rs1)`
12294///
12295/// # Arguments
12296/// - `vd` — Vector register operand.
12297/// - `rs1` — Memory base register.
12298pub trait Vl8Re32VEmitter<T0, T1> {
12299    fn vl8re32_v(&mut self, vd: T0, rs1: T1);
12300}
12301
12302/// RISC-V `vl8re64.v` instruction.
12303///
12304/// # Forms
12305/// Assembly: `vl8re64.v xs1, vd`
12306/// Rust: `vl8re64_v(vd, rs1)`
12307///
12308/// # Arguments
12309/// - `vd` — Vector register operand.
12310/// - `rs1` — Memory base register.
12311pub trait Vl8Re64VEmitter<T0, T1> {
12312    fn vl8re64_v(&mut self, vd: T0, rs1: T1);
12313}
12314
12315/// RISC-V `vl8re8.v` instruction.
12316///
12317/// # Forms
12318/// Assembly: `vl8re8.v xs1, vd`
12319/// Rust: `vl8re8_v(vd, rs1)`
12320///
12321/// # Arguments
12322/// - `vd` — Vector register operand.
12323/// - `rs1` — Memory base register.
12324pub trait Vl8Re8VEmitter<T0, T1> {
12325    fn vl8re8_v(&mut self, vd: T0, rs1: T1);
12326}
12327
12328/// RISC-V `vle16.v` instruction.
12329///
12330/// # Forms
12331/// Assembly: `vle16.v vm, xs1, vd`
12332/// Rust: `vle16_v(vd, rs1, vm, nf)`
12333///
12334/// # Arguments
12335/// - `vd` — Vector register operand.
12336/// - `rs1` — Memory base register.
12337/// - `vm` — Vector mask control.
12338/// - `nf` — Vector segment field count.
12339pub trait Vle16VEmitter<T0, T1, T2, T3> {
12340    fn vle16_v(&mut self, vd: T0, rs1: T1, vm: T2, nf: T3);
12341}
12342
12343/// RISC-V `vle16ff.v` instruction.
12344///
12345/// # Forms
12346/// Assembly: `vle16ff.v vm, xs1, vd`
12347/// Rust: `vle16ff_v(vd, rs1, vm, nf)`
12348///
12349/// # Arguments
12350/// - `vd` — Vector register operand.
12351/// - `rs1` — Memory base register.
12352/// - `vm` — Vector mask control.
12353/// - `nf` — Vector segment field count.
12354pub trait Vle16FfVEmitter<T0, T1, T2, T3> {
12355    fn vle16ff_v(&mut self, vd: T0, rs1: T1, vm: T2, nf: T3);
12356}
12357
12358/// RISC-V `vle1.v` instruction.
12359///
12360/// # Forms
12361/// Assembly: `vle1.v vd rs1`
12362/// Rust: `vle1_v(vd, rs1)`
12363///
12364/// # Arguments
12365/// - `vd` — Vector register operand.
12366/// - `rs1` — Memory base register.
12367pub trait Vle1VEmitter<T0, T1> {
12368    fn vle1_v(&mut self, vd: T0, rs1: T1);
12369}
12370
12371/// RISC-V `vle32.v` instruction.
12372///
12373/// # Forms
12374/// Assembly: `vle32.v vm, xs1, vd`
12375/// Rust: `vle32_v(vd, rs1, vm, nf)`
12376///
12377/// # Arguments
12378/// - `vd` — Vector register operand.
12379/// - `rs1` — Memory base register.
12380/// - `vm` — Vector mask control.
12381/// - `nf` — Vector segment field count.
12382pub trait Vle32VEmitter<T0, T1, T2, T3> {
12383    fn vle32_v(&mut self, vd: T0, rs1: T1, vm: T2, nf: T3);
12384}
12385
12386/// RISC-V `vle32ff.v` instruction.
12387///
12388/// # Forms
12389/// Assembly: `vle32ff.v vm, xs1, vd`
12390/// Rust: `vle32ff_v(vd, rs1, vm, nf)`
12391///
12392/// # Arguments
12393/// - `vd` — Vector register operand.
12394/// - `rs1` — Memory base register.
12395/// - `vm` — Vector mask control.
12396/// - `nf` — Vector segment field count.
12397pub trait Vle32FfVEmitter<T0, T1, T2, T3> {
12398    fn vle32ff_v(&mut self, vd: T0, rs1: T1, vm: T2, nf: T3);
12399}
12400
12401/// RISC-V `vle64.v` instruction.
12402///
12403/// # Forms
12404/// Assembly: `vle64.v vm, xs1, vd`
12405/// Rust: `vle64_v(vd, rs1, vm, nf)`
12406///
12407/// # Arguments
12408/// - `vd` — Vector register operand.
12409/// - `rs1` — Memory base register.
12410/// - `vm` — Vector mask control.
12411/// - `nf` — Vector segment field count.
12412pub trait Vle64VEmitter<T0, T1, T2, T3> {
12413    fn vle64_v(&mut self, vd: T0, rs1: T1, vm: T2, nf: T3);
12414}
12415
12416/// RISC-V `vle64ff.v` instruction.
12417///
12418/// # Forms
12419/// Assembly: `vle64ff.v vm, xs1, vd`
12420/// Rust: `vle64ff_v(vd, rs1, vm, nf)`
12421///
12422/// # Arguments
12423/// - `vd` — Vector register operand.
12424/// - `rs1` — Memory base register.
12425/// - `vm` — Vector mask control.
12426/// - `nf` — Vector segment field count.
12427pub trait Vle64FfVEmitter<T0, T1, T2, T3> {
12428    fn vle64ff_v(&mut self, vd: T0, rs1: T1, vm: T2, nf: T3);
12429}
12430
12431/// RISC-V `vle8.v` instruction.
12432///
12433/// # Forms
12434/// Assembly: `vle8.v vm, xs1, vd`
12435/// Rust: `vle8_v(vd, rs1, vm, nf)`
12436///
12437/// # Arguments
12438/// - `vd` — Vector register operand.
12439/// - `rs1` — Memory base register.
12440/// - `vm` — Vector mask control.
12441/// - `nf` — Vector segment field count.
12442pub trait Vle8VEmitter<T0, T1, T2, T3> {
12443    fn vle8_v(&mut self, vd: T0, rs1: T1, vm: T2, nf: T3);
12444}
12445
12446/// RISC-V `vle8ff.v` instruction.
12447///
12448/// # Forms
12449/// Assembly: `vle8ff.v vm, xs1, vd`
12450/// Rust: `vle8ff_v(vd, rs1, vm, nf)`
12451///
12452/// # Arguments
12453/// - `vd` — Vector register operand.
12454/// - `rs1` — Memory base register.
12455/// - `vm` — Vector mask control.
12456/// - `nf` — Vector segment field count.
12457pub trait Vle8FfVEmitter<T0, T1, T2, T3> {
12458    fn vle8ff_v(&mut self, vd: T0, rs1: T1, vm: T2, nf: T3);
12459}
12460
12461/// RISC-V `vlm.v` instruction.
12462///
12463/// # Forms
12464/// Assembly: `vlm.v xs1, vd`
12465/// Rust: `vlm_v(vd, rs1)`
12466///
12467/// # Arguments
12468/// - `vd` — Vector register operand.
12469/// - `rs1` — Memory base register.
12470pub trait VlmVEmitter<T0, T1> {
12471    fn vlm_v(&mut self, vd: T0, rs1: T1);
12472}
12473
12474/// RISC-V `vloxei16.v` instruction.
12475///
12476/// # Forms
12477/// Assembly: `vloxei16.v vm, vs2, xs1, vd`
12478/// Rust: `vloxei16_v(vd, rs1, vs2, vm, nf)`
12479///
12480/// # Arguments
12481/// - `vd` — Vector register operand.
12482/// - `rs1` — Memory base register.
12483/// - `vs2` — Vector register operand.
12484/// - `vm` — Vector mask control.
12485/// - `nf` — Vector segment field count.
12486pub trait Vloxei16VEmitter<T0, T1, T2, T3, T4> {
12487    fn vloxei16_v(&mut self, vd: T0, rs1: T1, vs2: T2, vm: T3, nf: T4);
12488}
12489
12490/// RISC-V `vloxei32.v` instruction.
12491///
12492/// # Forms
12493/// Assembly: `vloxei32.v vm, vs2, xs1, vd`
12494/// Rust: `vloxei32_v(vd, rs1, vs2, vm, nf)`
12495///
12496/// # Arguments
12497/// - `vd` — Vector register operand.
12498/// - `rs1` — Memory base register.
12499/// - `vs2` — Vector register operand.
12500/// - `vm` — Vector mask control.
12501/// - `nf` — Vector segment field count.
12502pub trait Vloxei32VEmitter<T0, T1, T2, T3, T4> {
12503    fn vloxei32_v(&mut self, vd: T0, rs1: T1, vs2: T2, vm: T3, nf: T4);
12504}
12505
12506/// RISC-V `vloxei64.v` instruction.
12507///
12508/// # Forms
12509/// Assembly: `vloxei64.v vm, vs2, xs1, vd`
12510/// Rust: `vloxei64_v(vd, rs1, vs2, vm, nf)`
12511///
12512/// # Arguments
12513/// - `vd` — Vector register operand.
12514/// - `rs1` — Memory base register.
12515/// - `vs2` — Vector register operand.
12516/// - `vm` — Vector mask control.
12517/// - `nf` — Vector segment field count.
12518pub trait Vloxei64VEmitter<T0, T1, T2, T3, T4> {
12519    fn vloxei64_v(&mut self, vd: T0, rs1: T1, vs2: T2, vm: T3, nf: T4);
12520}
12521
12522/// RISC-V `vloxei8.v` instruction.
12523///
12524/// # Forms
12525/// Assembly: `vloxei8.v vm, vs2, xs1, vd`
12526/// Rust: `vloxei8_v(vd, rs1, vs2, vm, nf)`
12527///
12528/// # Arguments
12529/// - `vd` — Vector register operand.
12530/// - `rs1` — Memory base register.
12531/// - `vs2` — Vector register operand.
12532/// - `vm` — Vector mask control.
12533/// - `nf` — Vector segment field count.
12534pub trait Vloxei8VEmitter<T0, T1, T2, T3, T4> {
12535    fn vloxei8_v(&mut self, vd: T0, rs1: T1, vs2: T2, vm: T3, nf: T4);
12536}
12537
12538/// RISC-V `vlse16.v` instruction.
12539///
12540/// # Forms
12541/// Assembly: `vlse16.v vm, xs2, xs1, vd`
12542/// Rust: `vlse16_v(vd, rs1, rs2, vm, nf)`
12543///
12544/// # Arguments
12545/// - `vd` — Vector register operand.
12546/// - `rs1` — Memory base register.
12547/// - `rs2` — Source register.
12548/// - `vm` — Vector mask control.
12549/// - `nf` — Vector segment field count.
12550pub trait Vlse16VEmitter<T0, T1, T2, T3, T4> {
12551    fn vlse16_v(&mut self, vd: T0, rs1: T1, rs2: T2, vm: T3, nf: T4);
12552}
12553
12554/// RISC-V `vlse32.v` instruction.
12555///
12556/// # Forms
12557/// Assembly: `vlse32.v vm, xs2, xs1, vd`
12558/// Rust: `vlse32_v(vd, rs1, rs2, vm, nf)`
12559///
12560/// # Arguments
12561/// - `vd` — Vector register operand.
12562/// - `rs1` — Memory base register.
12563/// - `rs2` — Source register.
12564/// - `vm` — Vector mask control.
12565/// - `nf` — Vector segment field count.
12566pub trait Vlse32VEmitter<T0, T1, T2, T3, T4> {
12567    fn vlse32_v(&mut self, vd: T0, rs1: T1, rs2: T2, vm: T3, nf: T4);
12568}
12569
12570/// RISC-V `vlse64.v` instruction.
12571///
12572/// # Forms
12573/// Assembly: `vlse64.v vm, xs2, xs1, vd`
12574/// Rust: `vlse64_v(vd, rs1, rs2, vm, nf)`
12575///
12576/// # Arguments
12577/// - `vd` — Vector register operand.
12578/// - `rs1` — Memory base register.
12579/// - `rs2` — Source register.
12580/// - `vm` — Vector mask control.
12581/// - `nf` — Vector segment field count.
12582pub trait Vlse64VEmitter<T0, T1, T2, T3, T4> {
12583    fn vlse64_v(&mut self, vd: T0, rs1: T1, rs2: T2, vm: T3, nf: T4);
12584}
12585
12586/// RISC-V `vlse8.v` instruction.
12587///
12588/// # Forms
12589/// Assembly: `vlse8.v vm, xs2, xs1, vd`
12590/// Rust: `vlse8_v(vd, rs1, rs2, vm, nf)`
12591///
12592/// # Arguments
12593/// - `vd` — Vector register operand.
12594/// - `rs1` — Memory base register.
12595/// - `rs2` — Source register.
12596/// - `vm` — Vector mask control.
12597/// - `nf` — Vector segment field count.
12598pub trait Vlse8VEmitter<T0, T1, T2, T3, T4> {
12599    fn vlse8_v(&mut self, vd: T0, rs1: T1, rs2: T2, vm: T3, nf: T4);
12600}
12601
12602/// RISC-V `vluxei16.v` instruction.
12603///
12604/// # Forms
12605/// Assembly: `vluxei16.v vm, vs2, xs1, vd`
12606/// Rust: `vluxei16_v(vd, rs1, vs2, vm, nf)`
12607///
12608/// # Arguments
12609/// - `vd` — Vector register operand.
12610/// - `rs1` — Memory base register.
12611/// - `vs2` — Vector register operand.
12612/// - `vm` — Vector mask control.
12613/// - `nf` — Vector segment field count.
12614pub trait Vluxei16VEmitter<T0, T1, T2, T3, T4> {
12615    fn vluxei16_v(&mut self, vd: T0, rs1: T1, vs2: T2, vm: T3, nf: T4);
12616}
12617
12618/// RISC-V `vluxei32.v` instruction.
12619///
12620/// # Forms
12621/// Assembly: `vluxei32.v vm, vs2, xs1, vd`
12622/// Rust: `vluxei32_v(vd, rs1, vs2, vm, nf)`
12623///
12624/// # Arguments
12625/// - `vd` — Vector register operand.
12626/// - `rs1` — Memory base register.
12627/// - `vs2` — Vector register operand.
12628/// - `vm` — Vector mask control.
12629/// - `nf` — Vector segment field count.
12630pub trait Vluxei32VEmitter<T0, T1, T2, T3, T4> {
12631    fn vluxei32_v(&mut self, vd: T0, rs1: T1, vs2: T2, vm: T3, nf: T4);
12632}
12633
12634/// RISC-V `vluxei64.v` instruction.
12635///
12636/// # Forms
12637/// Assembly: `vluxei64.v vm, vs2, xs1, vd`
12638/// Rust: `vluxei64_v(vd, rs1, vs2, vm, nf)`
12639///
12640/// # Arguments
12641/// - `vd` — Vector register operand.
12642/// - `rs1` — Memory base register.
12643/// - `vs2` — Vector register operand.
12644/// - `vm` — Vector mask control.
12645/// - `nf` — Vector segment field count.
12646pub trait Vluxei64VEmitter<T0, T1, T2, T3, T4> {
12647    fn vluxei64_v(&mut self, vd: T0, rs1: T1, vs2: T2, vm: T3, nf: T4);
12648}
12649
12650/// RISC-V `vluxei8.v` instruction.
12651///
12652/// # Forms
12653/// Assembly: `vluxei8.v vm, vs2, xs1, vd`
12654/// Rust: `vluxei8_v(vd, rs1, vs2, vm, nf)`
12655///
12656/// # Arguments
12657/// - `vd` — Vector register operand.
12658/// - `rs1` — Memory base register.
12659/// - `vs2` — Vector register operand.
12660/// - `vm` — Vector mask control.
12661/// - `nf` — Vector segment field count.
12662pub trait Vluxei8VEmitter<T0, T1, T2, T3, T4> {
12663    fn vluxei8_v(&mut self, vd: T0, rs1: T1, vs2: T2, vm: T3, nf: T4);
12664}
12665
12666/// RISC-V `vmacc.vv` instruction.
12667///
12668/// # Forms
12669/// Assembly: `vmacc.vv vm, vs2, vs1, vd`
12670/// Rust: `vmacc_vv(vd, vs1, vs2, vm)`
12671///
12672/// # Arguments
12673/// - `vd` — Vector register operand.
12674/// - `vs1` — Vector register operand.
12675/// - `vs2` — Vector register operand.
12676/// - `vm` — Vector mask control.
12677pub trait VmaccVvEmitter<T0, T1, T2, T3> {
12678    fn vmacc_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
12679}
12680
12681/// RISC-V `vmacc.vx` instruction.
12682///
12683/// # Forms
12684/// Assembly: `vmacc.vx vm, vs2, xs1, vd`
12685/// Rust: `vmacc_vx(vd, vs2, rs1, vm)`
12686///
12687/// # Arguments
12688/// - `vd` — Vector register operand.
12689/// - `vs2` — Vector register operand.
12690/// - `rs1` — Source register.
12691/// - `vm` — Vector mask control.
12692pub trait VmaccVxEmitter<T0, T1, T2, T3> {
12693    fn vmacc_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
12694}
12695
12696/// RISC-V `vmadc.vi` instruction.
12697///
12698/// # Forms
12699/// Assembly: `vmadc.vi vs2, vd, imm`
12700/// Rust: `vmadc_vi(vd, vs2, simm5)`
12701///
12702/// # Arguments
12703/// - `vd` — Vector register operand.
12704/// - `vs2` — Vector register operand.
12705/// - `simm5` — Immediate encoding value.
12706pub trait VmadcViEmitter<T0, T1, T2> {
12707    fn vmadc_vi(&mut self, vd: T0, vs2: T1, simm5: T2);
12708}
12709
12710/// RISC-V `vmadc.vim` instruction.
12711///
12712/// # Forms
12713/// Assembly: `vmadc.vim vs2, vd, imm`
12714/// Rust: `vmadc_vim(vd, vs2, simm5)`
12715///
12716/// # Arguments
12717/// - `vd` — Vector register operand.
12718/// - `vs2` — Vector register operand.
12719/// - `simm5` — Immediate encoding value.
12720pub trait VmadcVimEmitter<T0, T1, T2> {
12721    fn vmadc_vim(&mut self, vd: T0, vs2: T1, simm5: T2);
12722}
12723
12724/// RISC-V `vmadc.vv` instruction.
12725///
12726/// # Forms
12727/// Assembly: `vmadc.vv vs2, vs1, vd`
12728/// Rust: `vmadc_vv(vd, vs1, vs2)`
12729///
12730/// # Arguments
12731/// - `vd` — Vector register operand.
12732/// - `vs1` — Vector register operand.
12733/// - `vs2` — Vector register operand.
12734pub trait VmadcVvEmitter<T0, T1, T2> {
12735    fn vmadc_vv(&mut self, vd: T0, vs1: T1, vs2: T2);
12736}
12737
12738/// RISC-V `vmadc.vvm` instruction.
12739///
12740/// # Forms
12741/// Assembly: `vmadc.vvm vs2, vs1, vd`
12742/// Rust: `vmadc_vvm(vd, vs1, vs2)`
12743///
12744/// # Arguments
12745/// - `vd` — Vector register operand.
12746/// - `vs1` — Vector register operand.
12747/// - `vs2` — Vector register operand.
12748pub trait VmadcVvmEmitter<T0, T1, T2> {
12749    fn vmadc_vvm(&mut self, vd: T0, vs1: T1, vs2: T2);
12750}
12751
12752/// RISC-V `vmadc.vx` instruction.
12753///
12754/// # Forms
12755/// Assembly: `vmadc.vx vs2, xs1, vd`
12756/// Rust: `vmadc_vx(vd, rs1, vs2)`
12757///
12758/// # Arguments
12759/// - `vd` — Vector register operand.
12760/// - `rs1` — Source register.
12761/// - `vs2` — Vector register operand.
12762pub trait VmadcVxEmitter<T0, T1, T2> {
12763    fn vmadc_vx(&mut self, vd: T0, rs1: T1, vs2: T2);
12764}
12765
12766/// RISC-V `vmadc.vxm` instruction.
12767///
12768/// # Forms
12769/// Assembly: `vmadc.vxm vs2, xs1, vd`
12770/// Rust: `vmadc_vxm(vd, rs1, vs2)`
12771///
12772/// # Arguments
12773/// - `vd` — Vector register operand.
12774/// - `rs1` — Source register.
12775/// - `vs2` — Vector register operand.
12776pub trait VmadcVxmEmitter<T0, T1, T2> {
12777    fn vmadc_vxm(&mut self, vd: T0, rs1: T1, vs2: T2);
12778}
12779
12780/// RISC-V `vmadd.vv` instruction.
12781///
12782/// # Forms
12783/// Assembly: `vmadd.vv vm, vs2, vs1, vd`
12784/// Rust: `vmadd_vv(vd, vs1, vs2, vm)`
12785///
12786/// # Arguments
12787/// - `vd` — Vector register operand.
12788/// - `vs1` — Vector register operand.
12789/// - `vs2` — Vector register operand.
12790/// - `vm` — Vector mask control.
12791pub trait VmaddVvEmitter<T0, T1, T2, T3> {
12792    fn vmadd_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
12793}
12794
12795/// RISC-V `vmadd.vx` instruction.
12796///
12797/// # Forms
12798/// Assembly: `vmadd.vx vm, vs2, xs1, vd`
12799/// Rust: `vmadd_vx(vd, vs2, rs1, vm)`
12800///
12801/// # Arguments
12802/// - `vd` — Vector register operand.
12803/// - `vs2` — Vector register operand.
12804/// - `rs1` — Source register.
12805/// - `vm` — Vector mask control.
12806pub trait VmaddVxEmitter<T0, T1, T2, T3> {
12807    fn vmadd_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
12808}
12809
12810/// RISC-V `vmand.mm` instruction.
12811///
12812/// # Forms
12813/// Assembly: `vmand.mm vs2, vs1, vd`
12814/// Rust: `vmand_mm(vd, vs1, vs2)`
12815///
12816/// # Arguments
12817/// - `vd` — Vector register operand.
12818/// - `vs1` — Vector register operand.
12819/// - `vs2` — Vector register operand.
12820pub trait VmandMmEmitter<T0, T1, T2> {
12821    fn vmand_mm(&mut self, vd: T0, vs1: T1, vs2: T2);
12822}
12823
12824/// RISC-V `vmandn.mm` instruction.
12825///
12826/// # Forms
12827/// Assembly: `vmandn.mm vs2, vs1, vd`
12828/// Rust: `vmandn_mm(vd, vs1, vs2)`
12829///
12830/// # Arguments
12831/// - `vd` — Vector register operand.
12832/// - `vs1` — Vector register operand.
12833/// - `vs2` — Vector register operand.
12834pub trait VmandnMmEmitter<T0, T1, T2> {
12835    fn vmandn_mm(&mut self, vd: T0, vs1: T1, vs2: T2);
12836}
12837
12838/// RISC-V `vmandnot.mm` instruction.
12839///
12840/// # Forms
12841/// Assembly: `vmandnot.mm vd vs1 vs2 vm`
12842/// Rust: `vmandnot_mm(vd, vs1, vs2, vm)`
12843///
12844/// # Arguments
12845/// - `vd` — Vector register operand.
12846/// - `vs1` — Vector register operand.
12847/// - `vs2` — Vector register operand.
12848/// - `vm` — Vector mask control.
12849pub trait VmandnotMmEmitter<T0, T1, T2, T3> {
12850    fn vmandnot_mm(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
12851}
12852
12853/// RISC-V `vmax.vv` instruction.
12854///
12855/// # Forms
12856/// Assembly: `vmax.vv vm, vs2, vs1, vd`
12857/// Rust: `vmax_vv(vd, vs1, vs2, vm)`
12858///
12859/// # Arguments
12860/// - `vd` — Vector register operand.
12861/// - `vs1` — Vector register operand.
12862/// - `vs2` — Vector register operand.
12863/// - `vm` — Vector mask control.
12864pub trait VmaxVvEmitter<T0, T1, T2, T3> {
12865    fn vmax_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
12866}
12867
12868/// RISC-V `vmax.vx` instruction.
12869///
12870/// # Forms
12871/// Assembly: `vmax.vx vm, vs2, xs1, vd`
12872/// Rust: `vmax_vx(vd, vs2, rs1, vm)`
12873///
12874/// # Arguments
12875/// - `vd` — Vector register operand.
12876/// - `vs2` — Vector register operand.
12877/// - `rs1` — Source register.
12878/// - `vm` — Vector mask control.
12879pub trait VmaxVxEmitter<T0, T1, T2, T3> {
12880    fn vmax_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
12881}
12882
12883/// RISC-V `vmaxu.vv` instruction.
12884///
12885/// # Forms
12886/// Assembly: `vmaxu.vv vm, vs2, vs1, vd`
12887/// Rust: `vmaxu_vv(vd, vs1, vs2, vm)`
12888///
12889/// # Arguments
12890/// - `vd` — Vector register operand.
12891/// - `vs1` — Vector register operand.
12892/// - `vs2` — Vector register operand.
12893/// - `vm` — Vector mask control.
12894pub trait VmaxuVvEmitter<T0, T1, T2, T3> {
12895    fn vmaxu_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
12896}
12897
12898/// RISC-V `vmaxu.vx` instruction.
12899///
12900/// # Forms
12901/// Assembly: `vmaxu.vx vm, vs2, xs1, vd`
12902/// Rust: `vmaxu_vx(vd, vs2, rs1, vm)`
12903///
12904/// # Arguments
12905/// - `vd` — Vector register operand.
12906/// - `vs2` — Vector register operand.
12907/// - `rs1` — Source register.
12908/// - `vm` — Vector mask control.
12909pub trait VmaxuVxEmitter<T0, T1, T2, T3> {
12910    fn vmaxu_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
12911}
12912
12913/// RISC-V `vmerge.vim` instruction.
12914///
12915/// # Forms
12916/// Assembly: `vmerge.vim vs2, vd, imm`
12917/// Rust: `vmerge_vim(vd, vs2, simm5)`
12918///
12919/// # Arguments
12920/// - `vd` — Vector register operand.
12921/// - `vs2` — Vector register operand.
12922/// - `simm5` — Immediate encoding value.
12923pub trait VmergeVimEmitter<T0, T1, T2> {
12924    fn vmerge_vim(&mut self, vd: T0, vs2: T1, simm5: T2);
12925}
12926
12927/// RISC-V `vmerge.vvm` instruction.
12928///
12929/// # Forms
12930/// Assembly: `vmerge.vvm vs2, vs1, vd`
12931/// Rust: `vmerge_vvm(vd, vs1, vs2)`
12932///
12933/// # Arguments
12934/// - `vd` — Vector register operand.
12935/// - `vs1` — Vector register operand.
12936/// - `vs2` — Vector register operand.
12937pub trait VmergeVvmEmitter<T0, T1, T2> {
12938    fn vmerge_vvm(&mut self, vd: T0, vs1: T1, vs2: T2);
12939}
12940
12941/// RISC-V `vmerge.vxm` instruction.
12942///
12943/// # Forms
12944/// Assembly: `vmerge.vxm vs2, xs1, vd`
12945/// Rust: `vmerge_vxm(vd, rs1, vs2)`
12946///
12947/// # Arguments
12948/// - `vd` — Vector register operand.
12949/// - `rs1` — Source register.
12950/// - `vs2` — Vector register operand.
12951pub trait VmergeVxmEmitter<T0, T1, T2> {
12952    fn vmerge_vxm(&mut self, vd: T0, rs1: T1, vs2: T2);
12953}
12954
12955/// RISC-V `vmfeq.vf` instruction.
12956///
12957/// # Forms
12958/// Assembly: `vmfeq.vf vm, vs2, xs1, vd`
12959/// Rust: `vmfeq_vf(vd, vs2, rs1, vm)`
12960///
12961/// # Arguments
12962/// - `vd` — Vector register operand.
12963/// - `vs2` — Vector register operand.
12964/// - `rs1` — Source register.
12965/// - `vm` — Vector mask control.
12966pub trait VmfeqVfEmitter<T0, T1, T2, T3> {
12967    fn vmfeq_vf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
12968}
12969
12970/// RISC-V `vmfeq.vv` instruction.
12971///
12972/// # Forms
12973/// Assembly: `vmfeq.vv vm, vs2, vs1, vd`
12974/// Rust: `vmfeq_vv(vd, vs1, vs2, vm)`
12975///
12976/// # Arguments
12977/// - `vd` — Vector register operand.
12978/// - `vs1` — Vector register operand.
12979/// - `vs2` — Vector register operand.
12980/// - `vm` — Vector mask control.
12981pub trait VmfeqVvEmitter<T0, T1, T2, T3> {
12982    fn vmfeq_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
12983}
12984
12985/// RISC-V `vmfge.vf` instruction.
12986///
12987/// # Forms
12988/// Assembly: `vmfge.vf vm, vs2, xs1, vd`
12989/// Rust: `vmfge_vf(vd, vs2, rs1, vm)`
12990///
12991/// # Arguments
12992/// - `vd` — Vector register operand.
12993/// - `vs2` — Vector register operand.
12994/// - `rs1` — Source register.
12995/// - `vm` — Vector mask control.
12996pub trait VmfgeVfEmitter<T0, T1, T2, T3> {
12997    fn vmfge_vf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
12998}
12999
13000/// RISC-V `vmfgt.vf` instruction.
13001///
13002/// # Forms
13003/// Assembly: `vmfgt.vf vm, vs2, xs1, vd`
13004/// Rust: `vmfgt_vf(vd, vs2, rs1, vm)`
13005///
13006/// # Arguments
13007/// - `vd` — Vector register operand.
13008/// - `vs2` — Vector register operand.
13009/// - `rs1` — Source register.
13010/// - `vm` — Vector mask control.
13011pub trait VmfgtVfEmitter<T0, T1, T2, T3> {
13012    fn vmfgt_vf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
13013}
13014
13015/// RISC-V `vmfle.vf` instruction.
13016///
13017/// # Forms
13018/// Assembly: `vmfle.vf vm, vs2, xs1, vd`
13019/// Rust: `vmfle_vf(vd, vs2, rs1, vm)`
13020///
13021/// # Arguments
13022/// - `vd` — Vector register operand.
13023/// - `vs2` — Vector register operand.
13024/// - `rs1` — Source register.
13025/// - `vm` — Vector mask control.
13026pub trait VmfleVfEmitter<T0, T1, T2, T3> {
13027    fn vmfle_vf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
13028}
13029
13030/// RISC-V `vmfle.vv` instruction.
13031///
13032/// # Forms
13033/// Assembly: `vmfle.vv vm, vs2, vs1, vd`
13034/// Rust: `vmfle_vv(vd, vs1, vs2, vm)`
13035///
13036/// # Arguments
13037/// - `vd` — Vector register operand.
13038/// - `vs1` — Vector register operand.
13039/// - `vs2` — Vector register operand.
13040/// - `vm` — Vector mask control.
13041pub trait VmfleVvEmitter<T0, T1, T2, T3> {
13042    fn vmfle_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
13043}
13044
13045/// RISC-V `vmflt.vf` instruction.
13046///
13047/// # Forms
13048/// Assembly: `vmflt.vf vm, vs2, xs1, vd`
13049/// Rust: `vmflt_vf(vd, vs2, rs1, vm)`
13050///
13051/// # Arguments
13052/// - `vd` — Vector register operand.
13053/// - `vs2` — Vector register operand.
13054/// - `rs1` — Source register.
13055/// - `vm` — Vector mask control.
13056pub trait VmfltVfEmitter<T0, T1, T2, T3> {
13057    fn vmflt_vf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
13058}
13059
13060/// RISC-V `vmflt.vv` instruction.
13061///
13062/// # Forms
13063/// Assembly: `vmflt.vv vm, vs2, vs1, vd`
13064/// Rust: `vmflt_vv(vd, vs1, vs2, vm)`
13065///
13066/// # Arguments
13067/// - `vd` — Vector register operand.
13068/// - `vs1` — Vector register operand.
13069/// - `vs2` — Vector register operand.
13070/// - `vm` — Vector mask control.
13071pub trait VmfltVvEmitter<T0, T1, T2, T3> {
13072    fn vmflt_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
13073}
13074
13075/// RISC-V `vmfne.vf` instruction.
13076///
13077/// # Forms
13078/// Assembly: `vmfne.vf vm, vs2, xs1, vd`
13079/// Rust: `vmfne_vf(vd, vs2, rs1, vm)`
13080///
13081/// # Arguments
13082/// - `vd` — Vector register operand.
13083/// - `vs2` — Vector register operand.
13084/// - `rs1` — Source register.
13085/// - `vm` — Vector mask control.
13086pub trait VmfneVfEmitter<T0, T1, T2, T3> {
13087    fn vmfne_vf(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
13088}
13089
13090/// RISC-V `vmfne.vv` instruction.
13091///
13092/// # Forms
13093/// Assembly: `vmfne.vv vm, vs2, vs1, vd`
13094/// Rust: `vmfne_vv(vd, vs1, vs2, vm)`
13095///
13096/// # Arguments
13097/// - `vd` — Vector register operand.
13098/// - `vs1` — Vector register operand.
13099/// - `vs2` — Vector register operand.
13100/// - `vm` — Vector mask control.
13101pub trait VmfneVvEmitter<T0, T1, T2, T3> {
13102    fn vmfne_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
13103}
13104
13105/// RISC-V `vmin.vv` instruction.
13106///
13107/// # Forms
13108/// Assembly: `vmin.vv vm, vs2, vs1, vd`
13109/// Rust: `vmin_vv(vd, vs1, vs2, vm)`
13110///
13111/// # Arguments
13112/// - `vd` — Vector register operand.
13113/// - `vs1` — Vector register operand.
13114/// - `vs2` — Vector register operand.
13115/// - `vm` — Vector mask control.
13116pub trait VminVvEmitter<T0, T1, T2, T3> {
13117    fn vmin_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
13118}
13119
13120/// RISC-V `vmin.vx` instruction.
13121///
13122/// # Forms
13123/// Assembly: `vmin.vx vm, vs2, xs1, vd`
13124/// Rust: `vmin_vx(vd, vs2, rs1, vm)`
13125///
13126/// # Arguments
13127/// - `vd` — Vector register operand.
13128/// - `vs2` — Vector register operand.
13129/// - `rs1` — Source register.
13130/// - `vm` — Vector mask control.
13131pub trait VminVxEmitter<T0, T1, T2, T3> {
13132    fn vmin_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
13133}
13134
13135/// RISC-V `vminu.vv` instruction.
13136///
13137/// # Forms
13138/// Assembly: `vminu.vv vm, vs2, vs1, vd`
13139/// Rust: `vminu_vv(vd, vs1, vs2, vm)`
13140///
13141/// # Arguments
13142/// - `vd` — Vector register operand.
13143/// - `vs1` — Vector register operand.
13144/// - `vs2` — Vector register operand.
13145/// - `vm` — Vector mask control.
13146pub trait VminuVvEmitter<T0, T1, T2, T3> {
13147    fn vminu_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
13148}
13149
13150/// RISC-V `vminu.vx` instruction.
13151///
13152/// # Forms
13153/// Assembly: `vminu.vx vm, vs2, xs1, vd`
13154/// Rust: `vminu_vx(vd, vs2, rs1, vm)`
13155///
13156/// # Arguments
13157/// - `vd` — Vector register operand.
13158/// - `vs2` — Vector register operand.
13159/// - `rs1` — Source register.
13160/// - `vm` — Vector mask control.
13161pub trait VminuVxEmitter<T0, T1, T2, T3> {
13162    fn vminu_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
13163}
13164
13165/// RISC-V `vmnand.mm` instruction.
13166///
13167/// # Forms
13168/// Assembly: `vmnand.mm vs2, vs1, vd`
13169/// Rust: `vmnand_mm(vd, vs1, vs2)`
13170///
13171/// # Arguments
13172/// - `vd` — Vector register operand.
13173/// - `vs1` — Vector register operand.
13174/// - `vs2` — Vector register operand.
13175pub trait VmnandMmEmitter<T0, T1, T2> {
13176    fn vmnand_mm(&mut self, vd: T0, vs1: T1, vs2: T2);
13177}
13178
13179/// RISC-V `vmnor.mm` instruction.
13180///
13181/// # Forms
13182/// Assembly: `vmnor.mm vs2, vs1, vd`
13183/// Rust: `vmnor_mm(vd, vs1, vs2)`
13184///
13185/// # Arguments
13186/// - `vd` — Vector register operand.
13187/// - `vs1` — Vector register operand.
13188/// - `vs2` — Vector register operand.
13189pub trait VmnorMmEmitter<T0, T1, T2> {
13190    fn vmnor_mm(&mut self, vd: T0, vs1: T1, vs2: T2);
13191}
13192
13193/// RISC-V `vmor.mm` instruction.
13194///
13195/// # Forms
13196/// Assembly: `vmor.mm vs2, vs1, vd`
13197/// Rust: `vmor_mm(vd, vs1, vs2)`
13198///
13199/// # Arguments
13200/// - `vd` — Vector register operand.
13201/// - `vs1` — Vector register operand.
13202/// - `vs2` — Vector register operand.
13203pub trait VmorMmEmitter<T0, T1, T2> {
13204    fn vmor_mm(&mut self, vd: T0, vs1: T1, vs2: T2);
13205}
13206
13207/// RISC-V `vmorn.mm` instruction.
13208///
13209/// # Forms
13210/// Assembly: `vmorn.mm vs2, vs1, vd`
13211/// Rust: `vmorn_mm(vd, vs1, vs2)`
13212///
13213/// # Arguments
13214/// - `vd` — Vector register operand.
13215/// - `vs1` — Vector register operand.
13216/// - `vs2` — Vector register operand.
13217pub trait VmornMmEmitter<T0, T1, T2> {
13218    fn vmorn_mm(&mut self, vd: T0, vs1: T1, vs2: T2);
13219}
13220
13221/// RISC-V `vmornot.mm` instruction.
13222///
13223/// # Forms
13224/// Assembly: `vmornot.mm vd vs1 vs2 vm`
13225/// Rust: `vmornot_mm(vd, vs1, vs2, vm)`
13226///
13227/// # Arguments
13228/// - `vd` — Vector register operand.
13229/// - `vs1` — Vector register operand.
13230/// - `vs2` — Vector register operand.
13231/// - `vm` — Vector mask control.
13232pub trait VmornotMmEmitter<T0, T1, T2, T3> {
13233    fn vmornot_mm(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
13234}
13235
13236/// RISC-V `vmsbc.vv` instruction.
13237///
13238/// # Forms
13239/// Assembly: `vmsbc.vv vs2, vs1, vd`
13240/// Rust: `vmsbc_vv(vd, vs1, vs2)`
13241///
13242/// # Arguments
13243/// - `vd` — Vector register operand.
13244/// - `vs1` — Vector register operand.
13245/// - `vs2` — Vector register operand.
13246pub trait VmsbcVvEmitter<T0, T1, T2> {
13247    fn vmsbc_vv(&mut self, vd: T0, vs1: T1, vs2: T2);
13248}
13249
13250/// RISC-V `vmsbc.vvm` instruction.
13251///
13252/// # Forms
13253/// Assembly: `vmsbc.vvm vs2, vs1, vd`
13254/// Rust: `vmsbc_vvm(vd, vs1, vs2)`
13255///
13256/// # Arguments
13257/// - `vd` — Vector register operand.
13258/// - `vs1` — Vector register operand.
13259/// - `vs2` — Vector register operand.
13260pub trait VmsbcVvmEmitter<T0, T1, T2> {
13261    fn vmsbc_vvm(&mut self, vd: T0, vs1: T1, vs2: T2);
13262}
13263
13264/// RISC-V `vmsbc.vx` instruction.
13265///
13266/// # Forms
13267/// Assembly: `vmsbc.vx vs2, xs1, vd`
13268/// Rust: `vmsbc_vx(vd, rs1, vs2)`
13269///
13270/// # Arguments
13271/// - `vd` — Vector register operand.
13272/// - `rs1` — Source register.
13273/// - `vs2` — Vector register operand.
13274pub trait VmsbcVxEmitter<T0, T1, T2> {
13275    fn vmsbc_vx(&mut self, vd: T0, rs1: T1, vs2: T2);
13276}
13277
13278/// RISC-V `vmsbc.vxm` instruction.
13279///
13280/// # Forms
13281/// Assembly: `vmsbc.vxm vs2, xs1, vd`
13282/// Rust: `vmsbc_vxm(vd, rs1, vs2)`
13283///
13284/// # Arguments
13285/// - `vd` — Vector register operand.
13286/// - `rs1` — Source register.
13287/// - `vs2` — Vector register operand.
13288pub trait VmsbcVxmEmitter<T0, T1, T2> {
13289    fn vmsbc_vxm(&mut self, vd: T0, rs1: T1, vs2: T2);
13290}
13291
13292/// RISC-V `vmsbf.m` instruction.
13293///
13294/// # Forms
13295/// Assembly: `vmsbf.m vm, vs2, vd`
13296/// Rust: `vmsbf_m(vd, vs2, vm)`
13297///
13298/// # Arguments
13299/// - `vd` — Vector register operand.
13300/// - `vs2` — Vector register operand.
13301/// - `vm` — Vector mask control.
13302pub trait VmsbfMEmitter<T0, T1, T2> {
13303    fn vmsbf_m(&mut self, vd: T0, vs2: T1, vm: T2);
13304}
13305
13306/// RISC-V `vmseq.vi` instruction.
13307///
13308/// # Forms
13309/// Assembly: `vmseq.vi vm, vs2, vd, imm`
13310/// Rust: `vmseq_vi(vd, vs2, simm5, vm)`
13311///
13312/// # Arguments
13313/// - `vd` — Vector register operand.
13314/// - `vs2` — Vector register operand.
13315/// - `simm5` — Immediate encoding value.
13316/// - `vm` — Vector mask control.
13317pub trait VmseqViEmitter<T0, T1, T2, T3> {
13318    fn vmseq_vi(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3);
13319}
13320
13321/// RISC-V `vmseq.vv` instruction.
13322///
13323/// # Forms
13324/// Assembly: `vmseq.vv vm, vs2, vs1, vd`
13325/// Rust: `vmseq_vv(vd, vs1, vs2, vm)`
13326///
13327/// # Arguments
13328/// - `vd` — Vector register operand.
13329/// - `vs1` — Vector register operand.
13330/// - `vs2` — Vector register operand.
13331/// - `vm` — Vector mask control.
13332pub trait VmseqVvEmitter<T0, T1, T2, T3> {
13333    fn vmseq_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
13334}
13335
13336/// RISC-V `vmseq.vx` instruction.
13337///
13338/// # Forms
13339/// Assembly: `vmseq.vx vm, vs2, xs1, vd`
13340/// Rust: `vmseq_vx(vd, vs2, rs1, vm)`
13341///
13342/// # Arguments
13343/// - `vd` — Vector register operand.
13344/// - `vs2` — Vector register operand.
13345/// - `rs1` — Source register.
13346/// - `vm` — Vector mask control.
13347pub trait VmseqVxEmitter<T0, T1, T2, T3> {
13348    fn vmseq_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
13349}
13350
13351/// RISC-V `vmsgt.vi` instruction.
13352///
13353/// # Forms
13354/// Assembly: `vmsgt.vi vm, vs2, vd, imm`
13355/// Rust: `vmsgt_vi(vd, vs2, simm5, vm)`
13356///
13357/// # Arguments
13358/// - `vd` — Vector register operand.
13359/// - `vs2` — Vector register operand.
13360/// - `simm5` — Immediate encoding value.
13361/// - `vm` — Vector mask control.
13362pub trait VmsgtViEmitter<T0, T1, T2, T3> {
13363    fn vmsgt_vi(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3);
13364}
13365
13366/// RISC-V `vmsgt.vx` instruction.
13367///
13368/// # Forms
13369/// Assembly: `vmsgt.vx vm, vs2, xs1, vd`
13370/// Rust: `vmsgt_vx(vd, vs2, rs1, vm)`
13371///
13372/// # Arguments
13373/// - `vd` — Vector register operand.
13374/// - `vs2` — Vector register operand.
13375/// - `rs1` — Source register.
13376/// - `vm` — Vector mask control.
13377pub trait VmsgtVxEmitter<T0, T1, T2, T3> {
13378    fn vmsgt_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
13379}
13380
13381/// RISC-V `vmsgtu.vi` instruction.
13382///
13383/// # Forms
13384/// Assembly: `vmsgtu.vi vm, vs2, vd, imm`
13385/// Rust: `vmsgtu_vi(vd, vs2, simm5, vm)`
13386///
13387/// # Arguments
13388/// - `vd` — Vector register operand.
13389/// - `vs2` — Vector register operand.
13390/// - `simm5` — Immediate encoding value.
13391/// - `vm` — Vector mask control.
13392pub trait VmsgtuViEmitter<T0, T1, T2, T3> {
13393    fn vmsgtu_vi(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3);
13394}
13395
13396/// RISC-V `vmsgtu.vx` instruction.
13397///
13398/// # Forms
13399/// Assembly: `vmsgtu.vx vm, vs2, xs1, vd`
13400/// Rust: `vmsgtu_vx(vd, vs2, rs1, vm)`
13401///
13402/// # Arguments
13403/// - `vd` — Vector register operand.
13404/// - `vs2` — Vector register operand.
13405/// - `rs1` — Source register.
13406/// - `vm` — Vector mask control.
13407pub trait VmsgtuVxEmitter<T0, T1, T2, T3> {
13408    fn vmsgtu_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
13409}
13410
13411/// RISC-V `vmsif.m` instruction.
13412///
13413/// # Forms
13414/// Assembly: `vmsif.m vm, vs2, vd`
13415/// Rust: `vmsif_m(vd, vs2, vm)`
13416///
13417/// # Arguments
13418/// - `vd` — Vector register operand.
13419/// - `vs2` — Vector register operand.
13420/// - `vm` — Vector mask control.
13421pub trait VmsifMEmitter<T0, T1, T2> {
13422    fn vmsif_m(&mut self, vd: T0, vs2: T1, vm: T2);
13423}
13424
13425/// RISC-V `vmsle.vi` instruction.
13426///
13427/// # Forms
13428/// Assembly: `vmsle.vi vm, vs2, vd, imm`
13429/// Rust: `vmsle_vi(vd, vs2, simm5, vm)`
13430///
13431/// # Arguments
13432/// - `vd` — Vector register operand.
13433/// - `vs2` — Vector register operand.
13434/// - `simm5` — Immediate encoding value.
13435/// - `vm` — Vector mask control.
13436pub trait VmsleViEmitter<T0, T1, T2, T3> {
13437    fn vmsle_vi(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3);
13438}
13439
13440/// RISC-V `vmsle.vv` instruction.
13441///
13442/// # Forms
13443/// Assembly: `vmsle.vv vm, vs2, vs1, vd`
13444/// Rust: `vmsle_vv(vd, vs1, vs2, vm)`
13445///
13446/// # Arguments
13447/// - `vd` — Vector register operand.
13448/// - `vs1` — Vector register operand.
13449/// - `vs2` — Vector register operand.
13450/// - `vm` — Vector mask control.
13451pub trait VmsleVvEmitter<T0, T1, T2, T3> {
13452    fn vmsle_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
13453}
13454
13455/// RISC-V `vmsle.vx` instruction.
13456///
13457/// # Forms
13458/// Assembly: `vmsle.vx vm, vs2, xs1, vd`
13459/// Rust: `vmsle_vx(vd, vs2, rs1, vm)`
13460///
13461/// # Arguments
13462/// - `vd` — Vector register operand.
13463/// - `vs2` — Vector register operand.
13464/// - `rs1` — Source register.
13465/// - `vm` — Vector mask control.
13466pub trait VmsleVxEmitter<T0, T1, T2, T3> {
13467    fn vmsle_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
13468}
13469
13470/// RISC-V `vmsleu.vi` instruction.
13471///
13472/// # Forms
13473/// Assembly: `vmsleu.vi vm, vs2, vd, imm`
13474/// Rust: `vmsleu_vi(vd, vs2, simm5, vm)`
13475///
13476/// # Arguments
13477/// - `vd` — Vector register operand.
13478/// - `vs2` — Vector register operand.
13479/// - `simm5` — Immediate encoding value.
13480/// - `vm` — Vector mask control.
13481pub trait VmsleuViEmitter<T0, T1, T2, T3> {
13482    fn vmsleu_vi(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3);
13483}
13484
13485/// RISC-V `vmsleu.vv` instruction.
13486///
13487/// # Forms
13488/// Assembly: `vmsleu.vv vm, vs2, vs1, vd`
13489/// Rust: `vmsleu_vv(vd, vs1, vs2, vm)`
13490///
13491/// # Arguments
13492/// - `vd` — Vector register operand.
13493/// - `vs1` — Vector register operand.
13494/// - `vs2` — Vector register operand.
13495/// - `vm` — Vector mask control.
13496pub trait VmsleuVvEmitter<T0, T1, T2, T3> {
13497    fn vmsleu_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
13498}
13499
13500/// RISC-V `vmsleu.vx` instruction.
13501///
13502/// # Forms
13503/// Assembly: `vmsleu.vx vm, vs2, xs1, vd`
13504/// Rust: `vmsleu_vx(vd, vs2, rs1, vm)`
13505///
13506/// # Arguments
13507/// - `vd` — Vector register operand.
13508/// - `vs2` — Vector register operand.
13509/// - `rs1` — Source register.
13510/// - `vm` — Vector mask control.
13511pub trait VmsleuVxEmitter<T0, T1, T2, T3> {
13512    fn vmsleu_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
13513}
13514
13515/// RISC-V `vmslt.vv` instruction.
13516///
13517/// # Forms
13518/// Assembly: `vmslt.vv vm, vs2, vs1, vd`
13519/// Rust: `vmslt_vv(vd, vs1, vs2, vm)`
13520///
13521/// # Arguments
13522/// - `vd` — Vector register operand.
13523/// - `vs1` — Vector register operand.
13524/// - `vs2` — Vector register operand.
13525/// - `vm` — Vector mask control.
13526pub trait VmsltVvEmitter<T0, T1, T2, T3> {
13527    fn vmslt_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
13528}
13529
13530/// RISC-V `vmslt.vx` instruction.
13531///
13532/// # Forms
13533/// Assembly: `vmslt.vx vm, vs2, xs1, vd`
13534/// Rust: `vmslt_vx(vd, vs2, rs1, vm)`
13535///
13536/// # Arguments
13537/// - `vd` — Vector register operand.
13538/// - `vs2` — Vector register operand.
13539/// - `rs1` — Source register.
13540/// - `vm` — Vector mask control.
13541pub trait VmsltVxEmitter<T0, T1, T2, T3> {
13542    fn vmslt_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
13543}
13544
13545/// RISC-V `vmsltu.vv` instruction.
13546///
13547/// # Forms
13548/// Assembly: `vmsltu.vv vm, vs2, vs1, vd`
13549/// Rust: `vmsltu_vv(vd, vs1, vs2, vm)`
13550///
13551/// # Arguments
13552/// - `vd` — Vector register operand.
13553/// - `vs1` — Vector register operand.
13554/// - `vs2` — Vector register operand.
13555/// - `vm` — Vector mask control.
13556pub trait VmsltuVvEmitter<T0, T1, T2, T3> {
13557    fn vmsltu_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
13558}
13559
13560/// RISC-V `vmsltu.vx` instruction.
13561///
13562/// # Forms
13563/// Assembly: `vmsltu.vx vm, vs2, xs1, vd`
13564/// Rust: `vmsltu_vx(vd, vs2, rs1, vm)`
13565///
13566/// # Arguments
13567/// - `vd` — Vector register operand.
13568/// - `vs2` — Vector register operand.
13569/// - `rs1` — Source register.
13570/// - `vm` — Vector mask control.
13571pub trait VmsltuVxEmitter<T0, T1, T2, T3> {
13572    fn vmsltu_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
13573}
13574
13575/// RISC-V `vmsne.vi` instruction.
13576///
13577/// # Forms
13578/// Assembly: `vmsne.vi vm, vs2, vd, imm`
13579/// Rust: `vmsne_vi(vd, vs2, simm5, vm)`
13580///
13581/// # Arguments
13582/// - `vd` — Vector register operand.
13583/// - `vs2` — Vector register operand.
13584/// - `simm5` — Immediate encoding value.
13585/// - `vm` — Vector mask control.
13586pub trait VmsneViEmitter<T0, T1, T2, T3> {
13587    fn vmsne_vi(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3);
13588}
13589
13590/// RISC-V `vmsne.vv` instruction.
13591///
13592/// # Forms
13593/// Assembly: `vmsne.vv vm, vs2, vs1, vd`
13594/// Rust: `vmsne_vv(vd, vs1, vs2, vm)`
13595///
13596/// # Arguments
13597/// - `vd` — Vector register operand.
13598/// - `vs1` — Vector register operand.
13599/// - `vs2` — Vector register operand.
13600/// - `vm` — Vector mask control.
13601pub trait VmsneVvEmitter<T0, T1, T2, T3> {
13602    fn vmsne_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
13603}
13604
13605/// RISC-V `vmsne.vx` instruction.
13606///
13607/// # Forms
13608/// Assembly: `vmsne.vx vm, vs2, xs1, vd`
13609/// Rust: `vmsne_vx(vd, vs2, rs1, vm)`
13610///
13611/// # Arguments
13612/// - `vd` — Vector register operand.
13613/// - `vs2` — Vector register operand.
13614/// - `rs1` — Source register.
13615/// - `vm` — Vector mask control.
13616pub trait VmsneVxEmitter<T0, T1, T2, T3> {
13617    fn vmsne_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
13618}
13619
13620/// RISC-V `vmsof.m` instruction.
13621///
13622/// # Forms
13623/// Assembly: `vmsof.m vm, vs2, vd`
13624/// Rust: `vmsof_m(vd, vs2, vm)`
13625///
13626/// # Arguments
13627/// - `vd` — Vector register operand.
13628/// - `vs2` — Vector register operand.
13629/// - `vm` — Vector mask control.
13630pub trait VmsofMEmitter<T0, T1, T2> {
13631    fn vmsof_m(&mut self, vd: T0, vs2: T1, vm: T2);
13632}
13633
13634/// RISC-V `vmul.vv` instruction.
13635///
13636/// # Forms
13637/// Assembly: `vmul.vv vm, vs2, vs1, vd`
13638/// Rust: `vmul_vv(vd, vs1, vs2, vm)`
13639///
13640/// # Arguments
13641/// - `vd` — Vector register operand.
13642/// - `vs1` — Vector register operand.
13643/// - `vs2` — Vector register operand.
13644/// - `vm` — Vector mask control.
13645pub trait VmulVvEmitter<T0, T1, T2, T3> {
13646    fn vmul_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
13647}
13648
13649/// RISC-V `vmul.vx` instruction.
13650///
13651/// # Forms
13652/// Assembly: `vmul.vx vm, vs2, xs1, vd`
13653/// Rust: `vmul_vx(vd, vs2, rs1, vm)`
13654///
13655/// # Arguments
13656/// - `vd` — Vector register operand.
13657/// - `vs2` — Vector register operand.
13658/// - `rs1` — Source register.
13659/// - `vm` — Vector mask control.
13660pub trait VmulVxEmitter<T0, T1, T2, T3> {
13661    fn vmul_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
13662}
13663
13664/// RISC-V `vmulh.vv` instruction.
13665///
13666/// # Forms
13667/// Assembly: `vmulh.vv vm, vs2, vs1, vd`
13668/// Rust: `vmulh_vv(vd, vs1, vs2, vm)`
13669///
13670/// # Arguments
13671/// - `vd` — Vector register operand.
13672/// - `vs1` — Vector register operand.
13673/// - `vs2` — Vector register operand.
13674/// - `vm` — Vector mask control.
13675pub trait VmulhVvEmitter<T0, T1, T2, T3> {
13676    fn vmulh_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
13677}
13678
13679/// RISC-V `vmulh.vx` instruction.
13680///
13681/// # Forms
13682/// Assembly: `vmulh.vx vm, vs2, xs1, vd`
13683/// Rust: `vmulh_vx(vd, vs2, rs1, vm)`
13684///
13685/// # Arguments
13686/// - `vd` — Vector register operand.
13687/// - `vs2` — Vector register operand.
13688/// - `rs1` — Source register.
13689/// - `vm` — Vector mask control.
13690pub trait VmulhVxEmitter<T0, T1, T2, T3> {
13691    fn vmulh_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
13692}
13693
13694/// RISC-V `vmulhsu.vv` instruction.
13695///
13696/// # Forms
13697/// Assembly: `vmulhsu.vv vm, vs2, vs1, vd`
13698/// Rust: `vmulhsu_vv(vd, vs1, vs2, vm)`
13699///
13700/// # Arguments
13701/// - `vd` — Vector register operand.
13702/// - `vs1` — Vector register operand.
13703/// - `vs2` — Vector register operand.
13704/// - `vm` — Vector mask control.
13705pub trait VmulhsuVvEmitter<T0, T1, T2, T3> {
13706    fn vmulhsu_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
13707}
13708
13709/// RISC-V `vmulhsu.vx` instruction.
13710///
13711/// # Forms
13712/// Assembly: `vmulhsu.vx vm, vs2, xs1, vd`
13713/// Rust: `vmulhsu_vx(vd, vs2, rs1, vm)`
13714///
13715/// # Arguments
13716/// - `vd` — Vector register operand.
13717/// - `vs2` — Vector register operand.
13718/// - `rs1` — Source register.
13719/// - `vm` — Vector mask control.
13720pub trait VmulhsuVxEmitter<T0, T1, T2, T3> {
13721    fn vmulhsu_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
13722}
13723
13724/// RISC-V `vmulhu.vv` instruction.
13725///
13726/// # Forms
13727/// Assembly: `vmulhu.vv vm, vs2, vs1, vd`
13728/// Rust: `vmulhu_vv(vd, vs1, vs2, vm)`
13729///
13730/// # Arguments
13731/// - `vd` — Vector register operand.
13732/// - `vs1` — Vector register operand.
13733/// - `vs2` — Vector register operand.
13734/// - `vm` — Vector mask control.
13735pub trait VmulhuVvEmitter<T0, T1, T2, T3> {
13736    fn vmulhu_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
13737}
13738
13739/// RISC-V `vmulhu.vx` instruction.
13740///
13741/// # Forms
13742/// Assembly: `vmulhu.vx vm, vs2, xs1, vd`
13743/// Rust: `vmulhu_vx(vd, vs2, rs1, vm)`
13744///
13745/// # Arguments
13746/// - `vd` — Vector register operand.
13747/// - `vs2` — Vector register operand.
13748/// - `rs1` — Source register.
13749/// - `vm` — Vector mask control.
13750pub trait VmulhuVxEmitter<T0, T1, T2, T3> {
13751    fn vmulhu_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
13752}
13753
13754/// RISC-V `vmv1r.v` instruction.
13755///
13756/// # Forms
13757/// Assembly: `vmv1r.v vs2, vd`
13758/// Rust: `vmv1r_v(vd, vs2)`
13759///
13760/// # Arguments
13761/// - `vd` — Vector register operand.
13762/// - `vs2` — Vector register operand.
13763pub trait Vmv1RVEmitter<T0, T1> {
13764    fn vmv1r_v(&mut self, vd: T0, vs2: T1);
13765}
13766
13767/// RISC-V `vmv2r.v` instruction.
13768///
13769/// # Forms
13770/// Assembly: `vmv2r.v vs2, vd`
13771/// Rust: `vmv2r_v(vd, vs2)`
13772///
13773/// # Arguments
13774/// - `vd` — Vector register operand.
13775/// - `vs2` — Vector register operand.
13776pub trait Vmv2RVEmitter<T0, T1> {
13777    fn vmv2r_v(&mut self, vd: T0, vs2: T1);
13778}
13779
13780/// RISC-V `vmv4r.v` instruction.
13781///
13782/// # Forms
13783/// Assembly: `vmv4r.v vs2, vd`
13784/// Rust: `vmv4r_v(vd, vs2)`
13785///
13786/// # Arguments
13787/// - `vd` — Vector register operand.
13788/// - `vs2` — Vector register operand.
13789pub trait Vmv4RVEmitter<T0, T1> {
13790    fn vmv4r_v(&mut self, vd: T0, vs2: T1);
13791}
13792
13793/// RISC-V `vmv8r.v` instruction.
13794///
13795/// # Forms
13796/// Assembly: `vmv8r.v vs2, vd`
13797/// Rust: `vmv8r_v(vd, vs2)`
13798///
13799/// # Arguments
13800/// - `vd` — Vector register operand.
13801/// - `vs2` — Vector register operand.
13802pub trait Vmv8RVEmitter<T0, T1> {
13803    fn vmv8r_v(&mut self, vd: T0, vs2: T1);
13804}
13805
13806/// RISC-V `vmv.s.x` instruction.
13807///
13808/// # Forms
13809/// Assembly: `vmv.s.x xs1, vd`
13810/// Rust: `vmv_s_x(vd, rs1)`
13811///
13812/// # Arguments
13813/// - `vd` — Vector register operand.
13814/// - `rs1` — Source register.
13815pub trait VmvSXEmitter<T0, T1> {
13816    fn vmv_s_x(&mut self, vd: T0, rs1: T1);
13817}
13818
13819/// RISC-V `vmv.v.i` instruction.
13820///
13821/// # Forms
13822/// Assembly: `vmv.v.i vd, imm`
13823/// Rust: `vmv_v_i(vd, simm5)`
13824///
13825/// # Arguments
13826/// - `vd` — Vector register operand.
13827/// - `simm5` — Immediate encoding value.
13828pub trait VmvVIEmitter<T0, T1> {
13829    fn vmv_v_i(&mut self, vd: T0, simm5: T1);
13830}
13831
13832/// RISC-V `vmv.v.v` instruction.
13833///
13834/// # Forms
13835/// Assembly: `vmv.v.v vs1, vd`
13836/// Rust: `vmv_v_v(vd, vs1)`
13837///
13838/// # Arguments
13839/// - `vd` — Vector register operand.
13840/// - `vs1` — Vector register operand.
13841pub trait VmvVVEmitter<T0, T1> {
13842    fn vmv_v_v(&mut self, vd: T0, vs1: T1);
13843}
13844
13845/// RISC-V `vmv.v.x` instruction.
13846///
13847/// # Forms
13848/// Assembly: `vmv.v.x xs1, vd`
13849/// Rust: `vmv_v_x(vd, rs1)`
13850///
13851/// # Arguments
13852/// - `vd` — Vector register operand.
13853/// - `rs1` — Source register.
13854pub trait VmvVXEmitter<T0, T1> {
13855    fn vmv_v_x(&mut self, vd: T0, rs1: T1);
13856}
13857
13858/// RISC-V `vmv.x.s` instruction.
13859///
13860/// # Forms
13861/// Assembly: `vmv.x.s vs2, xd`
13862/// Rust: `vmv_x_s(rd, vs2)`
13863///
13864/// # Arguments
13865/// - `rd` — Destination register.
13866/// - `vs2` — Vector register operand.
13867pub trait VmvXSEmitter<T0, T1> {
13868    fn vmv_x_s(&mut self, rd: T0, vs2: T1);
13869}
13870
13871/// RISC-V `vmxnor.mm` instruction.
13872///
13873/// # Forms
13874/// Assembly: `vmxnor.mm vs2, vs1, vd`
13875/// Rust: `vmxnor_mm(vd, vs1, vs2)`
13876///
13877/// # Arguments
13878/// - `vd` — Vector register operand.
13879/// - `vs1` — Vector register operand.
13880/// - `vs2` — Vector register operand.
13881pub trait VmxnorMmEmitter<T0, T1, T2> {
13882    fn vmxnor_mm(&mut self, vd: T0, vs1: T1, vs2: T2);
13883}
13884
13885/// RISC-V `vmxor.mm` instruction.
13886///
13887/// # Forms
13888/// Assembly: `vmxor.mm vs2, vs1, vd`
13889/// Rust: `vmxor_mm(vd, vs1, vs2)`
13890///
13891/// # Arguments
13892/// - `vd` — Vector register operand.
13893/// - `vs1` — Vector register operand.
13894/// - `vs2` — Vector register operand.
13895pub trait VmxorMmEmitter<T0, T1, T2> {
13896    fn vmxor_mm(&mut self, vd: T0, vs1: T1, vs2: T2);
13897}
13898
13899/// RISC-V `vnclip.wi` instruction.
13900///
13901/// # Forms
13902/// Assembly: `vnclip.wi vm, vs2, vd, imm`
13903/// Rust: `vnclip_wi(vd, vs2, zimm5, vm)`
13904///
13905/// # Arguments
13906/// - `vd` — Vector register operand.
13907/// - `vs2` — Vector register operand.
13908/// - `zimm5` — Immediate encoding value.
13909/// - `vm` — Vector mask control.
13910pub trait VnclipWiEmitter<T0, T1, T2, T3> {
13911    fn vnclip_wi(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3);
13912}
13913
13914/// RISC-V `vnclip.wv` instruction.
13915///
13916/// # Forms
13917/// Assembly: `vnclip.wv vm, vs2, vs1, vd`
13918/// Rust: `vnclip_wv(vd, vs1, vs2, vm)`
13919///
13920/// # Arguments
13921/// - `vd` — Vector register operand.
13922/// - `vs1` — Vector register operand.
13923/// - `vs2` — Vector register operand.
13924/// - `vm` — Vector mask control.
13925pub trait VnclipWvEmitter<T0, T1, T2, T3> {
13926    fn vnclip_wv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
13927}
13928
13929/// RISC-V `vnclip.wx` instruction.
13930///
13931/// # Forms
13932/// Assembly: `vnclip.wx vm, vs2, xs1, vd`
13933/// Rust: `vnclip_wx(vd, vs2, rs1, vm)`
13934///
13935/// # Arguments
13936/// - `vd` — Vector register operand.
13937/// - `vs2` — Vector register operand.
13938/// - `rs1` — Source register.
13939/// - `vm` — Vector mask control.
13940pub trait VnclipWxEmitter<T0, T1, T2, T3> {
13941    fn vnclip_wx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
13942}
13943
13944/// RISC-V `vnclipu.wi` instruction.
13945///
13946/// # Forms
13947/// Assembly: `vnclipu.wi vm, vs2, vd, imm`
13948/// Rust: `vnclipu_wi(vd, vs2, zimm5, vm)`
13949///
13950/// # Arguments
13951/// - `vd` — Vector register operand.
13952/// - `vs2` — Vector register operand.
13953/// - `zimm5` — Immediate encoding value.
13954/// - `vm` — Vector mask control.
13955pub trait VnclipuWiEmitter<T0, T1, T2, T3> {
13956    fn vnclipu_wi(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3);
13957}
13958
13959/// RISC-V `vnclipu.wv` instruction.
13960///
13961/// # Forms
13962/// Assembly: `vnclipu.wv vm, vs2, vs1, vd`
13963/// Rust: `vnclipu_wv(vd, vs1, vs2, vm)`
13964///
13965/// # Arguments
13966/// - `vd` — Vector register operand.
13967/// - `vs1` — Vector register operand.
13968/// - `vs2` — Vector register operand.
13969/// - `vm` — Vector mask control.
13970pub trait VnclipuWvEmitter<T0, T1, T2, T3> {
13971    fn vnclipu_wv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
13972}
13973
13974/// RISC-V `vnclipu.wx` instruction.
13975///
13976/// # Forms
13977/// Assembly: `vnclipu.wx vm, vs2, xs1, vd`
13978/// Rust: `vnclipu_wx(vd, vs2, rs1, vm)`
13979///
13980/// # Arguments
13981/// - `vd` — Vector register operand.
13982/// - `vs2` — Vector register operand.
13983/// - `rs1` — Source register.
13984/// - `vm` — Vector mask control.
13985pub trait VnclipuWxEmitter<T0, T1, T2, T3> {
13986    fn vnclipu_wx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
13987}
13988
13989/// RISC-V `vnmsac.vv` instruction.
13990///
13991/// # Forms
13992/// Assembly: `vnmsac.vv vm, vs2, vs1, vd`
13993/// Rust: `vnmsac_vv(vd, vs1, vs2, vm)`
13994///
13995/// # Arguments
13996/// - `vd` — Vector register operand.
13997/// - `vs1` — Vector register operand.
13998/// - `vs2` — Vector register operand.
13999/// - `vm` — Vector mask control.
14000pub trait VnmsacVvEmitter<T0, T1, T2, T3> {
14001    fn vnmsac_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
14002}
14003
14004/// RISC-V `vnmsac.vx` instruction.
14005///
14006/// # Forms
14007/// Assembly: `vnmsac.vx vm, vs2, xs1, vd`
14008/// Rust: `vnmsac_vx(vd, vs2, rs1, vm)`
14009///
14010/// # Arguments
14011/// - `vd` — Vector register operand.
14012/// - `vs2` — Vector register operand.
14013/// - `rs1` — Source register.
14014/// - `vm` — Vector mask control.
14015pub trait VnmsacVxEmitter<T0, T1, T2, T3> {
14016    fn vnmsac_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
14017}
14018
14019/// RISC-V `vnmsub.vv` instruction.
14020///
14021/// # Forms
14022/// Assembly: `vnmsub.vv vm, vs2, vs1, vd`
14023/// Rust: `vnmsub_vv(vd, vs1, vs2, vm)`
14024///
14025/// # Arguments
14026/// - `vd` — Vector register operand.
14027/// - `vs1` — Vector register operand.
14028/// - `vs2` — Vector register operand.
14029/// - `vm` — Vector mask control.
14030pub trait VnmsubVvEmitter<T0, T1, T2, T3> {
14031    fn vnmsub_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
14032}
14033
14034/// RISC-V `vnmsub.vx` instruction.
14035///
14036/// # Forms
14037/// Assembly: `vnmsub.vx vm, vs2, xs1, vd`
14038/// Rust: `vnmsub_vx(vd, vs2, rs1, vm)`
14039///
14040/// # Arguments
14041/// - `vd` — Vector register operand.
14042/// - `vs2` — Vector register operand.
14043/// - `rs1` — Source register.
14044/// - `vm` — Vector mask control.
14045pub trait VnmsubVxEmitter<T0, T1, T2, T3> {
14046    fn vnmsub_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
14047}
14048
14049/// RISC-V `vnsra.wi` instruction.
14050///
14051/// # Forms
14052/// Assembly: `vnsra.wi vm, vs2, vd, imm`
14053/// Rust: `vnsra_wi(vd, vs2, zimm5, vm)`
14054///
14055/// # Arguments
14056/// - `vd` — Vector register operand.
14057/// - `vs2` — Vector register operand.
14058/// - `zimm5` — Immediate encoding value.
14059/// - `vm` — Vector mask control.
14060pub trait VnsraWiEmitter<T0, T1, T2, T3> {
14061    fn vnsra_wi(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3);
14062}
14063
14064/// RISC-V `vnsra.wv` instruction.
14065///
14066/// # Forms
14067/// Assembly: `vnsra.wv vm, vs2, vs1, vd`
14068/// Rust: `vnsra_wv(vd, vs1, vs2, vm)`
14069///
14070/// # Arguments
14071/// - `vd` — Vector register operand.
14072/// - `vs1` — Vector register operand.
14073/// - `vs2` — Vector register operand.
14074/// - `vm` — Vector mask control.
14075pub trait VnsraWvEmitter<T0, T1, T2, T3> {
14076    fn vnsra_wv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
14077}
14078
14079/// RISC-V `vnsra.wx` instruction.
14080///
14081/// # Forms
14082/// Assembly: `vnsra.wx vm, vs2, xs1, vd`
14083/// Rust: `vnsra_wx(vd, vs2, rs1, vm)`
14084///
14085/// # Arguments
14086/// - `vd` — Vector register operand.
14087/// - `vs2` — Vector register operand.
14088/// - `rs1` — Source register.
14089/// - `vm` — Vector mask control.
14090pub trait VnsraWxEmitter<T0, T1, T2, T3> {
14091    fn vnsra_wx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
14092}
14093
14094/// RISC-V `vnsrl.wi` instruction.
14095///
14096/// # Forms
14097/// Assembly: `vnsrl.wi vm, vs2, vd, imm`
14098/// Rust: `vnsrl_wi(vd, vs2, zimm5, vm)`
14099///
14100/// # Arguments
14101/// - `vd` — Vector register operand.
14102/// - `vs2` — Vector register operand.
14103/// - `zimm5` — Immediate encoding value.
14104/// - `vm` — Vector mask control.
14105pub trait VnsrlWiEmitter<T0, T1, T2, T3> {
14106    fn vnsrl_wi(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3);
14107}
14108
14109/// RISC-V `vnsrl.wv` instruction.
14110///
14111/// # Forms
14112/// Assembly: `vnsrl.wv vm, vs2, vs1, vd`
14113/// Rust: `vnsrl_wv(vd, vs1, vs2, vm)`
14114///
14115/// # Arguments
14116/// - `vd` — Vector register operand.
14117/// - `vs1` — Vector register operand.
14118/// - `vs2` — Vector register operand.
14119/// - `vm` — Vector mask control.
14120pub trait VnsrlWvEmitter<T0, T1, T2, T3> {
14121    fn vnsrl_wv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
14122}
14123
14124/// RISC-V `vnsrl.wx` instruction.
14125///
14126/// # Forms
14127/// Assembly: `vnsrl.wx vm, vs2, xs1, vd`
14128/// Rust: `vnsrl_wx(vd, vs2, rs1, vm)`
14129///
14130/// # Arguments
14131/// - `vd` — Vector register operand.
14132/// - `vs2` — Vector register operand.
14133/// - `rs1` — Source register.
14134/// - `vm` — Vector mask control.
14135pub trait VnsrlWxEmitter<T0, T1, T2, T3> {
14136    fn vnsrl_wx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
14137}
14138
14139/// RISC-V `vor.vi` instruction.
14140///
14141/// # Forms
14142/// Assembly: `vor.vi vm, vs2, vd, imm`
14143/// Rust: `vor_vi(vd, vs2, simm5, vm)`
14144///
14145/// # Arguments
14146/// - `vd` — Vector register operand.
14147/// - `vs2` — Vector register operand.
14148/// - `simm5` — Immediate encoding value.
14149/// - `vm` — Vector mask control.
14150pub trait VorViEmitter<T0, T1, T2, T3> {
14151    fn vor_vi(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3);
14152}
14153
14154/// RISC-V `vor.vv` instruction.
14155///
14156/// # Forms
14157/// Assembly: `vor.vv vm, vs2, vs1, vd`
14158/// Rust: `vor_vv(vd, vs1, vs2, vm)`
14159///
14160/// # Arguments
14161/// - `vd` — Vector register operand.
14162/// - `vs1` — Vector register operand.
14163/// - `vs2` — Vector register operand.
14164/// - `vm` — Vector mask control.
14165pub trait VorVvEmitter<T0, T1, T2, T3> {
14166    fn vor_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
14167}
14168
14169/// RISC-V `vor.vx` instruction.
14170///
14171/// # Forms
14172/// Assembly: `vor.vx vm, vs2, xs1, vd`
14173/// Rust: `vor_vx(vd, vs2, rs1, vm)`
14174///
14175/// # Arguments
14176/// - `vd` — Vector register operand.
14177/// - `vs2` — Vector register operand.
14178/// - `rs1` — Source register.
14179/// - `vm` — Vector mask control.
14180pub trait VorVxEmitter<T0, T1, T2, T3> {
14181    fn vor_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
14182}
14183
14184/// RISC-V `vpopc.m` instruction.
14185///
14186/// # Forms
14187/// Assembly: `vpopc.m rd vs2 vm`
14188/// Rust: `vpopc_m(rd, vs2, vm)`
14189///
14190/// # Arguments
14191/// - `rd` — Destination register.
14192/// - `vs2` — Vector register operand.
14193/// - `vm` — Vector mask control.
14194pub trait VpopcMEmitter<T0, T1, T2> {
14195    fn vpopc_m(&mut self, rd: T0, vs2: T1, vm: T2);
14196}
14197
14198/// RISC-V `vredand.vs` instruction.
14199///
14200/// # Forms
14201/// Assembly: `vredand.vs vm, vs2, vs1, vd`
14202/// Rust: `vredand_vs(vd, vs1, vs2, vm)`
14203///
14204/// # Arguments
14205/// - `vd` — Vector register operand.
14206/// - `vs1` — Vector register operand.
14207/// - `vs2` — Vector register operand.
14208/// - `vm` — Vector mask control.
14209pub trait VredandVsEmitter<T0, T1, T2, T3> {
14210    fn vredand_vs(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
14211}
14212
14213/// RISC-V `vredmax.vs` instruction.
14214///
14215/// # Forms
14216/// Assembly: `vredmax.vs vm, vs2, vs1, vd`
14217/// Rust: `vredmax_vs(vd, vs1, vs2, vm)`
14218///
14219/// # Arguments
14220/// - `vd` — Vector register operand.
14221/// - `vs1` — Vector register operand.
14222/// - `vs2` — Vector register operand.
14223/// - `vm` — Vector mask control.
14224pub trait VredmaxVsEmitter<T0, T1, T2, T3> {
14225    fn vredmax_vs(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
14226}
14227
14228/// RISC-V `vredmaxu.vs` instruction.
14229///
14230/// # Forms
14231/// Assembly: `vredmaxu.vs vm, vs2, vs1, vd`
14232/// Rust: `vredmaxu_vs(vd, vs1, vs2, vm)`
14233///
14234/// # Arguments
14235/// - `vd` — Vector register operand.
14236/// - `vs1` — Vector register operand.
14237/// - `vs2` — Vector register operand.
14238/// - `vm` — Vector mask control.
14239pub trait VredmaxuVsEmitter<T0, T1, T2, T3> {
14240    fn vredmaxu_vs(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
14241}
14242
14243/// RISC-V `vredmin.vs` instruction.
14244///
14245/// # Forms
14246/// Assembly: `vredmin.vs vm, vs2, vs1, vd`
14247/// Rust: `vredmin_vs(vd, vs1, vs2, vm)`
14248///
14249/// # Arguments
14250/// - `vd` — Vector register operand.
14251/// - `vs1` — Vector register operand.
14252/// - `vs2` — Vector register operand.
14253/// - `vm` — Vector mask control.
14254pub trait VredminVsEmitter<T0, T1, T2, T3> {
14255    fn vredmin_vs(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
14256}
14257
14258/// RISC-V `vredminu.vs` instruction.
14259///
14260/// # Forms
14261/// Assembly: `vredminu.vs vm, vs2, vs1, vd`
14262/// Rust: `vredminu_vs(vd, vs1, vs2, vm)`
14263///
14264/// # Arguments
14265/// - `vd` — Vector register operand.
14266/// - `vs1` — Vector register operand.
14267/// - `vs2` — Vector register operand.
14268/// - `vm` — Vector mask control.
14269pub trait VredminuVsEmitter<T0, T1, T2, T3> {
14270    fn vredminu_vs(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
14271}
14272
14273/// RISC-V `vredor.vs` instruction.
14274///
14275/// # Forms
14276/// Assembly: `vredor.vs vm, vs2, vs1, vd`
14277/// Rust: `vredor_vs(vd, vs1, vs2, vm)`
14278///
14279/// # Arguments
14280/// - `vd` — Vector register operand.
14281/// - `vs1` — Vector register operand.
14282/// - `vs2` — Vector register operand.
14283/// - `vm` — Vector mask control.
14284pub trait VredorVsEmitter<T0, T1, T2, T3> {
14285    fn vredor_vs(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
14286}
14287
14288/// RISC-V `vredsum.vs` instruction.
14289///
14290/// # Forms
14291/// Assembly: `vredsum.vs vm, vs2, vs1, vd`
14292/// Rust: `vredsum_vs(vd, vs1, vs2, vm)`
14293///
14294/// # Arguments
14295/// - `vd` — Vector register operand.
14296/// - `vs1` — Vector register operand.
14297/// - `vs2` — Vector register operand.
14298/// - `vm` — Vector mask control.
14299pub trait VredsumVsEmitter<T0, T1, T2, T3> {
14300    fn vredsum_vs(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
14301}
14302
14303/// RISC-V `vredxor.vs` instruction.
14304///
14305/// # Forms
14306/// Assembly: `vredxor.vs vm, vs2, vs1, vd`
14307/// Rust: `vredxor_vs(vd, vs1, vs2, vm)`
14308///
14309/// # Arguments
14310/// - `vd` — Vector register operand.
14311/// - `vs1` — Vector register operand.
14312/// - `vs2` — Vector register operand.
14313/// - `vm` — Vector mask control.
14314pub trait VredxorVsEmitter<T0, T1, T2, T3> {
14315    fn vredxor_vs(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
14316}
14317
14318/// RISC-V `vrem.vv` instruction.
14319///
14320/// # Forms
14321/// Assembly: `vrem.vv vm, vs2, vs1, vd`
14322/// Rust: `vrem_vv(vd, vs1, vs2, vm)`
14323///
14324/// # Arguments
14325/// - `vd` — Vector register operand.
14326/// - `vs1` — Vector register operand.
14327/// - `vs2` — Vector register operand.
14328/// - `vm` — Vector mask control.
14329pub trait VremVvEmitter<T0, T1, T2, T3> {
14330    fn vrem_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
14331}
14332
14333/// RISC-V `vrem.vx` instruction.
14334///
14335/// # Forms
14336/// Assembly: `vrem.vx vm, vs2, xs1, vd`
14337/// Rust: `vrem_vx(vd, vs2, rs1, vm)`
14338///
14339/// # Arguments
14340/// - `vd` — Vector register operand.
14341/// - `vs2` — Vector register operand.
14342/// - `rs1` — Source register.
14343/// - `vm` — Vector mask control.
14344pub trait VremVxEmitter<T0, T1, T2, T3> {
14345    fn vrem_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
14346}
14347
14348/// RISC-V `vremu.vv` instruction.
14349///
14350/// # Forms
14351/// Assembly: `vremu.vv vm, vs2, vs1, vd`
14352/// Rust: `vremu_vv(vd, vs1, vs2, vm)`
14353///
14354/// # Arguments
14355/// - `vd` — Vector register operand.
14356/// - `vs1` — Vector register operand.
14357/// - `vs2` — Vector register operand.
14358/// - `vm` — Vector mask control.
14359pub trait VremuVvEmitter<T0, T1, T2, T3> {
14360    fn vremu_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
14361}
14362
14363/// RISC-V `vremu.vx` instruction.
14364///
14365/// # Forms
14366/// Assembly: `vremu.vx vm, vs2, xs1, vd`
14367/// Rust: `vremu_vx(vd, vs2, rs1, vm)`
14368///
14369/// # Arguments
14370/// - `vd` — Vector register operand.
14371/// - `vs2` — Vector register operand.
14372/// - `rs1` — Source register.
14373/// - `vm` — Vector mask control.
14374pub trait VremuVxEmitter<T0, T1, T2, T3> {
14375    fn vremu_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
14376}
14377
14378/// RISC-V `vrev8.v` instruction.
14379///
14380/// # Forms
14381/// Assembly: `vrev8.v vm, vs2, vd`
14382/// Rust: `vrev8_v(vd, vs2, vm)`
14383///
14384/// # Arguments
14385/// - `vd` — Vector register operand.
14386/// - `vs2` — Vector register operand.
14387/// - `vm` — Vector mask control.
14388pub trait Vrev8VEmitter<T0, T1, T2> {
14389    fn vrev8_v(&mut self, vd: T0, vs2: T1, vm: T2);
14390}
14391
14392/// RISC-V `vrgather.vi` instruction.
14393///
14394/// # Forms
14395/// Assembly: `vrgather.vi vm, vs2, vd, imm`
14396/// Rust: `vrgather_vi(vd, vs2, zimm5, vm)`
14397///
14398/// # Arguments
14399/// - `vd` — Vector register operand.
14400/// - `vs2` — Vector register operand.
14401/// - `zimm5` — Immediate encoding value.
14402/// - `vm` — Vector mask control.
14403pub trait VrgatherViEmitter<T0, T1, T2, T3> {
14404    fn vrgather_vi(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3);
14405}
14406
14407/// RISC-V `vrgather.vv` instruction.
14408///
14409/// # Forms
14410/// Assembly: `vrgather.vv vm, vs2, vs1, vd`
14411/// Rust: `vrgather_vv(vd, vs1, vs2, vm)`
14412///
14413/// # Arguments
14414/// - `vd` — Vector register operand.
14415/// - `vs1` — Vector register operand.
14416/// - `vs2` — Vector register operand.
14417/// - `vm` — Vector mask control.
14418pub trait VrgatherVvEmitter<T0, T1, T2, T3> {
14419    fn vrgather_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
14420}
14421
14422/// RISC-V `vrgather.vx` instruction.
14423///
14424/// # Forms
14425/// Assembly: `vrgather.vx vm, vs2, xs1, vd`
14426/// Rust: `vrgather_vx(vd, vs2, rs1, vm)`
14427///
14428/// # Arguments
14429/// - `vd` — Vector register operand.
14430/// - `vs2` — Vector register operand.
14431/// - `rs1` — Source register.
14432/// - `vm` — Vector mask control.
14433pub trait VrgatherVxEmitter<T0, T1, T2, T3> {
14434    fn vrgather_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
14435}
14436
14437/// RISC-V `vrgatherei16.vv` instruction.
14438///
14439/// # Forms
14440/// Assembly: `vrgatherei16.vv vm, vs2, vs1, vd`
14441/// Rust: `vrgatherei16_vv(vd, vs1, vs2, vm)`
14442///
14443/// # Arguments
14444/// - `vd` — Vector register operand.
14445/// - `vs1` — Vector register operand.
14446/// - `vs2` — Vector register operand.
14447/// - `vm` — Vector mask control.
14448pub trait Vrgatherei16VvEmitter<T0, T1, T2, T3> {
14449    fn vrgatherei16_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
14450}
14451
14452/// RISC-V `vrol.vv` instruction.
14453///
14454/// # Forms
14455/// Assembly: `vrol.vv vm, vs2, vs1, vd`
14456/// Rust: `vrol_vv(vd, vs1, vs2, vm)`
14457///
14458/// # Arguments
14459/// - `vd` — Vector register operand.
14460/// - `vs1` — Vector register operand.
14461/// - `vs2` — Vector register operand.
14462/// - `vm` — Vector mask control.
14463pub trait VrolVvEmitter<T0, T1, T2, T3> {
14464    fn vrol_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
14465}
14466
14467/// RISC-V `vrol.vx` instruction.
14468///
14469/// # Forms
14470/// Assembly: `vrol.vx vm, vs2, xs1, vd`
14471/// Rust: `vrol_vx(vd, vs2, rs1, vm)`
14472///
14473/// # Arguments
14474/// - `vd` — Vector register operand.
14475/// - `vs2` — Vector register operand.
14476/// - `rs1` — Source register.
14477/// - `vm` — Vector mask control.
14478pub trait VrolVxEmitter<T0, T1, T2, T3> {
14479    fn vrol_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
14480}
14481
14482/// RISC-V `vror.vi` instruction.
14483///
14484/// # Forms
14485/// Assembly: `vror.vi vm, vs2, vd, imm`
14486/// Rust: `vror_vi(vd, vs2, zimm6lohi, vm)`
14487///
14488/// # Arguments
14489/// - `vd` — Vector register operand.
14490/// - `vs2` — Vector register operand.
14491/// - `zimm6lohi` — Immediate encoding value.
14492/// - `vm` — Vector mask control.
14493pub trait VrorViEmitter<T0, T1, T2, T3> {
14494    fn vror_vi(&mut self, vd: T0, vs2: T1, zimm6lohi: T2, vm: T3);
14495}
14496
14497/// RISC-V `vror.vv` instruction.
14498///
14499/// # Forms
14500/// Assembly: `vror.vv vm, vs2, vs1, vd`
14501/// Rust: `vror_vv(vd, vs1, vs2, vm)`
14502///
14503/// # Arguments
14504/// - `vd` — Vector register operand.
14505/// - `vs1` — Vector register operand.
14506/// - `vs2` — Vector register operand.
14507/// - `vm` — Vector mask control.
14508pub trait VrorVvEmitter<T0, T1, T2, T3> {
14509    fn vror_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
14510}
14511
14512/// RISC-V `vror.vx` instruction.
14513///
14514/// # Forms
14515/// Assembly: `vror.vx vm, vs2, xs1, vd`
14516/// Rust: `vror_vx(vd, vs2, rs1, vm)`
14517///
14518/// # Arguments
14519/// - `vd` — Vector register operand.
14520/// - `vs2` — Vector register operand.
14521/// - `rs1` — Source register.
14522/// - `vm` — Vector mask control.
14523pub trait VrorVxEmitter<T0, T1, T2, T3> {
14524    fn vror_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
14525}
14526
14527/// RISC-V `vrsub.vi` instruction.
14528///
14529/// # Forms
14530/// Assembly: `vrsub.vi vm, vs2, vd, imm`
14531/// Rust: `vrsub_vi(vd, vs2, simm5, vm)`
14532///
14533/// # Arguments
14534/// - `vd` — Vector register operand.
14535/// - `vs2` — Vector register operand.
14536/// - `simm5` — Immediate encoding value.
14537/// - `vm` — Vector mask control.
14538pub trait VrsubViEmitter<T0, T1, T2, T3> {
14539    fn vrsub_vi(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3);
14540}
14541
14542/// RISC-V `vrsub.vx` instruction.
14543///
14544/// # Forms
14545/// Assembly: `vrsub.vx vm, vs2, xs1, vd`
14546/// Rust: `vrsub_vx(vd, vs2, rs1, vm)`
14547///
14548/// # Arguments
14549/// - `vd` — Vector register operand.
14550/// - `vs2` — Vector register operand.
14551/// - `rs1` — Source register.
14552/// - `vm` — Vector mask control.
14553pub trait VrsubVxEmitter<T0, T1, T2, T3> {
14554    fn vrsub_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
14555}
14556
14557/// RISC-V `vs1r.v` instruction.
14558///
14559/// # Forms
14560/// Assembly: `vs1r.v xs1, vs3`
14561/// Rust: `vs1r_v(vs3, rs1)`
14562///
14563/// # Arguments
14564/// - `vs3` — Vector register operand.
14565/// - `rs1` — Memory base register.
14566pub trait Vs1RVEmitter<T0, T1> {
14567    fn vs1r_v(&mut self, vs3: T0, rs1: T1);
14568}
14569
14570/// RISC-V `vs2r.v` instruction.
14571///
14572/// # Forms
14573/// Assembly: `vs2r.v xs1, vs3`
14574/// Rust: `vs2r_v(vs3, rs1)`
14575///
14576/// # Arguments
14577/// - `vs3` — Vector register operand.
14578/// - `rs1` — Memory base register.
14579pub trait Vs2RVEmitter<T0, T1> {
14580    fn vs2r_v(&mut self, vs3: T0, rs1: T1);
14581}
14582
14583/// RISC-V `vs4r.v` instruction.
14584///
14585/// # Forms
14586/// Assembly: `vs4r.v xs1, vs3`
14587/// Rust: `vs4r_v(vs3, rs1)`
14588///
14589/// # Arguments
14590/// - `vs3` — Vector register operand.
14591/// - `rs1` — Memory base register.
14592pub trait Vs4RVEmitter<T0, T1> {
14593    fn vs4r_v(&mut self, vs3: T0, rs1: T1);
14594}
14595
14596/// RISC-V `vs8r.v` instruction.
14597///
14598/// # Forms
14599/// Assembly: `vs8r.v xs1, vs3`
14600/// Rust: `vs8r_v(vs3, rs1)`
14601///
14602/// # Arguments
14603/// - `vs3` — Vector register operand.
14604/// - `rs1` — Memory base register.
14605pub trait Vs8RVEmitter<T0, T1> {
14606    fn vs8r_v(&mut self, vs3: T0, rs1: T1);
14607}
14608
14609/// RISC-V `vsadd.vi` instruction.
14610///
14611/// # Forms
14612/// Assembly: `vsadd.vi vm, vs2, vd, imm`
14613/// Rust: `vsadd_vi(vd, vs2, simm5, vm)`
14614///
14615/// # Arguments
14616/// - `vd` — Vector register operand.
14617/// - `vs2` — Vector register operand.
14618/// - `simm5` — Immediate encoding value.
14619/// - `vm` — Vector mask control.
14620pub trait VsaddViEmitter<T0, T1, T2, T3> {
14621    fn vsadd_vi(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3);
14622}
14623
14624/// RISC-V `vsadd.vv` instruction.
14625///
14626/// # Forms
14627/// Assembly: `vsadd.vv vm, vs2, vs1, vd`
14628/// Rust: `vsadd_vv(vd, vs1, vs2, vm)`
14629///
14630/// # Arguments
14631/// - `vd` — Vector register operand.
14632/// - `vs1` — Vector register operand.
14633/// - `vs2` — Vector register operand.
14634/// - `vm` — Vector mask control.
14635pub trait VsaddVvEmitter<T0, T1, T2, T3> {
14636    fn vsadd_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
14637}
14638
14639/// RISC-V `vsadd.vx` instruction.
14640///
14641/// # Forms
14642/// Assembly: `vsadd.vx vm, vs2, xs1, vd`
14643/// Rust: `vsadd_vx(vd, vs2, rs1, vm)`
14644///
14645/// # Arguments
14646/// - `vd` — Vector register operand.
14647/// - `vs2` — Vector register operand.
14648/// - `rs1` — Source register.
14649/// - `vm` — Vector mask control.
14650pub trait VsaddVxEmitter<T0, T1, T2, T3> {
14651    fn vsadd_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
14652}
14653
14654/// RISC-V `vsaddu.vi` instruction.
14655///
14656/// # Forms
14657/// Assembly: `vsaddu.vi vm, vs2, vd, imm`
14658/// Rust: `vsaddu_vi(vd, vs2, simm5, vm)`
14659///
14660/// # Arguments
14661/// - `vd` — Vector register operand.
14662/// - `vs2` — Vector register operand.
14663/// - `simm5` — Immediate encoding value.
14664/// - `vm` — Vector mask control.
14665pub trait VsadduViEmitter<T0, T1, T2, T3> {
14666    fn vsaddu_vi(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3);
14667}
14668
14669/// RISC-V `vsaddu.vv` instruction.
14670///
14671/// # Forms
14672/// Assembly: `vsaddu.vv vm, vs2, vs1, vd`
14673/// Rust: `vsaddu_vv(vd, vs1, vs2, vm)`
14674///
14675/// # Arguments
14676/// - `vd` — Vector register operand.
14677/// - `vs1` — Vector register operand.
14678/// - `vs2` — Vector register operand.
14679/// - `vm` — Vector mask control.
14680pub trait VsadduVvEmitter<T0, T1, T2, T3> {
14681    fn vsaddu_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
14682}
14683
14684/// RISC-V `vsaddu.vx` instruction.
14685///
14686/// # Forms
14687/// Assembly: `vsaddu.vx vm, vs2, xs1, vd`
14688/// Rust: `vsaddu_vx(vd, vs2, rs1, vm)`
14689///
14690/// # Arguments
14691/// - `vd` — Vector register operand.
14692/// - `vs2` — Vector register operand.
14693/// - `rs1` — Source register.
14694/// - `vm` — Vector mask control.
14695pub trait VsadduVxEmitter<T0, T1, T2, T3> {
14696    fn vsaddu_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
14697}
14698
14699/// RISC-V `vsbc.vvm` instruction.
14700///
14701/// # Forms
14702/// Assembly: `vsbc.vvm vs2, vs1, vd`
14703/// Rust: `vsbc_vvm(vd, vs1, vs2)`
14704///
14705/// # Arguments
14706/// - `vd` — Vector register operand.
14707/// - `vs1` — Vector register operand.
14708/// - `vs2` — Vector register operand.
14709pub trait VsbcVvmEmitter<T0, T1, T2> {
14710    fn vsbc_vvm(&mut self, vd: T0, vs1: T1, vs2: T2);
14711}
14712
14713/// RISC-V `vsbc.vxm` instruction.
14714///
14715/// # Forms
14716/// Assembly: `vsbc.vxm vs2, xs1, vd`
14717/// Rust: `vsbc_vxm(vd, rs1, vs2)`
14718///
14719/// # Arguments
14720/// - `vd` — Vector register operand.
14721/// - `rs1` — Source register.
14722/// - `vs2` — Vector register operand.
14723pub trait VsbcVxmEmitter<T0, T1, T2> {
14724    fn vsbc_vxm(&mut self, vd: T0, rs1: T1, vs2: T2);
14725}
14726
14727/// RISC-V `vse16.v` instruction.
14728///
14729/// # Forms
14730/// Assembly: `vse16.v vm, xs1, vs3`
14731/// Rust: `vse16_v(vs3, rs1, vm, nf)`
14732///
14733/// # Arguments
14734/// - `vs3` — Vector register operand.
14735/// - `rs1` — Memory base register.
14736/// - `vm` — Vector mask control.
14737/// - `nf` — Vector segment field count.
14738pub trait Vse16VEmitter<T0, T1, T2, T3> {
14739    fn vse16_v(&mut self, vs3: T0, rs1: T1, vm: T2, nf: T3);
14740}
14741
14742/// RISC-V `vse1.v` instruction.
14743///
14744/// # Forms
14745/// Assembly: `vse1.v vs3 rs1`
14746/// Rust: `vse1_v(vs3, rs1)`
14747///
14748/// # Arguments
14749/// - `vs3` — Vector register operand.
14750/// - `rs1` — Memory base register.
14751pub trait Vse1VEmitter<T0, T1> {
14752    fn vse1_v(&mut self, vs3: T0, rs1: T1);
14753}
14754
14755/// RISC-V `vse32.v` instruction.
14756///
14757/// # Forms
14758/// Assembly: `vse32.v vm, xs1, vs3`
14759/// Rust: `vse32_v(vs3, rs1, vm, nf)`
14760///
14761/// # Arguments
14762/// - `vs3` — Vector register operand.
14763/// - `rs1` — Memory base register.
14764/// - `vm` — Vector mask control.
14765/// - `nf` — Vector segment field count.
14766pub trait Vse32VEmitter<T0, T1, T2, T3> {
14767    fn vse32_v(&mut self, vs3: T0, rs1: T1, vm: T2, nf: T3);
14768}
14769
14770/// RISC-V `vse64.v` instruction.
14771///
14772/// # Forms
14773/// Assembly: `vse64.v vm, xs1, vs3`
14774/// Rust: `vse64_v(vs3, rs1, vm, nf)`
14775///
14776/// # Arguments
14777/// - `vs3` — Vector register operand.
14778/// - `rs1` — Memory base register.
14779/// - `vm` — Vector mask control.
14780/// - `nf` — Vector segment field count.
14781pub trait Vse64VEmitter<T0, T1, T2, T3> {
14782    fn vse64_v(&mut self, vs3: T0, rs1: T1, vm: T2, nf: T3);
14783}
14784
14785/// RISC-V `vse8.v` instruction.
14786///
14787/// # Forms
14788/// Assembly: `vse8.v vm, xs1, vs3`
14789/// Rust: `vse8_v(vs3, rs1, vm, nf)`
14790///
14791/// # Arguments
14792/// - `vs3` — Vector register operand.
14793/// - `rs1` — Memory base register.
14794/// - `vm` — Vector mask control.
14795/// - `nf` — Vector segment field count.
14796pub trait Vse8VEmitter<T0, T1, T2, T3> {
14797    fn vse8_v(&mut self, vs3: T0, rs1: T1, vm: T2, nf: T3);
14798}
14799
14800/// RISC-V `vsetivli` instruction.
14801///
14802/// # Forms
14803/// Assembly: `vsetivli xd, imm`
14804/// Rust: `vsetivli(rd, zimm5, zimm10)`
14805///
14806/// # Arguments
14807/// - `rd` — Destination register.
14808/// - `zimm5` — Immediate encoding value.
14809/// - `zimm10` — Immediate encoding value.
14810pub trait VsetivliEmitter<T0, T1, T2> {
14811    fn vsetivli(&mut self, rd: T0, zimm5: T1, zimm10: T2);
14812}
14813
14814/// RISC-V `vsetvl` instruction.
14815///
14816/// # Forms
14817/// Assembly: `vsetvl xs2, xs1, xd`
14818/// Rust: `vsetvl(rd, rs1, rs2)`
14819///
14820/// # Arguments
14821/// - `rd` — Destination register.
14822/// - `rs1` — Source register.
14823/// - `rs2` — Source register.
14824pub trait VsetvlEmitter<T0, T1, T2> {
14825    fn vsetvl(&mut self, rd: T0, rs1: T1, rs2: T2);
14826}
14827
14828/// RISC-V `vsetvli` instruction.
14829///
14830/// # Forms
14831/// Assembly: `vsetvli xs1, xd, imm`
14832/// Rust: `vsetvli(rd, rs1, zimm11)`
14833///
14834/// # Arguments
14835/// - `rd` — Destination register.
14836/// - `rs1` — Source register.
14837/// - `zimm11` — Immediate encoding value.
14838pub trait VsetvliEmitter<T0, T1, T2> {
14839    fn vsetvli(&mut self, rd: T0, rs1: T1, zimm11: T2);
14840}
14841
14842/// RISC-V `vsext.vf2` instruction.
14843///
14844/// # Forms
14845/// Assembly: `vsext.vf2 vm, vs2, vd`
14846/// Rust: `vsext_vf2(vd, vs2, vm)`
14847///
14848/// # Arguments
14849/// - `vd` — Vector register operand.
14850/// - `vs2` — Vector register operand.
14851/// - `vm` — Vector mask control.
14852pub trait VsextVf2Emitter<T0, T1, T2> {
14853    fn vsext_vf2(&mut self, vd: T0, vs2: T1, vm: T2);
14854}
14855
14856/// RISC-V `vsext.vf4` instruction.
14857///
14858/// # Forms
14859/// Assembly: `vsext.vf4 vm, vs2, vd`
14860/// Rust: `vsext_vf4(vd, vs2, vm)`
14861///
14862/// # Arguments
14863/// - `vd` — Vector register operand.
14864/// - `vs2` — Vector register operand.
14865/// - `vm` — Vector mask control.
14866pub trait VsextVf4Emitter<T0, T1, T2> {
14867    fn vsext_vf4(&mut self, vd: T0, vs2: T1, vm: T2);
14868}
14869
14870/// RISC-V `vsext.vf8` instruction.
14871///
14872/// # Forms
14873/// Assembly: `vsext.vf8 vm, vs2, vd`
14874/// Rust: `vsext_vf8(vd, vs2, vm)`
14875///
14876/// # Arguments
14877/// - `vd` — Vector register operand.
14878/// - `vs2` — Vector register operand.
14879/// - `vm` — Vector mask control.
14880pub trait VsextVf8Emitter<T0, T1, T2> {
14881    fn vsext_vf8(&mut self, vd: T0, vs2: T1, vm: T2);
14882}
14883
14884/// RISC-V `vsha2ch.vv` instruction.
14885///
14886/// # Forms
14887/// Assembly: `vsha2ch.vv vs2, vs1, vd`
14888/// Rust: `vsha2ch_vv(vd, vs1, vs2)`
14889///
14890/// # Arguments
14891/// - `vd` — Vector register operand.
14892/// - `vs1` — Vector register operand.
14893/// - `vs2` — Vector register operand.
14894pub trait Vsha2ChVvEmitter<T0, T1, T2> {
14895    fn vsha2ch_vv(&mut self, vd: T0, vs1: T1, vs2: T2);
14896}
14897
14898/// RISC-V `vsha2cl.vv` instruction.
14899///
14900/// # Forms
14901/// Assembly: `vsha2cl.vv vs2, vs1, vd`
14902/// Rust: `vsha2cl_vv(vd, vs1, vs2)`
14903///
14904/// # Arguments
14905/// - `vd` — Vector register operand.
14906/// - `vs1` — Vector register operand.
14907/// - `vs2` — Vector register operand.
14908pub trait Vsha2ClVvEmitter<T0, T1, T2> {
14909    fn vsha2cl_vv(&mut self, vd: T0, vs1: T1, vs2: T2);
14910}
14911
14912/// RISC-V `vsha2ms.vv` instruction.
14913///
14914/// # Forms
14915/// Assembly: `vsha2ms.vv vs2, vs1, vd`
14916/// Rust: `vsha2ms_vv(vd, vs1, vs2)`
14917///
14918/// # Arguments
14919/// - `vd` — Vector register operand.
14920/// - `vs1` — Vector register operand.
14921/// - `vs2` — Vector register operand.
14922pub trait Vsha2MsVvEmitter<T0, T1, T2> {
14923    fn vsha2ms_vv(&mut self, vd: T0, vs1: T1, vs2: T2);
14924}
14925
14926/// RISC-V `vslide1down.vx` instruction.
14927///
14928/// # Forms
14929/// Assembly: `vslide1down.vx vm, vs2, xs1, vd`
14930/// Rust: `vslide1down_vx(vd, vs2, rs1, vm)`
14931///
14932/// # Arguments
14933/// - `vd` — Vector register operand.
14934/// - `vs2` — Vector register operand.
14935/// - `rs1` — Source register.
14936/// - `vm` — Vector mask control.
14937pub trait Vslide1DownVxEmitter<T0, T1, T2, T3> {
14938    fn vslide1down_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
14939}
14940
14941/// RISC-V `vslide1up.vx` instruction.
14942///
14943/// # Forms
14944/// Assembly: `vslide1up.vx vm, vs2, xs1, vd`
14945/// Rust: `vslide1up_vx(vd, vs2, rs1, vm)`
14946///
14947/// # Arguments
14948/// - `vd` — Vector register operand.
14949/// - `vs2` — Vector register operand.
14950/// - `rs1` — Source register.
14951/// - `vm` — Vector mask control.
14952pub trait Vslide1UpVxEmitter<T0, T1, T2, T3> {
14953    fn vslide1up_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
14954}
14955
14956/// RISC-V `vslidedown.vi` instruction.
14957///
14958/// # Forms
14959/// Assembly: `vslidedown.vi vm, vs2, vd, imm`
14960/// Rust: `vslidedown_vi(vd, vs2, zimm5, vm)`
14961///
14962/// # Arguments
14963/// - `vd` — Vector register operand.
14964/// - `vs2` — Vector register operand.
14965/// - `zimm5` — Immediate encoding value.
14966/// - `vm` — Vector mask control.
14967pub trait VslidedownViEmitter<T0, T1, T2, T3> {
14968    fn vslidedown_vi(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3);
14969}
14970
14971/// RISC-V `vslidedown.vx` instruction.
14972///
14973/// # Forms
14974/// Assembly: `vslidedown.vx vm, vs2, xs1, vd`
14975/// Rust: `vslidedown_vx(vd, vs2, rs1, vm)`
14976///
14977/// # Arguments
14978/// - `vd` — Vector register operand.
14979/// - `vs2` — Vector register operand.
14980/// - `rs1` — Source register.
14981/// - `vm` — Vector mask control.
14982pub trait VslidedownVxEmitter<T0, T1, T2, T3> {
14983    fn vslidedown_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
14984}
14985
14986/// RISC-V `vslideup.vi` instruction.
14987///
14988/// # Forms
14989/// Assembly: `vslideup.vi vm, vs2, vd, imm`
14990/// Rust: `vslideup_vi(vd, vs2, zimm5, vm)`
14991///
14992/// # Arguments
14993/// - `vd` — Vector register operand.
14994/// - `vs2` — Vector register operand.
14995/// - `zimm5` — Immediate encoding value.
14996/// - `vm` — Vector mask control.
14997pub trait VslideupViEmitter<T0, T1, T2, T3> {
14998    fn vslideup_vi(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3);
14999}
15000
15001/// RISC-V `vslideup.vx` instruction.
15002///
15003/// # Forms
15004/// Assembly: `vslideup.vx vm, vs2, xs1, vd`
15005/// Rust: `vslideup_vx(vd, vs2, rs1, vm)`
15006///
15007/// # Arguments
15008/// - `vd` — Vector register operand.
15009/// - `vs2` — Vector register operand.
15010/// - `rs1` — Source register.
15011/// - `vm` — Vector mask control.
15012pub trait VslideupVxEmitter<T0, T1, T2, T3> {
15013    fn vslideup_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
15014}
15015
15016/// RISC-V `vsll.vi` instruction.
15017///
15018/// # Forms
15019/// Assembly: `vsll.vi vm, vs2, vd, imm`
15020/// Rust: `vsll_vi(vd, vs2, zimm5, vm)`
15021///
15022/// # Arguments
15023/// - `vd` — Vector register operand.
15024/// - `vs2` — Vector register operand.
15025/// - `zimm5` — Immediate encoding value.
15026/// - `vm` — Vector mask control.
15027pub trait VsllViEmitter<T0, T1, T2, T3> {
15028    fn vsll_vi(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3);
15029}
15030
15031/// RISC-V `vsll.vv` instruction.
15032///
15033/// # Forms
15034/// Assembly: `vsll.vv vm, vs2, vs1, vd`
15035/// Rust: `vsll_vv(vd, vs1, vs2, vm)`
15036///
15037/// # Arguments
15038/// - `vd` — Vector register operand.
15039/// - `vs1` — Vector register operand.
15040/// - `vs2` — Vector register operand.
15041/// - `vm` — Vector mask control.
15042pub trait VsllVvEmitter<T0, T1, T2, T3> {
15043    fn vsll_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
15044}
15045
15046/// RISC-V `vsll.vx` instruction.
15047///
15048/// # Forms
15049/// Assembly: `vsll.vx vm, vs2, xs1, vd`
15050/// Rust: `vsll_vx(vd, vs2, rs1, vm)`
15051///
15052/// # Arguments
15053/// - `vd` — Vector register operand.
15054/// - `vs2` — Vector register operand.
15055/// - `rs1` — Source register.
15056/// - `vm` — Vector mask control.
15057pub trait VsllVxEmitter<T0, T1, T2, T3> {
15058    fn vsll_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
15059}
15060
15061/// RISC-V `vsm3c.vi` instruction.
15062///
15063/// # Forms
15064/// Assembly: `vsm3c.vi vs2, vd, imm`
15065/// Rust: `vsm3c_vi(vd, vs2, zimm5)`
15066///
15067/// # Arguments
15068/// - `vd` — Vector register operand.
15069/// - `vs2` — Vector register operand.
15070/// - `zimm5` — Immediate encoding value.
15071pub trait Vsm3CViEmitter<T0, T1, T2> {
15072    fn vsm3c_vi(&mut self, vd: T0, vs2: T1, zimm5: T2);
15073}
15074
15075/// RISC-V `vsm3me.vv` instruction.
15076///
15077/// # Forms
15078/// Assembly: `vsm3me.vv vs2, vs1, vd`
15079/// Rust: `vsm3me_vv(vd, vs1, vs2)`
15080///
15081/// # Arguments
15082/// - `vd` — Vector register operand.
15083/// - `vs1` — Vector register operand.
15084/// - `vs2` — Vector register operand.
15085pub trait Vsm3MeVvEmitter<T0, T1, T2> {
15086    fn vsm3me_vv(&mut self, vd: T0, vs1: T1, vs2: T2);
15087}
15088
15089/// RISC-V `vsm4k.vi` instruction.
15090///
15091/// # Forms
15092/// Assembly: `vsm4k.vi vs2, vd, imm`
15093/// Rust: `vsm4k_vi(vd, vs2, zimm5)`
15094///
15095/// # Arguments
15096/// - `vd` — Vector register operand.
15097/// - `vs2` — Vector register operand.
15098/// - `zimm5` — Immediate encoding value.
15099pub trait Vsm4KViEmitter<T0, T1, T2> {
15100    fn vsm4k_vi(&mut self, vd: T0, vs2: T1, zimm5: T2);
15101}
15102
15103/// RISC-V `vsm4r.vs` instruction.
15104///
15105/// # Forms
15106/// Assembly: `vsm4r.vs vs2, vd`
15107/// Rust: `vsm4r_vs(vd, vs2)`
15108///
15109/// # Arguments
15110/// - `vd` — Vector register operand.
15111/// - `vs2` — Vector register operand.
15112pub trait Vsm4RVsEmitter<T0, T1> {
15113    fn vsm4r_vs(&mut self, vd: T0, vs2: T1);
15114}
15115
15116/// RISC-V `vsm4r.vv` instruction.
15117///
15118/// # Forms
15119/// Assembly: `vsm4r.vv vs2, vd`
15120/// Rust: `vsm4r_vv(vd, vs2)`
15121///
15122/// # Arguments
15123/// - `vd` — Vector register operand.
15124/// - `vs2` — Vector register operand.
15125pub trait Vsm4RVvEmitter<T0, T1> {
15126    fn vsm4r_vv(&mut self, vd: T0, vs2: T1);
15127}
15128
15129/// RISC-V `vsm.v` instruction.
15130///
15131/// # Forms
15132/// Assembly: `vsm.v xs1, vs3`
15133/// Rust: `vsm_v(vs3, rs1)`
15134///
15135/// # Arguments
15136/// - `vs3` — Vector register operand.
15137/// - `rs1` — Memory base register.
15138pub trait VsmVEmitter<T0, T1> {
15139    fn vsm_v(&mut self, vs3: T0, rs1: T1);
15140}
15141
15142/// RISC-V `vsmul.vv` instruction.
15143///
15144/// # Forms
15145/// Assembly: `vsmul.vv vm, vs2, vs1, vd`
15146/// Rust: `vsmul_vv(vd, vs1, vs2, vm)`
15147///
15148/// # Arguments
15149/// - `vd` — Vector register operand.
15150/// - `vs1` — Vector register operand.
15151/// - `vs2` — Vector register operand.
15152/// - `vm` — Vector mask control.
15153pub trait VsmulVvEmitter<T0, T1, T2, T3> {
15154    fn vsmul_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
15155}
15156
15157/// RISC-V `vsmul.vx` instruction.
15158///
15159/// # Forms
15160/// Assembly: `vsmul.vx vm, vs2, xs1, vd`
15161/// Rust: `vsmul_vx(vd, vs2, rs1, vm)`
15162///
15163/// # Arguments
15164/// - `vd` — Vector register operand.
15165/// - `vs2` — Vector register operand.
15166/// - `rs1` — Source register.
15167/// - `vm` — Vector mask control.
15168pub trait VsmulVxEmitter<T0, T1, T2, T3> {
15169    fn vsmul_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
15170}
15171
15172/// RISC-V `vsoxei16.v` instruction.
15173///
15174/// # Forms
15175/// Assembly: `vsoxei16.v vm, vs2, xs1, vs3`
15176/// Rust: `vsoxei16_v(vs3, rs1, vs2, vm, nf)`
15177///
15178/// # Arguments
15179/// - `vs3` — Vector register operand.
15180/// - `rs1` — Memory base register.
15181/// - `vs2` — Vector register operand.
15182/// - `vm` — Vector mask control.
15183/// - `nf` — Vector segment field count.
15184pub trait Vsoxei16VEmitter<T0, T1, T2, T3, T4> {
15185    fn vsoxei16_v(&mut self, vs3: T0, rs1: T1, vs2: T2, vm: T3, nf: T4);
15186}
15187
15188/// RISC-V `vsoxei32.v` instruction.
15189///
15190/// # Forms
15191/// Assembly: `vsoxei32.v vm, vs2, xs1, vs3`
15192/// Rust: `vsoxei32_v(vs3, rs1, vs2, vm, nf)`
15193///
15194/// # Arguments
15195/// - `vs3` — Vector register operand.
15196/// - `rs1` — Memory base register.
15197/// - `vs2` — Vector register operand.
15198/// - `vm` — Vector mask control.
15199/// - `nf` — Vector segment field count.
15200pub trait Vsoxei32VEmitter<T0, T1, T2, T3, T4> {
15201    fn vsoxei32_v(&mut self, vs3: T0, rs1: T1, vs2: T2, vm: T3, nf: T4);
15202}
15203
15204/// RISC-V `vsoxei64.v` instruction.
15205///
15206/// # Forms
15207/// Assembly: `vsoxei64.v vm, vs2, xs1, vs3`
15208/// Rust: `vsoxei64_v(vs3, rs1, vs2, vm, nf)`
15209///
15210/// # Arguments
15211/// - `vs3` — Vector register operand.
15212/// - `rs1` — Memory base register.
15213/// - `vs2` — Vector register operand.
15214/// - `vm` — Vector mask control.
15215/// - `nf` — Vector segment field count.
15216pub trait Vsoxei64VEmitter<T0, T1, T2, T3, T4> {
15217    fn vsoxei64_v(&mut self, vs3: T0, rs1: T1, vs2: T2, vm: T3, nf: T4);
15218}
15219
15220/// RISC-V `vsoxei8.v` instruction.
15221///
15222/// # Forms
15223/// Assembly: `vsoxei8.v vm, vs2, xs1, vs3`
15224/// Rust: `vsoxei8_v(vs3, rs1, vs2, vm, nf)`
15225///
15226/// # Arguments
15227/// - `vs3` — Vector register operand.
15228/// - `rs1` — Memory base register.
15229/// - `vs2` — Vector register operand.
15230/// - `vm` — Vector mask control.
15231/// - `nf` — Vector segment field count.
15232pub trait Vsoxei8VEmitter<T0, T1, T2, T3, T4> {
15233    fn vsoxei8_v(&mut self, vs3: T0, rs1: T1, vs2: T2, vm: T3, nf: T4);
15234}
15235
15236/// RISC-V `vsra.vi` instruction.
15237///
15238/// # Forms
15239/// Assembly: `vsra.vi vm, vs2, vd, imm`
15240/// Rust: `vsra_vi(vd, vs2, zimm5, vm)`
15241///
15242/// # Arguments
15243/// - `vd` — Vector register operand.
15244/// - `vs2` — Vector register operand.
15245/// - `zimm5` — Immediate encoding value.
15246/// - `vm` — Vector mask control.
15247pub trait VsraViEmitter<T0, T1, T2, T3> {
15248    fn vsra_vi(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3);
15249}
15250
15251/// RISC-V `vsra.vv` instruction.
15252///
15253/// # Forms
15254/// Assembly: `vsra.vv vm, vs2, vs1, vd`
15255/// Rust: `vsra_vv(vd, vs1, vs2, vm)`
15256///
15257/// # Arguments
15258/// - `vd` — Vector register operand.
15259/// - `vs1` — Vector register operand.
15260/// - `vs2` — Vector register operand.
15261/// - `vm` — Vector mask control.
15262pub trait VsraVvEmitter<T0, T1, T2, T3> {
15263    fn vsra_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
15264}
15265
15266/// RISC-V `vsra.vx` instruction.
15267///
15268/// # Forms
15269/// Assembly: `vsra.vx vm, vs2, xs1, vd`
15270/// Rust: `vsra_vx(vd, vs2, rs1, vm)`
15271///
15272/// # Arguments
15273/// - `vd` — Vector register operand.
15274/// - `vs2` — Vector register operand.
15275/// - `rs1` — Source register.
15276/// - `vm` — Vector mask control.
15277pub trait VsraVxEmitter<T0, T1, T2, T3> {
15278    fn vsra_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
15279}
15280
15281/// RISC-V `vsrl.vi` instruction.
15282///
15283/// # Forms
15284/// Assembly: `vsrl.vi vm, vs2, vd, imm`
15285/// Rust: `vsrl_vi(vd, vs2, zimm5, vm)`
15286///
15287/// # Arguments
15288/// - `vd` — Vector register operand.
15289/// - `vs2` — Vector register operand.
15290/// - `zimm5` — Immediate encoding value.
15291/// - `vm` — Vector mask control.
15292pub trait VsrlViEmitter<T0, T1, T2, T3> {
15293    fn vsrl_vi(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3);
15294}
15295
15296/// RISC-V `vsrl.vv` instruction.
15297///
15298/// # Forms
15299/// Assembly: `vsrl.vv vm, vs2, vs1, vd`
15300/// Rust: `vsrl_vv(vd, vs1, vs2, vm)`
15301///
15302/// # Arguments
15303/// - `vd` — Vector register operand.
15304/// - `vs1` — Vector register operand.
15305/// - `vs2` — Vector register operand.
15306/// - `vm` — Vector mask control.
15307pub trait VsrlVvEmitter<T0, T1, T2, T3> {
15308    fn vsrl_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
15309}
15310
15311/// RISC-V `vsrl.vx` instruction.
15312///
15313/// # Forms
15314/// Assembly: `vsrl.vx vm, vs2, xs1, vd`
15315/// Rust: `vsrl_vx(vd, vs2, rs1, vm)`
15316///
15317/// # Arguments
15318/// - `vd` — Vector register operand.
15319/// - `vs2` — Vector register operand.
15320/// - `rs1` — Source register.
15321/// - `vm` — Vector mask control.
15322pub trait VsrlVxEmitter<T0, T1, T2, T3> {
15323    fn vsrl_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
15324}
15325
15326/// RISC-V `vsse16.v` instruction.
15327///
15328/// # Forms
15329/// Assembly: `vsse16.v vm, xs2, xs1, vs3`
15330/// Rust: `vsse16_v(vs3, rs1, rs2, vm, nf)`
15331///
15332/// # Arguments
15333/// - `vs3` — Vector register operand.
15334/// - `rs1` — Memory base register.
15335/// - `rs2` — Source register.
15336/// - `vm` — Vector mask control.
15337/// - `nf` — Vector segment field count.
15338pub trait Vsse16VEmitter<T0, T1, T2, T3, T4> {
15339    fn vsse16_v(&mut self, vs3: T0, rs1: T1, rs2: T2, vm: T3, nf: T4);
15340}
15341
15342/// RISC-V `vsse32.v` instruction.
15343///
15344/// # Forms
15345/// Assembly: `vsse32.v vm, xs2, xs1, vs3`
15346/// Rust: `vsse32_v(vs3, rs1, rs2, vm, nf)`
15347///
15348/// # Arguments
15349/// - `vs3` — Vector register operand.
15350/// - `rs1` — Memory base register.
15351/// - `rs2` — Source register.
15352/// - `vm` — Vector mask control.
15353/// - `nf` — Vector segment field count.
15354pub trait Vsse32VEmitter<T0, T1, T2, T3, T4> {
15355    fn vsse32_v(&mut self, vs3: T0, rs1: T1, rs2: T2, vm: T3, nf: T4);
15356}
15357
15358/// RISC-V `vsse64.v` instruction.
15359///
15360/// # Forms
15361/// Assembly: `vsse64.v vm, xs2, xs1, vs3`
15362/// Rust: `vsse64_v(vs3, rs1, rs2, vm, nf)`
15363///
15364/// # Arguments
15365/// - `vs3` — Vector register operand.
15366/// - `rs1` — Memory base register.
15367/// - `rs2` — Source register.
15368/// - `vm` — Vector mask control.
15369/// - `nf` — Vector segment field count.
15370pub trait Vsse64VEmitter<T0, T1, T2, T3, T4> {
15371    fn vsse64_v(&mut self, vs3: T0, rs1: T1, rs2: T2, vm: T3, nf: T4);
15372}
15373
15374/// RISC-V `vsse8.v` instruction.
15375///
15376/// # Forms
15377/// Assembly: `vsse8.v vm, xs2, xs1, vs3`
15378/// Rust: `vsse8_v(vs3, rs1, rs2, vm, nf)`
15379///
15380/// # Arguments
15381/// - `vs3` — Vector register operand.
15382/// - `rs1` — Memory base register.
15383/// - `rs2` — Source register.
15384/// - `vm` — Vector mask control.
15385/// - `nf` — Vector segment field count.
15386pub trait Vsse8VEmitter<T0, T1, T2, T3, T4> {
15387    fn vsse8_v(&mut self, vs3: T0, rs1: T1, rs2: T2, vm: T3, nf: T4);
15388}
15389
15390/// RISC-V `vssra.vi` instruction.
15391///
15392/// # Forms
15393/// Assembly: `vssra.vi vm, vs2, vd, imm`
15394/// Rust: `vssra_vi(vd, vs2, zimm5, vm)`
15395///
15396/// # Arguments
15397/// - `vd` — Vector register operand.
15398/// - `vs2` — Vector register operand.
15399/// - `zimm5` — Immediate encoding value.
15400/// - `vm` — Vector mask control.
15401pub trait VssraViEmitter<T0, T1, T2, T3> {
15402    fn vssra_vi(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3);
15403}
15404
15405/// RISC-V `vssra.vv` instruction.
15406///
15407/// # Forms
15408/// Assembly: `vssra.vv vm, vs2, vs1, vd`
15409/// Rust: `vssra_vv(vd, vs1, vs2, vm)`
15410///
15411/// # Arguments
15412/// - `vd` — Vector register operand.
15413/// - `vs1` — Vector register operand.
15414/// - `vs2` — Vector register operand.
15415/// - `vm` — Vector mask control.
15416pub trait VssraVvEmitter<T0, T1, T2, T3> {
15417    fn vssra_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
15418}
15419
15420/// RISC-V `vssra.vx` instruction.
15421///
15422/// # Forms
15423/// Assembly: `vssra.vx vm, vs2, xs1, vd`
15424/// Rust: `vssra_vx(vd, vs2, rs1, vm)`
15425///
15426/// # Arguments
15427/// - `vd` — Vector register operand.
15428/// - `vs2` — Vector register operand.
15429/// - `rs1` — Source register.
15430/// - `vm` — Vector mask control.
15431pub trait VssraVxEmitter<T0, T1, T2, T3> {
15432    fn vssra_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
15433}
15434
15435/// RISC-V `vssrl.vi` instruction.
15436///
15437/// # Forms
15438/// Assembly: `vssrl.vi vm, vs2, vd, imm`
15439/// Rust: `vssrl_vi(vd, vs2, zimm5, vm)`
15440///
15441/// # Arguments
15442/// - `vd` — Vector register operand.
15443/// - `vs2` — Vector register operand.
15444/// - `zimm5` — Immediate encoding value.
15445/// - `vm` — Vector mask control.
15446pub trait VssrlViEmitter<T0, T1, T2, T3> {
15447    fn vssrl_vi(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3);
15448}
15449
15450/// RISC-V `vssrl.vv` instruction.
15451///
15452/// # Forms
15453/// Assembly: `vssrl.vv vm, vs2, vs1, vd`
15454/// Rust: `vssrl_vv(vd, vs1, vs2, vm)`
15455///
15456/// # Arguments
15457/// - `vd` — Vector register operand.
15458/// - `vs1` — Vector register operand.
15459/// - `vs2` — Vector register operand.
15460/// - `vm` — Vector mask control.
15461pub trait VssrlVvEmitter<T0, T1, T2, T3> {
15462    fn vssrl_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
15463}
15464
15465/// RISC-V `vssrl.vx` instruction.
15466///
15467/// # Forms
15468/// Assembly: `vssrl.vx vm, vs2, xs1, vd`
15469/// Rust: `vssrl_vx(vd, vs2, rs1, vm)`
15470///
15471/// # Arguments
15472/// - `vd` — Vector register operand.
15473/// - `vs2` — Vector register operand.
15474/// - `rs1` — Source register.
15475/// - `vm` — Vector mask control.
15476pub trait VssrlVxEmitter<T0, T1, T2, T3> {
15477    fn vssrl_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
15478}
15479
15480/// RISC-V `vssub.vv` instruction.
15481///
15482/// # Forms
15483/// Assembly: `vssub.vv vm, vs2, vs1, vd`
15484/// Rust: `vssub_vv(vd, vs1, vs2, vm)`
15485///
15486/// # Arguments
15487/// - `vd` — Vector register operand.
15488/// - `vs1` — Vector register operand.
15489/// - `vs2` — Vector register operand.
15490/// - `vm` — Vector mask control.
15491pub trait VssubVvEmitter<T0, T1, T2, T3> {
15492    fn vssub_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
15493}
15494
15495/// RISC-V `vssub.vx` instruction.
15496///
15497/// # Forms
15498/// Assembly: `vssub.vx vm, vs2, xs1, vd`
15499/// Rust: `vssub_vx(vd, vs2, rs1, vm)`
15500///
15501/// # Arguments
15502/// - `vd` — Vector register operand.
15503/// - `vs2` — Vector register operand.
15504/// - `rs1` — Source register.
15505/// - `vm` — Vector mask control.
15506pub trait VssubVxEmitter<T0, T1, T2, T3> {
15507    fn vssub_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
15508}
15509
15510/// RISC-V `vssubu.vv` instruction.
15511///
15512/// # Forms
15513/// Assembly: `vssubu.vv vm, vs2, vs1, vd`
15514/// Rust: `vssubu_vv(vd, vs1, vs2, vm)`
15515///
15516/// # Arguments
15517/// - `vd` — Vector register operand.
15518/// - `vs1` — Vector register operand.
15519/// - `vs2` — Vector register operand.
15520/// - `vm` — Vector mask control.
15521pub trait VssubuVvEmitter<T0, T1, T2, T3> {
15522    fn vssubu_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
15523}
15524
15525/// RISC-V `vssubu.vx` instruction.
15526///
15527/// # Forms
15528/// Assembly: `vssubu.vx vm, vs2, xs1, vd`
15529/// Rust: `vssubu_vx(vd, vs2, rs1, vm)`
15530///
15531/// # Arguments
15532/// - `vd` — Vector register operand.
15533/// - `vs2` — Vector register operand.
15534/// - `rs1` — Source register.
15535/// - `vm` — Vector mask control.
15536pub trait VssubuVxEmitter<T0, T1, T2, T3> {
15537    fn vssubu_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
15538}
15539
15540/// RISC-V `vsub.vv` instruction.
15541///
15542/// # Forms
15543/// Assembly: `vsub.vv vm, vs2, vs1, vd`
15544/// Rust: `vsub_vv(vd, vs1, vs2, vm)`
15545///
15546/// # Arguments
15547/// - `vd` — Vector register operand.
15548/// - `vs1` — Vector register operand.
15549/// - `vs2` — Vector register operand.
15550/// - `vm` — Vector mask control.
15551pub trait VsubVvEmitter<T0, T1, T2, T3> {
15552    fn vsub_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
15553}
15554
15555/// RISC-V `vsub.vx` instruction.
15556///
15557/// # Forms
15558/// Assembly: `vsub.vx vm, vs2, xs1, vd`
15559/// Rust: `vsub_vx(vd, vs2, rs1, vm)`
15560///
15561/// # Arguments
15562/// - `vd` — Vector register operand.
15563/// - `vs2` — Vector register operand.
15564/// - `rs1` — Source register.
15565/// - `vm` — Vector mask control.
15566pub trait VsubVxEmitter<T0, T1, T2, T3> {
15567    fn vsub_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
15568}
15569
15570/// RISC-V `vsuxei16.v` instruction.
15571///
15572/// # Forms
15573/// Assembly: `vsuxei16.v vm, vs2, xs1, vs3`
15574/// Rust: `vsuxei16_v(vs3, rs1, vs2, vm, nf)`
15575///
15576/// # Arguments
15577/// - `vs3` — Vector register operand.
15578/// - `rs1` — Memory base register.
15579/// - `vs2` — Vector register operand.
15580/// - `vm` — Vector mask control.
15581/// - `nf` — Vector segment field count.
15582pub trait Vsuxei16VEmitter<T0, T1, T2, T3, T4> {
15583    fn vsuxei16_v(&mut self, vs3: T0, rs1: T1, vs2: T2, vm: T3, nf: T4);
15584}
15585
15586/// RISC-V `vsuxei32.v` instruction.
15587///
15588/// # Forms
15589/// Assembly: `vsuxei32.v vm, vs2, xs1, vs3`
15590/// Rust: `vsuxei32_v(vs3, rs1, vs2, vm, nf)`
15591///
15592/// # Arguments
15593/// - `vs3` — Vector register operand.
15594/// - `rs1` — Memory base register.
15595/// - `vs2` — Vector register operand.
15596/// - `vm` — Vector mask control.
15597/// - `nf` — Vector segment field count.
15598pub trait Vsuxei32VEmitter<T0, T1, T2, T3, T4> {
15599    fn vsuxei32_v(&mut self, vs3: T0, rs1: T1, vs2: T2, vm: T3, nf: T4);
15600}
15601
15602/// RISC-V `vsuxei64.v` instruction.
15603///
15604/// # Forms
15605/// Assembly: `vsuxei64.v vm, vs2, xs1, vs3`
15606/// Rust: `vsuxei64_v(vs3, rs1, vs2, vm, nf)`
15607///
15608/// # Arguments
15609/// - `vs3` — Vector register operand.
15610/// - `rs1` — Memory base register.
15611/// - `vs2` — Vector register operand.
15612/// - `vm` — Vector mask control.
15613/// - `nf` — Vector segment field count.
15614pub trait Vsuxei64VEmitter<T0, T1, T2, T3, T4> {
15615    fn vsuxei64_v(&mut self, vs3: T0, rs1: T1, vs2: T2, vm: T3, nf: T4);
15616}
15617
15618/// RISC-V `vsuxei8.v` instruction.
15619///
15620/// # Forms
15621/// Assembly: `vsuxei8.v vm, vs2, xs1, vs3`
15622/// Rust: `vsuxei8_v(vs3, rs1, vs2, vm, nf)`
15623///
15624/// # Arguments
15625/// - `vs3` — Vector register operand.
15626/// - `rs1` — Memory base register.
15627/// - `vs2` — Vector register operand.
15628/// - `vm` — Vector mask control.
15629/// - `nf` — Vector segment field count.
15630pub trait Vsuxei8VEmitter<T0, T1, T2, T3, T4> {
15631    fn vsuxei8_v(&mut self, vs3: T0, rs1: T1, vs2: T2, vm: T3, nf: T4);
15632}
15633
15634/// RISC-V `vwadd.vv` instruction.
15635///
15636/// # Forms
15637/// Assembly: `vwadd.vv vm, vs2, vs1, vd`
15638/// Rust: `vwadd_vv(vd, vs1, vs2, vm)`
15639///
15640/// # Arguments
15641/// - `vd` — Vector register operand.
15642/// - `vs1` — Vector register operand.
15643/// - `vs2` — Vector register operand.
15644/// - `vm` — Vector mask control.
15645pub trait VwaddVvEmitter<T0, T1, T2, T3> {
15646    fn vwadd_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
15647}
15648
15649/// RISC-V `vwadd.vx` instruction.
15650///
15651/// # Forms
15652/// Assembly: `vwadd.vx vm, vs2, xs1, vd`
15653/// Rust: `vwadd_vx(vd, vs2, rs1, vm)`
15654///
15655/// # Arguments
15656/// - `vd` — Vector register operand.
15657/// - `vs2` — Vector register operand.
15658/// - `rs1` — Source register.
15659/// - `vm` — Vector mask control.
15660pub trait VwaddVxEmitter<T0, T1, T2, T3> {
15661    fn vwadd_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
15662}
15663
15664/// RISC-V `vwadd.wv` instruction.
15665///
15666/// # Forms
15667/// Assembly: `vwadd.wv vm, vs2, vs1, vd`
15668/// Rust: `vwadd_wv(vd, vs1, vs2, vm)`
15669///
15670/// # Arguments
15671/// - `vd` — Vector register operand.
15672/// - `vs1` — Vector register operand.
15673/// - `vs2` — Vector register operand.
15674/// - `vm` — Vector mask control.
15675pub trait VwaddWvEmitter<T0, T1, T2, T3> {
15676    fn vwadd_wv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
15677}
15678
15679/// RISC-V `vwadd.wx` instruction.
15680///
15681/// # Forms
15682/// Assembly: `vwadd.wx vm, vs2, xs1, vd`
15683/// Rust: `vwadd_wx(vd, vs2, rs1, vm)`
15684///
15685/// # Arguments
15686/// - `vd` — Vector register operand.
15687/// - `vs2` — Vector register operand.
15688/// - `rs1` — Source register.
15689/// - `vm` — Vector mask control.
15690pub trait VwaddWxEmitter<T0, T1, T2, T3> {
15691    fn vwadd_wx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
15692}
15693
15694/// RISC-V `vwaddu.vv` instruction.
15695///
15696/// # Forms
15697/// Assembly: `vwaddu.vv vm, vs2, vs1, vd`
15698/// Rust: `vwaddu_vv(vd, vs1, vs2, vm)`
15699///
15700/// # Arguments
15701/// - `vd` — Vector register operand.
15702/// - `vs1` — Vector register operand.
15703/// - `vs2` — Vector register operand.
15704/// - `vm` — Vector mask control.
15705pub trait VwadduVvEmitter<T0, T1, T2, T3> {
15706    fn vwaddu_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
15707}
15708
15709/// RISC-V `vwaddu.vx` instruction.
15710///
15711/// # Forms
15712/// Assembly: `vwaddu.vx vm, vs2, xs1, vd`
15713/// Rust: `vwaddu_vx(vd, vs2, rs1, vm)`
15714///
15715/// # Arguments
15716/// - `vd` — Vector register operand.
15717/// - `vs2` — Vector register operand.
15718/// - `rs1` — Source register.
15719/// - `vm` — Vector mask control.
15720pub trait VwadduVxEmitter<T0, T1, T2, T3> {
15721    fn vwaddu_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
15722}
15723
15724/// RISC-V `vwaddu.wv` instruction.
15725///
15726/// # Forms
15727/// Assembly: `vwaddu.wv vm, vs2, vs1, vd`
15728/// Rust: `vwaddu_wv(vd, vs1, vs2, vm)`
15729///
15730/// # Arguments
15731/// - `vd` — Vector register operand.
15732/// - `vs1` — Vector register operand.
15733/// - `vs2` — Vector register operand.
15734/// - `vm` — Vector mask control.
15735pub trait VwadduWvEmitter<T0, T1, T2, T3> {
15736    fn vwaddu_wv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
15737}
15738
15739/// RISC-V `vwaddu.wx` instruction.
15740///
15741/// # Forms
15742/// Assembly: `vwaddu.wx vm, vs2, xs1, vd`
15743/// Rust: `vwaddu_wx(vd, vs2, rs1, vm)`
15744///
15745/// # Arguments
15746/// - `vd` — Vector register operand.
15747/// - `vs2` — Vector register operand.
15748/// - `rs1` — Source register.
15749/// - `vm` — Vector mask control.
15750pub trait VwadduWxEmitter<T0, T1, T2, T3> {
15751    fn vwaddu_wx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
15752}
15753
15754/// RISC-V `vwmacc.vv` instruction.
15755///
15756/// # Forms
15757/// Assembly: `vwmacc.vv vm, vs2, vs1, vd`
15758/// Rust: `vwmacc_vv(vd, vs1, vs2, vm)`
15759///
15760/// # Arguments
15761/// - `vd` — Vector register operand.
15762/// - `vs1` — Vector register operand.
15763/// - `vs2` — Vector register operand.
15764/// - `vm` — Vector mask control.
15765pub trait VwmaccVvEmitter<T0, T1, T2, T3> {
15766    fn vwmacc_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
15767}
15768
15769/// RISC-V `vwmacc.vx` instruction.
15770///
15771/// # Forms
15772/// Assembly: `vwmacc.vx vm, vs2, xs1, vd`
15773/// Rust: `vwmacc_vx(vd, vs2, rs1, vm)`
15774///
15775/// # Arguments
15776/// - `vd` — Vector register operand.
15777/// - `vs2` — Vector register operand.
15778/// - `rs1` — Source register.
15779/// - `vm` — Vector mask control.
15780pub trait VwmaccVxEmitter<T0, T1, T2, T3> {
15781    fn vwmacc_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
15782}
15783
15784/// RISC-V `vwmaccsu.vv` instruction.
15785///
15786/// # Forms
15787/// Assembly: `vwmaccsu.vv vm, vs2, vs1, vd`
15788/// Rust: `vwmaccsu_vv(vd, vs1, vs2, vm)`
15789///
15790/// # Arguments
15791/// - `vd` — Vector register operand.
15792/// - `vs1` — Vector register operand.
15793/// - `vs2` — Vector register operand.
15794/// - `vm` — Vector mask control.
15795pub trait VwmaccsuVvEmitter<T0, T1, T2, T3> {
15796    fn vwmaccsu_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
15797}
15798
15799/// RISC-V `vwmaccsu.vx` instruction.
15800///
15801/// # Forms
15802/// Assembly: `vwmaccsu.vx vm, vs2, xs1, vd`
15803/// Rust: `vwmaccsu_vx(vd, vs2, rs1, vm)`
15804///
15805/// # Arguments
15806/// - `vd` — Vector register operand.
15807/// - `vs2` — Vector register operand.
15808/// - `rs1` — Source register.
15809/// - `vm` — Vector mask control.
15810pub trait VwmaccsuVxEmitter<T0, T1, T2, T3> {
15811    fn vwmaccsu_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
15812}
15813
15814/// RISC-V `vwmaccu.vv` instruction.
15815///
15816/// # Forms
15817/// Assembly: `vwmaccu.vv vm, vs2, vs1, vd`
15818/// Rust: `vwmaccu_vv(vd, vs1, vs2, vm)`
15819///
15820/// # Arguments
15821/// - `vd` — Vector register operand.
15822/// - `vs1` — Vector register operand.
15823/// - `vs2` — Vector register operand.
15824/// - `vm` — Vector mask control.
15825pub trait VwmaccuVvEmitter<T0, T1, T2, T3> {
15826    fn vwmaccu_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
15827}
15828
15829/// RISC-V `vwmaccu.vx` instruction.
15830///
15831/// # Forms
15832/// Assembly: `vwmaccu.vx vm, vs2, xs1, vd`
15833/// Rust: `vwmaccu_vx(vd, vs2, rs1, vm)`
15834///
15835/// # Arguments
15836/// - `vd` — Vector register operand.
15837/// - `vs2` — Vector register operand.
15838/// - `rs1` — Source register.
15839/// - `vm` — Vector mask control.
15840pub trait VwmaccuVxEmitter<T0, T1, T2, T3> {
15841    fn vwmaccu_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
15842}
15843
15844/// RISC-V `vwmaccus.vx` instruction.
15845///
15846/// # Forms
15847/// Assembly: `vwmaccus.vx vm, vs2, xs1, vd`
15848/// Rust: `vwmaccus_vx(vd, vs2, rs1, vm)`
15849///
15850/// # Arguments
15851/// - `vd` — Vector register operand.
15852/// - `vs2` — Vector register operand.
15853/// - `rs1` — Source register.
15854/// - `vm` — Vector mask control.
15855pub trait VwmaccusVxEmitter<T0, T1, T2, T3> {
15856    fn vwmaccus_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
15857}
15858
15859/// RISC-V `vwmul.vv` instruction.
15860///
15861/// # Forms
15862/// Assembly: `vwmul.vv vm, vs2, vs1, vd`
15863/// Rust: `vwmul_vv(vd, vs1, vs2, vm)`
15864///
15865/// # Arguments
15866/// - `vd` — Vector register operand.
15867/// - `vs1` — Vector register operand.
15868/// - `vs2` — Vector register operand.
15869/// - `vm` — Vector mask control.
15870pub trait VwmulVvEmitter<T0, T1, T2, T3> {
15871    fn vwmul_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
15872}
15873
15874/// RISC-V `vwmul.vx` instruction.
15875///
15876/// # Forms
15877/// Assembly: `vwmul.vx vm, vs2, xs1, vd`
15878/// Rust: `vwmul_vx(vd, vs2, rs1, vm)`
15879///
15880/// # Arguments
15881/// - `vd` — Vector register operand.
15882/// - `vs2` — Vector register operand.
15883/// - `rs1` — Source register.
15884/// - `vm` — Vector mask control.
15885pub trait VwmulVxEmitter<T0, T1, T2, T3> {
15886    fn vwmul_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
15887}
15888
15889/// RISC-V `vwmulsu.vv` instruction.
15890///
15891/// # Forms
15892/// Assembly: `vwmulsu.vv vm, vs2, vs1, vd`
15893/// Rust: `vwmulsu_vv(vd, vs1, vs2, vm)`
15894///
15895/// # Arguments
15896/// - `vd` — Vector register operand.
15897/// - `vs1` — Vector register operand.
15898/// - `vs2` — Vector register operand.
15899/// - `vm` — Vector mask control.
15900pub trait VwmulsuVvEmitter<T0, T1, T2, T3> {
15901    fn vwmulsu_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
15902}
15903
15904/// RISC-V `vwmulsu.vx` instruction.
15905///
15906/// # Forms
15907/// Assembly: `vwmulsu.vx vm, vs2, xs1, vd`
15908/// Rust: `vwmulsu_vx(vd, vs2, rs1, vm)`
15909///
15910/// # Arguments
15911/// - `vd` — Vector register operand.
15912/// - `vs2` — Vector register operand.
15913/// - `rs1` — Source register.
15914/// - `vm` — Vector mask control.
15915pub trait VwmulsuVxEmitter<T0, T1, T2, T3> {
15916    fn vwmulsu_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
15917}
15918
15919/// RISC-V `vwmulu.vv` instruction.
15920///
15921/// # Forms
15922/// Assembly: `vwmulu.vv vm, vs2, vs1, vd`
15923/// Rust: `vwmulu_vv(vd, vs1, vs2, vm)`
15924///
15925/// # Arguments
15926/// - `vd` — Vector register operand.
15927/// - `vs1` — Vector register operand.
15928/// - `vs2` — Vector register operand.
15929/// - `vm` — Vector mask control.
15930pub trait VwmuluVvEmitter<T0, T1, T2, T3> {
15931    fn vwmulu_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
15932}
15933
15934/// RISC-V `vwmulu.vx` instruction.
15935///
15936/// # Forms
15937/// Assembly: `vwmulu.vx vm, vs2, xs1, vd`
15938/// Rust: `vwmulu_vx(vd, vs2, rs1, vm)`
15939///
15940/// # Arguments
15941/// - `vd` — Vector register operand.
15942/// - `vs2` — Vector register operand.
15943/// - `rs1` — Source register.
15944/// - `vm` — Vector mask control.
15945pub trait VwmuluVxEmitter<T0, T1, T2, T3> {
15946    fn vwmulu_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
15947}
15948
15949/// RISC-V `vwredsum.vs` instruction.
15950///
15951/// # Forms
15952/// Assembly: `vwredsum.vs vm, vs2, vs1, vd`
15953/// Rust: `vwredsum_vs(vd, vs1, vs2, vm)`
15954///
15955/// # Arguments
15956/// - `vd` — Vector register operand.
15957/// - `vs1` — Vector register operand.
15958/// - `vs2` — Vector register operand.
15959/// - `vm` — Vector mask control.
15960pub trait VwredsumVsEmitter<T0, T1, T2, T3> {
15961    fn vwredsum_vs(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
15962}
15963
15964/// RISC-V `vwredsumu.vs` instruction.
15965///
15966/// # Forms
15967/// Assembly: `vwredsumu.vs vm, vs2, vs1, vd`
15968/// Rust: `vwredsumu_vs(vd, vs1, vs2, vm)`
15969///
15970/// # Arguments
15971/// - `vd` — Vector register operand.
15972/// - `vs1` — Vector register operand.
15973/// - `vs2` — Vector register operand.
15974/// - `vm` — Vector mask control.
15975pub trait VwredsumuVsEmitter<T0, T1, T2, T3> {
15976    fn vwredsumu_vs(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
15977}
15978
15979/// RISC-V `vwsll.vi` instruction.
15980///
15981/// # Forms
15982/// Assembly: `vwsll.vi vm, vs2, vd, imm`
15983/// Rust: `vwsll_vi(vd, vs2, zimm5, vm)`
15984///
15985/// # Arguments
15986/// - `vd` — Vector register operand.
15987/// - `vs2` — Vector register operand.
15988/// - `zimm5` — Immediate encoding value.
15989/// - `vm` — Vector mask control.
15990pub trait VwsllViEmitter<T0, T1, T2, T3> {
15991    fn vwsll_vi(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3);
15992}
15993
15994/// RISC-V `vwsll.vv` instruction.
15995///
15996/// # Forms
15997/// Assembly: `vwsll.vv vm, vs2, vs1, vd`
15998/// Rust: `vwsll_vv(vd, vs1, vs2, vm)`
15999///
16000/// # Arguments
16001/// - `vd` — Vector register operand.
16002/// - `vs1` — Vector register operand.
16003/// - `vs2` — Vector register operand.
16004/// - `vm` — Vector mask control.
16005pub trait VwsllVvEmitter<T0, T1, T2, T3> {
16006    fn vwsll_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
16007}
16008
16009/// RISC-V `vwsll.vx` instruction.
16010///
16011/// # Forms
16012/// Assembly: `vwsll.vx vm, vs2, xs1, vd`
16013/// Rust: `vwsll_vx(vd, vs2, rs1, vm)`
16014///
16015/// # Arguments
16016/// - `vd` — Vector register operand.
16017/// - `vs2` — Vector register operand.
16018/// - `rs1` — Source register.
16019/// - `vm` — Vector mask control.
16020pub trait VwsllVxEmitter<T0, T1, T2, T3> {
16021    fn vwsll_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
16022}
16023
16024/// RISC-V `vwsub.vv` instruction.
16025///
16026/// # Forms
16027/// Assembly: `vwsub.vv vm, vs2, vs1, vd`
16028/// Rust: `vwsub_vv(vd, vs1, vs2, vm)`
16029///
16030/// # Arguments
16031/// - `vd` — Vector register operand.
16032/// - `vs1` — Vector register operand.
16033/// - `vs2` — Vector register operand.
16034/// - `vm` — Vector mask control.
16035pub trait VwsubVvEmitter<T0, T1, T2, T3> {
16036    fn vwsub_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
16037}
16038
16039/// RISC-V `vwsub.vx` instruction.
16040///
16041/// # Forms
16042/// Assembly: `vwsub.vx vm, vs2, xs1, vd`
16043/// Rust: `vwsub_vx(vd, vs2, rs1, vm)`
16044///
16045/// # Arguments
16046/// - `vd` — Vector register operand.
16047/// - `vs2` — Vector register operand.
16048/// - `rs1` — Source register.
16049/// - `vm` — Vector mask control.
16050pub trait VwsubVxEmitter<T0, T1, T2, T3> {
16051    fn vwsub_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
16052}
16053
16054/// RISC-V `vwsub.wv` instruction.
16055///
16056/// # Forms
16057/// Assembly: `vwsub.wv vm, vs2, vs1, vd`
16058/// Rust: `vwsub_wv(vd, vs1, vs2, vm)`
16059///
16060/// # Arguments
16061/// - `vd` — Vector register operand.
16062/// - `vs1` — Vector register operand.
16063/// - `vs2` — Vector register operand.
16064/// - `vm` — Vector mask control.
16065pub trait VwsubWvEmitter<T0, T1, T2, T3> {
16066    fn vwsub_wv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
16067}
16068
16069/// RISC-V `vwsub.wx` instruction.
16070///
16071/// # Forms
16072/// Assembly: `vwsub.wx vm, vs2, xs1, vd`
16073/// Rust: `vwsub_wx(vd, vs2, rs1, vm)`
16074///
16075/// # Arguments
16076/// - `vd` — Vector register operand.
16077/// - `vs2` — Vector register operand.
16078/// - `rs1` — Source register.
16079/// - `vm` — Vector mask control.
16080pub trait VwsubWxEmitter<T0, T1, T2, T3> {
16081    fn vwsub_wx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
16082}
16083
16084/// RISC-V `vwsubu.vv` instruction.
16085///
16086/// # Forms
16087/// Assembly: `vwsubu.vv vm, vs2, vs1, vd`
16088/// Rust: `vwsubu_vv(vd, vs1, vs2, vm)`
16089///
16090/// # Arguments
16091/// - `vd` — Vector register operand.
16092/// - `vs1` — Vector register operand.
16093/// - `vs2` — Vector register operand.
16094/// - `vm` — Vector mask control.
16095pub trait VwsubuVvEmitter<T0, T1, T2, T3> {
16096    fn vwsubu_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
16097}
16098
16099/// RISC-V `vwsubu.vx` instruction.
16100///
16101/// # Forms
16102/// Assembly: `vwsubu.vx vm, vs2, xs1, vd`
16103/// Rust: `vwsubu_vx(vd, vs2, rs1, vm)`
16104///
16105/// # Arguments
16106/// - `vd` — Vector register operand.
16107/// - `vs2` — Vector register operand.
16108/// - `rs1` — Source register.
16109/// - `vm` — Vector mask control.
16110pub trait VwsubuVxEmitter<T0, T1, T2, T3> {
16111    fn vwsubu_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
16112}
16113
16114/// RISC-V `vwsubu.wv` instruction.
16115///
16116/// # Forms
16117/// Assembly: `vwsubu.wv vm, vs2, vs1, vd`
16118/// Rust: `vwsubu_wv(vd, vs1, vs2, vm)`
16119///
16120/// # Arguments
16121/// - `vd` — Vector register operand.
16122/// - `vs1` — Vector register operand.
16123/// - `vs2` — Vector register operand.
16124/// - `vm` — Vector mask control.
16125pub trait VwsubuWvEmitter<T0, T1, T2, T3> {
16126    fn vwsubu_wv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
16127}
16128
16129/// RISC-V `vwsubu.wx` instruction.
16130///
16131/// # Forms
16132/// Assembly: `vwsubu.wx vm, vs2, xs1, vd`
16133/// Rust: `vwsubu_wx(vd, vs2, rs1, vm)`
16134///
16135/// # Arguments
16136/// - `vd` — Vector register operand.
16137/// - `vs2` — Vector register operand.
16138/// - `rs1` — Source register.
16139/// - `vm` — Vector mask control.
16140pub trait VwsubuWxEmitter<T0, T1, T2, T3> {
16141    fn vwsubu_wx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
16142}
16143
16144/// RISC-V `vxor.vi` instruction.
16145///
16146/// # Forms
16147/// Assembly: `vxor.vi vm, vs2, vd, imm`
16148/// Rust: `vxor_vi(vd, vs2, simm5, vm)`
16149///
16150/// # Arguments
16151/// - `vd` — Vector register operand.
16152/// - `vs2` — Vector register operand.
16153/// - `simm5` — Immediate encoding value.
16154/// - `vm` — Vector mask control.
16155pub trait VxorViEmitter<T0, T1, T2, T3> {
16156    fn vxor_vi(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3);
16157}
16158
16159/// RISC-V `vxor.vv` instruction.
16160///
16161/// # Forms
16162/// Assembly: `vxor.vv vm, vs2, vs1, vd`
16163/// Rust: `vxor_vv(vd, vs1, vs2, vm)`
16164///
16165/// # Arguments
16166/// - `vd` — Vector register operand.
16167/// - `vs1` — Vector register operand.
16168/// - `vs2` — Vector register operand.
16169/// - `vm` — Vector mask control.
16170pub trait VxorVvEmitter<T0, T1, T2, T3> {
16171    fn vxor_vv(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3);
16172}
16173
16174/// RISC-V `vxor.vx` instruction.
16175///
16176/// # Forms
16177/// Assembly: `vxor.vx vm, vs2, xs1, vd`
16178/// Rust: `vxor_vx(vd, vs2, rs1, vm)`
16179///
16180/// # Arguments
16181/// - `vd` — Vector register operand.
16182/// - `vs2` — Vector register operand.
16183/// - `rs1` — Source register.
16184/// - `vm` — Vector mask control.
16185pub trait VxorVxEmitter<T0, T1, T2, T3> {
16186    fn vxor_vx(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3);
16187}
16188
16189/// RISC-V `vzext.vf2` instruction.
16190///
16191/// # Forms
16192/// Assembly: `vzext.vf2 vm, vs2, vd`
16193/// Rust: `vzext_vf2(vd, vs2, vm)`
16194///
16195/// # Arguments
16196/// - `vd` — Vector register operand.
16197/// - `vs2` — Vector register operand.
16198/// - `vm` — Vector mask control.
16199pub trait VzextVf2Emitter<T0, T1, T2> {
16200    fn vzext_vf2(&mut self, vd: T0, vs2: T1, vm: T2);
16201}
16202
16203/// RISC-V `vzext.vf4` instruction.
16204///
16205/// # Forms
16206/// Assembly: `vzext.vf4 vm, vs2, vd`
16207/// Rust: `vzext_vf4(vd, vs2, vm)`
16208///
16209/// # Arguments
16210/// - `vd` — Vector register operand.
16211/// - `vs2` — Vector register operand.
16212/// - `vm` — Vector mask control.
16213pub trait VzextVf4Emitter<T0, T1, T2> {
16214    fn vzext_vf4(&mut self, vd: T0, vs2: T1, vm: T2);
16215}
16216
16217/// RISC-V `vzext.vf8` instruction.
16218///
16219/// # Forms
16220/// Assembly: `vzext.vf8 vm, vs2, vd`
16221/// Rust: `vzext_vf8(vd, vs2, vm)`
16222///
16223/// # Arguments
16224/// - `vd` — Vector register operand.
16225/// - `vs2` — Vector register operand.
16226/// - `vm` — Vector mask control.
16227pub trait VzextVf8Emitter<T0, T1, T2> {
16228    fn vzext_vf8(&mut self, vd: T0, vs2: T1, vm: T2);
16229}
16230
16231/// Wait for interrupt
16232///
16233/// Can causes the processor to enter a low-power state until the next interrupt occurs.
16234///
16235/// &lt;%- if ext?(:H) -%&gt;
16236/// The behavior of `wfi` is affected by the `mstatus.TW`
16237/// and `hstatus.VTW` bits, as summarized below.
16238///
16239/// \[%autowidth,%footer\]
16240/// |===
16241/// .2+| \[.rotate\]#`mstatus.TW`# .2+| \[.rotate\]#`hstatus.VTW`# 4+^.&gt;| `wfi` behavior
16242/// h| HS-mode h| U-mode h| VS-mode h| in VU-mode
16243///
16244/// | 0 | 0 | Wait | Trap (I) | Wait | Trap (V)
16245/// | 0 | 1 | Wait | Trap (I) | Trap (V) | Trap (V)
16246/// | 1 | - | Trap (I) | Trap (I) | Trap (I) | Trap (I)
16247///
16248/// 6+| Trap (I) - Trap with `Illegal Instruction` code +
16249/// Trap (V) - Trap with `Virtual Instruction` code
16250/// |===
16251///
16252/// &lt;%- else -%&gt;
16253/// The `wfi` instruction is also affected by `mstatus.TW`, as shown below:
16254///
16255/// \[%autowidth,%footer\]
16256/// |===
16257/// .2+| \[.rotate\]#`mstatus.TW`# 2+^.&gt;| `wfi` behavior
16258/// h| S-mode h| U-mode
16259///
16260/// | 0 | Wait | Trap (I)
16261/// | 1 | Trap (I) | Trap (I)
16262///
16263/// 3+| Trap (I) - Trap with `Illegal Instruction` code
16264/// |===
16265///
16266/// &lt;%- end -%&gt;
16267///
16268/// When `wfi` is marked as causing a trap above, the implementation is allowed to wait
16269/// for an unspecified period of time to see if an interrupt occurs before raising the trap.
16270/// That period of time can be zero (_i.e._, `wfi` always causes a trap in the cases identified
16271/// above).
16272///
16273/// # Forms
16274/// Assembly: `wfi ""`
16275/// Rust: `wfi()`
16276///
16277/// # Arguments
16278pub trait WfiEmitter {
16279    fn wfi(&mut self);
16280}
16281
16282/// RISC-V `wrs.nto` instruction.
16283///
16284/// # Forms
16285/// Assembly: `wrs.nto wrs_nto`
16286/// Rust: `wrs_nto()`
16287///
16288/// # Arguments
16289pub trait WrsNtoEmitter {
16290    fn wrs_nto(&mut self);
16291}
16292
16293/// RISC-V `wrs.sto` instruction.
16294///
16295/// # Forms
16296/// Assembly: `wrs.sto wrs_sto`
16297/// Rust: `wrs_sto()`
16298///
16299/// # Arguments
16300pub trait WrsStoEmitter {
16301    fn wrs_sto(&mut self);
16302}
16303
16304/// Exclusive NOR
16305///
16306/// This instruction performs the bit-wise exclusive-NOR operation on rs1 and rs2.
16307///
16308/// # Forms
16309/// Assembly: `xnor xd, xs1, xs2`
16310/// Rust: `xnor(rd, rs1, rs2)`
16311///
16312/// # Arguments
16313/// - `rd` — Destination register.
16314/// - `rs1` — Source register.
16315/// - `rs2` — Source register.
16316pub trait XnorEmitter<T0, T1, T2> {
16317    fn xnor(&mut self, rd: T0, rs1: T1, rs2: T2);
16318}
16319
16320/// Exclusive Or
16321///
16322/// Exclusive or rs1 with rs2, and store the result in rd
16323///
16324/// # Forms
16325/// Assembly: `xor xd, xs1, xs2`
16326/// Rust: `xor(rd, rs1, rs2)`
16327///
16328/// # Arguments
16329/// - `rd` — Destination register.
16330/// - `rs1` — Source register.
16331/// - `rs2` — Source register.
16332pub trait XorEmitter<T0, T1, T2> {
16333    fn xor(&mut self, rd: T0, rs1: T1, rs2: T2);
16334}
16335
16336/// Exclusive Or immediate
16337///
16338/// Exclusive or an immediate to the value in rs1, and store the result in rd
16339///
16340/// # Forms
16341/// Assembly: `xori xd, xs1, imm`
16342/// Rust: `xori(rd, rs1, imm)`
16343///
16344/// # Arguments
16345/// - `rd` — Destination register.
16346/// - `rs1` — Source register.
16347/// - `imm` — Immediate encoding value.
16348pub trait XoriEmitter<T0, T1, T2> {
16349    fn xori(&mut self, rd: T0, rs1: T1, imm: T2);
16350}
16351
16352/// Crossbar permutation (nibbles)
16353///
16354/// The xperm4 instruction operates on nibbles. The rs1 register contains a vector of XLEN/4 4-bit
16355/// elements. The rs2 register contains a vector of XLEN/4 4-bit indexes. The result is each element in
16356/// rs2 replaced by the indexed element in rs1, or zero if the index into rs2 is out of bounds.
16357///
16358/// # Forms
16359/// Assembly: `xperm4 xd, xs1, xs2`
16360/// Rust: `xperm4(rd, rs1, rs2)`
16361///
16362/// # Arguments
16363/// - `rd` — Destination register.
16364/// - `rs1` — Source register.
16365/// - `rs2` — Source register.
16366pub trait Xperm4Emitter<T0, T1, T2> {
16367    fn xperm4(&mut self, rd: T0, rs1: T1, rs2: T2);
16368}
16369
16370/// Crossbar permutation (bytes)
16371///
16372/// The xperm8 instruction operates on bytes. The rs1 register contains a vector of XLEN/8 8-bit
16373/// elements. The rs2 register contains a vector of XLEN/8 8-bit indexes. The result is each element in
16374/// rs2 replaced by the indexed element in rs1, or zero if the index into rs2 is out of bounds.
16375///
16376/// # Forms
16377/// Assembly: `xperm8 xd, xs1, xs2`
16378/// Rust: `xperm8(rd, rs1, rs2)`
16379///
16380/// # Arguments
16381/// - `rd` — Destination register.
16382/// - `rs1` — Source register.
16383/// - `rs2` — Source register.
16384pub trait Xperm8Emitter<T0, T1, T2> {
16385    fn xperm8(&mut self, rd: T0, rs1: T1, rs2: T2);
16386}
16387
16388/// RISC-V `zext.b` instruction.
16389///
16390/// # Forms
16391/// Assembly: `zext.b rd rs1`
16392/// Rust: `zext_b(rd, rs1)`
16393///
16394/// # Arguments
16395/// - `rd` — Destination register.
16396/// - `rs1` — Source register.
16397pub trait ZextBEmitter<T0, T1> {
16398    fn zext_b(&mut self, rd: T0, rs1: T1);
16399}
16400
16401/// Zero-extend halfword
16402///
16403/// This instruction zero-extends the least-significant halfword of the source to XLEN by inserting
16404/// 0's into all of the bits more significant than 15.
16405///
16406/// \[NOTE\]
16407/// The *zext.h* instruction is a pseudo-op for `pack` when `Zbkb` is implemented and XLEN == 32.
16408///
16409/// \[NOTE\]
16410/// The *zext.h* instruction is a pseudo-op for `packw` when `Zbkb` is implemented and XLEN == 64.
16411///
16412/// # Forms
16413/// Assembly: `zext.h xd, xs1`
16414/// Rust: `zext_h(rd, rs1)`
16415///
16416/// # Arguments
16417/// - `rd` — Destination register.
16418/// - `rs1` — Source register.
16419pub trait ZextHEmitter<T0, T1> {
16420    fn zext_h(&mut self, rd: T0, rs1: T1);
16421}
16422
16423/// Zero-extend halfword
16424///
16425/// This instruction zero-extends the least-significant halfword of the source to XLEN by inserting
16426/// 0's into all of the bits more significant than 15.
16427///
16428/// \[NOTE\]
16429/// The *zext.h* instruction is a pseudo-op for `pack` when `Zbkb` is implemented and XLEN == 32.
16430///
16431/// \[NOTE\]
16432/// The *zext.h* instruction is a pseudo-op for `packw` when `Zbkb` is implemented and XLEN == 64.
16433///
16434/// # Forms
16435/// Assembly: `zext.h.rv32 xd, xs1`
16436/// Rust: `zext_h_rv32(rd, rs1)`
16437///
16438/// # Arguments
16439/// - `rd` — Destination register.
16440/// - `rs1` — Source register.
16441pub trait ZextHRv32Emitter<T0, T1> {
16442    fn zext_h_rv32(&mut self, rd: T0, rs1: T1);
16443}
16444
16445/// RISC-V `zext.w` instruction.
16446///
16447/// # Forms
16448/// Assembly: `zext.w rd rs1`
16449/// Rust: `zext_w(rd, rs1)`
16450///
16451/// # Arguments
16452/// - `rd` — Destination register.
16453/// - `rs1` — Source register.
16454pub trait ZextWEmitter<T0, T1> {
16455    fn zext_w(&mut self, rd: T0, rs1: T1);
16456}
16457
16458/// Bit interleave
16459///
16460/// This instruction scatters all of the odd and even bits of a source word into the high and low halves
16461/// of a destination word. It is the inverse of the unzip instruction. This instruction is available only on
16462/// RV32.
16463///
16464/// # Forms
16465/// Assembly: `zip xd, xs1`
16466/// Rust: `zip(rd, rs1)`
16467///
16468/// # Arguments
16469/// - `rd` — Destination register.
16470/// - `rs1` — Source register.
16471pub trait ZipEmitter<T0, T1> {
16472    fn zip(&mut self, rd: T0, rs1: T1);
16473}
16474
16475impl AddEmitter<Gp, Gp, Gp> for Assembler<'_> {
16476    fn add(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
16477        self.emit_n(
16478            Opcode::ADD as i64,
16479            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
16480        );
16481    }
16482}
16483
16484impl AddUwEmitter<Gp, Gp, Gp> for Assembler<'_> {
16485    fn add_uw(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
16486        self.emit_n(
16487            Opcode::ADDUW as i64,
16488            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
16489        );
16490    }
16491}
16492
16493impl<U2: Into<Imm>> AddiEmitter<Gp, Gp, U2> for Assembler<'_> {
16494    fn addi(&mut self, rd: Gp, rs1: Gp, imm: U2) {
16495        self.emit_n(
16496            Opcode::ADDI as i64,
16497            &[
16498                rd.as_operand(),
16499                rs1.as_operand(),
16500                Into::<Imm>::into(imm).as_operand(),
16501            ],
16502        );
16503    }
16504}
16505
16506impl<U2: Into<Imm>> AddiwEmitter<Gp, Gp, U2> for Assembler<'_> {
16507    fn addiw(&mut self, rd: Gp, rs1: Gp, imm: U2) {
16508        self.emit_n(
16509            Opcode::ADDIW as i64,
16510            &[
16511                rd.as_operand(),
16512                rs1.as_operand(),
16513                Into::<Imm>::into(imm).as_operand(),
16514            ],
16515        );
16516    }
16517}
16518
16519impl AddwEmitter<Gp, Gp, Gp> for Assembler<'_> {
16520    fn addw(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
16521        self.emit_n(
16522            Opcode::ADDW as i64,
16523            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
16524        );
16525    }
16526}
16527
16528impl<U3: Into<Imm>> Aes32DsiEmitter<Gp, Gp, Gp, U3> for Assembler<'_> {
16529    fn aes32dsi(&mut self, rd: Gp, rs1: Gp, rs2: Gp, bs: U3) {
16530        self.emit_n(
16531            Opcode::AES32DSI as i64,
16532            &[
16533                rd.as_operand(),
16534                rs1.as_operand(),
16535                rs2.as_operand(),
16536                Into::<Imm>::into(bs).as_operand(),
16537            ],
16538        );
16539    }
16540}
16541
16542impl<U3: Into<Imm>> Aes32DsmiEmitter<Gp, Gp, Gp, U3> for Assembler<'_> {
16543    fn aes32dsmi(&mut self, rd: Gp, rs1: Gp, rs2: Gp, bs: U3) {
16544        self.emit_n(
16545            Opcode::AES32DSMI as i64,
16546            &[
16547                rd.as_operand(),
16548                rs1.as_operand(),
16549                rs2.as_operand(),
16550                Into::<Imm>::into(bs).as_operand(),
16551            ],
16552        );
16553    }
16554}
16555
16556impl<U3: Into<Imm>> Aes32EsiEmitter<Gp, Gp, Gp, U3> for Assembler<'_> {
16557    fn aes32esi(&mut self, rd: Gp, rs1: Gp, rs2: Gp, bs: U3) {
16558        self.emit_n(
16559            Opcode::AES32ESI as i64,
16560            &[
16561                rd.as_operand(),
16562                rs1.as_operand(),
16563                rs2.as_operand(),
16564                Into::<Imm>::into(bs).as_operand(),
16565            ],
16566        );
16567    }
16568}
16569
16570impl<U3: Into<Imm>> Aes32EsmiEmitter<Gp, Gp, Gp, U3> for Assembler<'_> {
16571    fn aes32esmi(&mut self, rd: Gp, rs1: Gp, rs2: Gp, bs: U3) {
16572        self.emit_n(
16573            Opcode::AES32ESMI as i64,
16574            &[
16575                rd.as_operand(),
16576                rs1.as_operand(),
16577                rs2.as_operand(),
16578                Into::<Imm>::into(bs).as_operand(),
16579            ],
16580        );
16581    }
16582}
16583
16584impl Aes64DsEmitter<Gp, Gp, Gp> for Assembler<'_> {
16585    fn aes64ds(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
16586        self.emit_n(
16587            Opcode::AES64DS as i64,
16588            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
16589        );
16590    }
16591}
16592
16593impl Aes64DsmEmitter<Gp, Gp, Gp> for Assembler<'_> {
16594    fn aes64dsm(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
16595        self.emit_n(
16596            Opcode::AES64DSM as i64,
16597            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
16598        );
16599    }
16600}
16601
16602impl Aes64EsEmitter<Gp, Gp, Gp> for Assembler<'_> {
16603    fn aes64es(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
16604        self.emit_n(
16605            Opcode::AES64ES as i64,
16606            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
16607        );
16608    }
16609}
16610
16611impl Aes64EsmEmitter<Gp, Gp, Gp> for Assembler<'_> {
16612    fn aes64esm(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
16613        self.emit_n(
16614            Opcode::AES64ESM as i64,
16615            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
16616        );
16617    }
16618}
16619
16620impl Aes64ImEmitter<Gp, Gp> for Assembler<'_> {
16621    fn aes64im(&mut self, rd: Gp, rs1: Gp) {
16622        self.emit_n(Opcode::AES64IM as i64, &[rd.as_operand(), rs1.as_operand()]);
16623    }
16624}
16625
16626impl<U2: Into<Imm>> Aes64Ks1IEmitter<Gp, Gp, U2> for Assembler<'_> {
16627    fn aes64ks1i(&mut self, rd: Gp, rs1: Gp, rnum: U2) {
16628        self.emit_n(
16629            Opcode::AES64KS1I as i64,
16630            &[
16631                rd.as_operand(),
16632                rs1.as_operand(),
16633                Into::<Imm>::into(rnum).as_operand(),
16634            ],
16635        );
16636    }
16637}
16638
16639impl Aes64Ks2Emitter<Gp, Gp, Gp> for Assembler<'_> {
16640    fn aes64ks2(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
16641        self.emit_n(
16642            Opcode::AES64KS2 as i64,
16643            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
16644        );
16645    }
16646}
16647
16648impl<U3: Into<Imm>, U4: Into<Imm>> AmoaddBEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
16649    fn amoadd_b(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
16650        self.emit_n(
16651            Opcode::AMOADDB as i64,
16652            &[
16653                rd.as_operand(),
16654                rs1.as_operand(),
16655                rs2.as_operand(),
16656                Into::<Imm>::into(aq).as_operand(),
16657                Into::<Imm>::into(rl).as_operand(),
16658            ],
16659        );
16660    }
16661}
16662
16663impl<U3: Into<Imm>, U4: Into<Imm>> AmoaddDEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
16664    fn amoadd_d(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
16665        self.emit_n(
16666            Opcode::AMOADDD as i64,
16667            &[
16668                rd.as_operand(),
16669                rs1.as_operand(),
16670                rs2.as_operand(),
16671                Into::<Imm>::into(aq).as_operand(),
16672                Into::<Imm>::into(rl).as_operand(),
16673            ],
16674        );
16675    }
16676}
16677
16678impl<U3: Into<Imm>, U4: Into<Imm>> AmoaddHEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
16679    fn amoadd_h(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
16680        self.emit_n(
16681            Opcode::AMOADDH as i64,
16682            &[
16683                rd.as_operand(),
16684                rs1.as_operand(),
16685                rs2.as_operand(),
16686                Into::<Imm>::into(aq).as_operand(),
16687                Into::<Imm>::into(rl).as_operand(),
16688            ],
16689        );
16690    }
16691}
16692
16693impl<U3: Into<Imm>, U4: Into<Imm>> AmoaddWEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
16694    fn amoadd_w(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
16695        self.emit_n(
16696            Opcode::AMOADDW as i64,
16697            &[
16698                rd.as_operand(),
16699                rs1.as_operand(),
16700                rs2.as_operand(),
16701                Into::<Imm>::into(aq).as_operand(),
16702                Into::<Imm>::into(rl).as_operand(),
16703            ],
16704        );
16705    }
16706}
16707
16708impl<U3: Into<Imm>, U4: Into<Imm>> AmoandBEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
16709    fn amoand_b(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
16710        self.emit_n(
16711            Opcode::AMOANDB as i64,
16712            &[
16713                rd.as_operand(),
16714                rs1.as_operand(),
16715                rs2.as_operand(),
16716                Into::<Imm>::into(aq).as_operand(),
16717                Into::<Imm>::into(rl).as_operand(),
16718            ],
16719        );
16720    }
16721}
16722
16723impl<U3: Into<Imm>, U4: Into<Imm>> AmoandDEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
16724    fn amoand_d(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
16725        self.emit_n(
16726            Opcode::AMOANDD as i64,
16727            &[
16728                rd.as_operand(),
16729                rs1.as_operand(),
16730                rs2.as_operand(),
16731                Into::<Imm>::into(aq).as_operand(),
16732                Into::<Imm>::into(rl).as_operand(),
16733            ],
16734        );
16735    }
16736}
16737
16738impl<U3: Into<Imm>, U4: Into<Imm>> AmoandHEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
16739    fn amoand_h(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
16740        self.emit_n(
16741            Opcode::AMOANDH as i64,
16742            &[
16743                rd.as_operand(),
16744                rs1.as_operand(),
16745                rs2.as_operand(),
16746                Into::<Imm>::into(aq).as_operand(),
16747                Into::<Imm>::into(rl).as_operand(),
16748            ],
16749        );
16750    }
16751}
16752
16753impl<U3: Into<Imm>, U4: Into<Imm>> AmoandWEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
16754    fn amoand_w(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
16755        self.emit_n(
16756            Opcode::AMOANDW as i64,
16757            &[
16758                rd.as_operand(),
16759                rs1.as_operand(),
16760                rs2.as_operand(),
16761                Into::<Imm>::into(aq).as_operand(),
16762                Into::<Imm>::into(rl).as_operand(),
16763            ],
16764        );
16765    }
16766}
16767
16768impl<U3: Into<Imm>, U4: Into<Imm>> AmocasBEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
16769    fn amocas_b(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
16770        self.emit_n(
16771            Opcode::AMOCASB as i64,
16772            &[
16773                rd.as_operand(),
16774                rs1.as_operand(),
16775                rs2.as_operand(),
16776                Into::<Imm>::into(aq).as_operand(),
16777                Into::<Imm>::into(rl).as_operand(),
16778            ],
16779        );
16780    }
16781}
16782
16783impl<U3: Into<Imm>, U4: Into<Imm>> AmocasDEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
16784    fn amocas_d(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
16785        self.emit_n(
16786            Opcode::AMOCASD as i64,
16787            &[
16788                rd.as_operand(),
16789                rs1.as_operand(),
16790                rs2.as_operand(),
16791                Into::<Imm>::into(aq).as_operand(),
16792                Into::<Imm>::into(rl).as_operand(),
16793            ],
16794        );
16795    }
16796}
16797
16798impl<U3: Into<Imm>, U4: Into<Imm>> AmocasHEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
16799    fn amocas_h(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
16800        self.emit_n(
16801            Opcode::AMOCASH as i64,
16802            &[
16803                rd.as_operand(),
16804                rs1.as_operand(),
16805                rs2.as_operand(),
16806                Into::<Imm>::into(aq).as_operand(),
16807                Into::<Imm>::into(rl).as_operand(),
16808            ],
16809        );
16810    }
16811}
16812
16813impl<U3: Into<Imm>, U4: Into<Imm>> AmocasQEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
16814    fn amocas_q(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
16815        self.emit_n(
16816            Opcode::AMOCASQ as i64,
16817            &[
16818                rd.as_operand(),
16819                rs1.as_operand(),
16820                rs2.as_operand(),
16821                Into::<Imm>::into(aq).as_operand(),
16822                Into::<Imm>::into(rl).as_operand(),
16823            ],
16824        );
16825    }
16826}
16827
16828impl<U3: Into<Imm>, U4: Into<Imm>> AmocasWEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
16829    fn amocas_w(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
16830        self.emit_n(
16831            Opcode::AMOCASW as i64,
16832            &[
16833                rd.as_operand(),
16834                rs1.as_operand(),
16835                rs2.as_operand(),
16836                Into::<Imm>::into(aq).as_operand(),
16837                Into::<Imm>::into(rl).as_operand(),
16838            ],
16839        );
16840    }
16841}
16842
16843impl<U3: Into<Imm>, U4: Into<Imm>> AmomaxBEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
16844    fn amomax_b(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
16845        self.emit_n(
16846            Opcode::AMOMAXB as i64,
16847            &[
16848                rd.as_operand(),
16849                rs1.as_operand(),
16850                rs2.as_operand(),
16851                Into::<Imm>::into(aq).as_operand(),
16852                Into::<Imm>::into(rl).as_operand(),
16853            ],
16854        );
16855    }
16856}
16857
16858impl<U3: Into<Imm>, U4: Into<Imm>> AmomaxDEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
16859    fn amomax_d(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
16860        self.emit_n(
16861            Opcode::AMOMAXD as i64,
16862            &[
16863                rd.as_operand(),
16864                rs1.as_operand(),
16865                rs2.as_operand(),
16866                Into::<Imm>::into(aq).as_operand(),
16867                Into::<Imm>::into(rl).as_operand(),
16868            ],
16869        );
16870    }
16871}
16872
16873impl<U3: Into<Imm>, U4: Into<Imm>> AmomaxHEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
16874    fn amomax_h(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
16875        self.emit_n(
16876            Opcode::AMOMAXH as i64,
16877            &[
16878                rd.as_operand(),
16879                rs1.as_operand(),
16880                rs2.as_operand(),
16881                Into::<Imm>::into(aq).as_operand(),
16882                Into::<Imm>::into(rl).as_operand(),
16883            ],
16884        );
16885    }
16886}
16887
16888impl<U3: Into<Imm>, U4: Into<Imm>> AmomaxWEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
16889    fn amomax_w(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
16890        self.emit_n(
16891            Opcode::AMOMAXW as i64,
16892            &[
16893                rd.as_operand(),
16894                rs1.as_operand(),
16895                rs2.as_operand(),
16896                Into::<Imm>::into(aq).as_operand(),
16897                Into::<Imm>::into(rl).as_operand(),
16898            ],
16899        );
16900    }
16901}
16902
16903impl<U3: Into<Imm>, U4: Into<Imm>> AmomaxuBEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
16904    fn amomaxu_b(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
16905        self.emit_n(
16906            Opcode::AMOMAXUB as i64,
16907            &[
16908                rd.as_operand(),
16909                rs1.as_operand(),
16910                rs2.as_operand(),
16911                Into::<Imm>::into(aq).as_operand(),
16912                Into::<Imm>::into(rl).as_operand(),
16913            ],
16914        );
16915    }
16916}
16917
16918impl<U3: Into<Imm>, U4: Into<Imm>> AmomaxuDEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
16919    fn amomaxu_d(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
16920        self.emit_n(
16921            Opcode::AMOMAXUD as i64,
16922            &[
16923                rd.as_operand(),
16924                rs1.as_operand(),
16925                rs2.as_operand(),
16926                Into::<Imm>::into(aq).as_operand(),
16927                Into::<Imm>::into(rl).as_operand(),
16928            ],
16929        );
16930    }
16931}
16932
16933impl<U3: Into<Imm>, U4: Into<Imm>> AmomaxuHEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
16934    fn amomaxu_h(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
16935        self.emit_n(
16936            Opcode::AMOMAXUH as i64,
16937            &[
16938                rd.as_operand(),
16939                rs1.as_operand(),
16940                rs2.as_operand(),
16941                Into::<Imm>::into(aq).as_operand(),
16942                Into::<Imm>::into(rl).as_operand(),
16943            ],
16944        );
16945    }
16946}
16947
16948impl<U3: Into<Imm>, U4: Into<Imm>> AmomaxuWEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
16949    fn amomaxu_w(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
16950        self.emit_n(
16951            Opcode::AMOMAXUW as i64,
16952            &[
16953                rd.as_operand(),
16954                rs1.as_operand(),
16955                rs2.as_operand(),
16956                Into::<Imm>::into(aq).as_operand(),
16957                Into::<Imm>::into(rl).as_operand(),
16958            ],
16959        );
16960    }
16961}
16962
16963impl<U3: Into<Imm>, U4: Into<Imm>> AmominBEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
16964    fn amomin_b(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
16965        self.emit_n(
16966            Opcode::AMOMINB as i64,
16967            &[
16968                rd.as_operand(),
16969                rs1.as_operand(),
16970                rs2.as_operand(),
16971                Into::<Imm>::into(aq).as_operand(),
16972                Into::<Imm>::into(rl).as_operand(),
16973            ],
16974        );
16975    }
16976}
16977
16978impl<U3: Into<Imm>, U4: Into<Imm>> AmominDEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
16979    fn amomin_d(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
16980        self.emit_n(
16981            Opcode::AMOMIND as i64,
16982            &[
16983                rd.as_operand(),
16984                rs1.as_operand(),
16985                rs2.as_operand(),
16986                Into::<Imm>::into(aq).as_operand(),
16987                Into::<Imm>::into(rl).as_operand(),
16988            ],
16989        );
16990    }
16991}
16992
16993impl<U3: Into<Imm>, U4: Into<Imm>> AmominHEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
16994    fn amomin_h(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
16995        self.emit_n(
16996            Opcode::AMOMINH as i64,
16997            &[
16998                rd.as_operand(),
16999                rs1.as_operand(),
17000                rs2.as_operand(),
17001                Into::<Imm>::into(aq).as_operand(),
17002                Into::<Imm>::into(rl).as_operand(),
17003            ],
17004        );
17005    }
17006}
17007
17008impl<U3: Into<Imm>, U4: Into<Imm>> AmominWEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
17009    fn amomin_w(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
17010        self.emit_n(
17011            Opcode::AMOMINW as i64,
17012            &[
17013                rd.as_operand(),
17014                rs1.as_operand(),
17015                rs2.as_operand(),
17016                Into::<Imm>::into(aq).as_operand(),
17017                Into::<Imm>::into(rl).as_operand(),
17018            ],
17019        );
17020    }
17021}
17022
17023impl<U3: Into<Imm>, U4: Into<Imm>> AmominuBEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
17024    fn amominu_b(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
17025        self.emit_n(
17026            Opcode::AMOMINUB as i64,
17027            &[
17028                rd.as_operand(),
17029                rs1.as_operand(),
17030                rs2.as_operand(),
17031                Into::<Imm>::into(aq).as_operand(),
17032                Into::<Imm>::into(rl).as_operand(),
17033            ],
17034        );
17035    }
17036}
17037
17038impl<U3: Into<Imm>, U4: Into<Imm>> AmominuDEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
17039    fn amominu_d(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
17040        self.emit_n(
17041            Opcode::AMOMINUD as i64,
17042            &[
17043                rd.as_operand(),
17044                rs1.as_operand(),
17045                rs2.as_operand(),
17046                Into::<Imm>::into(aq).as_operand(),
17047                Into::<Imm>::into(rl).as_operand(),
17048            ],
17049        );
17050    }
17051}
17052
17053impl<U3: Into<Imm>, U4: Into<Imm>> AmominuHEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
17054    fn amominu_h(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
17055        self.emit_n(
17056            Opcode::AMOMINUH as i64,
17057            &[
17058                rd.as_operand(),
17059                rs1.as_operand(),
17060                rs2.as_operand(),
17061                Into::<Imm>::into(aq).as_operand(),
17062                Into::<Imm>::into(rl).as_operand(),
17063            ],
17064        );
17065    }
17066}
17067
17068impl<U3: Into<Imm>, U4: Into<Imm>> AmominuWEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
17069    fn amominu_w(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
17070        self.emit_n(
17071            Opcode::AMOMINUW as i64,
17072            &[
17073                rd.as_operand(),
17074                rs1.as_operand(),
17075                rs2.as_operand(),
17076                Into::<Imm>::into(aq).as_operand(),
17077                Into::<Imm>::into(rl).as_operand(),
17078            ],
17079        );
17080    }
17081}
17082
17083impl<U3: Into<Imm>, U4: Into<Imm>> AmoorBEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
17084    fn amoor_b(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
17085        self.emit_n(
17086            Opcode::AMOORB as i64,
17087            &[
17088                rd.as_operand(),
17089                rs1.as_operand(),
17090                rs2.as_operand(),
17091                Into::<Imm>::into(aq).as_operand(),
17092                Into::<Imm>::into(rl).as_operand(),
17093            ],
17094        );
17095    }
17096}
17097
17098impl<U3: Into<Imm>, U4: Into<Imm>> AmoorDEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
17099    fn amoor_d(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
17100        self.emit_n(
17101            Opcode::AMOORD as i64,
17102            &[
17103                rd.as_operand(),
17104                rs1.as_operand(),
17105                rs2.as_operand(),
17106                Into::<Imm>::into(aq).as_operand(),
17107                Into::<Imm>::into(rl).as_operand(),
17108            ],
17109        );
17110    }
17111}
17112
17113impl<U3: Into<Imm>, U4: Into<Imm>> AmoorHEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
17114    fn amoor_h(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
17115        self.emit_n(
17116            Opcode::AMOORH as i64,
17117            &[
17118                rd.as_operand(),
17119                rs1.as_operand(),
17120                rs2.as_operand(),
17121                Into::<Imm>::into(aq).as_operand(),
17122                Into::<Imm>::into(rl).as_operand(),
17123            ],
17124        );
17125    }
17126}
17127
17128impl<U3: Into<Imm>, U4: Into<Imm>> AmoorWEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
17129    fn amoor_w(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
17130        self.emit_n(
17131            Opcode::AMOORW as i64,
17132            &[
17133                rd.as_operand(),
17134                rs1.as_operand(),
17135                rs2.as_operand(),
17136                Into::<Imm>::into(aq).as_operand(),
17137                Into::<Imm>::into(rl).as_operand(),
17138            ],
17139        );
17140    }
17141}
17142
17143impl<U3: Into<Imm>, U4: Into<Imm>> AmoswapBEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
17144    fn amoswap_b(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
17145        self.emit_n(
17146            Opcode::AMOSWAPB as i64,
17147            &[
17148                rd.as_operand(),
17149                rs1.as_operand(),
17150                rs2.as_operand(),
17151                Into::<Imm>::into(aq).as_operand(),
17152                Into::<Imm>::into(rl).as_operand(),
17153            ],
17154        );
17155    }
17156}
17157
17158impl<U3: Into<Imm>, U4: Into<Imm>> AmoswapDEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
17159    fn amoswap_d(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
17160        self.emit_n(
17161            Opcode::AMOSWAPD as i64,
17162            &[
17163                rd.as_operand(),
17164                rs1.as_operand(),
17165                rs2.as_operand(),
17166                Into::<Imm>::into(aq).as_operand(),
17167                Into::<Imm>::into(rl).as_operand(),
17168            ],
17169        );
17170    }
17171}
17172
17173impl<U3: Into<Imm>, U4: Into<Imm>> AmoswapHEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
17174    fn amoswap_h(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
17175        self.emit_n(
17176            Opcode::AMOSWAPH as i64,
17177            &[
17178                rd.as_operand(),
17179                rs1.as_operand(),
17180                rs2.as_operand(),
17181                Into::<Imm>::into(aq).as_operand(),
17182                Into::<Imm>::into(rl).as_operand(),
17183            ],
17184        );
17185    }
17186}
17187
17188impl<U3: Into<Imm>, U4: Into<Imm>> AmoswapWEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
17189    fn amoswap_w(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
17190        self.emit_n(
17191            Opcode::AMOSWAPW as i64,
17192            &[
17193                rd.as_operand(),
17194                rs1.as_operand(),
17195                rs2.as_operand(),
17196                Into::<Imm>::into(aq).as_operand(),
17197                Into::<Imm>::into(rl).as_operand(),
17198            ],
17199        );
17200    }
17201}
17202
17203impl<U3: Into<Imm>, U4: Into<Imm>> AmoxorBEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
17204    fn amoxor_b(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
17205        self.emit_n(
17206            Opcode::AMOXORB as i64,
17207            &[
17208                rd.as_operand(),
17209                rs1.as_operand(),
17210                rs2.as_operand(),
17211                Into::<Imm>::into(aq).as_operand(),
17212                Into::<Imm>::into(rl).as_operand(),
17213            ],
17214        );
17215    }
17216}
17217
17218impl<U3: Into<Imm>, U4: Into<Imm>> AmoxorDEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
17219    fn amoxor_d(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
17220        self.emit_n(
17221            Opcode::AMOXORD as i64,
17222            &[
17223                rd.as_operand(),
17224                rs1.as_operand(),
17225                rs2.as_operand(),
17226                Into::<Imm>::into(aq).as_operand(),
17227                Into::<Imm>::into(rl).as_operand(),
17228            ],
17229        );
17230    }
17231}
17232
17233impl<U3: Into<Imm>, U4: Into<Imm>> AmoxorHEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
17234    fn amoxor_h(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
17235        self.emit_n(
17236            Opcode::AMOXORH as i64,
17237            &[
17238                rd.as_operand(),
17239                rs1.as_operand(),
17240                rs2.as_operand(),
17241                Into::<Imm>::into(aq).as_operand(),
17242                Into::<Imm>::into(rl).as_operand(),
17243            ],
17244        );
17245    }
17246}
17247
17248impl<U3: Into<Imm>, U4: Into<Imm>> AmoxorWEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
17249    fn amoxor_w(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
17250        self.emit_n(
17251            Opcode::AMOXORW as i64,
17252            &[
17253                rd.as_operand(),
17254                rs1.as_operand(),
17255                rs2.as_operand(),
17256                Into::<Imm>::into(aq).as_operand(),
17257                Into::<Imm>::into(rl).as_operand(),
17258            ],
17259        );
17260    }
17261}
17262
17263impl AndEmitter<Gp, Gp, Gp> for Assembler<'_> {
17264    fn and(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
17265        self.emit_n(
17266            Opcode::AND as i64,
17267            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
17268        );
17269    }
17270}
17271
17272impl<U2: Into<Imm>> AndiEmitter<Gp, Gp, U2> for Assembler<'_> {
17273    fn andi(&mut self, rd: Gp, rs1: Gp, imm: U2) {
17274        self.emit_n(
17275            Opcode::ANDI as i64,
17276            &[
17277                rd.as_operand(),
17278                rs1.as_operand(),
17279                Into::<Imm>::into(imm).as_operand(),
17280            ],
17281        );
17282    }
17283}
17284
17285impl AndnEmitter<Gp, Gp, Gp> for Assembler<'_> {
17286    fn andn(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
17287        self.emit_n(
17288            Opcode::ANDN as i64,
17289            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
17290        );
17291    }
17292}
17293
17294impl<U1: Into<Imm>> AuipcEmitter<Gp, U1> for Assembler<'_> {
17295    fn auipc(&mut self, rd: Gp, imm: U1) {
17296        self.emit_n(
17297            Opcode::AUIPC as i64,
17298            &[rd.as_operand(), Into::<Imm>::into(imm).as_operand()],
17299        );
17300    }
17301}
17302
17303impl AuipcEmitter<Gp, Label> for Assembler<'_> {
17304    fn auipc(&mut self, rd: Gp, imm: Label) {
17305        self.emit_n(Opcode::AUIPC as i64, &[rd.as_operand(), imm.as_operand()]);
17306    }
17307}
17308
17309impl BclrEmitter<Gp, Gp, Gp> for Assembler<'_> {
17310    fn bclr(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
17311        self.emit_n(
17312            Opcode::BCLR as i64,
17313            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
17314        );
17315    }
17316}
17317
17318impl<U2: Into<Imm>> BclriEmitter<Gp, Gp, U2> for Assembler<'_> {
17319    fn bclri(&mut self, rd: Gp, rs1: Gp, shamtd: U2) {
17320        self.emit_n(
17321            Opcode::BCLRI as i64,
17322            &[
17323                rd.as_operand(),
17324                rs1.as_operand(),
17325                Into::<Imm>::into(shamtd).as_operand(),
17326            ],
17327        );
17328    }
17329}
17330
17331impl<U2: Into<Imm>> BclriRv32Emitter<Gp, Gp, U2> for Assembler<'_> {
17332    fn bclri_rv32(&mut self, rd: Gp, rs1: Gp, shamtw: U2) {
17333        self.emit_n(
17334            Opcode::BCLRIRV32 as i64,
17335            &[
17336                rd.as_operand(),
17337                rs1.as_operand(),
17338                Into::<Imm>::into(shamtw).as_operand(),
17339            ],
17340        );
17341    }
17342}
17343
17344impl<U2: Into<Imm>> BeqEmitter<Gp, Gp, U2> for Assembler<'_> {
17345    fn beq(&mut self, rs1: Gp, rs2: Gp, imm: U2) {
17346        self.emit_n(
17347            Opcode::BEQ as i64,
17348            &[
17349                rs1.as_operand(),
17350                rs2.as_operand(),
17351                Into::<Imm>::into(imm).as_operand(),
17352            ],
17353        );
17354    }
17355}
17356
17357impl BeqEmitter<Gp, Gp, Label> for Assembler<'_> {
17358    fn beq(&mut self, rs1: Gp, rs2: Gp, imm: Label) {
17359        self.emit_n(
17360            Opcode::BEQ as i64,
17361            &[rs1.as_operand(), rs2.as_operand(), imm.as_operand()],
17362        );
17363    }
17364}
17365
17366impl<U1: Into<Imm>> BeqzEmitter<Gp, U1> for Assembler<'_> {
17367    fn beqz(&mut self, rs1: Gp, imm: U1) {
17368        self.emit_n(
17369            Opcode::BEQZ as i64,
17370            &[rs1.as_operand(), Into::<Imm>::into(imm).as_operand()],
17371        );
17372    }
17373}
17374
17375impl BeqzEmitter<Gp, Label> for Assembler<'_> {
17376    fn beqz(&mut self, rs1: Gp, imm: Label) {
17377        self.emit_n(Opcode::BEQZ as i64, &[rs1.as_operand(), imm.as_operand()]);
17378    }
17379}
17380
17381impl BextEmitter<Gp, Gp, Gp> for Assembler<'_> {
17382    fn bext(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
17383        self.emit_n(
17384            Opcode::BEXT as i64,
17385            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
17386        );
17387    }
17388}
17389
17390impl<U2: Into<Imm>> BextiEmitter<Gp, Gp, U2> for Assembler<'_> {
17391    fn bexti(&mut self, rd: Gp, rs1: Gp, shamtd: U2) {
17392        self.emit_n(
17393            Opcode::BEXTI as i64,
17394            &[
17395                rd.as_operand(),
17396                rs1.as_operand(),
17397                Into::<Imm>::into(shamtd).as_operand(),
17398            ],
17399        );
17400    }
17401}
17402
17403impl<U2: Into<Imm>> BextiRv32Emitter<Gp, Gp, U2> for Assembler<'_> {
17404    fn bexti_rv32(&mut self, rd: Gp, rs1: Gp, shamtw: U2) {
17405        self.emit_n(
17406            Opcode::BEXTIRV32 as i64,
17407            &[
17408                rd.as_operand(),
17409                rs1.as_operand(),
17410                Into::<Imm>::into(shamtw).as_operand(),
17411            ],
17412        );
17413    }
17414}
17415
17416impl<U2: Into<Imm>> BgeEmitter<Gp, Gp, U2> for Assembler<'_> {
17417    fn bge(&mut self, rs1: Gp, rs2: Gp, imm: U2) {
17418        self.emit_n(
17419            Opcode::BGE as i64,
17420            &[
17421                rs1.as_operand(),
17422                rs2.as_operand(),
17423                Into::<Imm>::into(imm).as_operand(),
17424            ],
17425        );
17426    }
17427}
17428
17429impl BgeEmitter<Gp, Gp, Label> for Assembler<'_> {
17430    fn bge(&mut self, rs1: Gp, rs2: Gp, imm: Label) {
17431        self.emit_n(
17432            Opcode::BGE as i64,
17433            &[rs1.as_operand(), rs2.as_operand(), imm.as_operand()],
17434        );
17435    }
17436}
17437
17438impl<U2: Into<Imm>> BgeuEmitter<Gp, Gp, U2> for Assembler<'_> {
17439    fn bgeu(&mut self, rs1: Gp, rs2: Gp, imm: U2) {
17440        self.emit_n(
17441            Opcode::BGEU as i64,
17442            &[
17443                rs1.as_operand(),
17444                rs2.as_operand(),
17445                Into::<Imm>::into(imm).as_operand(),
17446            ],
17447        );
17448    }
17449}
17450
17451impl BgeuEmitter<Gp, Gp, Label> for Assembler<'_> {
17452    fn bgeu(&mut self, rs1: Gp, rs2: Gp, imm: Label) {
17453        self.emit_n(
17454            Opcode::BGEU as i64,
17455            &[rs1.as_operand(), rs2.as_operand(), imm.as_operand()],
17456        );
17457    }
17458}
17459
17460impl<U1: Into<Imm>> BgezEmitter<Gp, U1> for Assembler<'_> {
17461    fn bgez(&mut self, rs1: Gp, imm: U1) {
17462        self.emit_n(
17463            Opcode::BGEZ as i64,
17464            &[rs1.as_operand(), Into::<Imm>::into(imm).as_operand()],
17465        );
17466    }
17467}
17468
17469impl BgezEmitter<Gp, Label> for Assembler<'_> {
17470    fn bgez(&mut self, rs1: Gp, imm: Label) {
17471        self.emit_n(Opcode::BGEZ as i64, &[rs1.as_operand(), imm.as_operand()]);
17472    }
17473}
17474
17475impl<U2: Into<Imm>> BgtEmitter<Gp, Gp, U2> for Assembler<'_> {
17476    fn bgt(&mut self, rs1: Gp, rs2: Gp, imm: U2) {
17477        self.emit_n(
17478            Opcode::BGT as i64,
17479            &[
17480                rs1.as_operand(),
17481                rs2.as_operand(),
17482                Into::<Imm>::into(imm).as_operand(),
17483            ],
17484        );
17485    }
17486}
17487
17488impl BgtEmitter<Gp, Gp, Label> for Assembler<'_> {
17489    fn bgt(&mut self, rs1: Gp, rs2: Gp, imm: Label) {
17490        self.emit_n(
17491            Opcode::BGT as i64,
17492            &[rs1.as_operand(), rs2.as_operand(), imm.as_operand()],
17493        );
17494    }
17495}
17496
17497impl<U2: Into<Imm>> BgtuEmitter<Gp, Gp, U2> for Assembler<'_> {
17498    fn bgtu(&mut self, rs1: Gp, rs2: Gp, imm: U2) {
17499        self.emit_n(
17500            Opcode::BGTU as i64,
17501            &[
17502                rs1.as_operand(),
17503                rs2.as_operand(),
17504                Into::<Imm>::into(imm).as_operand(),
17505            ],
17506        );
17507    }
17508}
17509
17510impl BgtuEmitter<Gp, Gp, Label> for Assembler<'_> {
17511    fn bgtu(&mut self, rs1: Gp, rs2: Gp, imm: Label) {
17512        self.emit_n(
17513            Opcode::BGTU as i64,
17514            &[rs1.as_operand(), rs2.as_operand(), imm.as_operand()],
17515        );
17516    }
17517}
17518
17519impl<U1: Into<Imm>> BgtzEmitter<Gp, U1> for Assembler<'_> {
17520    fn bgtz(&mut self, rs2: Gp, imm: U1) {
17521        self.emit_n(
17522            Opcode::BGTZ as i64,
17523            &[rs2.as_operand(), Into::<Imm>::into(imm).as_operand()],
17524        );
17525    }
17526}
17527
17528impl BgtzEmitter<Gp, Label> for Assembler<'_> {
17529    fn bgtz(&mut self, rs2: Gp, imm: Label) {
17530        self.emit_n(Opcode::BGTZ as i64, &[rs2.as_operand(), imm.as_operand()]);
17531    }
17532}
17533
17534impl BinvEmitter<Gp, Gp, Gp> for Assembler<'_> {
17535    fn binv(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
17536        self.emit_n(
17537            Opcode::BINV as i64,
17538            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
17539        );
17540    }
17541}
17542
17543impl<U2: Into<Imm>> BinviEmitter<Gp, Gp, U2> for Assembler<'_> {
17544    fn binvi(&mut self, rd: Gp, rs1: Gp, shamtd: U2) {
17545        self.emit_n(
17546            Opcode::BINVI as i64,
17547            &[
17548                rd.as_operand(),
17549                rs1.as_operand(),
17550                Into::<Imm>::into(shamtd).as_operand(),
17551            ],
17552        );
17553    }
17554}
17555
17556impl<U2: Into<Imm>> BinviRv32Emitter<Gp, Gp, U2> for Assembler<'_> {
17557    fn binvi_rv32(&mut self, rd: Gp, rs1: Gp, shamtw: U2) {
17558        self.emit_n(
17559            Opcode::BINVIRV32 as i64,
17560            &[
17561                rd.as_operand(),
17562                rs1.as_operand(),
17563                Into::<Imm>::into(shamtw).as_operand(),
17564            ],
17565        );
17566    }
17567}
17568
17569impl<U2: Into<Imm>> BleEmitter<Gp, Gp, U2> for Assembler<'_> {
17570    fn ble(&mut self, rs1: Gp, rs2: Gp, imm: U2) {
17571        self.emit_n(
17572            Opcode::BLE as i64,
17573            &[
17574                rs1.as_operand(),
17575                rs2.as_operand(),
17576                Into::<Imm>::into(imm).as_operand(),
17577            ],
17578        );
17579    }
17580}
17581
17582impl BleEmitter<Gp, Gp, Label> for Assembler<'_> {
17583    fn ble(&mut self, rs1: Gp, rs2: Gp, imm: Label) {
17584        self.emit_n(
17585            Opcode::BLE as i64,
17586            &[rs1.as_operand(), rs2.as_operand(), imm.as_operand()],
17587        );
17588    }
17589}
17590
17591impl<U2: Into<Imm>> BleuEmitter<Gp, Gp, U2> for Assembler<'_> {
17592    fn bleu(&mut self, rs1: Gp, rs2: Gp, imm: U2) {
17593        self.emit_n(
17594            Opcode::BLEU as i64,
17595            &[
17596                rs1.as_operand(),
17597                rs2.as_operand(),
17598                Into::<Imm>::into(imm).as_operand(),
17599            ],
17600        );
17601    }
17602}
17603
17604impl BleuEmitter<Gp, Gp, Label> for Assembler<'_> {
17605    fn bleu(&mut self, rs1: Gp, rs2: Gp, imm: Label) {
17606        self.emit_n(
17607            Opcode::BLEU as i64,
17608            &[rs1.as_operand(), rs2.as_operand(), imm.as_operand()],
17609        );
17610    }
17611}
17612
17613impl<U1: Into<Imm>> BlezEmitter<Gp, U1> for Assembler<'_> {
17614    fn blez(&mut self, rs2: Gp, imm: U1) {
17615        self.emit_n(
17616            Opcode::BLEZ as i64,
17617            &[rs2.as_operand(), Into::<Imm>::into(imm).as_operand()],
17618        );
17619    }
17620}
17621
17622impl BlezEmitter<Gp, Label> for Assembler<'_> {
17623    fn blez(&mut self, rs2: Gp, imm: Label) {
17624        self.emit_n(Opcode::BLEZ as i64, &[rs2.as_operand(), imm.as_operand()]);
17625    }
17626}
17627
17628impl<U2: Into<Imm>> BltEmitter<Gp, Gp, U2> for Assembler<'_> {
17629    fn blt(&mut self, rs1: Gp, rs2: Gp, imm: U2) {
17630        self.emit_n(
17631            Opcode::BLT as i64,
17632            &[
17633                rs1.as_operand(),
17634                rs2.as_operand(),
17635                Into::<Imm>::into(imm).as_operand(),
17636            ],
17637        );
17638    }
17639}
17640
17641impl BltEmitter<Gp, Gp, Label> for Assembler<'_> {
17642    fn blt(&mut self, rs1: Gp, rs2: Gp, imm: Label) {
17643        self.emit_n(
17644            Opcode::BLT as i64,
17645            &[rs1.as_operand(), rs2.as_operand(), imm.as_operand()],
17646        );
17647    }
17648}
17649
17650impl<U2: Into<Imm>> BltuEmitter<Gp, Gp, U2> for Assembler<'_> {
17651    fn bltu(&mut self, rs1: Gp, rs2: Gp, imm: U2) {
17652        self.emit_n(
17653            Opcode::BLTU as i64,
17654            &[
17655                rs1.as_operand(),
17656                rs2.as_operand(),
17657                Into::<Imm>::into(imm).as_operand(),
17658            ],
17659        );
17660    }
17661}
17662
17663impl BltuEmitter<Gp, Gp, Label> for Assembler<'_> {
17664    fn bltu(&mut self, rs1: Gp, rs2: Gp, imm: Label) {
17665        self.emit_n(
17666            Opcode::BLTU as i64,
17667            &[rs1.as_operand(), rs2.as_operand(), imm.as_operand()],
17668        );
17669    }
17670}
17671
17672impl<U1: Into<Imm>> BltzEmitter<Gp, U1> for Assembler<'_> {
17673    fn bltz(&mut self, rs1: Gp, imm: U1) {
17674        self.emit_n(
17675            Opcode::BLTZ as i64,
17676            &[rs1.as_operand(), Into::<Imm>::into(imm).as_operand()],
17677        );
17678    }
17679}
17680
17681impl BltzEmitter<Gp, Label> for Assembler<'_> {
17682    fn bltz(&mut self, rs1: Gp, imm: Label) {
17683        self.emit_n(Opcode::BLTZ as i64, &[rs1.as_operand(), imm.as_operand()]);
17684    }
17685}
17686
17687impl<U2: Into<Imm>> BneEmitter<Gp, Gp, U2> for Assembler<'_> {
17688    fn bne(&mut self, rs1: Gp, rs2: Gp, imm: U2) {
17689        self.emit_n(
17690            Opcode::BNE as i64,
17691            &[
17692                rs1.as_operand(),
17693                rs2.as_operand(),
17694                Into::<Imm>::into(imm).as_operand(),
17695            ],
17696        );
17697    }
17698}
17699
17700impl BneEmitter<Gp, Gp, Label> for Assembler<'_> {
17701    fn bne(&mut self, rs1: Gp, rs2: Gp, imm: Label) {
17702        self.emit_n(
17703            Opcode::BNE as i64,
17704            &[rs1.as_operand(), rs2.as_operand(), imm.as_operand()],
17705        );
17706    }
17707}
17708
17709impl<U1: Into<Imm>> BnezEmitter<Gp, U1> for Assembler<'_> {
17710    fn bnez(&mut self, rs1: Gp, imm: U1) {
17711        self.emit_n(
17712            Opcode::BNEZ as i64,
17713            &[rs1.as_operand(), Into::<Imm>::into(imm).as_operand()],
17714        );
17715    }
17716}
17717
17718impl BnezEmitter<Gp, Label> for Assembler<'_> {
17719    fn bnez(&mut self, rs1: Gp, imm: Label) {
17720        self.emit_n(Opcode::BNEZ as i64, &[rs1.as_operand(), imm.as_operand()]);
17721    }
17722}
17723
17724impl Brev8Emitter<Gp, Gp> for Assembler<'_> {
17725    fn brev8(&mut self, rd: Gp, rs1: Gp) {
17726        self.emit_n(Opcode::BREV8 as i64, &[rd.as_operand(), rs1.as_operand()]);
17727    }
17728}
17729
17730impl BsetEmitter<Gp, Gp, Gp> for Assembler<'_> {
17731    fn bset(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
17732        self.emit_n(
17733            Opcode::BSET as i64,
17734            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
17735        );
17736    }
17737}
17738
17739impl<U2: Into<Imm>> BsetiEmitter<Gp, Gp, U2> for Assembler<'_> {
17740    fn bseti(&mut self, rd: Gp, rs1: Gp, shamtd: U2) {
17741        self.emit_n(
17742            Opcode::BSETI as i64,
17743            &[
17744                rd.as_operand(),
17745                rs1.as_operand(),
17746                Into::<Imm>::into(shamtd).as_operand(),
17747            ],
17748        );
17749    }
17750}
17751
17752impl<U2: Into<Imm>> BsetiRv32Emitter<Gp, Gp, U2> for Assembler<'_> {
17753    fn bseti_rv32(&mut self, rd: Gp, rs1: Gp, shamtw: U2) {
17754        self.emit_n(
17755            Opcode::BSETIRV32 as i64,
17756            &[
17757                rd.as_operand(),
17758                rs1.as_operand(),
17759                Into::<Imm>::into(shamtw).as_operand(),
17760            ],
17761        );
17762    }
17763}
17764
17765impl CAddEmitter<Gp, Gp> for Assembler<'_> {
17766    fn c_add(&mut self, rd: Gp, rs2: Gp) {
17767        self.emit_n(Opcode::CADD as i64, &[rd.as_operand(), rs2.as_operand()]);
17768    }
17769}
17770
17771impl<U1: Into<Imm>> CAddiEmitter<Gp, U1> for Assembler<'_> {
17772    fn c_addi(&mut self, rd: Gp, imm: U1) {
17773        self.emit_n(
17774            Opcode::CADDI as i64,
17775            &[rd.as_operand(), Into::<Imm>::into(imm).as_operand()],
17776        );
17777    }
17778}
17779
17780impl<U0: Into<Imm>> CAddi16spEmitter<U0> for Assembler<'_> {
17781    fn c_addi16sp(&mut self, imm: U0) {
17782        self.emit_n(
17783            Opcode::CADDI16SP as i64,
17784            &[Into::<Imm>::into(imm).as_operand()],
17785        );
17786    }
17787}
17788
17789impl<U1: Into<Imm>> CAddi4spnEmitter<Gp, U1> for Assembler<'_> {
17790    fn c_addi4spn(&mut self, rd: Gp, imm: U1) {
17791        self.emit_n(
17792            Opcode::CADDI4SPN as i64,
17793            &[rd.as_operand(), Into::<Imm>::into(imm).as_operand()],
17794        );
17795    }
17796}
17797
17798impl<U1: Into<Imm>> CAddiwEmitter<Gp, U1> for Assembler<'_> {
17799    fn c_addiw(&mut self, rd: Gp, imm: U1) {
17800        self.emit_n(
17801            Opcode::CADDIW as i64,
17802            &[rd.as_operand(), Into::<Imm>::into(imm).as_operand()],
17803        );
17804    }
17805}
17806
17807impl CAddwEmitter<Gp, Gp> for Assembler<'_> {
17808    fn c_addw(&mut self, rd: Gp, rs2: Gp) {
17809        self.emit_n(Opcode::CADDW as i64, &[rd.as_operand(), rs2.as_operand()]);
17810    }
17811}
17812
17813impl CAndEmitter<Gp, Gp> for Assembler<'_> {
17814    fn c_and(&mut self, rd: Gp, rs2: Gp) {
17815        self.emit_n(Opcode::CAND as i64, &[rd.as_operand(), rs2.as_operand()]);
17816    }
17817}
17818
17819impl<U1: Into<Imm>> CAndiEmitter<Gp, U1> for Assembler<'_> {
17820    fn c_andi(&mut self, rd: Gp, imm: U1) {
17821        self.emit_n(
17822            Opcode::CANDI as i64,
17823            &[rd.as_operand(), Into::<Imm>::into(imm).as_operand()],
17824        );
17825    }
17826}
17827
17828impl<U1: Into<Imm>> CBeqzEmitter<Gp, U1> for Assembler<'_> {
17829    fn c_beqz(&mut self, rs1: Gp, bimm9lohi: U1) {
17830        self.emit_n(
17831            Opcode::CBEQZ as i64,
17832            &[rs1.as_operand(), Into::<Imm>::into(bimm9lohi).as_operand()],
17833        );
17834    }
17835}
17836
17837impl CBeqzEmitter<Gp, Label> for Assembler<'_> {
17838    fn c_beqz(&mut self, rs1: Gp, bimm9lohi: Label) {
17839        self.emit_n(
17840            Opcode::CBEQZ as i64,
17841            &[rs1.as_operand(), bimm9lohi.as_operand()],
17842        );
17843    }
17844}
17845
17846impl<U1: Into<Imm>> CBnezEmitter<Gp, U1> for Assembler<'_> {
17847    fn c_bnez(&mut self, rs1: Gp, bimm9lohi: U1) {
17848        self.emit_n(
17849            Opcode::CBNEZ as i64,
17850            &[rs1.as_operand(), Into::<Imm>::into(bimm9lohi).as_operand()],
17851        );
17852    }
17853}
17854
17855impl CBnezEmitter<Gp, Label> for Assembler<'_> {
17856    fn c_bnez(&mut self, rs1: Gp, bimm9lohi: Label) {
17857        self.emit_n(
17858            Opcode::CBNEZ as i64,
17859            &[rs1.as_operand(), bimm9lohi.as_operand()],
17860        );
17861    }
17862}
17863
17864impl CEbreakEmitter for Assembler<'_> {
17865    fn c_ebreak(&mut self) {
17866        self.emit_n(Opcode::CEBREAK as i64, &[]);
17867    }
17868}
17869
17870impl<U2: Into<Imm>> CFldEmitter<Fp, Gp, U2> for Assembler<'_> {
17871    fn c_fld(&mut self, rd: Fp, rs1: Gp, imm: U2) {
17872        self.emit_n(
17873            Opcode::CFLD as i64,
17874            &[
17875                rd.as_operand(),
17876                rs1.as_operand(),
17877                Into::<Imm>::into(imm).as_operand(),
17878            ],
17879        );
17880    }
17881}
17882
17883impl<U1: Into<Imm>> CFldspEmitter<Fp, U1> for Assembler<'_> {
17884    fn c_fldsp(&mut self, rd: Fp, imm: U1) {
17885        self.emit_n(
17886            Opcode::CFLDSP as i64,
17887            &[rd.as_operand(), Into::<Imm>::into(imm).as_operand()],
17888        );
17889    }
17890}
17891
17892impl<U2: Into<Imm>> CFlwEmitter<Fp, Gp, U2> for Assembler<'_> {
17893    fn c_flw(&mut self, rd: Fp, rs1: Gp, imm: U2) {
17894        self.emit_n(
17895            Opcode::CFLW as i64,
17896            &[
17897                rd.as_operand(),
17898                rs1.as_operand(),
17899                Into::<Imm>::into(imm).as_operand(),
17900            ],
17901        );
17902    }
17903}
17904
17905impl<U1: Into<Imm>> CFlwspEmitter<Fp, U1> for Assembler<'_> {
17906    fn c_flwsp(&mut self, rd: Fp, imm: U1) {
17907        self.emit_n(
17908            Opcode::CFLWSP as i64,
17909            &[rd.as_operand(), Into::<Imm>::into(imm).as_operand()],
17910        );
17911    }
17912}
17913
17914impl<U2: Into<Imm>> CFsdEmitter<Gp, Fp, U2> for Assembler<'_> {
17915    fn c_fsd(&mut self, rs1: Gp, rs2: Fp, imm: U2) {
17916        self.emit_n(
17917            Opcode::CFSD as i64,
17918            &[
17919                rs1.as_operand(),
17920                rs2.as_operand(),
17921                Into::<Imm>::into(imm).as_operand(),
17922            ],
17923        );
17924    }
17925}
17926
17927impl<U1: Into<Imm>> CFsdspEmitter<Fp, U1> for Assembler<'_> {
17928    fn c_fsdsp(&mut self, rs2: Fp, imm: U1) {
17929        self.emit_n(
17930            Opcode::CFSDSP as i64,
17931            &[rs2.as_operand(), Into::<Imm>::into(imm).as_operand()],
17932        );
17933    }
17934}
17935
17936impl<U2: Into<Imm>> CFswEmitter<Gp, Fp, U2> for Assembler<'_> {
17937    fn c_fsw(&mut self, rs1: Gp, rs2: Fp, imm: U2) {
17938        self.emit_n(
17939            Opcode::CFSW as i64,
17940            &[
17941                rs1.as_operand(),
17942                rs2.as_operand(),
17943                Into::<Imm>::into(imm).as_operand(),
17944            ],
17945        );
17946    }
17947}
17948
17949impl<U1: Into<Imm>> CFswspEmitter<Fp, U1> for Assembler<'_> {
17950    fn c_fswsp(&mut self, rs2: Fp, imm: U1) {
17951        self.emit_n(
17952            Opcode::CFSWSP as i64,
17953            &[rs2.as_operand(), Into::<Imm>::into(imm).as_operand()],
17954        );
17955    }
17956}
17957
17958impl<U0: Into<Imm>> CJEmitter<U0> for Assembler<'_> {
17959    fn c_j(&mut self, imm: U0) {
17960        self.emit_n(Opcode::CJ as i64, &[Into::<Imm>::into(imm).as_operand()]);
17961    }
17962}
17963
17964impl CJEmitter<Label> for Assembler<'_> {
17965    fn c_j(&mut self, imm: Label) {
17966        self.emit_n(Opcode::CJ as i64, &[imm.as_operand()]);
17967    }
17968}
17969
17970impl<U0: Into<Imm>> CJalEmitter<U0> for Assembler<'_> {
17971    fn c_jal(&mut self, imm: U0) {
17972        self.emit_n(Opcode::CJAL as i64, &[Into::<Imm>::into(imm).as_operand()]);
17973    }
17974}
17975
17976impl CJalEmitter<Label> for Assembler<'_> {
17977    fn c_jal(&mut self, imm: Label) {
17978        self.emit_n(Opcode::CJAL as i64, &[imm.as_operand()]);
17979    }
17980}
17981
17982impl CJalrEmitter<Gp> for Assembler<'_> {
17983    fn c_jalr(&mut self, rs1: Gp) {
17984        self.emit_n(Opcode::CJALR as i64, &[rs1.as_operand()]);
17985    }
17986}
17987
17988impl CJrEmitter<Gp> for Assembler<'_> {
17989    fn c_jr(&mut self, rs1: Gp) {
17990        self.emit_n(Opcode::CJR as i64, &[rs1.as_operand()]);
17991    }
17992}
17993
17994impl<U2: Into<Imm>> CLbuEmitter<Gp, Gp, U2> for Assembler<'_> {
17995    fn c_lbu(&mut self, rd: Gp, rs1: Gp, imm: U2) {
17996        self.emit_n(
17997            Opcode::CLBU as i64,
17998            &[
17999                rd.as_operand(),
18000                rs1.as_operand(),
18001                Into::<Imm>::into(imm).as_operand(),
18002            ],
18003        );
18004    }
18005}
18006
18007impl<U2: Into<Imm>> CLdEmitter<Gp, Gp, U2> for Assembler<'_> {
18008    fn c_ld(&mut self, rd: Gp, rs1: Gp, imm: U2) {
18009        self.emit_n(
18010            Opcode::CLD as i64,
18011            &[
18012                rd.as_operand(),
18013                rs1.as_operand(),
18014                Into::<Imm>::into(imm).as_operand(),
18015            ],
18016        );
18017    }
18018}
18019
18020impl<U1: Into<Imm>> CLdspEmitter<Gp, U1> for Assembler<'_> {
18021    fn c_ldsp(&mut self, rd: Gp, imm: U1) {
18022        self.emit_n(
18023            Opcode::CLDSP as i64,
18024            &[rd.as_operand(), Into::<Imm>::into(imm).as_operand()],
18025        );
18026    }
18027}
18028
18029impl<U2: Into<Imm>> CLhEmitter<Gp, Gp, U2> for Assembler<'_> {
18030    fn c_lh(&mut self, rd: Gp, rs1: Gp, imm: U2) {
18031        self.emit_n(
18032            Opcode::CLH as i64,
18033            &[
18034                rd.as_operand(),
18035                rs1.as_operand(),
18036                Into::<Imm>::into(imm).as_operand(),
18037            ],
18038        );
18039    }
18040}
18041
18042impl<U2: Into<Imm>> CLhuEmitter<Gp, Gp, U2> for Assembler<'_> {
18043    fn c_lhu(&mut self, rd: Gp, rs1: Gp, imm: U2) {
18044        self.emit_n(
18045            Opcode::CLHU as i64,
18046            &[
18047                rd.as_operand(),
18048                rs1.as_operand(),
18049                Into::<Imm>::into(imm).as_operand(),
18050            ],
18051        );
18052    }
18053}
18054
18055impl<U1: Into<Imm>> CLiEmitter<Gp, U1> for Assembler<'_> {
18056    fn c_li(&mut self, rd: Gp, imm: U1) {
18057        self.emit_n(
18058            Opcode::CLI as i64,
18059            &[rd.as_operand(), Into::<Imm>::into(imm).as_operand()],
18060        );
18061    }
18062}
18063
18064impl<U1: Into<Imm>> CLuiEmitter<Gp, U1> for Assembler<'_> {
18065    fn c_lui(&mut self, rd: Gp, imm: U1) {
18066        self.emit_n(
18067            Opcode::CLUI as i64,
18068            &[rd.as_operand(), Into::<Imm>::into(imm).as_operand()],
18069        );
18070    }
18071}
18072
18073impl<U2: Into<Imm>> CLwEmitter<Gp, Gp, U2> for Assembler<'_> {
18074    fn c_lw(&mut self, rd: Gp, rs1: Gp, imm: U2) {
18075        self.emit_n(
18076            Opcode::CLW as i64,
18077            &[
18078                rd.as_operand(),
18079                rs1.as_operand(),
18080                Into::<Imm>::into(imm).as_operand(),
18081            ],
18082        );
18083    }
18084}
18085
18086impl<U1: Into<Imm>> CLwspEmitter<Gp, U1> for Assembler<'_> {
18087    fn c_lwsp(&mut self, rd: Gp, imm: U1) {
18088        self.emit_n(
18089            Opcode::CLWSP as i64,
18090            &[rd.as_operand(), Into::<Imm>::into(imm).as_operand()],
18091        );
18092    }
18093}
18094
18095impl CMop1Emitter for Assembler<'_> {
18096    fn c_mop_1(&mut self) {
18097        self.emit_n(Opcode::CMOP1 as i64, &[]);
18098    }
18099}
18100
18101impl CMop11Emitter for Assembler<'_> {
18102    fn c_mop_11(&mut self) {
18103        self.emit_n(Opcode::CMOP11 as i64, &[]);
18104    }
18105}
18106
18107impl CMop13Emitter for Assembler<'_> {
18108    fn c_mop_13(&mut self) {
18109        self.emit_n(Opcode::CMOP13 as i64, &[]);
18110    }
18111}
18112
18113impl CMop15Emitter for Assembler<'_> {
18114    fn c_mop_15(&mut self) {
18115        self.emit_n(Opcode::CMOP15 as i64, &[]);
18116    }
18117}
18118
18119impl CMop3Emitter for Assembler<'_> {
18120    fn c_mop_3(&mut self) {
18121        self.emit_n(Opcode::CMOP3 as i64, &[]);
18122    }
18123}
18124
18125impl CMop5Emitter for Assembler<'_> {
18126    fn c_mop_5(&mut self) {
18127        self.emit_n(Opcode::CMOP5 as i64, &[]);
18128    }
18129}
18130
18131impl CMop7Emitter for Assembler<'_> {
18132    fn c_mop_7(&mut self) {
18133        self.emit_n(Opcode::CMOP7 as i64, &[]);
18134    }
18135}
18136
18137impl CMop9Emitter for Assembler<'_> {
18138    fn c_mop_9(&mut self) {
18139        self.emit_n(Opcode::CMOP9 as i64, &[]);
18140    }
18141}
18142
18143impl<U0: Into<Imm>> CMopNEmitter<U0> for Assembler<'_> {
18144    fn c_mop_n(&mut self, mop_t: U0) {
18145        self.emit_n(
18146            Opcode::CMOPN as i64,
18147            &[Into::<Imm>::into(mop_t).as_operand()],
18148        );
18149    }
18150}
18151
18152impl CMulEmitter<Gp, Gp> for Assembler<'_> {
18153    fn c_mul(&mut self, rd: Gp, rs2: Gp) {
18154        self.emit_n(Opcode::CMUL as i64, &[rd.as_operand(), rs2.as_operand()]);
18155    }
18156}
18157
18158impl CMvEmitter<Gp, Gp> for Assembler<'_> {
18159    fn c_mv(&mut self, rd: Gp, rs2: Gp) {
18160        self.emit_n(Opcode::CMV as i64, &[rd.as_operand(), rs2.as_operand()]);
18161    }
18162}
18163
18164impl<U0: Into<Imm>> CNopEmitter<U0> for Assembler<'_> {
18165    fn c_nop(&mut self, imm: U0) {
18166        self.emit_n(Opcode::CNOP as i64, &[Into::<Imm>::into(imm).as_operand()]);
18167    }
18168}
18169
18170impl CNotEmitter<Gp> for Assembler<'_> {
18171    fn c_not(&mut self, rd: Gp) {
18172        self.emit_n(Opcode::CNOT as i64, &[rd.as_operand()]);
18173    }
18174}
18175
18176impl CNtlAllEmitter for Assembler<'_> {
18177    fn c_ntl_all(&mut self) {
18178        self.emit_n(Opcode::CNTLALL as i64, &[]);
18179    }
18180}
18181
18182impl CNtlP1Emitter for Assembler<'_> {
18183    fn c_ntl_p1(&mut self) {
18184        self.emit_n(Opcode::CNTLP1 as i64, &[]);
18185    }
18186}
18187
18188impl CNtlPallEmitter for Assembler<'_> {
18189    fn c_ntl_pall(&mut self) {
18190        self.emit_n(Opcode::CNTLPALL as i64, &[]);
18191    }
18192}
18193
18194impl CNtlS1Emitter for Assembler<'_> {
18195    fn c_ntl_s1(&mut self) {
18196        self.emit_n(Opcode::CNTLS1 as i64, &[]);
18197    }
18198}
18199
18200impl COrEmitter<Gp, Gp> for Assembler<'_> {
18201    fn c_or(&mut self, rd: Gp, rs2: Gp) {
18202        self.emit_n(Opcode::COR as i64, &[rd.as_operand(), rs2.as_operand()]);
18203    }
18204}
18205
18206impl<U2: Into<Imm>> CSbEmitter<Gp, Gp, U2> for Assembler<'_> {
18207    fn c_sb(&mut self, rs1: Gp, rs2: Gp, imm: U2) {
18208        self.emit_n(
18209            Opcode::CSB as i64,
18210            &[
18211                rs1.as_operand(),
18212                rs2.as_operand(),
18213                Into::<Imm>::into(imm).as_operand(),
18214            ],
18215        );
18216    }
18217}
18218
18219impl<U2: Into<Imm>> CSdEmitter<Gp, Gp, U2> for Assembler<'_> {
18220    fn c_sd(&mut self, rs1: Gp, rs2: Gp, imm: U2) {
18221        self.emit_n(
18222            Opcode::CSD as i64,
18223            &[
18224                rs1.as_operand(),
18225                rs2.as_operand(),
18226                Into::<Imm>::into(imm).as_operand(),
18227            ],
18228        );
18229    }
18230}
18231
18232impl<U1: Into<Imm>> CSdspEmitter<Gp, U1> for Assembler<'_> {
18233    fn c_sdsp(&mut self, rs2: Gp, imm: U1) {
18234        self.emit_n(
18235            Opcode::CSDSP as i64,
18236            &[rs2.as_operand(), Into::<Imm>::into(imm).as_operand()],
18237        );
18238    }
18239}
18240
18241impl CSextBEmitter<Gp> for Assembler<'_> {
18242    fn c_sext_b(&mut self, rd: Gp) {
18243        self.emit_n(Opcode::CSEXTB as i64, &[rd.as_operand()]);
18244    }
18245}
18246
18247impl CSextHEmitter<Gp> for Assembler<'_> {
18248    fn c_sext_h(&mut self, rd: Gp) {
18249        self.emit_n(Opcode::CSEXTH as i64, &[rd.as_operand()]);
18250    }
18251}
18252
18253impl<U2: Into<Imm>> CShEmitter<Gp, Gp, U2> for Assembler<'_> {
18254    fn c_sh(&mut self, rs1: Gp, rs2: Gp, imm: U2) {
18255        self.emit_n(
18256            Opcode::CSH as i64,
18257            &[
18258                rs1.as_operand(),
18259                rs2.as_operand(),
18260                Into::<Imm>::into(imm).as_operand(),
18261            ],
18262        );
18263    }
18264}
18265
18266impl<U1: Into<Imm>> CSlliEmitter<Gp, U1> for Assembler<'_> {
18267    fn c_slli(&mut self, rd: Gp, imm: U1) {
18268        self.emit_n(
18269            Opcode::CSLLI as i64,
18270            &[rd.as_operand(), Into::<Imm>::into(imm).as_operand()],
18271        );
18272    }
18273}
18274
18275impl<U1: Into<Imm>> CSlliRv32Emitter<Gp, U1> for Assembler<'_> {
18276    fn c_slli_rv32(&mut self, rd: Gp, imm: U1) {
18277        self.emit_n(
18278            Opcode::CSLLIRV32 as i64,
18279            &[rd.as_operand(), Into::<Imm>::into(imm).as_operand()],
18280        );
18281    }
18282}
18283
18284impl<U1: Into<Imm>> CSraiEmitter<Gp, U1> for Assembler<'_> {
18285    fn c_srai(&mut self, rd: Gp, imm: U1) {
18286        self.emit_n(
18287            Opcode::CSRAI as i64,
18288            &[rd.as_operand(), Into::<Imm>::into(imm).as_operand()],
18289        );
18290    }
18291}
18292
18293impl<U1: Into<Imm>> CSraiRv32Emitter<Gp, U1> for Assembler<'_> {
18294    fn c_srai_rv32(&mut self, rd: Gp, imm: U1) {
18295        self.emit_n(
18296            Opcode::CSRAIRV32 as i64,
18297            &[rd.as_operand(), Into::<Imm>::into(imm).as_operand()],
18298        );
18299    }
18300}
18301
18302impl<U1: Into<Imm>> CSrliEmitter<Gp, U1> for Assembler<'_> {
18303    fn c_srli(&mut self, rd: Gp, imm: U1) {
18304        self.emit_n(
18305            Opcode::CSRLI as i64,
18306            &[rd.as_operand(), Into::<Imm>::into(imm).as_operand()],
18307        );
18308    }
18309}
18310
18311impl<U1: Into<Imm>> CSrliRv32Emitter<Gp, U1> for Assembler<'_> {
18312    fn c_srli_rv32(&mut self, rd: Gp, imm: U1) {
18313        self.emit_n(
18314            Opcode::CSRLIRV32 as i64,
18315            &[rd.as_operand(), Into::<Imm>::into(imm).as_operand()],
18316        );
18317    }
18318}
18319
18320impl CSspopchkX5Emitter for Assembler<'_> {
18321    fn c_sspopchk_x5(&mut self) {
18322        self.emit_n(Opcode::CSSPOPCHKX5 as i64, &[]);
18323    }
18324}
18325
18326impl CSspushX1Emitter for Assembler<'_> {
18327    fn c_sspush_x1(&mut self) {
18328        self.emit_n(Opcode::CSSPUSHX1 as i64, &[]);
18329    }
18330}
18331
18332impl CSubEmitter<Gp, Gp> for Assembler<'_> {
18333    fn c_sub(&mut self, rd: Gp, rs2: Gp) {
18334        self.emit_n(Opcode::CSUB as i64, &[rd.as_operand(), rs2.as_operand()]);
18335    }
18336}
18337
18338impl CSubwEmitter<Gp, Gp> for Assembler<'_> {
18339    fn c_subw(&mut self, rd: Gp, rs2: Gp) {
18340        self.emit_n(Opcode::CSUBW as i64, &[rd.as_operand(), rs2.as_operand()]);
18341    }
18342}
18343
18344impl<U2: Into<Imm>> CSwEmitter<Gp, Gp, U2> for Assembler<'_> {
18345    fn c_sw(&mut self, rs1: Gp, rs2: Gp, imm: U2) {
18346        self.emit_n(
18347            Opcode::CSW as i64,
18348            &[
18349                rs1.as_operand(),
18350                rs2.as_operand(),
18351                Into::<Imm>::into(imm).as_operand(),
18352            ],
18353        );
18354    }
18355}
18356
18357impl<U1: Into<Imm>> CSwspEmitter<Gp, U1> for Assembler<'_> {
18358    fn c_swsp(&mut self, rs2: Gp, imm: U1) {
18359        self.emit_n(
18360            Opcode::CSWSP as i64,
18361            &[rs2.as_operand(), Into::<Imm>::into(imm).as_operand()],
18362        );
18363    }
18364}
18365
18366impl CXorEmitter<Gp, Gp> for Assembler<'_> {
18367    fn c_xor(&mut self, rd: Gp, rs2: Gp) {
18368        self.emit_n(Opcode::CXOR as i64, &[rd.as_operand(), rs2.as_operand()]);
18369    }
18370}
18371
18372impl CZextBEmitter<Gp> for Assembler<'_> {
18373    fn c_zext_b(&mut self, rd: Gp) {
18374        self.emit_n(Opcode::CZEXTB as i64, &[rd.as_operand()]);
18375    }
18376}
18377
18378impl CZextHEmitter<Gp> for Assembler<'_> {
18379    fn c_zext_h(&mut self, rd: Gp) {
18380        self.emit_n(Opcode::CZEXTH as i64, &[rd.as_operand()]);
18381    }
18382}
18383
18384impl CZextWEmitter<Gp> for Assembler<'_> {
18385    fn c_zext_w(&mut self, rd: Gp) {
18386        self.emit_n(Opcode::CZEXTW as i64, &[rd.as_operand()]);
18387    }
18388}
18389
18390impl CboCleanEmitter<Gp> for Assembler<'_> {
18391    fn cbo_clean(&mut self, rs1: Gp) {
18392        self.emit_n(Opcode::CBOCLEAN as i64, &[rs1.as_operand()]);
18393    }
18394}
18395
18396impl CboFlushEmitter<Gp> for Assembler<'_> {
18397    fn cbo_flush(&mut self, rs1: Gp) {
18398        self.emit_n(Opcode::CBOFLUSH as i64, &[rs1.as_operand()]);
18399    }
18400}
18401
18402impl CboInvalEmitter<Gp> for Assembler<'_> {
18403    fn cbo_inval(&mut self, rs1: Gp) {
18404        self.emit_n(Opcode::CBOINVAL as i64, &[rs1.as_operand()]);
18405    }
18406}
18407
18408impl CboZeroEmitter<Gp> for Assembler<'_> {
18409    fn cbo_zero(&mut self, rs1: Gp) {
18410        self.emit_n(Opcode::CBOZERO as i64, &[rs1.as_operand()]);
18411    }
18412}
18413
18414impl ClmulEmitter<Gp, Gp, Gp> for Assembler<'_> {
18415    fn clmul(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
18416        self.emit_n(
18417            Opcode::CLMUL as i64,
18418            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
18419        );
18420    }
18421}
18422
18423impl ClmulhEmitter<Gp, Gp, Gp> for Assembler<'_> {
18424    fn clmulh(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
18425        self.emit_n(
18426            Opcode::CLMULH as i64,
18427            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
18428        );
18429    }
18430}
18431
18432impl ClmulrEmitter<Gp, Gp, Gp> for Assembler<'_> {
18433    fn clmulr(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
18434        self.emit_n(
18435            Opcode::CLMULR as i64,
18436            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
18437        );
18438    }
18439}
18440
18441impl ClzEmitter<Gp, Gp> for Assembler<'_> {
18442    fn clz(&mut self, rd: Gp, rs1: Gp) {
18443        self.emit_n(Opcode::CLZ as i64, &[rd.as_operand(), rs1.as_operand()]);
18444    }
18445}
18446
18447impl ClzwEmitter<Gp, Gp> for Assembler<'_> {
18448    fn clzw(&mut self, rd: Gp, rs1: Gp) {
18449        self.emit_n(Opcode::CLZW as i64, &[rd.as_operand(), rs1.as_operand()]);
18450    }
18451}
18452
18453impl<U0: Into<Imm>> CmJaltEmitter<U0> for Assembler<'_> {
18454    fn cm_jalt(&mut self, index: U0) {
18455        self.emit_n(
18456            Opcode::CMJALT as i64,
18457            &[Into::<Imm>::into(index).as_operand()],
18458        );
18459    }
18460}
18461
18462impl CpopEmitter<Gp, Gp> for Assembler<'_> {
18463    fn cpop(&mut self, rd: Gp, rs1: Gp) {
18464        self.emit_n(Opcode::CPOP as i64, &[rd.as_operand(), rs1.as_operand()]);
18465    }
18466}
18467
18468impl CpopwEmitter<Gp, Gp> for Assembler<'_> {
18469    fn cpopw(&mut self, rd: Gp, rs1: Gp) {
18470        self.emit_n(Opcode::CPOPW as i64, &[rd.as_operand(), rs1.as_operand()]);
18471    }
18472}
18473
18474impl<U1: Into<Imm>> CsrcEmitter<Gp, U1> for Assembler<'_> {
18475    fn csrc(&mut self, rs1: Gp, csr: U1) {
18476        self.emit_n(
18477            Opcode::CSRC as i64,
18478            &[rs1.as_operand(), Into::<Imm>::into(csr).as_operand()],
18479        );
18480    }
18481}
18482
18483impl<U0: Into<Imm>, U1: Into<Imm>> CsrciEmitter<U0, U1> for Assembler<'_> {
18484    fn csrci(&mut self, csr: U0, zimm5: U1) {
18485        self.emit_n(
18486            Opcode::CSRCI as i64,
18487            &[
18488                Into::<Imm>::into(csr).as_operand(),
18489                Into::<Imm>::into(zimm5).as_operand(),
18490            ],
18491        );
18492    }
18493}
18494
18495impl<U1: Into<Imm>> CsrrEmitter<Gp, U1> for Assembler<'_> {
18496    fn csrr(&mut self, rd: Gp, csr: U1) {
18497        self.emit_n(
18498            Opcode::CSRR as i64,
18499            &[rd.as_operand(), Into::<Imm>::into(csr).as_operand()],
18500        );
18501    }
18502}
18503
18504impl<U2: Into<Imm>> CsrrcEmitter<Gp, Gp, U2> for Assembler<'_> {
18505    fn csrrc(&mut self, rd: Gp, rs1: Gp, csr: U2) {
18506        self.emit_n(
18507            Opcode::CSRRC as i64,
18508            &[
18509                rd.as_operand(),
18510                rs1.as_operand(),
18511                Into::<Imm>::into(csr).as_operand(),
18512            ],
18513        );
18514    }
18515}
18516
18517impl<U1: Into<Imm>, U2: Into<Imm>> CsrrciEmitter<Gp, U1, U2> for Assembler<'_> {
18518    fn csrrci(&mut self, rd: Gp, csr: U1, zimm5: U2) {
18519        self.emit_n(
18520            Opcode::CSRRCI as i64,
18521            &[
18522                rd.as_operand(),
18523                Into::<Imm>::into(csr).as_operand(),
18524                Into::<Imm>::into(zimm5).as_operand(),
18525            ],
18526        );
18527    }
18528}
18529
18530impl<U2: Into<Imm>> CsrrsEmitter<Gp, Gp, U2> for Assembler<'_> {
18531    fn csrrs(&mut self, rd: Gp, rs1: Gp, csr: U2) {
18532        self.emit_n(
18533            Opcode::CSRRS as i64,
18534            &[
18535                rd.as_operand(),
18536                rs1.as_operand(),
18537                Into::<Imm>::into(csr).as_operand(),
18538            ],
18539        );
18540    }
18541}
18542
18543impl<U1: Into<Imm>, U2: Into<Imm>> CsrrsiEmitter<Gp, U1, U2> for Assembler<'_> {
18544    fn csrrsi(&mut self, rd: Gp, csr: U1, zimm5: U2) {
18545        self.emit_n(
18546            Opcode::CSRRSI as i64,
18547            &[
18548                rd.as_operand(),
18549                Into::<Imm>::into(csr).as_operand(),
18550                Into::<Imm>::into(zimm5).as_operand(),
18551            ],
18552        );
18553    }
18554}
18555
18556impl<U2: Into<Imm>> CsrrwEmitter<Gp, Gp, U2> for Assembler<'_> {
18557    fn csrrw(&mut self, rd: Gp, rs1: Gp, csr: U2) {
18558        self.emit_n(
18559            Opcode::CSRRW as i64,
18560            &[
18561                rd.as_operand(),
18562                rs1.as_operand(),
18563                Into::<Imm>::into(csr).as_operand(),
18564            ],
18565        );
18566    }
18567}
18568
18569impl<U1: Into<Imm>, U2: Into<Imm>> CsrrwiEmitter<Gp, U1, U2> for Assembler<'_> {
18570    fn csrrwi(&mut self, rd: Gp, csr: U1, zimm5: U2) {
18571        self.emit_n(
18572            Opcode::CSRRWI as i64,
18573            &[
18574                rd.as_operand(),
18575                Into::<Imm>::into(csr).as_operand(),
18576                Into::<Imm>::into(zimm5).as_operand(),
18577            ],
18578        );
18579    }
18580}
18581
18582impl<U1: Into<Imm>> CsrsEmitter<Gp, U1> for Assembler<'_> {
18583    fn csrs(&mut self, rs1: Gp, csr: U1) {
18584        self.emit_n(
18585            Opcode::CSRS as i64,
18586            &[rs1.as_operand(), Into::<Imm>::into(csr).as_operand()],
18587        );
18588    }
18589}
18590
18591impl<U0: Into<Imm>, U1: Into<Imm>> CsrsiEmitter<U0, U1> for Assembler<'_> {
18592    fn csrsi(&mut self, csr: U0, zimm5: U1) {
18593        self.emit_n(
18594            Opcode::CSRSI as i64,
18595            &[
18596                Into::<Imm>::into(csr).as_operand(),
18597                Into::<Imm>::into(zimm5).as_operand(),
18598            ],
18599        );
18600    }
18601}
18602
18603impl<U1: Into<Imm>> CsrwEmitter<Gp, U1> for Assembler<'_> {
18604    fn csrw(&mut self, rs1: Gp, csr: U1) {
18605        self.emit_n(
18606            Opcode::CSRW as i64,
18607            &[rs1.as_operand(), Into::<Imm>::into(csr).as_operand()],
18608        );
18609    }
18610}
18611
18612impl<U0: Into<Imm>, U1: Into<Imm>> CsrwiEmitter<U0, U1> for Assembler<'_> {
18613    fn csrwi(&mut self, csr: U0, zimm5: U1) {
18614        self.emit_n(
18615            Opcode::CSRWI as i64,
18616            &[
18617                Into::<Imm>::into(csr).as_operand(),
18618                Into::<Imm>::into(zimm5).as_operand(),
18619            ],
18620        );
18621    }
18622}
18623
18624impl CtzEmitter<Gp, Gp> for Assembler<'_> {
18625    fn ctz(&mut self, rd: Gp, rs1: Gp) {
18626        self.emit_n(Opcode::CTZ as i64, &[rd.as_operand(), rs1.as_operand()]);
18627    }
18628}
18629
18630impl CtzwEmitter<Gp, Gp> for Assembler<'_> {
18631    fn ctzw(&mut self, rd: Gp, rs1: Gp) {
18632        self.emit_n(Opcode::CTZW as i64, &[rd.as_operand(), rs1.as_operand()]);
18633    }
18634}
18635
18636impl CzeroEqzEmitter<Gp, Gp, Gp> for Assembler<'_> {
18637    fn czero_eqz(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
18638        self.emit_n(
18639            Opcode::CZEROEQZ as i64,
18640            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
18641        );
18642    }
18643}
18644
18645impl CzeroNezEmitter<Gp, Gp, Gp> for Assembler<'_> {
18646    fn czero_nez(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
18647        self.emit_n(
18648            Opcode::CZERONEZ as i64,
18649            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
18650        );
18651    }
18652}
18653
18654impl DivEmitter<Gp, Gp, Gp> for Assembler<'_> {
18655    fn div(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
18656        self.emit_n(
18657            Opcode::DIV as i64,
18658            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
18659        );
18660    }
18661}
18662
18663impl DivuEmitter<Gp, Gp, Gp> for Assembler<'_> {
18664    fn divu(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
18665        self.emit_n(
18666            Opcode::DIVU as i64,
18667            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
18668        );
18669    }
18670}
18671
18672impl DivuwEmitter<Gp, Gp, Gp> for Assembler<'_> {
18673    fn divuw(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
18674        self.emit_n(
18675            Opcode::DIVUW as i64,
18676            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
18677        );
18678    }
18679}
18680
18681impl DivwEmitter<Gp, Gp, Gp> for Assembler<'_> {
18682    fn divw(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
18683        self.emit_n(
18684            Opcode::DIVW as i64,
18685            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
18686        );
18687    }
18688}
18689
18690impl DretEmitter for Assembler<'_> {
18691    fn dret(&mut self) {
18692        self.emit_n(Opcode::DRET as i64, &[]);
18693    }
18694}
18695
18696impl EbreakEmitter for Assembler<'_> {
18697    fn ebreak(&mut self) {
18698        self.emit_n(Opcode::EBREAK as i64, &[]);
18699    }
18700}
18701
18702impl EcallEmitter for Assembler<'_> {
18703    fn ecall(&mut self) {
18704        self.emit_n(Opcode::ECALL as i64, &[]);
18705    }
18706}
18707
18708impl FabsDEmitter<Fp, Fp, Fp> for Assembler<'_> {
18709    fn fabs_d(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
18710        self.emit_n(
18711            Opcode::FABSD as i64,
18712            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
18713        );
18714    }
18715}
18716
18717impl FabsHEmitter<Fp, Fp, Fp> for Assembler<'_> {
18718    fn fabs_h(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
18719        self.emit_n(
18720            Opcode::FABSH as i64,
18721            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
18722        );
18723    }
18724}
18725
18726impl FabsQEmitter<Fp, Fp, Fp> for Assembler<'_> {
18727    fn fabs_q(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
18728        self.emit_n(
18729            Opcode::FABSQ as i64,
18730            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
18731        );
18732    }
18733}
18734
18735impl FabsSEmitter<Fp, Fp, Fp> for Assembler<'_> {
18736    fn fabs_s(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
18737        self.emit_n(
18738            Opcode::FABSS as i64,
18739            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
18740        );
18741    }
18742}
18743
18744impl<U3: Into<Imm>> FaddDEmitter<Fp, Fp, Fp, U3> for Assembler<'_> {
18745    fn fadd_d(&mut self, rd: Fp, rs1: Fp, rs2: Fp, rm: U3) {
18746        self.emit_n(
18747            Opcode::FADDD as i64,
18748            &[
18749                rd.as_operand(),
18750                rs1.as_operand(),
18751                rs2.as_operand(),
18752                Into::<Imm>::into(rm).as_operand(),
18753            ],
18754        );
18755    }
18756}
18757
18758impl<U3: Into<Imm>> FaddHEmitter<Fp, Fp, Fp, U3> for Assembler<'_> {
18759    fn fadd_h(&mut self, rd: Fp, rs1: Fp, rs2: Fp, rm: U3) {
18760        self.emit_n(
18761            Opcode::FADDH as i64,
18762            &[
18763                rd.as_operand(),
18764                rs1.as_operand(),
18765                rs2.as_operand(),
18766                Into::<Imm>::into(rm).as_operand(),
18767            ],
18768        );
18769    }
18770}
18771
18772impl<U3: Into<Imm>> FaddQEmitter<Fp, Fp, Fp, U3> for Assembler<'_> {
18773    fn fadd_q(&mut self, rd: Fp, rs1: Fp, rs2: Fp, rm: U3) {
18774        self.emit_n(
18775            Opcode::FADDQ as i64,
18776            &[
18777                rd.as_operand(),
18778                rs1.as_operand(),
18779                rs2.as_operand(),
18780                Into::<Imm>::into(rm).as_operand(),
18781            ],
18782        );
18783    }
18784}
18785
18786impl<U3: Into<Imm>> FaddSEmitter<Fp, Fp, Fp, U3> for Assembler<'_> {
18787    fn fadd_s(&mut self, rd: Fp, rs1: Fp, rs2: Fp, rm: U3) {
18788        self.emit_n(
18789            Opcode::FADDS as i64,
18790            &[
18791                rd.as_operand(),
18792                rs1.as_operand(),
18793                rs2.as_operand(),
18794                Into::<Imm>::into(rm).as_operand(),
18795            ],
18796        );
18797    }
18798}
18799
18800impl FclassDEmitter<Gp, Fp> for Assembler<'_> {
18801    fn fclass_d(&mut self, rd: Gp, rs1: Fp) {
18802        self.emit_n(Opcode::FCLASSD as i64, &[rd.as_operand(), rs1.as_operand()]);
18803    }
18804}
18805
18806impl FclassHEmitter<Gp, Fp> for Assembler<'_> {
18807    fn fclass_h(&mut self, rd: Gp, rs1: Fp) {
18808        self.emit_n(Opcode::FCLASSH as i64, &[rd.as_operand(), rs1.as_operand()]);
18809    }
18810}
18811
18812impl FclassQEmitter<Gp, Fp> for Assembler<'_> {
18813    fn fclass_q(&mut self, rd: Gp, rs1: Fp) {
18814        self.emit_n(Opcode::FCLASSQ as i64, &[rd.as_operand(), rs1.as_operand()]);
18815    }
18816}
18817
18818impl FclassSEmitter<Gp, Fp> for Assembler<'_> {
18819    fn fclass_s(&mut self, rd: Gp, rs1: Fp) {
18820        self.emit_n(Opcode::FCLASSS as i64, &[rd.as_operand(), rs1.as_operand()]);
18821    }
18822}
18823
18824impl<U2: Into<Imm>> FcvtBf16SEmitter<Fp, Fp, U2> for Assembler<'_> {
18825    fn fcvt_bf16_s(&mut self, rd: Fp, rs1: Fp, rm: U2) {
18826        self.emit_n(
18827            Opcode::FCVTBF16S as i64,
18828            &[
18829                rd.as_operand(),
18830                rs1.as_operand(),
18831                Into::<Imm>::into(rm).as_operand(),
18832            ],
18833        );
18834    }
18835}
18836
18837impl<U2: Into<Imm>> FcvtDHEmitter<Fp, Fp, U2> for Assembler<'_> {
18838    fn fcvt_d_h(&mut self, rd: Fp, rs1: Fp, rm: U2) {
18839        self.emit_n(
18840            Opcode::FCVTDH as i64,
18841            &[
18842                rd.as_operand(),
18843                rs1.as_operand(),
18844                Into::<Imm>::into(rm).as_operand(),
18845            ],
18846        );
18847    }
18848}
18849
18850impl<U2: Into<Imm>> FcvtDLEmitter<Fp, Gp, U2> for Assembler<'_> {
18851    fn fcvt_d_l(&mut self, rd: Fp, rs1: Gp, rm: U2) {
18852        self.emit_n(
18853            Opcode::FCVTDL as i64,
18854            &[
18855                rd.as_operand(),
18856                rs1.as_operand(),
18857                Into::<Imm>::into(rm).as_operand(),
18858            ],
18859        );
18860    }
18861}
18862
18863impl<U2: Into<Imm>> FcvtDLuEmitter<Fp, Gp, U2> for Assembler<'_> {
18864    fn fcvt_d_lu(&mut self, rd: Fp, rs1: Gp, rm: U2) {
18865        self.emit_n(
18866            Opcode::FCVTDLU as i64,
18867            &[
18868                rd.as_operand(),
18869                rs1.as_operand(),
18870                Into::<Imm>::into(rm).as_operand(),
18871            ],
18872        );
18873    }
18874}
18875
18876impl<U2: Into<Imm>> FcvtDQEmitter<Fp, Fp, U2> for Assembler<'_> {
18877    fn fcvt_d_q(&mut self, rd: Fp, rs1: Fp, rm: U2) {
18878        self.emit_n(
18879            Opcode::FCVTDQ as i64,
18880            &[
18881                rd.as_operand(),
18882                rs1.as_operand(),
18883                Into::<Imm>::into(rm).as_operand(),
18884            ],
18885        );
18886    }
18887}
18888
18889impl<U2: Into<Imm>> FcvtDSEmitter<Fp, Fp, U2> for Assembler<'_> {
18890    fn fcvt_d_s(&mut self, rd: Fp, rs1: Fp, rm: U2) {
18891        self.emit_n(
18892            Opcode::FCVTDS as i64,
18893            &[
18894                rd.as_operand(),
18895                rs1.as_operand(),
18896                Into::<Imm>::into(rm).as_operand(),
18897            ],
18898        );
18899    }
18900}
18901
18902impl<U2: Into<Imm>> FcvtDWEmitter<Fp, Gp, U2> for Assembler<'_> {
18903    fn fcvt_d_w(&mut self, rd: Fp, rs1: Gp, rm: U2) {
18904        self.emit_n(
18905            Opcode::FCVTDW as i64,
18906            &[
18907                rd.as_operand(),
18908                rs1.as_operand(),
18909                Into::<Imm>::into(rm).as_operand(),
18910            ],
18911        );
18912    }
18913}
18914
18915impl<U2: Into<Imm>> FcvtDWuEmitter<Fp, Gp, U2> for Assembler<'_> {
18916    fn fcvt_d_wu(&mut self, rd: Fp, rs1: Gp, rm: U2) {
18917        self.emit_n(
18918            Opcode::FCVTDWU as i64,
18919            &[
18920                rd.as_operand(),
18921                rs1.as_operand(),
18922                Into::<Imm>::into(rm).as_operand(),
18923            ],
18924        );
18925    }
18926}
18927
18928impl<U2: Into<Imm>> FcvtHDEmitter<Fp, Fp, U2> for Assembler<'_> {
18929    fn fcvt_h_d(&mut self, rd: Fp, rs1: Fp, rm: U2) {
18930        self.emit_n(
18931            Opcode::FCVTHD as i64,
18932            &[
18933                rd.as_operand(),
18934                rs1.as_operand(),
18935                Into::<Imm>::into(rm).as_operand(),
18936            ],
18937        );
18938    }
18939}
18940
18941impl<U2: Into<Imm>> FcvtHLEmitter<Fp, Gp, U2> for Assembler<'_> {
18942    fn fcvt_h_l(&mut self, rd: Fp, rs1: Gp, rm: U2) {
18943        self.emit_n(
18944            Opcode::FCVTHL as i64,
18945            &[
18946                rd.as_operand(),
18947                rs1.as_operand(),
18948                Into::<Imm>::into(rm).as_operand(),
18949            ],
18950        );
18951    }
18952}
18953
18954impl<U2: Into<Imm>> FcvtHLuEmitter<Fp, Gp, U2> for Assembler<'_> {
18955    fn fcvt_h_lu(&mut self, rd: Fp, rs1: Gp, rm: U2) {
18956        self.emit_n(
18957            Opcode::FCVTHLU as i64,
18958            &[
18959                rd.as_operand(),
18960                rs1.as_operand(),
18961                Into::<Imm>::into(rm).as_operand(),
18962            ],
18963        );
18964    }
18965}
18966
18967impl<U2: Into<Imm>> FcvtHQEmitter<Fp, Fp, U2> for Assembler<'_> {
18968    fn fcvt_h_q(&mut self, rd: Fp, rs1: Fp, rm: U2) {
18969        self.emit_n(
18970            Opcode::FCVTHQ as i64,
18971            &[
18972                rd.as_operand(),
18973                rs1.as_operand(),
18974                Into::<Imm>::into(rm).as_operand(),
18975            ],
18976        );
18977    }
18978}
18979
18980impl<U2: Into<Imm>> FcvtHSEmitter<Fp, Fp, U2> for Assembler<'_> {
18981    fn fcvt_h_s(&mut self, rd: Fp, rs1: Fp, rm: U2) {
18982        self.emit_n(
18983            Opcode::FCVTHS as i64,
18984            &[
18985                rd.as_operand(),
18986                rs1.as_operand(),
18987                Into::<Imm>::into(rm).as_operand(),
18988            ],
18989        );
18990    }
18991}
18992
18993impl<U2: Into<Imm>> FcvtHWEmitter<Fp, Gp, U2> for Assembler<'_> {
18994    fn fcvt_h_w(&mut self, rd: Fp, rs1: Gp, rm: U2) {
18995        self.emit_n(
18996            Opcode::FCVTHW as i64,
18997            &[
18998                rd.as_operand(),
18999                rs1.as_operand(),
19000                Into::<Imm>::into(rm).as_operand(),
19001            ],
19002        );
19003    }
19004}
19005
19006impl<U2: Into<Imm>> FcvtHWuEmitter<Fp, Gp, U2> for Assembler<'_> {
19007    fn fcvt_h_wu(&mut self, rd: Fp, rs1: Gp, rm: U2) {
19008        self.emit_n(
19009            Opcode::FCVTHWU as i64,
19010            &[
19011                rd.as_operand(),
19012                rs1.as_operand(),
19013                Into::<Imm>::into(rm).as_operand(),
19014            ],
19015        );
19016    }
19017}
19018
19019impl<U2: Into<Imm>> FcvtLDEmitter<Gp, Fp, U2> for Assembler<'_> {
19020    fn fcvt_l_d(&mut self, rd: Gp, rs1: Fp, rm: U2) {
19021        self.emit_n(
19022            Opcode::FCVTLD as i64,
19023            &[
19024                rd.as_operand(),
19025                rs1.as_operand(),
19026                Into::<Imm>::into(rm).as_operand(),
19027            ],
19028        );
19029    }
19030}
19031
19032impl<U2: Into<Imm>> FcvtLHEmitter<Gp, Fp, U2> for Assembler<'_> {
19033    fn fcvt_l_h(&mut self, rd: Gp, rs1: Fp, rm: U2) {
19034        self.emit_n(
19035            Opcode::FCVTLH as i64,
19036            &[
19037                rd.as_operand(),
19038                rs1.as_operand(),
19039                Into::<Imm>::into(rm).as_operand(),
19040            ],
19041        );
19042    }
19043}
19044
19045impl<U2: Into<Imm>> FcvtLQEmitter<Gp, Fp, U2> for Assembler<'_> {
19046    fn fcvt_l_q(&mut self, rd: Gp, rs1: Fp, rm: U2) {
19047        self.emit_n(
19048            Opcode::FCVTLQ as i64,
19049            &[
19050                rd.as_operand(),
19051                rs1.as_operand(),
19052                Into::<Imm>::into(rm).as_operand(),
19053            ],
19054        );
19055    }
19056}
19057
19058impl<U2: Into<Imm>> FcvtLSEmitter<Gp, Fp, U2> for Assembler<'_> {
19059    fn fcvt_l_s(&mut self, rd: Gp, rs1: Fp, rm: U2) {
19060        self.emit_n(
19061            Opcode::FCVTLS as i64,
19062            &[
19063                rd.as_operand(),
19064                rs1.as_operand(),
19065                Into::<Imm>::into(rm).as_operand(),
19066            ],
19067        );
19068    }
19069}
19070
19071impl<U2: Into<Imm>> FcvtLuDEmitter<Gp, Fp, U2> for Assembler<'_> {
19072    fn fcvt_lu_d(&mut self, rd: Gp, rs1: Fp, rm: U2) {
19073        self.emit_n(
19074            Opcode::FCVTLUD as i64,
19075            &[
19076                rd.as_operand(),
19077                rs1.as_operand(),
19078                Into::<Imm>::into(rm).as_operand(),
19079            ],
19080        );
19081    }
19082}
19083
19084impl<U2: Into<Imm>> FcvtLuHEmitter<Gp, Fp, U2> for Assembler<'_> {
19085    fn fcvt_lu_h(&mut self, rd: Gp, rs1: Fp, rm: U2) {
19086        self.emit_n(
19087            Opcode::FCVTLUH as i64,
19088            &[
19089                rd.as_operand(),
19090                rs1.as_operand(),
19091                Into::<Imm>::into(rm).as_operand(),
19092            ],
19093        );
19094    }
19095}
19096
19097impl<U2: Into<Imm>> FcvtLuQEmitter<Gp, Fp, U2> for Assembler<'_> {
19098    fn fcvt_lu_q(&mut self, rd: Gp, rs1: Fp, rm: U2) {
19099        self.emit_n(
19100            Opcode::FCVTLUQ as i64,
19101            &[
19102                rd.as_operand(),
19103                rs1.as_operand(),
19104                Into::<Imm>::into(rm).as_operand(),
19105            ],
19106        );
19107    }
19108}
19109
19110impl<U2: Into<Imm>> FcvtLuSEmitter<Gp, Fp, U2> for Assembler<'_> {
19111    fn fcvt_lu_s(&mut self, rd: Gp, rs1: Fp, rm: U2) {
19112        self.emit_n(
19113            Opcode::FCVTLUS as i64,
19114            &[
19115                rd.as_operand(),
19116                rs1.as_operand(),
19117                Into::<Imm>::into(rm).as_operand(),
19118            ],
19119        );
19120    }
19121}
19122
19123impl<U2: Into<Imm>> FcvtQDEmitter<Fp, Fp, U2> for Assembler<'_> {
19124    fn fcvt_q_d(&mut self, rd: Fp, rs1: Fp, rm: U2) {
19125        self.emit_n(
19126            Opcode::FCVTQD as i64,
19127            &[
19128                rd.as_operand(),
19129                rs1.as_operand(),
19130                Into::<Imm>::into(rm).as_operand(),
19131            ],
19132        );
19133    }
19134}
19135
19136impl<U2: Into<Imm>> FcvtQHEmitter<Fp, Fp, U2> for Assembler<'_> {
19137    fn fcvt_q_h(&mut self, rd: Fp, rs1: Fp, rm: U2) {
19138        self.emit_n(
19139            Opcode::FCVTQH as i64,
19140            &[
19141                rd.as_operand(),
19142                rs1.as_operand(),
19143                Into::<Imm>::into(rm).as_operand(),
19144            ],
19145        );
19146    }
19147}
19148
19149impl<U2: Into<Imm>> FcvtQLEmitter<Fp, Gp, U2> for Assembler<'_> {
19150    fn fcvt_q_l(&mut self, rd: Fp, rs1: Gp, rm: U2) {
19151        self.emit_n(
19152            Opcode::FCVTQL as i64,
19153            &[
19154                rd.as_operand(),
19155                rs1.as_operand(),
19156                Into::<Imm>::into(rm).as_operand(),
19157            ],
19158        );
19159    }
19160}
19161
19162impl<U2: Into<Imm>> FcvtQLuEmitter<Fp, Gp, U2> for Assembler<'_> {
19163    fn fcvt_q_lu(&mut self, rd: Fp, rs1: Gp, rm: U2) {
19164        self.emit_n(
19165            Opcode::FCVTQLU as i64,
19166            &[
19167                rd.as_operand(),
19168                rs1.as_operand(),
19169                Into::<Imm>::into(rm).as_operand(),
19170            ],
19171        );
19172    }
19173}
19174
19175impl<U2: Into<Imm>> FcvtQSEmitter<Fp, Fp, U2> for Assembler<'_> {
19176    fn fcvt_q_s(&mut self, rd: Fp, rs1: Fp, rm: U2) {
19177        self.emit_n(
19178            Opcode::FCVTQS as i64,
19179            &[
19180                rd.as_operand(),
19181                rs1.as_operand(),
19182                Into::<Imm>::into(rm).as_operand(),
19183            ],
19184        );
19185    }
19186}
19187
19188impl<U2: Into<Imm>> FcvtQWEmitter<Fp, Gp, U2> for Assembler<'_> {
19189    fn fcvt_q_w(&mut self, rd: Fp, rs1: Gp, rm: U2) {
19190        self.emit_n(
19191            Opcode::FCVTQW as i64,
19192            &[
19193                rd.as_operand(),
19194                rs1.as_operand(),
19195                Into::<Imm>::into(rm).as_operand(),
19196            ],
19197        );
19198    }
19199}
19200
19201impl<U2: Into<Imm>> FcvtQWuEmitter<Fp, Gp, U2> for Assembler<'_> {
19202    fn fcvt_q_wu(&mut self, rd: Fp, rs1: Gp, rm: U2) {
19203        self.emit_n(
19204            Opcode::FCVTQWU as i64,
19205            &[
19206                rd.as_operand(),
19207                rs1.as_operand(),
19208                Into::<Imm>::into(rm).as_operand(),
19209            ],
19210        );
19211    }
19212}
19213
19214impl<U2: Into<Imm>> FcvtSBf16Emitter<Fp, Fp, U2> for Assembler<'_> {
19215    fn fcvt_s_bf16(&mut self, rd: Fp, rs1: Fp, rm: U2) {
19216        self.emit_n(
19217            Opcode::FCVTSBF16 as i64,
19218            &[
19219                rd.as_operand(),
19220                rs1.as_operand(),
19221                Into::<Imm>::into(rm).as_operand(),
19222            ],
19223        );
19224    }
19225}
19226
19227impl<U2: Into<Imm>> FcvtSDEmitter<Fp, Fp, U2> for Assembler<'_> {
19228    fn fcvt_s_d(&mut self, rd: Fp, rs1: Fp, rm: U2) {
19229        self.emit_n(
19230            Opcode::FCVTSD as i64,
19231            &[
19232                rd.as_operand(),
19233                rs1.as_operand(),
19234                Into::<Imm>::into(rm).as_operand(),
19235            ],
19236        );
19237    }
19238}
19239
19240impl<U2: Into<Imm>> FcvtSHEmitter<Fp, Fp, U2> for Assembler<'_> {
19241    fn fcvt_s_h(&mut self, rd: Fp, rs1: Fp, rm: U2) {
19242        self.emit_n(
19243            Opcode::FCVTSH as i64,
19244            &[
19245                rd.as_operand(),
19246                rs1.as_operand(),
19247                Into::<Imm>::into(rm).as_operand(),
19248            ],
19249        );
19250    }
19251}
19252
19253impl<U2: Into<Imm>> FcvtSLEmitter<Fp, Gp, U2> for Assembler<'_> {
19254    fn fcvt_s_l(&mut self, rd: Fp, rs1: Gp, rm: U2) {
19255        self.emit_n(
19256            Opcode::FCVTSL as i64,
19257            &[
19258                rd.as_operand(),
19259                rs1.as_operand(),
19260                Into::<Imm>::into(rm).as_operand(),
19261            ],
19262        );
19263    }
19264}
19265
19266impl<U2: Into<Imm>> FcvtSLuEmitter<Fp, Gp, U2> for Assembler<'_> {
19267    fn fcvt_s_lu(&mut self, rd: Fp, rs1: Gp, rm: U2) {
19268        self.emit_n(
19269            Opcode::FCVTSLU as i64,
19270            &[
19271                rd.as_operand(),
19272                rs1.as_operand(),
19273                Into::<Imm>::into(rm).as_operand(),
19274            ],
19275        );
19276    }
19277}
19278
19279impl<U2: Into<Imm>> FcvtSQEmitter<Fp, Fp, U2> for Assembler<'_> {
19280    fn fcvt_s_q(&mut self, rd: Fp, rs1: Fp, rm: U2) {
19281        self.emit_n(
19282            Opcode::FCVTSQ as i64,
19283            &[
19284                rd.as_operand(),
19285                rs1.as_operand(),
19286                Into::<Imm>::into(rm).as_operand(),
19287            ],
19288        );
19289    }
19290}
19291
19292impl<U2: Into<Imm>> FcvtSWEmitter<Fp, Gp, U2> for Assembler<'_> {
19293    fn fcvt_s_w(&mut self, rd: Fp, rs1: Gp, rm: U2) {
19294        self.emit_n(
19295            Opcode::FCVTSW as i64,
19296            &[
19297                rd.as_operand(),
19298                rs1.as_operand(),
19299                Into::<Imm>::into(rm).as_operand(),
19300            ],
19301        );
19302    }
19303}
19304
19305impl<U2: Into<Imm>> FcvtSWuEmitter<Fp, Gp, U2> for Assembler<'_> {
19306    fn fcvt_s_wu(&mut self, rd: Fp, rs1: Gp, rm: U2) {
19307        self.emit_n(
19308            Opcode::FCVTSWU as i64,
19309            &[
19310                rd.as_operand(),
19311                rs1.as_operand(),
19312                Into::<Imm>::into(rm).as_operand(),
19313            ],
19314        );
19315    }
19316}
19317
19318impl<U2: Into<Imm>> FcvtWDEmitter<Gp, Fp, U2> for Assembler<'_> {
19319    fn fcvt_w_d(&mut self, rd: Gp, rs1: Fp, rm: U2) {
19320        self.emit_n(
19321            Opcode::FCVTWD as i64,
19322            &[
19323                rd.as_operand(),
19324                rs1.as_operand(),
19325                Into::<Imm>::into(rm).as_operand(),
19326            ],
19327        );
19328    }
19329}
19330
19331impl<U2: Into<Imm>> FcvtWHEmitter<Gp, Fp, U2> for Assembler<'_> {
19332    fn fcvt_w_h(&mut self, rd: Gp, rs1: Fp, rm: U2) {
19333        self.emit_n(
19334            Opcode::FCVTWH as i64,
19335            &[
19336                rd.as_operand(),
19337                rs1.as_operand(),
19338                Into::<Imm>::into(rm).as_operand(),
19339            ],
19340        );
19341    }
19342}
19343
19344impl<U2: Into<Imm>> FcvtWQEmitter<Gp, Fp, U2> for Assembler<'_> {
19345    fn fcvt_w_q(&mut self, rd: Gp, rs1: Fp, rm: U2) {
19346        self.emit_n(
19347            Opcode::FCVTWQ as i64,
19348            &[
19349                rd.as_operand(),
19350                rs1.as_operand(),
19351                Into::<Imm>::into(rm).as_operand(),
19352            ],
19353        );
19354    }
19355}
19356
19357impl<U2: Into<Imm>> FcvtWSEmitter<Gp, Fp, U2> for Assembler<'_> {
19358    fn fcvt_w_s(&mut self, rd: Gp, rs1: Fp, rm: U2) {
19359        self.emit_n(
19360            Opcode::FCVTWS as i64,
19361            &[
19362                rd.as_operand(),
19363                rs1.as_operand(),
19364                Into::<Imm>::into(rm).as_operand(),
19365            ],
19366        );
19367    }
19368}
19369
19370impl<U2: Into<Imm>> FcvtWuDEmitter<Gp, Fp, U2> for Assembler<'_> {
19371    fn fcvt_wu_d(&mut self, rd: Gp, rs1: Fp, rm: U2) {
19372        self.emit_n(
19373            Opcode::FCVTWUD as i64,
19374            &[
19375                rd.as_operand(),
19376                rs1.as_operand(),
19377                Into::<Imm>::into(rm).as_operand(),
19378            ],
19379        );
19380    }
19381}
19382
19383impl<U2: Into<Imm>> FcvtWuHEmitter<Gp, Fp, U2> for Assembler<'_> {
19384    fn fcvt_wu_h(&mut self, rd: Gp, rs1: Fp, rm: U2) {
19385        self.emit_n(
19386            Opcode::FCVTWUH as i64,
19387            &[
19388                rd.as_operand(),
19389                rs1.as_operand(),
19390                Into::<Imm>::into(rm).as_operand(),
19391            ],
19392        );
19393    }
19394}
19395
19396impl<U2: Into<Imm>> FcvtWuQEmitter<Gp, Fp, U2> for Assembler<'_> {
19397    fn fcvt_wu_q(&mut self, rd: Gp, rs1: Fp, rm: U2) {
19398        self.emit_n(
19399            Opcode::FCVTWUQ as i64,
19400            &[
19401                rd.as_operand(),
19402                rs1.as_operand(),
19403                Into::<Imm>::into(rm).as_operand(),
19404            ],
19405        );
19406    }
19407}
19408
19409impl<U2: Into<Imm>> FcvtWuSEmitter<Gp, Fp, U2> for Assembler<'_> {
19410    fn fcvt_wu_s(&mut self, rd: Gp, rs1: Fp, rm: U2) {
19411        self.emit_n(
19412            Opcode::FCVTWUS as i64,
19413            &[
19414                rd.as_operand(),
19415                rs1.as_operand(),
19416                Into::<Imm>::into(rm).as_operand(),
19417            ],
19418        );
19419    }
19420}
19421
19422impl FcvtmodWDEmitter<Gp, Fp> for Assembler<'_> {
19423    fn fcvtmod_w_d(&mut self, rd: Gp, rs1: Fp) {
19424        self.emit_n(
19425            Opcode::FCVTMODWD as i64,
19426            &[rd.as_operand(), rs1.as_operand()],
19427        );
19428    }
19429}
19430
19431impl<U3: Into<Imm>> FdivDEmitter<Fp, Fp, Fp, U3> for Assembler<'_> {
19432    fn fdiv_d(&mut self, rd: Fp, rs1: Fp, rs2: Fp, rm: U3) {
19433        self.emit_n(
19434            Opcode::FDIVD as i64,
19435            &[
19436                rd.as_operand(),
19437                rs1.as_operand(),
19438                rs2.as_operand(),
19439                Into::<Imm>::into(rm).as_operand(),
19440            ],
19441        );
19442    }
19443}
19444
19445impl<U3: Into<Imm>> FdivHEmitter<Fp, Fp, Fp, U3> for Assembler<'_> {
19446    fn fdiv_h(&mut self, rd: Fp, rs1: Fp, rs2: Fp, rm: U3) {
19447        self.emit_n(
19448            Opcode::FDIVH as i64,
19449            &[
19450                rd.as_operand(),
19451                rs1.as_operand(),
19452                rs2.as_operand(),
19453                Into::<Imm>::into(rm).as_operand(),
19454            ],
19455        );
19456    }
19457}
19458
19459impl<U3: Into<Imm>> FdivQEmitter<Fp, Fp, Fp, U3> for Assembler<'_> {
19460    fn fdiv_q(&mut self, rd: Fp, rs1: Fp, rs2: Fp, rm: U3) {
19461        self.emit_n(
19462            Opcode::FDIVQ as i64,
19463            &[
19464                rd.as_operand(),
19465                rs1.as_operand(),
19466                rs2.as_operand(),
19467                Into::<Imm>::into(rm).as_operand(),
19468            ],
19469        );
19470    }
19471}
19472
19473impl<U3: Into<Imm>> FdivSEmitter<Fp, Fp, Fp, U3> for Assembler<'_> {
19474    fn fdiv_s(&mut self, rd: Fp, rs1: Fp, rs2: Fp, rm: U3) {
19475        self.emit_n(
19476            Opcode::FDIVS as i64,
19477            &[
19478                rd.as_operand(),
19479                rs1.as_operand(),
19480                rs2.as_operand(),
19481                Into::<Imm>::into(rm).as_operand(),
19482            ],
19483        );
19484    }
19485}
19486
19487impl<U0: Into<Imm>, U1: Into<Imm>, U2: Into<Imm>, U3: Into<Imm>, U4: Into<Imm>>
19488    FenceEmitter<U0, U1, U2, U3, U4> for Assembler<'_>
19489{
19490    fn fence(&mut self, fm: U0, pred: U1, succ: U2, rs1: U3, rd: U4) {
19491        self.emit_n(
19492            Opcode::FENCE as i64,
19493            &[
19494                Into::<Imm>::into(fm).as_operand(),
19495                Into::<Imm>::into(pred).as_operand(),
19496                Into::<Imm>::into(succ).as_operand(),
19497                Into::<Imm>::into(rs1).as_operand(),
19498                Into::<Imm>::into(rd).as_operand(),
19499            ],
19500        );
19501    }
19502}
19503
19504impl FenceIEmitter for Assembler<'_> {
19505    fn fence_i(&mut self) {
19506        self.emit_n(Opcode::FENCEI as i64, &[]);
19507    }
19508}
19509
19510impl FenceTsoEmitter for Assembler<'_> {
19511    fn fence_tso(&mut self) {
19512        self.emit_n(Opcode::FENCETSO as i64, &[]);
19513    }
19514}
19515
19516impl FeqDEmitter<Gp, Fp, Fp> for Assembler<'_> {
19517    fn feq_d(&mut self, rd: Gp, rs1: Fp, rs2: Fp) {
19518        self.emit_n(
19519            Opcode::FEQD as i64,
19520            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
19521        );
19522    }
19523}
19524
19525impl FeqHEmitter<Gp, Fp, Fp> for Assembler<'_> {
19526    fn feq_h(&mut self, rd: Gp, rs1: Fp, rs2: Fp) {
19527        self.emit_n(
19528            Opcode::FEQH as i64,
19529            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
19530        );
19531    }
19532}
19533
19534impl FeqQEmitter<Gp, Fp, Fp> for Assembler<'_> {
19535    fn feq_q(&mut self, rd: Gp, rs1: Fp, rs2: Fp) {
19536        self.emit_n(
19537            Opcode::FEQQ as i64,
19538            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
19539        );
19540    }
19541}
19542
19543impl FeqSEmitter<Gp, Fp, Fp> for Assembler<'_> {
19544    fn feq_s(&mut self, rd: Gp, rs1: Fp, rs2: Fp) {
19545        self.emit_n(
19546            Opcode::FEQS as i64,
19547            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
19548        );
19549    }
19550}
19551
19552impl<U2: Into<Imm>> FldEmitter<Fp, Gp, U2> for Assembler<'_> {
19553    fn fld(&mut self, rd: Fp, rs1: Gp, imm: U2) {
19554        self.emit_n(
19555            Opcode::FLD as i64,
19556            &[
19557                rd.as_operand(),
19558                rs1.as_operand(),
19559                Into::<Imm>::into(imm).as_operand(),
19560            ],
19561        );
19562    }
19563}
19564
19565impl FleDEmitter<Gp, Fp, Fp> for Assembler<'_> {
19566    fn fle_d(&mut self, rd: Gp, rs1: Fp, rs2: Fp) {
19567        self.emit_n(
19568            Opcode::FLED as i64,
19569            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
19570        );
19571    }
19572}
19573
19574impl FleHEmitter<Gp, Fp, Fp> for Assembler<'_> {
19575    fn fle_h(&mut self, rd: Gp, rs1: Fp, rs2: Fp) {
19576        self.emit_n(
19577            Opcode::FLEH as i64,
19578            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
19579        );
19580    }
19581}
19582
19583impl FleQEmitter<Gp, Fp, Fp> for Assembler<'_> {
19584    fn fle_q(&mut self, rd: Gp, rs1: Fp, rs2: Fp) {
19585        self.emit_n(
19586            Opcode::FLEQ as i64,
19587            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
19588        );
19589    }
19590}
19591
19592impl FleSEmitter<Gp, Fp, Fp> for Assembler<'_> {
19593    fn fle_s(&mut self, rd: Gp, rs1: Fp, rs2: Fp) {
19594        self.emit_n(
19595            Opcode::FLES as i64,
19596            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
19597        );
19598    }
19599}
19600
19601impl FleqDEmitter<Fp, Fp, Fp> for Assembler<'_> {
19602    fn fleq_d(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
19603        self.emit_n(
19604            Opcode::FLEQD as i64,
19605            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
19606        );
19607    }
19608}
19609
19610impl FleqHEmitter<Fp, Fp, Fp> for Assembler<'_> {
19611    fn fleq_h(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
19612        self.emit_n(
19613            Opcode::FLEQH as i64,
19614            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
19615        );
19616    }
19617}
19618
19619impl FleqQEmitter<Fp, Fp, Fp> for Assembler<'_> {
19620    fn fleq_q(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
19621        self.emit_n(
19622            Opcode::FLEQQ as i64,
19623            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
19624        );
19625    }
19626}
19627
19628impl FleqSEmitter<Fp, Fp, Fp> for Assembler<'_> {
19629    fn fleq_s(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
19630        self.emit_n(
19631            Opcode::FLEQS as i64,
19632            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
19633        );
19634    }
19635}
19636
19637impl<U2: Into<Imm>> FlhEmitter<Fp, Gp, U2> for Assembler<'_> {
19638    fn flh(&mut self, rd: Fp, rs1: Gp, imm: U2) {
19639        self.emit_n(
19640            Opcode::FLH as i64,
19641            &[
19642                rd.as_operand(),
19643                rs1.as_operand(),
19644                Into::<Imm>::into(imm).as_operand(),
19645            ],
19646        );
19647    }
19648}
19649
19650impl FliDEmitter<Fp, Fp> for Assembler<'_> {
19651    fn fli_d(&mut self, rd: Fp, rs1: Fp) {
19652        self.emit_n(Opcode::FLID as i64, &[rd.as_operand(), rs1.as_operand()]);
19653    }
19654}
19655
19656impl FliHEmitter<Fp, Fp> for Assembler<'_> {
19657    fn fli_h(&mut self, rd: Fp, rs1: Fp) {
19658        self.emit_n(Opcode::FLIH as i64, &[rd.as_operand(), rs1.as_operand()]);
19659    }
19660}
19661
19662impl FliQEmitter<Fp, Fp> for Assembler<'_> {
19663    fn fli_q(&mut self, rd: Fp, rs1: Fp) {
19664        self.emit_n(Opcode::FLIQ as i64, &[rd.as_operand(), rs1.as_operand()]);
19665    }
19666}
19667
19668impl FliSEmitter<Fp, Fp> for Assembler<'_> {
19669    fn fli_s(&mut self, rd: Fp, rs1: Fp) {
19670        self.emit_n(Opcode::FLIS as i64, &[rd.as_operand(), rs1.as_operand()]);
19671    }
19672}
19673
19674impl<U2: Into<Imm>> FlqEmitter<Fp, Gp, U2> for Assembler<'_> {
19675    fn flq(&mut self, rd: Fp, rs1: Gp, imm: U2) {
19676        self.emit_n(
19677            Opcode::FLQ as i64,
19678            &[
19679                rd.as_operand(),
19680                rs1.as_operand(),
19681                Into::<Imm>::into(imm).as_operand(),
19682            ],
19683        );
19684    }
19685}
19686
19687impl FltDEmitter<Gp, Fp, Fp> for Assembler<'_> {
19688    fn flt_d(&mut self, rd: Gp, rs1: Fp, rs2: Fp) {
19689        self.emit_n(
19690            Opcode::FLTD as i64,
19691            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
19692        );
19693    }
19694}
19695
19696impl FltHEmitter<Gp, Fp, Fp> for Assembler<'_> {
19697    fn flt_h(&mut self, rd: Gp, rs1: Fp, rs2: Fp) {
19698        self.emit_n(
19699            Opcode::FLTH as i64,
19700            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
19701        );
19702    }
19703}
19704
19705impl FltQEmitter<Gp, Fp, Fp> for Assembler<'_> {
19706    fn flt_q(&mut self, rd: Gp, rs1: Fp, rs2: Fp) {
19707        self.emit_n(
19708            Opcode::FLTQ as i64,
19709            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
19710        );
19711    }
19712}
19713
19714impl FltSEmitter<Gp, Fp, Fp> for Assembler<'_> {
19715    fn flt_s(&mut self, rd: Gp, rs1: Fp, rs2: Fp) {
19716        self.emit_n(
19717            Opcode::FLTS as i64,
19718            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
19719        );
19720    }
19721}
19722
19723impl FltqDEmitter<Fp, Fp, Fp> for Assembler<'_> {
19724    fn fltq_d(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
19725        self.emit_n(
19726            Opcode::FLTQD as i64,
19727            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
19728        );
19729    }
19730}
19731
19732impl FltqHEmitter<Fp, Fp, Fp> for Assembler<'_> {
19733    fn fltq_h(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
19734        self.emit_n(
19735            Opcode::FLTQH as i64,
19736            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
19737        );
19738    }
19739}
19740
19741impl FltqQEmitter<Fp, Fp, Fp> for Assembler<'_> {
19742    fn fltq_q(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
19743        self.emit_n(
19744            Opcode::FLTQQ as i64,
19745            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
19746        );
19747    }
19748}
19749
19750impl FltqSEmitter<Fp, Fp, Fp> for Assembler<'_> {
19751    fn fltq_s(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
19752        self.emit_n(
19753            Opcode::FLTQS as i64,
19754            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
19755        );
19756    }
19757}
19758
19759impl<U2: Into<Imm>> FlwEmitter<Fp, Gp, U2> for Assembler<'_> {
19760    fn flw(&mut self, rd: Fp, rs1: Gp, imm: U2) {
19761        self.emit_n(
19762            Opcode::FLW as i64,
19763            &[
19764                rd.as_operand(),
19765                rs1.as_operand(),
19766                Into::<Imm>::into(imm).as_operand(),
19767            ],
19768        );
19769    }
19770}
19771
19772impl<U4: Into<Imm>> FmaddDEmitter<Fp, Fp, Fp, Fp, U4> for Assembler<'_> {
19773    fn fmadd_d(&mut self, rd: Fp, rs1: Fp, rs2: Fp, rs3: Fp, rm: U4) {
19774        self.emit_n(
19775            Opcode::FMADDD as i64,
19776            &[
19777                rd.as_operand(),
19778                rs1.as_operand(),
19779                rs2.as_operand(),
19780                rs3.as_operand(),
19781                Into::<Imm>::into(rm).as_operand(),
19782            ],
19783        );
19784    }
19785}
19786
19787impl<U4: Into<Imm>> FmaddHEmitter<Fp, Fp, Fp, Fp, U4> for Assembler<'_> {
19788    fn fmadd_h(&mut self, rd: Fp, rs1: Fp, rs2: Fp, rs3: Fp, rm: U4) {
19789        self.emit_n(
19790            Opcode::FMADDH as i64,
19791            &[
19792                rd.as_operand(),
19793                rs1.as_operand(),
19794                rs2.as_operand(),
19795                rs3.as_operand(),
19796                Into::<Imm>::into(rm).as_operand(),
19797            ],
19798        );
19799    }
19800}
19801
19802impl<U4: Into<Imm>> FmaddQEmitter<Fp, Fp, Fp, Fp, U4> for Assembler<'_> {
19803    fn fmadd_q(&mut self, rd: Fp, rs1: Fp, rs2: Fp, rs3: Fp, rm: U4) {
19804        self.emit_n(
19805            Opcode::FMADDQ as i64,
19806            &[
19807                rd.as_operand(),
19808                rs1.as_operand(),
19809                rs2.as_operand(),
19810                rs3.as_operand(),
19811                Into::<Imm>::into(rm).as_operand(),
19812            ],
19813        );
19814    }
19815}
19816
19817impl<U4: Into<Imm>> FmaddSEmitter<Fp, Fp, Fp, Fp, U4> for Assembler<'_> {
19818    fn fmadd_s(&mut self, rd: Fp, rs1: Fp, rs2: Fp, rs3: Fp, rm: U4) {
19819        self.emit_n(
19820            Opcode::FMADDS as i64,
19821            &[
19822                rd.as_operand(),
19823                rs1.as_operand(),
19824                rs2.as_operand(),
19825                rs3.as_operand(),
19826                Into::<Imm>::into(rm).as_operand(),
19827            ],
19828        );
19829    }
19830}
19831
19832impl FmaxDEmitter<Fp, Fp, Fp> for Assembler<'_> {
19833    fn fmax_d(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
19834        self.emit_n(
19835            Opcode::FMAXD as i64,
19836            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
19837        );
19838    }
19839}
19840
19841impl FmaxHEmitter<Fp, Fp, Fp> for Assembler<'_> {
19842    fn fmax_h(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
19843        self.emit_n(
19844            Opcode::FMAXH as i64,
19845            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
19846        );
19847    }
19848}
19849
19850impl FmaxQEmitter<Fp, Fp, Fp> for Assembler<'_> {
19851    fn fmax_q(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
19852        self.emit_n(
19853            Opcode::FMAXQ as i64,
19854            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
19855        );
19856    }
19857}
19858
19859impl FmaxSEmitter<Fp, Fp, Fp> for Assembler<'_> {
19860    fn fmax_s(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
19861        self.emit_n(
19862            Opcode::FMAXS as i64,
19863            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
19864        );
19865    }
19866}
19867
19868impl FmaxmDEmitter<Fp, Fp, Fp> for Assembler<'_> {
19869    fn fmaxm_d(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
19870        self.emit_n(
19871            Opcode::FMAXMD as i64,
19872            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
19873        );
19874    }
19875}
19876
19877impl FmaxmHEmitter<Fp, Fp, Fp> for Assembler<'_> {
19878    fn fmaxm_h(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
19879        self.emit_n(
19880            Opcode::FMAXMH as i64,
19881            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
19882        );
19883    }
19884}
19885
19886impl FmaxmQEmitter<Fp, Fp, Fp> for Assembler<'_> {
19887    fn fmaxm_q(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
19888        self.emit_n(
19889            Opcode::FMAXMQ as i64,
19890            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
19891        );
19892    }
19893}
19894
19895impl FmaxmSEmitter<Fp, Fp, Fp> for Assembler<'_> {
19896    fn fmaxm_s(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
19897        self.emit_n(
19898            Opcode::FMAXMS as i64,
19899            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
19900        );
19901    }
19902}
19903
19904impl FminDEmitter<Fp, Fp, Fp> for Assembler<'_> {
19905    fn fmin_d(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
19906        self.emit_n(
19907            Opcode::FMIND as i64,
19908            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
19909        );
19910    }
19911}
19912
19913impl FminHEmitter<Fp, Fp, Fp> for Assembler<'_> {
19914    fn fmin_h(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
19915        self.emit_n(
19916            Opcode::FMINH as i64,
19917            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
19918        );
19919    }
19920}
19921
19922impl FminQEmitter<Fp, Fp, Fp> for Assembler<'_> {
19923    fn fmin_q(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
19924        self.emit_n(
19925            Opcode::FMINQ as i64,
19926            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
19927        );
19928    }
19929}
19930
19931impl FminSEmitter<Fp, Fp, Fp> for Assembler<'_> {
19932    fn fmin_s(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
19933        self.emit_n(
19934            Opcode::FMINS as i64,
19935            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
19936        );
19937    }
19938}
19939
19940impl FminmDEmitter<Fp, Fp, Fp> for Assembler<'_> {
19941    fn fminm_d(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
19942        self.emit_n(
19943            Opcode::FMINMD as i64,
19944            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
19945        );
19946    }
19947}
19948
19949impl FminmHEmitter<Fp, Fp, Fp> for Assembler<'_> {
19950    fn fminm_h(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
19951        self.emit_n(
19952            Opcode::FMINMH as i64,
19953            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
19954        );
19955    }
19956}
19957
19958impl FminmQEmitter<Fp, Fp, Fp> for Assembler<'_> {
19959    fn fminm_q(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
19960        self.emit_n(
19961            Opcode::FMINMQ as i64,
19962            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
19963        );
19964    }
19965}
19966
19967impl FminmSEmitter<Fp, Fp, Fp> for Assembler<'_> {
19968    fn fminm_s(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
19969        self.emit_n(
19970            Opcode::FMINMS as i64,
19971            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
19972        );
19973    }
19974}
19975
19976impl<U4: Into<Imm>> FmsubDEmitter<Fp, Fp, Fp, Fp, U4> for Assembler<'_> {
19977    fn fmsub_d(&mut self, rd: Fp, rs1: Fp, rs2: Fp, rs3: Fp, rm: U4) {
19978        self.emit_n(
19979            Opcode::FMSUBD as i64,
19980            &[
19981                rd.as_operand(),
19982                rs1.as_operand(),
19983                rs2.as_operand(),
19984                rs3.as_operand(),
19985                Into::<Imm>::into(rm).as_operand(),
19986            ],
19987        );
19988    }
19989}
19990
19991impl<U4: Into<Imm>> FmsubHEmitter<Fp, Fp, Fp, Fp, U4> for Assembler<'_> {
19992    fn fmsub_h(&mut self, rd: Fp, rs1: Fp, rs2: Fp, rs3: Fp, rm: U4) {
19993        self.emit_n(
19994            Opcode::FMSUBH as i64,
19995            &[
19996                rd.as_operand(),
19997                rs1.as_operand(),
19998                rs2.as_operand(),
19999                rs3.as_operand(),
20000                Into::<Imm>::into(rm).as_operand(),
20001            ],
20002        );
20003    }
20004}
20005
20006impl<U4: Into<Imm>> FmsubQEmitter<Fp, Fp, Fp, Fp, U4> for Assembler<'_> {
20007    fn fmsub_q(&mut self, rd: Fp, rs1: Fp, rs2: Fp, rs3: Fp, rm: U4) {
20008        self.emit_n(
20009            Opcode::FMSUBQ as i64,
20010            &[
20011                rd.as_operand(),
20012                rs1.as_operand(),
20013                rs2.as_operand(),
20014                rs3.as_operand(),
20015                Into::<Imm>::into(rm).as_operand(),
20016            ],
20017        );
20018    }
20019}
20020
20021impl<U4: Into<Imm>> FmsubSEmitter<Fp, Fp, Fp, Fp, U4> for Assembler<'_> {
20022    fn fmsub_s(&mut self, rd: Fp, rs1: Fp, rs2: Fp, rs3: Fp, rm: U4) {
20023        self.emit_n(
20024            Opcode::FMSUBS as i64,
20025            &[
20026                rd.as_operand(),
20027                rs1.as_operand(),
20028                rs2.as_operand(),
20029                rs3.as_operand(),
20030                Into::<Imm>::into(rm).as_operand(),
20031            ],
20032        );
20033    }
20034}
20035
20036impl<U3: Into<Imm>> FmulDEmitter<Fp, Fp, Fp, U3> for Assembler<'_> {
20037    fn fmul_d(&mut self, rd: Fp, rs1: Fp, rs2: Fp, rm: U3) {
20038        self.emit_n(
20039            Opcode::FMULD as i64,
20040            &[
20041                rd.as_operand(),
20042                rs1.as_operand(),
20043                rs2.as_operand(),
20044                Into::<Imm>::into(rm).as_operand(),
20045            ],
20046        );
20047    }
20048}
20049
20050impl<U3: Into<Imm>> FmulHEmitter<Fp, Fp, Fp, U3> for Assembler<'_> {
20051    fn fmul_h(&mut self, rd: Fp, rs1: Fp, rs2: Fp, rm: U3) {
20052        self.emit_n(
20053            Opcode::FMULH as i64,
20054            &[
20055                rd.as_operand(),
20056                rs1.as_operand(),
20057                rs2.as_operand(),
20058                Into::<Imm>::into(rm).as_operand(),
20059            ],
20060        );
20061    }
20062}
20063
20064impl<U3: Into<Imm>> FmulQEmitter<Fp, Fp, Fp, U3> for Assembler<'_> {
20065    fn fmul_q(&mut self, rd: Fp, rs1: Fp, rs2: Fp, rm: U3) {
20066        self.emit_n(
20067            Opcode::FMULQ as i64,
20068            &[
20069                rd.as_operand(),
20070                rs1.as_operand(),
20071                rs2.as_operand(),
20072                Into::<Imm>::into(rm).as_operand(),
20073            ],
20074        );
20075    }
20076}
20077
20078impl<U3: Into<Imm>> FmulSEmitter<Fp, Fp, Fp, U3> for Assembler<'_> {
20079    fn fmul_s(&mut self, rd: Fp, rs1: Fp, rs2: Fp, rm: U3) {
20080        self.emit_n(
20081            Opcode::FMULS as i64,
20082            &[
20083                rd.as_operand(),
20084                rs1.as_operand(),
20085                rs2.as_operand(),
20086                Into::<Imm>::into(rm).as_operand(),
20087            ],
20088        );
20089    }
20090}
20091
20092impl FmvDEmitter<Fp, Fp, Fp> for Assembler<'_> {
20093    fn fmv_d(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
20094        self.emit_n(
20095            Opcode::FMVD as i64,
20096            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
20097        );
20098    }
20099}
20100
20101impl FmvDXEmitter<Fp, Gp> for Assembler<'_> {
20102    fn fmv_d_x(&mut self, rd: Fp, rs1: Gp) {
20103        self.emit_n(Opcode::FMVDX as i64, &[rd.as_operand(), rs1.as_operand()]);
20104    }
20105}
20106
20107impl FmvHEmitter<Fp, Fp, Fp> for Assembler<'_> {
20108    fn fmv_h(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
20109        self.emit_n(
20110            Opcode::FMVH as i64,
20111            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
20112        );
20113    }
20114}
20115
20116impl FmvHXEmitter<Fp, Gp> for Assembler<'_> {
20117    fn fmv_h_x(&mut self, rd: Fp, rs1: Gp) {
20118        self.emit_n(Opcode::FMVHX as i64, &[rd.as_operand(), rs1.as_operand()]);
20119    }
20120}
20121
20122impl FmvQEmitter<Fp, Fp, Fp> for Assembler<'_> {
20123    fn fmv_q(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
20124        self.emit_n(
20125            Opcode::FMVQ as i64,
20126            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
20127        );
20128    }
20129}
20130
20131impl FmvSEmitter<Fp, Fp, Fp> for Assembler<'_> {
20132    fn fmv_s(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
20133        self.emit_n(
20134            Opcode::FMVS as i64,
20135            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
20136        );
20137    }
20138}
20139
20140impl FmvSXEmitter<Fp, Gp> for Assembler<'_> {
20141    fn fmv_s_x(&mut self, rd: Fp, rs1: Gp) {
20142        self.emit_n(Opcode::FMVSX as i64, &[rd.as_operand(), rs1.as_operand()]);
20143    }
20144}
20145
20146impl FmvWXEmitter<Fp, Gp> for Assembler<'_> {
20147    fn fmv_w_x(&mut self, rd: Fp, rs1: Gp) {
20148        self.emit_n(Opcode::FMVWX as i64, &[rd.as_operand(), rs1.as_operand()]);
20149    }
20150}
20151
20152impl FmvXDEmitter<Gp, Fp> for Assembler<'_> {
20153    fn fmv_x_d(&mut self, rd: Gp, rs1: Fp) {
20154        self.emit_n(Opcode::FMVXD as i64, &[rd.as_operand(), rs1.as_operand()]);
20155    }
20156}
20157
20158impl FmvXHEmitter<Gp, Fp> for Assembler<'_> {
20159    fn fmv_x_h(&mut self, rd: Gp, rs1: Fp) {
20160        self.emit_n(Opcode::FMVXH as i64, &[rd.as_operand(), rs1.as_operand()]);
20161    }
20162}
20163
20164impl FmvXSEmitter<Gp, Fp> for Assembler<'_> {
20165    fn fmv_x_s(&mut self, rd: Gp, rs1: Fp) {
20166        self.emit_n(Opcode::FMVXS as i64, &[rd.as_operand(), rs1.as_operand()]);
20167    }
20168}
20169
20170impl FmvXWEmitter<Gp, Fp> for Assembler<'_> {
20171    fn fmv_x_w(&mut self, rd: Gp, rs1: Fp) {
20172        self.emit_n(Opcode::FMVXW as i64, &[rd.as_operand(), rs1.as_operand()]);
20173    }
20174}
20175
20176impl FmvhXDEmitter<Gp, Fp> for Assembler<'_> {
20177    fn fmvh_x_d(&mut self, rd: Gp, rs1: Fp) {
20178        self.emit_n(Opcode::FMVHXD as i64, &[rd.as_operand(), rs1.as_operand()]);
20179    }
20180}
20181
20182impl FmvhXQEmitter<Gp, Fp> for Assembler<'_> {
20183    fn fmvh_x_q(&mut self, rd: Gp, rs1: Fp) {
20184        self.emit_n(Opcode::FMVHXQ as i64, &[rd.as_operand(), rs1.as_operand()]);
20185    }
20186}
20187
20188impl FmvpDXEmitter<Fp, Gp, Gp> for Assembler<'_> {
20189    fn fmvp_d_x(&mut self, rd: Fp, rs1: Gp, rs2: Gp) {
20190        self.emit_n(
20191            Opcode::FMVPDX as i64,
20192            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
20193        );
20194    }
20195}
20196
20197impl FmvpQXEmitter<Fp, Gp, Gp> for Assembler<'_> {
20198    fn fmvp_q_x(&mut self, rd: Fp, rs1: Gp, rs2: Gp) {
20199        self.emit_n(
20200            Opcode::FMVPQX as i64,
20201            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
20202        );
20203    }
20204}
20205
20206impl FnegDEmitter<Fp, Fp, Fp> for Assembler<'_> {
20207    fn fneg_d(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
20208        self.emit_n(
20209            Opcode::FNEGD as i64,
20210            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
20211        );
20212    }
20213}
20214
20215impl FnegHEmitter<Fp, Fp, Fp> for Assembler<'_> {
20216    fn fneg_h(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
20217        self.emit_n(
20218            Opcode::FNEGH as i64,
20219            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
20220        );
20221    }
20222}
20223
20224impl FnegQEmitter<Fp, Fp, Fp> for Assembler<'_> {
20225    fn fneg_q(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
20226        self.emit_n(
20227            Opcode::FNEGQ as i64,
20228            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
20229        );
20230    }
20231}
20232
20233impl FnegSEmitter<Fp, Fp, Fp> for Assembler<'_> {
20234    fn fneg_s(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
20235        self.emit_n(
20236            Opcode::FNEGS as i64,
20237            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
20238        );
20239    }
20240}
20241
20242impl<U4: Into<Imm>> FnmaddDEmitter<Fp, Fp, Fp, Fp, U4> for Assembler<'_> {
20243    fn fnmadd_d(&mut self, rd: Fp, rs1: Fp, rs2: Fp, rs3: Fp, rm: U4) {
20244        self.emit_n(
20245            Opcode::FNMADDD as i64,
20246            &[
20247                rd.as_operand(),
20248                rs1.as_operand(),
20249                rs2.as_operand(),
20250                rs3.as_operand(),
20251                Into::<Imm>::into(rm).as_operand(),
20252            ],
20253        );
20254    }
20255}
20256
20257impl<U4: Into<Imm>> FnmaddHEmitter<Fp, Fp, Fp, Fp, U4> for Assembler<'_> {
20258    fn fnmadd_h(&mut self, rd: Fp, rs1: Fp, rs2: Fp, rs3: Fp, rm: U4) {
20259        self.emit_n(
20260            Opcode::FNMADDH as i64,
20261            &[
20262                rd.as_operand(),
20263                rs1.as_operand(),
20264                rs2.as_operand(),
20265                rs3.as_operand(),
20266                Into::<Imm>::into(rm).as_operand(),
20267            ],
20268        );
20269    }
20270}
20271
20272impl<U4: Into<Imm>> FnmaddQEmitter<Fp, Fp, Fp, Fp, U4> for Assembler<'_> {
20273    fn fnmadd_q(&mut self, rd: Fp, rs1: Fp, rs2: Fp, rs3: Fp, rm: U4) {
20274        self.emit_n(
20275            Opcode::FNMADDQ as i64,
20276            &[
20277                rd.as_operand(),
20278                rs1.as_operand(),
20279                rs2.as_operand(),
20280                rs3.as_operand(),
20281                Into::<Imm>::into(rm).as_operand(),
20282            ],
20283        );
20284    }
20285}
20286
20287impl<U4: Into<Imm>> FnmaddSEmitter<Fp, Fp, Fp, Fp, U4> for Assembler<'_> {
20288    fn fnmadd_s(&mut self, rd: Fp, rs1: Fp, rs2: Fp, rs3: Fp, rm: U4) {
20289        self.emit_n(
20290            Opcode::FNMADDS as i64,
20291            &[
20292                rd.as_operand(),
20293                rs1.as_operand(),
20294                rs2.as_operand(),
20295                rs3.as_operand(),
20296                Into::<Imm>::into(rm).as_operand(),
20297            ],
20298        );
20299    }
20300}
20301
20302impl<U4: Into<Imm>> FnmsubDEmitter<Fp, Fp, Fp, Fp, U4> for Assembler<'_> {
20303    fn fnmsub_d(&mut self, rd: Fp, rs1: Fp, rs2: Fp, rs3: Fp, rm: U4) {
20304        self.emit_n(
20305            Opcode::FNMSUBD as i64,
20306            &[
20307                rd.as_operand(),
20308                rs1.as_operand(),
20309                rs2.as_operand(),
20310                rs3.as_operand(),
20311                Into::<Imm>::into(rm).as_operand(),
20312            ],
20313        );
20314    }
20315}
20316
20317impl<U4: Into<Imm>> FnmsubHEmitter<Fp, Fp, Fp, Fp, U4> for Assembler<'_> {
20318    fn fnmsub_h(&mut self, rd: Fp, rs1: Fp, rs2: Fp, rs3: Fp, rm: U4) {
20319        self.emit_n(
20320            Opcode::FNMSUBH as i64,
20321            &[
20322                rd.as_operand(),
20323                rs1.as_operand(),
20324                rs2.as_operand(),
20325                rs3.as_operand(),
20326                Into::<Imm>::into(rm).as_operand(),
20327            ],
20328        );
20329    }
20330}
20331
20332impl<U4: Into<Imm>> FnmsubQEmitter<Fp, Fp, Fp, Fp, U4> for Assembler<'_> {
20333    fn fnmsub_q(&mut self, rd: Fp, rs1: Fp, rs2: Fp, rs3: Fp, rm: U4) {
20334        self.emit_n(
20335            Opcode::FNMSUBQ as i64,
20336            &[
20337                rd.as_operand(),
20338                rs1.as_operand(),
20339                rs2.as_operand(),
20340                rs3.as_operand(),
20341                Into::<Imm>::into(rm).as_operand(),
20342            ],
20343        );
20344    }
20345}
20346
20347impl<U4: Into<Imm>> FnmsubSEmitter<Fp, Fp, Fp, Fp, U4> for Assembler<'_> {
20348    fn fnmsub_s(&mut self, rd: Fp, rs1: Fp, rs2: Fp, rs3: Fp, rm: U4) {
20349        self.emit_n(
20350            Opcode::FNMSUBS as i64,
20351            &[
20352                rd.as_operand(),
20353                rs1.as_operand(),
20354                rs2.as_operand(),
20355                rs3.as_operand(),
20356                Into::<Imm>::into(rm).as_operand(),
20357            ],
20358        );
20359    }
20360}
20361
20362impl FrcsrEmitter<Gp> for Assembler<'_> {
20363    fn frcsr(&mut self, rd: Gp) {
20364        self.emit_n(Opcode::FRCSR as i64, &[rd.as_operand()]);
20365    }
20366}
20367
20368impl FrflagsEmitter<Gp> for Assembler<'_> {
20369    fn frflags(&mut self, rd: Gp) {
20370        self.emit_n(Opcode::FRFLAGS as i64, &[rd.as_operand()]);
20371    }
20372}
20373
20374impl<U2: Into<Imm>> FroundDEmitter<Fp, Fp, U2> for Assembler<'_> {
20375    fn fround_d(&mut self, rd: Fp, rs1: Fp, rm: U2) {
20376        self.emit_n(
20377            Opcode::FROUNDD as i64,
20378            &[
20379                rd.as_operand(),
20380                rs1.as_operand(),
20381                Into::<Imm>::into(rm).as_operand(),
20382            ],
20383        );
20384    }
20385}
20386
20387impl<U2: Into<Imm>> FroundHEmitter<Fp, Fp, U2> for Assembler<'_> {
20388    fn fround_h(&mut self, rd: Fp, rs1: Fp, rm: U2) {
20389        self.emit_n(
20390            Opcode::FROUNDH as i64,
20391            &[
20392                rd.as_operand(),
20393                rs1.as_operand(),
20394                Into::<Imm>::into(rm).as_operand(),
20395            ],
20396        );
20397    }
20398}
20399
20400impl<U2: Into<Imm>> FroundQEmitter<Fp, Fp, U2> for Assembler<'_> {
20401    fn fround_q(&mut self, rd: Fp, rs1: Fp, rm: U2) {
20402        self.emit_n(
20403            Opcode::FROUNDQ as i64,
20404            &[
20405                rd.as_operand(),
20406                rs1.as_operand(),
20407                Into::<Imm>::into(rm).as_operand(),
20408            ],
20409        );
20410    }
20411}
20412
20413impl<U2: Into<Imm>> FroundSEmitter<Fp, Fp, U2> for Assembler<'_> {
20414    fn fround_s(&mut self, rd: Fp, rs1: Fp, rm: U2) {
20415        self.emit_n(
20416            Opcode::FROUNDS as i64,
20417            &[
20418                rd.as_operand(),
20419                rs1.as_operand(),
20420                Into::<Imm>::into(rm).as_operand(),
20421            ],
20422        );
20423    }
20424}
20425
20426impl<U2: Into<Imm>> FroundnxDEmitter<Fp, Fp, U2> for Assembler<'_> {
20427    fn froundnx_d(&mut self, rd: Fp, rs1: Fp, rm: U2) {
20428        self.emit_n(
20429            Opcode::FROUNDNXD as i64,
20430            &[
20431                rd.as_operand(),
20432                rs1.as_operand(),
20433                Into::<Imm>::into(rm).as_operand(),
20434            ],
20435        );
20436    }
20437}
20438
20439impl<U2: Into<Imm>> FroundnxHEmitter<Fp, Fp, U2> for Assembler<'_> {
20440    fn froundnx_h(&mut self, rd: Fp, rs1: Fp, rm: U2) {
20441        self.emit_n(
20442            Opcode::FROUNDNXH as i64,
20443            &[
20444                rd.as_operand(),
20445                rs1.as_operand(),
20446                Into::<Imm>::into(rm).as_operand(),
20447            ],
20448        );
20449    }
20450}
20451
20452impl<U2: Into<Imm>> FroundnxQEmitter<Fp, Fp, U2> for Assembler<'_> {
20453    fn froundnx_q(&mut self, rd: Fp, rs1: Fp, rm: U2) {
20454        self.emit_n(
20455            Opcode::FROUNDNXQ as i64,
20456            &[
20457                rd.as_operand(),
20458                rs1.as_operand(),
20459                Into::<Imm>::into(rm).as_operand(),
20460            ],
20461        );
20462    }
20463}
20464
20465impl<U2: Into<Imm>> FroundnxSEmitter<Fp, Fp, U2> for Assembler<'_> {
20466    fn froundnx_s(&mut self, rd: Fp, rs1: Fp, rm: U2) {
20467        self.emit_n(
20468            Opcode::FROUNDNXS as i64,
20469            &[
20470                rd.as_operand(),
20471                rs1.as_operand(),
20472                Into::<Imm>::into(rm).as_operand(),
20473            ],
20474        );
20475    }
20476}
20477
20478impl FrrmEmitter<Gp> for Assembler<'_> {
20479    fn frrm(&mut self, rd: Gp) {
20480        self.emit_n(Opcode::FRRM as i64, &[rd.as_operand()]);
20481    }
20482}
20483
20484impl FscsrEmitter<Gp, Gp> for Assembler<'_> {
20485    fn fscsr(&mut self, rd: Gp, rs1: Gp) {
20486        self.emit_n(Opcode::FSCSR as i64, &[rd.as_operand(), rs1.as_operand()]);
20487    }
20488}
20489
20490impl<U2: Into<Imm>> FsdEmitter<Gp, Fp, U2> for Assembler<'_> {
20491    fn fsd(&mut self, rs1: Gp, rs2: Fp, imm: U2) {
20492        self.emit_n(
20493            Opcode::FSD as i64,
20494            &[
20495                rs1.as_operand(),
20496                rs2.as_operand(),
20497                Into::<Imm>::into(imm).as_operand(),
20498            ],
20499        );
20500    }
20501}
20502
20503impl FsflagsEmitter<Gp, Gp> for Assembler<'_> {
20504    fn fsflags(&mut self, rd: Gp, rs1: Gp) {
20505        self.emit_n(Opcode::FSFLAGS as i64, &[rd.as_operand(), rs1.as_operand()]);
20506    }
20507}
20508
20509impl<U1: Into<Imm>> FsflagsiEmitter<Gp, U1> for Assembler<'_> {
20510    fn fsflagsi(&mut self, rd: Gp, zimm5: U1) {
20511        self.emit_n(
20512            Opcode::FSFLAGSI as i64,
20513            &[rd.as_operand(), Into::<Imm>::into(zimm5).as_operand()],
20514        );
20515    }
20516}
20517
20518impl FsgnjDEmitter<Fp, Fp, Fp> for Assembler<'_> {
20519    fn fsgnj_d(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
20520        self.emit_n(
20521            Opcode::FSGNJD as i64,
20522            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
20523        );
20524    }
20525}
20526
20527impl FsgnjHEmitter<Fp, Fp, Fp> for Assembler<'_> {
20528    fn fsgnj_h(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
20529        self.emit_n(
20530            Opcode::FSGNJH as i64,
20531            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
20532        );
20533    }
20534}
20535
20536impl FsgnjQEmitter<Fp, Fp, Fp> for Assembler<'_> {
20537    fn fsgnj_q(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
20538        self.emit_n(
20539            Opcode::FSGNJQ as i64,
20540            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
20541        );
20542    }
20543}
20544
20545impl FsgnjSEmitter<Fp, Fp, Fp> for Assembler<'_> {
20546    fn fsgnj_s(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
20547        self.emit_n(
20548            Opcode::FSGNJS as i64,
20549            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
20550        );
20551    }
20552}
20553
20554impl FsgnjnDEmitter<Fp, Fp, Fp> for Assembler<'_> {
20555    fn fsgnjn_d(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
20556        self.emit_n(
20557            Opcode::FSGNJND as i64,
20558            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
20559        );
20560    }
20561}
20562
20563impl FsgnjnHEmitter<Fp, Fp, Fp> for Assembler<'_> {
20564    fn fsgnjn_h(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
20565        self.emit_n(
20566            Opcode::FSGNJNH as i64,
20567            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
20568        );
20569    }
20570}
20571
20572impl FsgnjnQEmitter<Fp, Fp, Fp> for Assembler<'_> {
20573    fn fsgnjn_q(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
20574        self.emit_n(
20575            Opcode::FSGNJNQ as i64,
20576            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
20577        );
20578    }
20579}
20580
20581impl FsgnjnSEmitter<Fp, Fp, Fp> for Assembler<'_> {
20582    fn fsgnjn_s(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
20583        self.emit_n(
20584            Opcode::FSGNJNS as i64,
20585            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
20586        );
20587    }
20588}
20589
20590impl FsgnjxDEmitter<Fp, Fp, Fp> for Assembler<'_> {
20591    fn fsgnjx_d(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
20592        self.emit_n(
20593            Opcode::FSGNJXD as i64,
20594            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
20595        );
20596    }
20597}
20598
20599impl FsgnjxHEmitter<Fp, Fp, Fp> for Assembler<'_> {
20600    fn fsgnjx_h(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
20601        self.emit_n(
20602            Opcode::FSGNJXH as i64,
20603            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
20604        );
20605    }
20606}
20607
20608impl FsgnjxQEmitter<Fp, Fp, Fp> for Assembler<'_> {
20609    fn fsgnjx_q(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
20610        self.emit_n(
20611            Opcode::FSGNJXQ as i64,
20612            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
20613        );
20614    }
20615}
20616
20617impl FsgnjxSEmitter<Fp, Fp, Fp> for Assembler<'_> {
20618    fn fsgnjx_s(&mut self, rd: Fp, rs1: Fp, rs2: Fp) {
20619        self.emit_n(
20620            Opcode::FSGNJXS as i64,
20621            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
20622        );
20623    }
20624}
20625
20626impl<U2: Into<Imm>> FshEmitter<Gp, Fp, U2> for Assembler<'_> {
20627    fn fsh(&mut self, rs1: Gp, rs2: Fp, imm: U2) {
20628        self.emit_n(
20629            Opcode::FSH as i64,
20630            &[
20631                rs1.as_operand(),
20632                rs2.as_operand(),
20633                Into::<Imm>::into(imm).as_operand(),
20634            ],
20635        );
20636    }
20637}
20638
20639impl<U2: Into<Imm>> FsqEmitter<Gp, Fp, U2> for Assembler<'_> {
20640    fn fsq(&mut self, rs1: Gp, rs2: Fp, imm: U2) {
20641        self.emit_n(
20642            Opcode::FSQ as i64,
20643            &[
20644                rs1.as_operand(),
20645                rs2.as_operand(),
20646                Into::<Imm>::into(imm).as_operand(),
20647            ],
20648        );
20649    }
20650}
20651
20652impl<U2: Into<Imm>> FsqrtDEmitter<Fp, Fp, U2> for Assembler<'_> {
20653    fn fsqrt_d(&mut self, rd: Fp, rs1: Fp, rm: U2) {
20654        self.emit_n(
20655            Opcode::FSQRTD as i64,
20656            &[
20657                rd.as_operand(),
20658                rs1.as_operand(),
20659                Into::<Imm>::into(rm).as_operand(),
20660            ],
20661        );
20662    }
20663}
20664
20665impl<U2: Into<Imm>> FsqrtHEmitter<Fp, Fp, U2> for Assembler<'_> {
20666    fn fsqrt_h(&mut self, rd: Fp, rs1: Fp, rm: U2) {
20667        self.emit_n(
20668            Opcode::FSQRTH as i64,
20669            &[
20670                rd.as_operand(),
20671                rs1.as_operand(),
20672                Into::<Imm>::into(rm).as_operand(),
20673            ],
20674        );
20675    }
20676}
20677
20678impl<U2: Into<Imm>> FsqrtQEmitter<Fp, Fp, U2> for Assembler<'_> {
20679    fn fsqrt_q(&mut self, rd: Fp, rs1: Fp, rm: U2) {
20680        self.emit_n(
20681            Opcode::FSQRTQ as i64,
20682            &[
20683                rd.as_operand(),
20684                rs1.as_operand(),
20685                Into::<Imm>::into(rm).as_operand(),
20686            ],
20687        );
20688    }
20689}
20690
20691impl<U2: Into<Imm>> FsqrtSEmitter<Fp, Fp, U2> for Assembler<'_> {
20692    fn fsqrt_s(&mut self, rd: Fp, rs1: Fp, rm: U2) {
20693        self.emit_n(
20694            Opcode::FSQRTS as i64,
20695            &[
20696                rd.as_operand(),
20697                rs1.as_operand(),
20698                Into::<Imm>::into(rm).as_operand(),
20699            ],
20700        );
20701    }
20702}
20703
20704impl FsrmEmitter<Gp, Gp> for Assembler<'_> {
20705    fn fsrm(&mut self, rd: Gp, rs1: Gp) {
20706        self.emit_n(Opcode::FSRM as i64, &[rd.as_operand(), rs1.as_operand()]);
20707    }
20708}
20709
20710impl<U1: Into<Imm>> FsrmiEmitter<Gp, U1> for Assembler<'_> {
20711    fn fsrmi(&mut self, rd: Gp, zimm5: U1) {
20712        self.emit_n(
20713            Opcode::FSRMI as i64,
20714            &[rd.as_operand(), Into::<Imm>::into(zimm5).as_operand()],
20715        );
20716    }
20717}
20718
20719impl<U3: Into<Imm>> FsubDEmitter<Fp, Fp, Fp, U3> for Assembler<'_> {
20720    fn fsub_d(&mut self, rd: Fp, rs1: Fp, rs2: Fp, rm: U3) {
20721        self.emit_n(
20722            Opcode::FSUBD as i64,
20723            &[
20724                rd.as_operand(),
20725                rs1.as_operand(),
20726                rs2.as_operand(),
20727                Into::<Imm>::into(rm).as_operand(),
20728            ],
20729        );
20730    }
20731}
20732
20733impl<U3: Into<Imm>> FsubHEmitter<Fp, Fp, Fp, U3> for Assembler<'_> {
20734    fn fsub_h(&mut self, rd: Fp, rs1: Fp, rs2: Fp, rm: U3) {
20735        self.emit_n(
20736            Opcode::FSUBH as i64,
20737            &[
20738                rd.as_operand(),
20739                rs1.as_operand(),
20740                rs2.as_operand(),
20741                Into::<Imm>::into(rm).as_operand(),
20742            ],
20743        );
20744    }
20745}
20746
20747impl<U3: Into<Imm>> FsubQEmitter<Fp, Fp, Fp, U3> for Assembler<'_> {
20748    fn fsub_q(&mut self, rd: Fp, rs1: Fp, rs2: Fp, rm: U3) {
20749        self.emit_n(
20750            Opcode::FSUBQ as i64,
20751            &[
20752                rd.as_operand(),
20753                rs1.as_operand(),
20754                rs2.as_operand(),
20755                Into::<Imm>::into(rm).as_operand(),
20756            ],
20757        );
20758    }
20759}
20760
20761impl<U3: Into<Imm>> FsubSEmitter<Fp, Fp, Fp, U3> for Assembler<'_> {
20762    fn fsub_s(&mut self, rd: Fp, rs1: Fp, rs2: Fp, rm: U3) {
20763        self.emit_n(
20764            Opcode::FSUBS as i64,
20765            &[
20766                rd.as_operand(),
20767                rs1.as_operand(),
20768                rs2.as_operand(),
20769                Into::<Imm>::into(rm).as_operand(),
20770            ],
20771        );
20772    }
20773}
20774
20775impl<U2: Into<Imm>> FswEmitter<Gp, Fp, U2> for Assembler<'_> {
20776    fn fsw(&mut self, rs1: Gp, rs2: Fp, imm: U2) {
20777        self.emit_n(
20778            Opcode::FSW as i64,
20779            &[
20780                rs1.as_operand(),
20781                rs2.as_operand(),
20782                Into::<Imm>::into(imm).as_operand(),
20783            ],
20784        );
20785    }
20786}
20787
20788impl HfenceGvmaEmitter<Gp, Gp> for Assembler<'_> {
20789    fn hfence_gvma(&mut self, rs1: Gp, rs2: Gp) {
20790        self.emit_n(
20791            Opcode::HFENCEGVMA as i64,
20792            &[rs1.as_operand(), rs2.as_operand()],
20793        );
20794    }
20795}
20796
20797impl HfenceVvmaEmitter<Gp, Gp> for Assembler<'_> {
20798    fn hfence_vvma(&mut self, rs1: Gp, rs2: Gp) {
20799        self.emit_n(
20800            Opcode::HFENCEVVMA as i64,
20801            &[rs1.as_operand(), rs2.as_operand()],
20802        );
20803    }
20804}
20805
20806impl HinvalGvmaEmitter<Gp, Gp> for Assembler<'_> {
20807    fn hinval_gvma(&mut self, rs1: Gp, rs2: Gp) {
20808        self.emit_n(
20809            Opcode::HINVALGVMA as i64,
20810            &[rs1.as_operand(), rs2.as_operand()],
20811        );
20812    }
20813}
20814
20815impl HinvalVvmaEmitter<Gp, Gp> for Assembler<'_> {
20816    fn hinval_vvma(&mut self, rs1: Gp, rs2: Gp) {
20817        self.emit_n(
20818            Opcode::HINVALVVMA as i64,
20819            &[rs1.as_operand(), rs2.as_operand()],
20820        );
20821    }
20822}
20823
20824impl HlvBEmitter<Gp, Gp> for Assembler<'_> {
20825    fn hlv_b(&mut self, rd: Gp, rs1: Gp) {
20826        self.emit_n(Opcode::HLVB as i64, &[rd.as_operand(), rs1.as_operand()]);
20827    }
20828}
20829
20830impl HlvBuEmitter<Gp, Gp> for Assembler<'_> {
20831    fn hlv_bu(&mut self, rd: Gp, rs1: Gp) {
20832        self.emit_n(Opcode::HLVBU as i64, &[rd.as_operand(), rs1.as_operand()]);
20833    }
20834}
20835
20836impl HlvDEmitter<Gp, Gp> for Assembler<'_> {
20837    fn hlv_d(&mut self, rd: Gp, rs1: Gp) {
20838        self.emit_n(Opcode::HLVD as i64, &[rd.as_operand(), rs1.as_operand()]);
20839    }
20840}
20841
20842impl HlvHEmitter<Gp, Gp> for Assembler<'_> {
20843    fn hlv_h(&mut self, rd: Gp, rs1: Gp) {
20844        self.emit_n(Opcode::HLVH as i64, &[rd.as_operand(), rs1.as_operand()]);
20845    }
20846}
20847
20848impl HlvHuEmitter<Gp, Gp> for Assembler<'_> {
20849    fn hlv_hu(&mut self, rd: Gp, rs1: Gp) {
20850        self.emit_n(Opcode::HLVHU as i64, &[rd.as_operand(), rs1.as_operand()]);
20851    }
20852}
20853
20854impl HlvWEmitter<Gp, Gp> for Assembler<'_> {
20855    fn hlv_w(&mut self, rd: Gp, rs1: Gp) {
20856        self.emit_n(Opcode::HLVW as i64, &[rd.as_operand(), rs1.as_operand()]);
20857    }
20858}
20859
20860impl HlvWuEmitter<Gp, Gp> for Assembler<'_> {
20861    fn hlv_wu(&mut self, rd: Gp, rs1: Gp) {
20862        self.emit_n(Opcode::HLVWU as i64, &[rd.as_operand(), rs1.as_operand()]);
20863    }
20864}
20865
20866impl HlvxHuEmitter<Gp, Gp> for Assembler<'_> {
20867    fn hlvx_hu(&mut self, rd: Gp, rs1: Gp) {
20868        self.emit_n(Opcode::HLVXHU as i64, &[rd.as_operand(), rs1.as_operand()]);
20869    }
20870}
20871
20872impl HlvxWuEmitter<Gp, Gp> for Assembler<'_> {
20873    fn hlvx_wu(&mut self, rd: Gp, rs1: Gp) {
20874        self.emit_n(Opcode::HLVXWU as i64, &[rd.as_operand(), rs1.as_operand()]);
20875    }
20876}
20877
20878impl HsvBEmitter<Gp, Gp> for Assembler<'_> {
20879    fn hsv_b(&mut self, rs1: Gp, rs2: Gp) {
20880        self.emit_n(Opcode::HSVB as i64, &[rs1.as_operand(), rs2.as_operand()]);
20881    }
20882}
20883
20884impl HsvDEmitter<Gp, Gp> for Assembler<'_> {
20885    fn hsv_d(&mut self, rs1: Gp, rs2: Gp) {
20886        self.emit_n(Opcode::HSVD as i64, &[rs1.as_operand(), rs2.as_operand()]);
20887    }
20888}
20889
20890impl HsvHEmitter<Gp, Gp> for Assembler<'_> {
20891    fn hsv_h(&mut self, rs1: Gp, rs2: Gp) {
20892        self.emit_n(Opcode::HSVH as i64, &[rs1.as_operand(), rs2.as_operand()]);
20893    }
20894}
20895
20896impl HsvWEmitter<Gp, Gp> for Assembler<'_> {
20897    fn hsv_w(&mut self, rs1: Gp, rs2: Gp) {
20898        self.emit_n(Opcode::HSVW as i64, &[rs1.as_operand(), rs2.as_operand()]);
20899    }
20900}
20901
20902impl<U0: Into<Imm>> JEmitter<U0> for Assembler<'_> {
20903    fn j(&mut self, imm: U0) {
20904        self.emit_n(Opcode::J as i64, &[Into::<Imm>::into(imm).as_operand()]);
20905    }
20906}
20907
20908impl JEmitter<Label> for Assembler<'_> {
20909    fn j(&mut self, imm: Label) {
20910        self.emit_n(Opcode::J as i64, &[imm.as_operand()]);
20911    }
20912}
20913
20914impl<U1: Into<Imm>> JalEmitter<Gp, U1> for Assembler<'_> {
20915    fn jal(&mut self, rd: Gp, imm: U1) {
20916        self.emit_n(
20917            Opcode::JAL as i64,
20918            &[rd.as_operand(), Into::<Imm>::into(imm).as_operand()],
20919        );
20920    }
20921}
20922
20923impl JalEmitter<Gp, Label> for Assembler<'_> {
20924    fn jal(&mut self, rd: Gp, imm: Label) {
20925        self.emit_n(Opcode::JAL as i64, &[rd.as_operand(), imm.as_operand()]);
20926    }
20927}
20928
20929impl<U0: Into<Imm>> JalPseudoEmitter<U0> for Assembler<'_> {
20930    fn jal_pseudo(&mut self, imm: U0) {
20931        self.emit_n(
20932            Opcode::JALPSEUDO as i64,
20933            &[Into::<Imm>::into(imm).as_operand()],
20934        );
20935    }
20936}
20937
20938impl JalPseudoEmitter<Label> for Assembler<'_> {
20939    fn jal_pseudo(&mut self, imm: Label) {
20940        self.emit_n(Opcode::JALPSEUDO as i64, &[imm.as_operand()]);
20941    }
20942}
20943
20944impl<U2: Into<Imm>> JalrEmitter<Gp, Gp, U2> for Assembler<'_> {
20945    fn jalr(&mut self, rd: Gp, rs1: Gp, imm: U2) {
20946        self.emit_n(
20947            Opcode::JALR as i64,
20948            &[
20949                rd.as_operand(),
20950                rs1.as_operand(),
20951                Into::<Imm>::into(imm).as_operand(),
20952            ],
20953        );
20954    }
20955}
20956
20957impl JalrPseudoEmitter<Gp> for Assembler<'_> {
20958    fn jalr_pseudo(&mut self, rs1: Gp) {
20959        self.emit_n(Opcode::JALRPSEUDO as i64, &[rs1.as_operand()]);
20960    }
20961}
20962
20963impl JrEmitter<Gp> for Assembler<'_> {
20964    fn jr(&mut self, rs1: Gp) {
20965        self.emit_n(Opcode::JR as i64, &[rs1.as_operand()]);
20966    }
20967}
20968
20969impl<U2: Into<Imm>> LbEmitter<Gp, Gp, U2> for Assembler<'_> {
20970    fn lb(&mut self, rd: Gp, rs1: Gp, imm: U2) {
20971        self.emit_n(
20972            Opcode::LB as i64,
20973            &[
20974                rd.as_operand(),
20975                rs1.as_operand(),
20976                Into::<Imm>::into(imm).as_operand(),
20977            ],
20978        );
20979    }
20980}
20981
20982impl<U2: Into<Imm>> LbuEmitter<Gp, Gp, U2> for Assembler<'_> {
20983    fn lbu(&mut self, rd: Gp, rs1: Gp, imm: U2) {
20984        self.emit_n(
20985            Opcode::LBU as i64,
20986            &[
20987                rd.as_operand(),
20988                rs1.as_operand(),
20989                Into::<Imm>::into(imm).as_operand(),
20990            ],
20991        );
20992    }
20993}
20994
20995impl<U2: Into<Imm>> LdEmitter<Gp, Gp, U2> for Assembler<'_> {
20996    fn ld(&mut self, rd: Gp, rs1: Gp, imm: U2) {
20997        self.emit_n(
20998            Opcode::LD as i64,
20999            &[
21000                rd.as_operand(),
21001                rs1.as_operand(),
21002                Into::<Imm>::into(imm).as_operand(),
21003            ],
21004        );
21005    }
21006}
21007
21008impl<U2: Into<Imm>> LhEmitter<Gp, Gp, U2> for Assembler<'_> {
21009    fn lh(&mut self, rd: Gp, rs1: Gp, imm: U2) {
21010        self.emit_n(
21011            Opcode::LH as i64,
21012            &[
21013                rd.as_operand(),
21014                rs1.as_operand(),
21015                Into::<Imm>::into(imm).as_operand(),
21016            ],
21017        );
21018    }
21019}
21020
21021impl<U2: Into<Imm>> LhuEmitter<Gp, Gp, U2> for Assembler<'_> {
21022    fn lhu(&mut self, rd: Gp, rs1: Gp, imm: U2) {
21023        self.emit_n(
21024            Opcode::LHU as i64,
21025            &[
21026                rd.as_operand(),
21027                rs1.as_operand(),
21028                Into::<Imm>::into(imm).as_operand(),
21029            ],
21030        );
21031    }
21032}
21033
21034impl<U0: Into<Imm>> LpadEmitter<U0> for Assembler<'_> {
21035    fn lpad(&mut self, imm: U0) {
21036        self.emit_n(Opcode::LPAD as i64, &[Into::<Imm>::into(imm).as_operand()]);
21037    }
21038}
21039
21040impl<U2: Into<Imm>, U3: Into<Imm>> LrDEmitter<Gp, Gp, U2, U3> for Assembler<'_> {
21041    fn lr_d(&mut self, rd: Gp, rs1: Gp, aq: U2, rl: U3) {
21042        self.emit_n(
21043            Opcode::LRD as i64,
21044            &[
21045                rd.as_operand(),
21046                rs1.as_operand(),
21047                Into::<Imm>::into(aq).as_operand(),
21048                Into::<Imm>::into(rl).as_operand(),
21049            ],
21050        );
21051    }
21052}
21053
21054impl<U2: Into<Imm>, U3: Into<Imm>> LrWEmitter<Gp, Gp, U2, U3> for Assembler<'_> {
21055    fn lr_w(&mut self, rd: Gp, rs1: Gp, aq: U2, rl: U3) {
21056        self.emit_n(
21057            Opcode::LRW as i64,
21058            &[
21059                rd.as_operand(),
21060                rs1.as_operand(),
21061                Into::<Imm>::into(aq).as_operand(),
21062                Into::<Imm>::into(rl).as_operand(),
21063            ],
21064        );
21065    }
21066}
21067
21068impl<U1: Into<Imm>> LuiEmitter<Gp, U1> for Assembler<'_> {
21069    fn lui(&mut self, rd: Gp, imm: U1) {
21070        self.emit_n(
21071            Opcode::LUI as i64,
21072            &[rd.as_operand(), Into::<Imm>::into(imm).as_operand()],
21073        );
21074    }
21075}
21076
21077impl<U2: Into<Imm>> LwEmitter<Gp, Gp, U2> for Assembler<'_> {
21078    fn lw(&mut self, rd: Gp, rs1: Gp, imm: U2) {
21079        self.emit_n(
21080            Opcode::LW as i64,
21081            &[
21082                rd.as_operand(),
21083                rs1.as_operand(),
21084                Into::<Imm>::into(imm).as_operand(),
21085            ],
21086        );
21087    }
21088}
21089
21090impl<U2: Into<Imm>> LwuEmitter<Gp, Gp, U2> for Assembler<'_> {
21091    fn lwu(&mut self, rd: Gp, rs1: Gp, imm: U2) {
21092        self.emit_n(
21093            Opcode::LWU as i64,
21094            &[
21095                rd.as_operand(),
21096                rs1.as_operand(),
21097                Into::<Imm>::into(imm).as_operand(),
21098            ],
21099        );
21100    }
21101}
21102
21103impl MaxEmitter<Gp, Gp, Gp> for Assembler<'_> {
21104    fn max(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
21105        self.emit_n(
21106            Opcode::MAX as i64,
21107            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
21108        );
21109    }
21110}
21111
21112impl MaxuEmitter<Gp, Gp, Gp> for Assembler<'_> {
21113    fn maxu(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
21114        self.emit_n(
21115            Opcode::MAXU as i64,
21116            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
21117        );
21118    }
21119}
21120
21121impl MinEmitter<Gp, Gp, Gp> for Assembler<'_> {
21122    fn min(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
21123        self.emit_n(
21124            Opcode::MIN as i64,
21125            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
21126        );
21127    }
21128}
21129
21130impl MinuEmitter<Gp, Gp, Gp> for Assembler<'_> {
21131    fn minu(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
21132        self.emit_n(
21133            Opcode::MINU as i64,
21134            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
21135        );
21136    }
21137}
21138
21139impl MnretEmitter for Assembler<'_> {
21140    fn mnret(&mut self) {
21141        self.emit_n(Opcode::MNRET as i64, &[]);
21142    }
21143}
21144
21145impl MopR0Emitter<Gp, Gp> for Assembler<'_> {
21146    fn mop_r_0(&mut self, rd: Gp, rs1: Gp) {
21147        self.emit_n(Opcode::MOPR0 as i64, &[rd.as_operand(), rs1.as_operand()]);
21148    }
21149}
21150
21151impl MopR1Emitter<Gp, Gp> for Assembler<'_> {
21152    fn mop_r_1(&mut self, rd: Gp, rs1: Gp) {
21153        self.emit_n(Opcode::MOPR1 as i64, &[rd.as_operand(), rs1.as_operand()]);
21154    }
21155}
21156
21157impl MopR10Emitter<Gp, Gp> for Assembler<'_> {
21158    fn mop_r_10(&mut self, rd: Gp, rs1: Gp) {
21159        self.emit_n(Opcode::MOPR10 as i64, &[rd.as_operand(), rs1.as_operand()]);
21160    }
21161}
21162
21163impl MopR11Emitter<Gp, Gp> for Assembler<'_> {
21164    fn mop_r_11(&mut self, rd: Gp, rs1: Gp) {
21165        self.emit_n(Opcode::MOPR11 as i64, &[rd.as_operand(), rs1.as_operand()]);
21166    }
21167}
21168
21169impl MopR12Emitter<Gp, Gp> for Assembler<'_> {
21170    fn mop_r_12(&mut self, rd: Gp, rs1: Gp) {
21171        self.emit_n(Opcode::MOPR12 as i64, &[rd.as_operand(), rs1.as_operand()]);
21172    }
21173}
21174
21175impl MopR13Emitter<Gp, Gp> for Assembler<'_> {
21176    fn mop_r_13(&mut self, rd: Gp, rs1: Gp) {
21177        self.emit_n(Opcode::MOPR13 as i64, &[rd.as_operand(), rs1.as_operand()]);
21178    }
21179}
21180
21181impl MopR14Emitter<Gp, Gp> for Assembler<'_> {
21182    fn mop_r_14(&mut self, rd: Gp, rs1: Gp) {
21183        self.emit_n(Opcode::MOPR14 as i64, &[rd.as_operand(), rs1.as_operand()]);
21184    }
21185}
21186
21187impl MopR15Emitter<Gp, Gp> for Assembler<'_> {
21188    fn mop_r_15(&mut self, rd: Gp, rs1: Gp) {
21189        self.emit_n(Opcode::MOPR15 as i64, &[rd.as_operand(), rs1.as_operand()]);
21190    }
21191}
21192
21193impl MopR16Emitter<Gp, Gp> for Assembler<'_> {
21194    fn mop_r_16(&mut self, rd: Gp, rs1: Gp) {
21195        self.emit_n(Opcode::MOPR16 as i64, &[rd.as_operand(), rs1.as_operand()]);
21196    }
21197}
21198
21199impl MopR17Emitter<Gp, Gp> for Assembler<'_> {
21200    fn mop_r_17(&mut self, rd: Gp, rs1: Gp) {
21201        self.emit_n(Opcode::MOPR17 as i64, &[rd.as_operand(), rs1.as_operand()]);
21202    }
21203}
21204
21205impl MopR18Emitter<Gp, Gp> for Assembler<'_> {
21206    fn mop_r_18(&mut self, rd: Gp, rs1: Gp) {
21207        self.emit_n(Opcode::MOPR18 as i64, &[rd.as_operand(), rs1.as_operand()]);
21208    }
21209}
21210
21211impl MopR19Emitter<Gp, Gp> for Assembler<'_> {
21212    fn mop_r_19(&mut self, rd: Gp, rs1: Gp) {
21213        self.emit_n(Opcode::MOPR19 as i64, &[rd.as_operand(), rs1.as_operand()]);
21214    }
21215}
21216
21217impl MopR2Emitter<Gp, Gp> for Assembler<'_> {
21218    fn mop_r_2(&mut self, rd: Gp, rs1: Gp) {
21219        self.emit_n(Opcode::MOPR2 as i64, &[rd.as_operand(), rs1.as_operand()]);
21220    }
21221}
21222
21223impl MopR20Emitter<Gp, Gp> for Assembler<'_> {
21224    fn mop_r_20(&mut self, rd: Gp, rs1: Gp) {
21225        self.emit_n(Opcode::MOPR20 as i64, &[rd.as_operand(), rs1.as_operand()]);
21226    }
21227}
21228
21229impl MopR21Emitter<Gp, Gp> for Assembler<'_> {
21230    fn mop_r_21(&mut self, rd: Gp, rs1: Gp) {
21231        self.emit_n(Opcode::MOPR21 as i64, &[rd.as_operand(), rs1.as_operand()]);
21232    }
21233}
21234
21235impl MopR22Emitter<Gp, Gp> for Assembler<'_> {
21236    fn mop_r_22(&mut self, rd: Gp, rs1: Gp) {
21237        self.emit_n(Opcode::MOPR22 as i64, &[rd.as_operand(), rs1.as_operand()]);
21238    }
21239}
21240
21241impl MopR23Emitter<Gp, Gp> for Assembler<'_> {
21242    fn mop_r_23(&mut self, rd: Gp, rs1: Gp) {
21243        self.emit_n(Opcode::MOPR23 as i64, &[rd.as_operand(), rs1.as_operand()]);
21244    }
21245}
21246
21247impl MopR24Emitter<Gp, Gp> for Assembler<'_> {
21248    fn mop_r_24(&mut self, rd: Gp, rs1: Gp) {
21249        self.emit_n(Opcode::MOPR24 as i64, &[rd.as_operand(), rs1.as_operand()]);
21250    }
21251}
21252
21253impl MopR25Emitter<Gp, Gp> for Assembler<'_> {
21254    fn mop_r_25(&mut self, rd: Gp, rs1: Gp) {
21255        self.emit_n(Opcode::MOPR25 as i64, &[rd.as_operand(), rs1.as_operand()]);
21256    }
21257}
21258
21259impl MopR26Emitter<Gp, Gp> for Assembler<'_> {
21260    fn mop_r_26(&mut self, rd: Gp, rs1: Gp) {
21261        self.emit_n(Opcode::MOPR26 as i64, &[rd.as_operand(), rs1.as_operand()]);
21262    }
21263}
21264
21265impl MopR27Emitter<Gp, Gp> for Assembler<'_> {
21266    fn mop_r_27(&mut self, rd: Gp, rs1: Gp) {
21267        self.emit_n(Opcode::MOPR27 as i64, &[rd.as_operand(), rs1.as_operand()]);
21268    }
21269}
21270
21271impl MopR28Emitter<Gp, Gp> for Assembler<'_> {
21272    fn mop_r_28(&mut self, rd: Gp, rs1: Gp) {
21273        self.emit_n(Opcode::MOPR28 as i64, &[rd.as_operand(), rs1.as_operand()]);
21274    }
21275}
21276
21277impl MopR29Emitter<Gp, Gp> for Assembler<'_> {
21278    fn mop_r_29(&mut self, rd: Gp, rs1: Gp) {
21279        self.emit_n(Opcode::MOPR29 as i64, &[rd.as_operand(), rs1.as_operand()]);
21280    }
21281}
21282
21283impl MopR3Emitter<Gp, Gp> for Assembler<'_> {
21284    fn mop_r_3(&mut self, rd: Gp, rs1: Gp) {
21285        self.emit_n(Opcode::MOPR3 as i64, &[rd.as_operand(), rs1.as_operand()]);
21286    }
21287}
21288
21289impl MopR30Emitter<Gp, Gp> for Assembler<'_> {
21290    fn mop_r_30(&mut self, rd: Gp, rs1: Gp) {
21291        self.emit_n(Opcode::MOPR30 as i64, &[rd.as_operand(), rs1.as_operand()]);
21292    }
21293}
21294
21295impl MopR31Emitter<Gp, Gp> for Assembler<'_> {
21296    fn mop_r_31(&mut self, rd: Gp, rs1: Gp) {
21297        self.emit_n(Opcode::MOPR31 as i64, &[rd.as_operand(), rs1.as_operand()]);
21298    }
21299}
21300
21301impl MopR4Emitter<Gp, Gp> for Assembler<'_> {
21302    fn mop_r_4(&mut self, rd: Gp, rs1: Gp) {
21303        self.emit_n(Opcode::MOPR4 as i64, &[rd.as_operand(), rs1.as_operand()]);
21304    }
21305}
21306
21307impl MopR5Emitter<Gp, Gp> for Assembler<'_> {
21308    fn mop_r_5(&mut self, rd: Gp, rs1: Gp) {
21309        self.emit_n(Opcode::MOPR5 as i64, &[rd.as_operand(), rs1.as_operand()]);
21310    }
21311}
21312
21313impl MopR6Emitter<Gp, Gp> for Assembler<'_> {
21314    fn mop_r_6(&mut self, rd: Gp, rs1: Gp) {
21315        self.emit_n(Opcode::MOPR6 as i64, &[rd.as_operand(), rs1.as_operand()]);
21316    }
21317}
21318
21319impl MopR7Emitter<Gp, Gp> for Assembler<'_> {
21320    fn mop_r_7(&mut self, rd: Gp, rs1: Gp) {
21321        self.emit_n(Opcode::MOPR7 as i64, &[rd.as_operand(), rs1.as_operand()]);
21322    }
21323}
21324
21325impl MopR8Emitter<Gp, Gp> for Assembler<'_> {
21326    fn mop_r_8(&mut self, rd: Gp, rs1: Gp) {
21327        self.emit_n(Opcode::MOPR8 as i64, &[rd.as_operand(), rs1.as_operand()]);
21328    }
21329}
21330
21331impl MopR9Emitter<Gp, Gp> for Assembler<'_> {
21332    fn mop_r_9(&mut self, rd: Gp, rs1: Gp) {
21333        self.emit_n(Opcode::MOPR9 as i64, &[rd.as_operand(), rs1.as_operand()]);
21334    }
21335}
21336
21337impl MopRr0Emitter<Gp, Gp, Gp> for Assembler<'_> {
21338    fn mop_rr_0(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
21339        self.emit_n(
21340            Opcode::MOPRR0 as i64,
21341            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
21342        );
21343    }
21344}
21345
21346impl MopRr1Emitter<Gp, Gp, Gp> for Assembler<'_> {
21347    fn mop_rr_1(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
21348        self.emit_n(
21349            Opcode::MOPRR1 as i64,
21350            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
21351        );
21352    }
21353}
21354
21355impl MopRr2Emitter<Gp, Gp, Gp> for Assembler<'_> {
21356    fn mop_rr_2(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
21357        self.emit_n(
21358            Opcode::MOPRR2 as i64,
21359            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
21360        );
21361    }
21362}
21363
21364impl MopRr3Emitter<Gp, Gp, Gp> for Assembler<'_> {
21365    fn mop_rr_3(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
21366        self.emit_n(
21367            Opcode::MOPRR3 as i64,
21368            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
21369        );
21370    }
21371}
21372
21373impl MopRr4Emitter<Gp, Gp, Gp> for Assembler<'_> {
21374    fn mop_rr_4(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
21375        self.emit_n(
21376            Opcode::MOPRR4 as i64,
21377            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
21378        );
21379    }
21380}
21381
21382impl MopRr5Emitter<Gp, Gp, Gp> for Assembler<'_> {
21383    fn mop_rr_5(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
21384        self.emit_n(
21385            Opcode::MOPRR5 as i64,
21386            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
21387        );
21388    }
21389}
21390
21391impl MopRr6Emitter<Gp, Gp, Gp> for Assembler<'_> {
21392    fn mop_rr_6(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
21393        self.emit_n(
21394            Opcode::MOPRR6 as i64,
21395            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
21396        );
21397    }
21398}
21399
21400impl MopRr7Emitter<Gp, Gp, Gp> for Assembler<'_> {
21401    fn mop_rr_7(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
21402        self.emit_n(
21403            Opcode::MOPRR7 as i64,
21404            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
21405        );
21406    }
21407}
21408
21409impl MretEmitter for Assembler<'_> {
21410    fn mret(&mut self) {
21411        self.emit_n(Opcode::MRET as i64, &[]);
21412    }
21413}
21414
21415impl MulEmitter<Gp, Gp, Gp> for Assembler<'_> {
21416    fn mul(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
21417        self.emit_n(
21418            Opcode::MUL as i64,
21419            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
21420        );
21421    }
21422}
21423
21424impl MulhEmitter<Gp, Gp, Gp> for Assembler<'_> {
21425    fn mulh(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
21426        self.emit_n(
21427            Opcode::MULH as i64,
21428            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
21429        );
21430    }
21431}
21432
21433impl MulhsuEmitter<Gp, Gp, Gp> for Assembler<'_> {
21434    fn mulhsu(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
21435        self.emit_n(
21436            Opcode::MULHSU as i64,
21437            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
21438        );
21439    }
21440}
21441
21442impl MulhuEmitter<Gp, Gp, Gp> for Assembler<'_> {
21443    fn mulhu(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
21444        self.emit_n(
21445            Opcode::MULHU as i64,
21446            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
21447        );
21448    }
21449}
21450
21451impl MulwEmitter<Gp, Gp, Gp> for Assembler<'_> {
21452    fn mulw(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
21453        self.emit_n(
21454            Opcode::MULW as i64,
21455            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
21456        );
21457    }
21458}
21459
21460impl MvEmitter<Gp, Gp> for Assembler<'_> {
21461    fn mv(&mut self, rd: Gp, rs1: Gp) {
21462        self.emit_n(Opcode::MV as i64, &[rd.as_operand(), rs1.as_operand()]);
21463    }
21464}
21465
21466impl NegEmitter<Gp, Gp> for Assembler<'_> {
21467    fn neg(&mut self, rd: Gp, rs1: Gp) {
21468        self.emit_n(Opcode::NEG as i64, &[rd.as_operand(), rs1.as_operand()]);
21469    }
21470}
21471
21472impl NopEmitter for Assembler<'_> {
21473    fn nop(&mut self) {
21474        self.emit_n(Opcode::NOP as i64, &[]);
21475    }
21476}
21477
21478impl NtlAllEmitter for Assembler<'_> {
21479    fn ntl_all(&mut self) {
21480        self.emit_n(Opcode::NTLALL as i64, &[]);
21481    }
21482}
21483
21484impl NtlP1Emitter for Assembler<'_> {
21485    fn ntl_p1(&mut self) {
21486        self.emit_n(Opcode::NTLP1 as i64, &[]);
21487    }
21488}
21489
21490impl NtlPallEmitter for Assembler<'_> {
21491    fn ntl_pall(&mut self) {
21492        self.emit_n(Opcode::NTLPALL as i64, &[]);
21493    }
21494}
21495
21496impl NtlS1Emitter for Assembler<'_> {
21497    fn ntl_s1(&mut self) {
21498        self.emit_n(Opcode::NTLS1 as i64, &[]);
21499    }
21500}
21501
21502impl OrEmitter<Gp, Gp, Gp> for Assembler<'_> {
21503    fn or(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
21504        self.emit_n(
21505            Opcode::OR as i64,
21506            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
21507        );
21508    }
21509}
21510
21511impl OrcBEmitter<Gp, Gp> for Assembler<'_> {
21512    fn orc_b(&mut self, rd: Gp, rs1: Gp) {
21513        self.emit_n(Opcode::ORCB as i64, &[rd.as_operand(), rs1.as_operand()]);
21514    }
21515}
21516
21517impl<U2: Into<Imm>> OriEmitter<Gp, Gp, U2> for Assembler<'_> {
21518    fn ori(&mut self, rd: Gp, rs1: Gp, imm: U2) {
21519        self.emit_n(
21520            Opcode::ORI as i64,
21521            &[
21522                rd.as_operand(),
21523                rs1.as_operand(),
21524                Into::<Imm>::into(imm).as_operand(),
21525            ],
21526        );
21527    }
21528}
21529
21530impl OrnEmitter<Gp, Gp, Gp> for Assembler<'_> {
21531    fn orn(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
21532        self.emit_n(
21533            Opcode::ORN as i64,
21534            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
21535        );
21536    }
21537}
21538
21539impl PackEmitter<Gp, Gp, Gp> for Assembler<'_> {
21540    fn pack(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
21541        self.emit_n(
21542            Opcode::PACK as i64,
21543            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
21544        );
21545    }
21546}
21547
21548impl PackhEmitter<Gp, Gp, Gp> for Assembler<'_> {
21549    fn packh(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
21550        self.emit_n(
21551            Opcode::PACKH as i64,
21552            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
21553        );
21554    }
21555}
21556
21557impl PackwEmitter<Gp, Gp, Gp> for Assembler<'_> {
21558    fn packw(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
21559        self.emit_n(
21560            Opcode::PACKW as i64,
21561            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
21562        );
21563    }
21564}
21565
21566impl PauseEmitter for Assembler<'_> {
21567    fn pause(&mut self) {
21568        self.emit_n(Opcode::PAUSE as i64, &[]);
21569    }
21570}
21571
21572impl<U1: Into<Imm>> PrefetchIEmitter<Gp, U1> for Assembler<'_> {
21573    fn prefetch_i(&mut self, rs1: Gp, imm: U1) {
21574        self.emit_n(
21575            Opcode::PREFETCHI as i64,
21576            &[rs1.as_operand(), Into::<Imm>::into(imm).as_operand()],
21577        );
21578    }
21579}
21580
21581impl<U1: Into<Imm>> PrefetchREmitter<Gp, U1> for Assembler<'_> {
21582    fn prefetch_r(&mut self, rs1: Gp, imm: U1) {
21583        self.emit_n(
21584            Opcode::PREFETCHR as i64,
21585            &[rs1.as_operand(), Into::<Imm>::into(imm).as_operand()],
21586        );
21587    }
21588}
21589
21590impl<U1: Into<Imm>> PrefetchWEmitter<Gp, U1> for Assembler<'_> {
21591    fn prefetch_w(&mut self, rs1: Gp, imm: U1) {
21592        self.emit_n(
21593            Opcode::PREFETCHW as i64,
21594            &[rs1.as_operand(), Into::<Imm>::into(imm).as_operand()],
21595        );
21596    }
21597}
21598
21599impl RdcycleEmitter<Gp> for Assembler<'_> {
21600    fn rdcycle(&mut self, rd: Gp) {
21601        self.emit_n(Opcode::RDCYCLE as i64, &[rd.as_operand()]);
21602    }
21603}
21604
21605impl RdcyclehEmitter<Gp> for Assembler<'_> {
21606    fn rdcycleh(&mut self, rd: Gp) {
21607        self.emit_n(Opcode::RDCYCLEH as i64, &[rd.as_operand()]);
21608    }
21609}
21610
21611impl RdinstretEmitter<Gp> for Assembler<'_> {
21612    fn rdinstret(&mut self, rd: Gp) {
21613        self.emit_n(Opcode::RDINSTRET as i64, &[rd.as_operand()]);
21614    }
21615}
21616
21617impl RdinstrethEmitter<Gp> for Assembler<'_> {
21618    fn rdinstreth(&mut self, rd: Gp) {
21619        self.emit_n(Opcode::RDINSTRETH as i64, &[rd.as_operand()]);
21620    }
21621}
21622
21623impl RdtimeEmitter<Gp> for Assembler<'_> {
21624    fn rdtime(&mut self, rd: Gp) {
21625        self.emit_n(Opcode::RDTIME as i64, &[rd.as_operand()]);
21626    }
21627}
21628
21629impl RdtimehEmitter<Gp> for Assembler<'_> {
21630    fn rdtimeh(&mut self, rd: Gp) {
21631        self.emit_n(Opcode::RDTIMEH as i64, &[rd.as_operand()]);
21632    }
21633}
21634
21635impl RemEmitter<Gp, Gp, Gp> for Assembler<'_> {
21636    fn rem(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
21637        self.emit_n(
21638            Opcode::REM as i64,
21639            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
21640        );
21641    }
21642}
21643
21644impl RemuEmitter<Gp, Gp, Gp> for Assembler<'_> {
21645    fn remu(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
21646        self.emit_n(
21647            Opcode::REMU as i64,
21648            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
21649        );
21650    }
21651}
21652
21653impl RemuwEmitter<Gp, Gp, Gp> for Assembler<'_> {
21654    fn remuw(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
21655        self.emit_n(
21656            Opcode::REMUW as i64,
21657            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
21658        );
21659    }
21660}
21661
21662impl RemwEmitter<Gp, Gp, Gp> for Assembler<'_> {
21663    fn remw(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
21664        self.emit_n(
21665            Opcode::REMW as i64,
21666            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
21667        );
21668    }
21669}
21670
21671impl RetEmitter for Assembler<'_> {
21672    fn ret(&mut self) {
21673        self.emit_n(Opcode::RET as i64, &[]);
21674    }
21675}
21676
21677impl Rev8Emitter<Gp, Gp> for Assembler<'_> {
21678    fn rev8(&mut self, rd: Gp, rs1: Gp) {
21679        self.emit_n(Opcode::REV8 as i64, &[rd.as_operand(), rs1.as_operand()]);
21680    }
21681}
21682
21683impl Rev8Rv32Emitter<Gp, Gp> for Assembler<'_> {
21684    fn rev8_rv32(&mut self, rd: Gp, rs1: Gp) {
21685        self.emit_n(
21686            Opcode::REV8RV32 as i64,
21687            &[rd.as_operand(), rs1.as_operand()],
21688        );
21689    }
21690}
21691
21692impl RolEmitter<Gp, Gp, Gp> for Assembler<'_> {
21693    fn rol(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
21694        self.emit_n(
21695            Opcode::ROL as i64,
21696            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
21697        );
21698    }
21699}
21700
21701impl RolwEmitter<Gp, Gp, Gp> for Assembler<'_> {
21702    fn rolw(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
21703        self.emit_n(
21704            Opcode::ROLW as i64,
21705            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
21706        );
21707    }
21708}
21709
21710impl RorEmitter<Gp, Gp, Gp> for Assembler<'_> {
21711    fn ror(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
21712        self.emit_n(
21713            Opcode::ROR as i64,
21714            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
21715        );
21716    }
21717}
21718
21719impl<U2: Into<Imm>> RoriEmitter<Gp, Gp, U2> for Assembler<'_> {
21720    fn rori(&mut self, rd: Gp, rs1: Gp, shamtd: U2) {
21721        self.emit_n(
21722            Opcode::RORI as i64,
21723            &[
21724                rd.as_operand(),
21725                rs1.as_operand(),
21726                Into::<Imm>::into(shamtd).as_operand(),
21727            ],
21728        );
21729    }
21730}
21731
21732impl<U2: Into<Imm>> RoriRv32Emitter<Gp, Gp, U2> for Assembler<'_> {
21733    fn rori_rv32(&mut self, rd: Gp, rs1: Gp, shamtw: U2) {
21734        self.emit_n(
21735            Opcode::RORIRV32 as i64,
21736            &[
21737                rd.as_operand(),
21738                rs1.as_operand(),
21739                Into::<Imm>::into(shamtw).as_operand(),
21740            ],
21741        );
21742    }
21743}
21744
21745impl<U2: Into<Imm>> RoriwEmitter<Gp, Gp, U2> for Assembler<'_> {
21746    fn roriw(&mut self, rd: Gp, rs1: Gp, shamtw: U2) {
21747        self.emit_n(
21748            Opcode::RORIW as i64,
21749            &[
21750                rd.as_operand(),
21751                rs1.as_operand(),
21752                Into::<Imm>::into(shamtw).as_operand(),
21753            ],
21754        );
21755    }
21756}
21757
21758impl RorwEmitter<Gp, Gp, Gp> for Assembler<'_> {
21759    fn rorw(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
21760        self.emit_n(
21761            Opcode::RORW as i64,
21762            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
21763        );
21764    }
21765}
21766
21767impl<U2: Into<Imm>> SbEmitter<Gp, Gp, U2> for Assembler<'_> {
21768    fn sb(&mut self, rs1: Gp, rs2: Gp, imm: U2) {
21769        self.emit_n(
21770            Opcode::SB as i64,
21771            &[
21772                rs1.as_operand(),
21773                rs2.as_operand(),
21774                Into::<Imm>::into(imm).as_operand(),
21775            ],
21776        );
21777    }
21778}
21779
21780impl SbreakEmitter for Assembler<'_> {
21781    fn sbreak(&mut self) {
21782        self.emit_n(Opcode::SBREAK as i64, &[]);
21783    }
21784}
21785
21786impl<U3: Into<Imm>, U4: Into<Imm>> ScDEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
21787    fn sc_d(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
21788        self.emit_n(
21789            Opcode::SCD as i64,
21790            &[
21791                rd.as_operand(),
21792                rs1.as_operand(),
21793                rs2.as_operand(),
21794                Into::<Imm>::into(aq).as_operand(),
21795                Into::<Imm>::into(rl).as_operand(),
21796            ],
21797        );
21798    }
21799}
21800
21801impl<U3: Into<Imm>, U4: Into<Imm>> ScWEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
21802    fn sc_w(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
21803        self.emit_n(
21804            Opcode::SCW as i64,
21805            &[
21806                rd.as_operand(),
21807                rs1.as_operand(),
21808                rs2.as_operand(),
21809                Into::<Imm>::into(aq).as_operand(),
21810                Into::<Imm>::into(rl).as_operand(),
21811            ],
21812        );
21813    }
21814}
21815
21816impl ScallEmitter for Assembler<'_> {
21817    fn scall(&mut self) {
21818        self.emit_n(Opcode::SCALL as i64, &[]);
21819    }
21820}
21821
21822impl SctrclrEmitter for Assembler<'_> {
21823    fn sctrclr(&mut self) {
21824        self.emit_n(Opcode::SCTRCLR as i64, &[]);
21825    }
21826}
21827
21828impl<U2: Into<Imm>> SdEmitter<Gp, Gp, U2> for Assembler<'_> {
21829    fn sd(&mut self, rs1: Gp, rs2: Gp, imm: U2) {
21830        self.emit_n(
21831            Opcode::SD as i64,
21832            &[
21833                rs1.as_operand(),
21834                rs2.as_operand(),
21835                Into::<Imm>::into(imm).as_operand(),
21836            ],
21837        );
21838    }
21839}
21840
21841impl SeqzEmitter<Gp, Gp> for Assembler<'_> {
21842    fn seqz(&mut self, rd: Gp, rs1: Gp) {
21843        self.emit_n(Opcode::SEQZ as i64, &[rd.as_operand(), rs1.as_operand()]);
21844    }
21845}
21846
21847impl SextBEmitter<Gp, Gp> for Assembler<'_> {
21848    fn sext_b(&mut self, rd: Gp, rs1: Gp) {
21849        self.emit_n(Opcode::SEXTB as i64, &[rd.as_operand(), rs1.as_operand()]);
21850    }
21851}
21852
21853impl SextHEmitter<Gp, Gp> for Assembler<'_> {
21854    fn sext_h(&mut self, rd: Gp, rs1: Gp) {
21855        self.emit_n(Opcode::SEXTH as i64, &[rd.as_operand(), rs1.as_operand()]);
21856    }
21857}
21858
21859impl SextWEmitter<Gp, Gp> for Assembler<'_> {
21860    fn sext_w(&mut self, rd: Gp, rs1: Gp) {
21861        self.emit_n(Opcode::SEXTW as i64, &[rd.as_operand(), rs1.as_operand()]);
21862    }
21863}
21864
21865impl SfenceInvalIrEmitter for Assembler<'_> {
21866    fn sfence_inval_ir(&mut self) {
21867        self.emit_n(Opcode::SFENCEINVALIR as i64, &[]);
21868    }
21869}
21870
21871impl SfenceVmaEmitter<Gp, Gp> for Assembler<'_> {
21872    fn sfence_vma(&mut self, rs1: Gp, rs2: Gp) {
21873        self.emit_n(
21874            Opcode::SFENCEVMA as i64,
21875            &[rs1.as_operand(), rs2.as_operand()],
21876        );
21877    }
21878}
21879
21880impl SfenceWInvalEmitter for Assembler<'_> {
21881    fn sfence_w_inval(&mut self) {
21882        self.emit_n(Opcode::SFENCEWINVAL as i64, &[]);
21883    }
21884}
21885
21886impl SgtzEmitter<Gp, Gp> for Assembler<'_> {
21887    fn sgtz(&mut self, rd: Gp, rs2: Gp) {
21888        self.emit_n(Opcode::SGTZ as i64, &[rd.as_operand(), rs2.as_operand()]);
21889    }
21890}
21891
21892impl<U2: Into<Imm>> ShEmitter<Gp, Gp, U2> for Assembler<'_> {
21893    fn sh(&mut self, rs1: Gp, rs2: Gp, imm: U2) {
21894        self.emit_n(
21895            Opcode::SH as i64,
21896            &[
21897                rs1.as_operand(),
21898                rs2.as_operand(),
21899                Into::<Imm>::into(imm).as_operand(),
21900            ],
21901        );
21902    }
21903}
21904
21905impl Sh1AddEmitter<Gp, Gp, Gp> for Assembler<'_> {
21906    fn sh1add(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
21907        self.emit_n(
21908            Opcode::SH1ADD as i64,
21909            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
21910        );
21911    }
21912}
21913
21914impl Sh1AddUwEmitter<Gp, Gp, Gp> for Assembler<'_> {
21915    fn sh1add_uw(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
21916        self.emit_n(
21917            Opcode::SH1ADDUW as i64,
21918            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
21919        );
21920    }
21921}
21922
21923impl Sh2AddEmitter<Gp, Gp, Gp> for Assembler<'_> {
21924    fn sh2add(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
21925        self.emit_n(
21926            Opcode::SH2ADD as i64,
21927            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
21928        );
21929    }
21930}
21931
21932impl Sh2AddUwEmitter<Gp, Gp, Gp> for Assembler<'_> {
21933    fn sh2add_uw(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
21934        self.emit_n(
21935            Opcode::SH2ADDUW as i64,
21936            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
21937        );
21938    }
21939}
21940
21941impl Sh3AddEmitter<Gp, Gp, Gp> for Assembler<'_> {
21942    fn sh3add(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
21943        self.emit_n(
21944            Opcode::SH3ADD as i64,
21945            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
21946        );
21947    }
21948}
21949
21950impl Sh3AddUwEmitter<Gp, Gp, Gp> for Assembler<'_> {
21951    fn sh3add_uw(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
21952        self.emit_n(
21953            Opcode::SH3ADDUW as i64,
21954            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
21955        );
21956    }
21957}
21958
21959impl Sha256Sig0Emitter<Gp, Gp> for Assembler<'_> {
21960    fn sha256sig0(&mut self, rd: Gp, rs1: Gp) {
21961        self.emit_n(
21962            Opcode::SHA256SIG0 as i64,
21963            &[rd.as_operand(), rs1.as_operand()],
21964        );
21965    }
21966}
21967
21968impl Sha256Sig1Emitter<Gp, Gp> for Assembler<'_> {
21969    fn sha256sig1(&mut self, rd: Gp, rs1: Gp) {
21970        self.emit_n(
21971            Opcode::SHA256SIG1 as i64,
21972            &[rd.as_operand(), rs1.as_operand()],
21973        );
21974    }
21975}
21976
21977impl Sha256Sum0Emitter<Gp, Gp> for Assembler<'_> {
21978    fn sha256sum0(&mut self, rd: Gp, rs1: Gp) {
21979        self.emit_n(
21980            Opcode::SHA256SUM0 as i64,
21981            &[rd.as_operand(), rs1.as_operand()],
21982        );
21983    }
21984}
21985
21986impl Sha256Sum1Emitter<Gp, Gp> for Assembler<'_> {
21987    fn sha256sum1(&mut self, rd: Gp, rs1: Gp) {
21988        self.emit_n(
21989            Opcode::SHA256SUM1 as i64,
21990            &[rd.as_operand(), rs1.as_operand()],
21991        );
21992    }
21993}
21994
21995impl Sha512Sig0Emitter<Gp, Gp> for Assembler<'_> {
21996    fn sha512sig0(&mut self, rd: Gp, rs1: Gp) {
21997        self.emit_n(
21998            Opcode::SHA512SIG0 as i64,
21999            &[rd.as_operand(), rs1.as_operand()],
22000        );
22001    }
22002}
22003
22004impl Sha512Sig0HEmitter<Gp, Gp, Gp> for Assembler<'_> {
22005    fn sha512sig0h(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
22006        self.emit_n(
22007            Opcode::SHA512SIG0H as i64,
22008            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
22009        );
22010    }
22011}
22012
22013impl Sha512Sig0LEmitter<Gp, Gp, Gp> for Assembler<'_> {
22014    fn sha512sig0l(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
22015        self.emit_n(
22016            Opcode::SHA512SIG0L as i64,
22017            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
22018        );
22019    }
22020}
22021
22022impl Sha512Sig1Emitter<Gp, Gp> for Assembler<'_> {
22023    fn sha512sig1(&mut self, rd: Gp, rs1: Gp) {
22024        self.emit_n(
22025            Opcode::SHA512SIG1 as i64,
22026            &[rd.as_operand(), rs1.as_operand()],
22027        );
22028    }
22029}
22030
22031impl Sha512Sig1HEmitter<Gp, Gp, Gp> for Assembler<'_> {
22032    fn sha512sig1h(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
22033        self.emit_n(
22034            Opcode::SHA512SIG1H as i64,
22035            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
22036        );
22037    }
22038}
22039
22040impl Sha512Sig1LEmitter<Gp, Gp, Gp> for Assembler<'_> {
22041    fn sha512sig1l(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
22042        self.emit_n(
22043            Opcode::SHA512SIG1L as i64,
22044            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
22045        );
22046    }
22047}
22048
22049impl Sha512Sum0Emitter<Gp, Gp> for Assembler<'_> {
22050    fn sha512sum0(&mut self, rd: Gp, rs1: Gp) {
22051        self.emit_n(
22052            Opcode::SHA512SUM0 as i64,
22053            &[rd.as_operand(), rs1.as_operand()],
22054        );
22055    }
22056}
22057
22058impl Sha512Sum0REmitter<Gp, Gp, Gp> for Assembler<'_> {
22059    fn sha512sum0r(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
22060        self.emit_n(
22061            Opcode::SHA512SUM0R as i64,
22062            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
22063        );
22064    }
22065}
22066
22067impl Sha512Sum1Emitter<Gp, Gp> for Assembler<'_> {
22068    fn sha512sum1(&mut self, rd: Gp, rs1: Gp) {
22069        self.emit_n(
22070            Opcode::SHA512SUM1 as i64,
22071            &[rd.as_operand(), rs1.as_operand()],
22072        );
22073    }
22074}
22075
22076impl Sha512Sum1REmitter<Gp, Gp, Gp> for Assembler<'_> {
22077    fn sha512sum1r(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
22078        self.emit_n(
22079            Opcode::SHA512SUM1R as i64,
22080            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
22081        );
22082    }
22083}
22084
22085impl SinvalVmaEmitter<Gp, Gp> for Assembler<'_> {
22086    fn sinval_vma(&mut self, rs1: Gp, rs2: Gp) {
22087        self.emit_n(
22088            Opcode::SINVALVMA as i64,
22089            &[rs1.as_operand(), rs2.as_operand()],
22090        );
22091    }
22092}
22093
22094impl SllEmitter<Gp, Gp, Gp> for Assembler<'_> {
22095    fn sll(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
22096        self.emit_n(
22097            Opcode::SLL as i64,
22098            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
22099        );
22100    }
22101}
22102
22103impl<U2: Into<Imm>> SlliEmitter<Gp, Gp, U2> for Assembler<'_> {
22104    fn slli(&mut self, rd: Gp, rs1: Gp, shamtd: U2) {
22105        self.emit_n(
22106            Opcode::SLLI as i64,
22107            &[
22108                rd.as_operand(),
22109                rs1.as_operand(),
22110                Into::<Imm>::into(shamtd).as_operand(),
22111            ],
22112        );
22113    }
22114}
22115
22116impl<U2: Into<Imm>> SlliRv32Emitter<Gp, Gp, U2> for Assembler<'_> {
22117    fn slli_rv32(&mut self, rd: Gp, rs1: Gp, shamtw: U2) {
22118        self.emit_n(
22119            Opcode::SLLIRV32 as i64,
22120            &[
22121                rd.as_operand(),
22122                rs1.as_operand(),
22123                Into::<Imm>::into(shamtw).as_operand(),
22124            ],
22125        );
22126    }
22127}
22128
22129impl<U2: Into<Imm>> SlliUwEmitter<Gp, Gp, U2> for Assembler<'_> {
22130    fn slli_uw(&mut self, rd: Gp, rs1: Gp, shamtd: U2) {
22131        self.emit_n(
22132            Opcode::SLLIUW as i64,
22133            &[
22134                rd.as_operand(),
22135                rs1.as_operand(),
22136                Into::<Imm>::into(shamtd).as_operand(),
22137            ],
22138        );
22139    }
22140}
22141
22142impl<U2: Into<Imm>> SlliwEmitter<Gp, Gp, U2> for Assembler<'_> {
22143    fn slliw(&mut self, rd: Gp, rs1: Gp, shamtw: U2) {
22144        self.emit_n(
22145            Opcode::SLLIW as i64,
22146            &[
22147                rd.as_operand(),
22148                rs1.as_operand(),
22149                Into::<Imm>::into(shamtw).as_operand(),
22150            ],
22151        );
22152    }
22153}
22154
22155impl SllwEmitter<Gp, Gp, Gp> for Assembler<'_> {
22156    fn sllw(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
22157        self.emit_n(
22158            Opcode::SLLW as i64,
22159            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
22160        );
22161    }
22162}
22163
22164impl SltEmitter<Gp, Gp, Gp> for Assembler<'_> {
22165    fn slt(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
22166        self.emit_n(
22167            Opcode::SLT as i64,
22168            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
22169        );
22170    }
22171}
22172
22173impl<U2: Into<Imm>> SltiEmitter<Gp, Gp, U2> for Assembler<'_> {
22174    fn slti(&mut self, rd: Gp, rs1: Gp, imm: U2) {
22175        self.emit_n(
22176            Opcode::SLTI as i64,
22177            &[
22178                rd.as_operand(),
22179                rs1.as_operand(),
22180                Into::<Imm>::into(imm).as_operand(),
22181            ],
22182        );
22183    }
22184}
22185
22186impl<U2: Into<Imm>> SltiuEmitter<Gp, Gp, U2> for Assembler<'_> {
22187    fn sltiu(&mut self, rd: Gp, rs1: Gp, imm: U2) {
22188        self.emit_n(
22189            Opcode::SLTIU as i64,
22190            &[
22191                rd.as_operand(),
22192                rs1.as_operand(),
22193                Into::<Imm>::into(imm).as_operand(),
22194            ],
22195        );
22196    }
22197}
22198
22199impl SltuEmitter<Gp, Gp, Gp> for Assembler<'_> {
22200    fn sltu(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
22201        self.emit_n(
22202            Opcode::SLTU as i64,
22203            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
22204        );
22205    }
22206}
22207
22208impl SltzEmitter<Gp, Gp> for Assembler<'_> {
22209    fn sltz(&mut self, rd: Gp, rs1: Gp) {
22210        self.emit_n(Opcode::SLTZ as i64, &[rd.as_operand(), rs1.as_operand()]);
22211    }
22212}
22213
22214impl Sm3P0Emitter<Gp, Gp> for Assembler<'_> {
22215    fn sm3p0(&mut self, rd: Gp, rs1: Gp) {
22216        self.emit_n(Opcode::SM3P0 as i64, &[rd.as_operand(), rs1.as_operand()]);
22217    }
22218}
22219
22220impl Sm3P1Emitter<Gp, Gp> for Assembler<'_> {
22221    fn sm3p1(&mut self, rd: Gp, rs1: Gp) {
22222        self.emit_n(Opcode::SM3P1 as i64, &[rd.as_operand(), rs1.as_operand()]);
22223    }
22224}
22225
22226impl<U3: Into<Imm>> Sm4EdEmitter<Gp, Gp, Gp, U3> for Assembler<'_> {
22227    fn sm4ed(&mut self, rd: Gp, rs1: Gp, rs2: Gp, bs: U3) {
22228        self.emit_n(
22229            Opcode::SM4ED as i64,
22230            &[
22231                rd.as_operand(),
22232                rs1.as_operand(),
22233                rs2.as_operand(),
22234                Into::<Imm>::into(bs).as_operand(),
22235            ],
22236        );
22237    }
22238}
22239
22240impl<U3: Into<Imm>> Sm4KsEmitter<Gp, Gp, Gp, U3> for Assembler<'_> {
22241    fn sm4ks(&mut self, rd: Gp, rs1: Gp, rs2: Gp, bs: U3) {
22242        self.emit_n(
22243            Opcode::SM4KS as i64,
22244            &[
22245                rd.as_operand(),
22246                rs1.as_operand(),
22247                rs2.as_operand(),
22248                Into::<Imm>::into(bs).as_operand(),
22249            ],
22250        );
22251    }
22252}
22253
22254impl SnezEmitter<Gp, Gp> for Assembler<'_> {
22255    fn snez(&mut self, rd: Gp, rs2: Gp) {
22256        self.emit_n(Opcode::SNEZ as i64, &[rd.as_operand(), rs2.as_operand()]);
22257    }
22258}
22259
22260impl SraEmitter<Gp, Gp, Gp> for Assembler<'_> {
22261    fn sra(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
22262        self.emit_n(
22263            Opcode::SRA as i64,
22264            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
22265        );
22266    }
22267}
22268
22269impl<U2: Into<Imm>> SraiEmitter<Gp, Gp, U2> for Assembler<'_> {
22270    fn srai(&mut self, rd: Gp, rs1: Gp, shamtd: U2) {
22271        self.emit_n(
22272            Opcode::SRAI as i64,
22273            &[
22274                rd.as_operand(),
22275                rs1.as_operand(),
22276                Into::<Imm>::into(shamtd).as_operand(),
22277            ],
22278        );
22279    }
22280}
22281
22282impl<U2: Into<Imm>> SraiRv32Emitter<Gp, Gp, U2> for Assembler<'_> {
22283    fn srai_rv32(&mut self, rd: Gp, rs1: Gp, shamtw: U2) {
22284        self.emit_n(
22285            Opcode::SRAIRV32 as i64,
22286            &[
22287                rd.as_operand(),
22288                rs1.as_operand(),
22289                Into::<Imm>::into(shamtw).as_operand(),
22290            ],
22291        );
22292    }
22293}
22294
22295impl<U2: Into<Imm>> SraiwEmitter<Gp, Gp, U2> for Assembler<'_> {
22296    fn sraiw(&mut self, rd: Gp, rs1: Gp, shamtw: U2) {
22297        self.emit_n(
22298            Opcode::SRAIW as i64,
22299            &[
22300                rd.as_operand(),
22301                rs1.as_operand(),
22302                Into::<Imm>::into(shamtw).as_operand(),
22303            ],
22304        );
22305    }
22306}
22307
22308impl SrawEmitter<Gp, Gp, Gp> for Assembler<'_> {
22309    fn sraw(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
22310        self.emit_n(
22311            Opcode::SRAW as i64,
22312            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
22313        );
22314    }
22315}
22316
22317impl SretEmitter for Assembler<'_> {
22318    fn sret(&mut self) {
22319        self.emit_n(Opcode::SRET as i64, &[]);
22320    }
22321}
22322
22323impl SrlEmitter<Gp, Gp, Gp> for Assembler<'_> {
22324    fn srl(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
22325        self.emit_n(
22326            Opcode::SRL as i64,
22327            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
22328        );
22329    }
22330}
22331
22332impl<U2: Into<Imm>> SrliEmitter<Gp, Gp, U2> for Assembler<'_> {
22333    fn srli(&mut self, rd: Gp, rs1: Gp, shamtd: U2) {
22334        self.emit_n(
22335            Opcode::SRLI as i64,
22336            &[
22337                rd.as_operand(),
22338                rs1.as_operand(),
22339                Into::<Imm>::into(shamtd).as_operand(),
22340            ],
22341        );
22342    }
22343}
22344
22345impl<U2: Into<Imm>> SrliRv32Emitter<Gp, Gp, U2> for Assembler<'_> {
22346    fn srli_rv32(&mut self, rd: Gp, rs1: Gp, shamtw: U2) {
22347        self.emit_n(
22348            Opcode::SRLIRV32 as i64,
22349            &[
22350                rd.as_operand(),
22351                rs1.as_operand(),
22352                Into::<Imm>::into(shamtw).as_operand(),
22353            ],
22354        );
22355    }
22356}
22357
22358impl<U2: Into<Imm>> SrliwEmitter<Gp, Gp, U2> for Assembler<'_> {
22359    fn srliw(&mut self, rd: Gp, rs1: Gp, shamtw: U2) {
22360        self.emit_n(
22361            Opcode::SRLIW as i64,
22362            &[
22363                rd.as_operand(),
22364                rs1.as_operand(),
22365                Into::<Imm>::into(shamtw).as_operand(),
22366            ],
22367        );
22368    }
22369}
22370
22371impl SrlwEmitter<Gp, Gp, Gp> for Assembler<'_> {
22372    fn srlw(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
22373        self.emit_n(
22374            Opcode::SRLW as i64,
22375            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
22376        );
22377    }
22378}
22379
22380impl<U3: Into<Imm>, U4: Into<Imm>> SsamoswapDEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
22381    fn ssamoswap_d(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
22382        self.emit_n(
22383            Opcode::SSAMOSWAPD as i64,
22384            &[
22385                rd.as_operand(),
22386                rs1.as_operand(),
22387                rs2.as_operand(),
22388                Into::<Imm>::into(aq).as_operand(),
22389                Into::<Imm>::into(rl).as_operand(),
22390            ],
22391        );
22392    }
22393}
22394
22395impl<U3: Into<Imm>, U4: Into<Imm>> SsamoswapWEmitter<Gp, Gp, Gp, U3, U4> for Assembler<'_> {
22396    fn ssamoswap_w(&mut self, rd: Gp, rs1: Gp, rs2: Gp, aq: U3, rl: U4) {
22397        self.emit_n(
22398            Opcode::SSAMOSWAPW as i64,
22399            &[
22400                rd.as_operand(),
22401                rs1.as_operand(),
22402                rs2.as_operand(),
22403                Into::<Imm>::into(aq).as_operand(),
22404                Into::<Imm>::into(rl).as_operand(),
22405            ],
22406        );
22407    }
22408}
22409
22410impl SspopchkX1Emitter for Assembler<'_> {
22411    fn sspopchk_x1(&mut self) {
22412        self.emit_n(Opcode::SSPOPCHKX1 as i64, &[]);
22413    }
22414}
22415
22416impl SspopchkX5Emitter for Assembler<'_> {
22417    fn sspopchk_x5(&mut self) {
22418        self.emit_n(Opcode::SSPOPCHKX5 as i64, &[]);
22419    }
22420}
22421
22422impl SspushX1Emitter for Assembler<'_> {
22423    fn sspush_x1(&mut self) {
22424        self.emit_n(Opcode::SSPUSHX1 as i64, &[]);
22425    }
22426}
22427
22428impl SspushX5Emitter for Assembler<'_> {
22429    fn sspush_x5(&mut self) {
22430        self.emit_n(Opcode::SSPUSHX5 as i64, &[]);
22431    }
22432}
22433
22434impl SsrdpEmitter<Gp> for Assembler<'_> {
22435    fn ssrdp(&mut self, rd: Gp) {
22436        self.emit_n(Opcode::SSRDP as i64, &[rd.as_operand()]);
22437    }
22438}
22439
22440impl SubEmitter<Gp, Gp, Gp> for Assembler<'_> {
22441    fn sub(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
22442        self.emit_n(
22443            Opcode::SUB as i64,
22444            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
22445        );
22446    }
22447}
22448
22449impl SubwEmitter<Gp, Gp, Gp> for Assembler<'_> {
22450    fn subw(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
22451        self.emit_n(
22452            Opcode::SUBW as i64,
22453            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
22454        );
22455    }
22456}
22457
22458impl<U2: Into<Imm>> SwEmitter<Gp, Gp, U2> for Assembler<'_> {
22459    fn sw(&mut self, rs1: Gp, rs2: Gp, imm: U2) {
22460        self.emit_n(
22461            Opcode::SW as i64,
22462            &[
22463                rs1.as_operand(),
22464                rs2.as_operand(),
22465                Into::<Imm>::into(imm).as_operand(),
22466            ],
22467        );
22468    }
22469}
22470
22471impl UnzipEmitter<Gp, Gp> for Assembler<'_> {
22472    fn unzip(&mut self, rd: Gp, rs1: Gp) {
22473        self.emit_n(Opcode::UNZIP as i64, &[rd.as_operand(), rs1.as_operand()]);
22474    }
22475}
22476
22477impl<U3: Into<Imm>> VaaddVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
22478    fn vaadd_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
22479        self.emit_n(
22480            Opcode::VAADDVV as i64,
22481            &[
22482                vd.as_operand(),
22483                vs1.as_operand(),
22484                vs2.as_operand(),
22485                Into::<Imm>::into(vm).as_operand(),
22486            ],
22487        );
22488    }
22489}
22490
22491impl<U3: Into<Imm>> VaaddVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
22492    fn vaadd_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
22493        self.emit_n(
22494            Opcode::VAADDVX as i64,
22495            &[
22496                vd.as_operand(),
22497                vs2.as_operand(),
22498                rs1.as_operand(),
22499                Into::<Imm>::into(vm).as_operand(),
22500            ],
22501        );
22502    }
22503}
22504
22505impl<U3: Into<Imm>> VaadduVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
22506    fn vaaddu_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
22507        self.emit_n(
22508            Opcode::VAADDUVV as i64,
22509            &[
22510                vd.as_operand(),
22511                vs1.as_operand(),
22512                vs2.as_operand(),
22513                Into::<Imm>::into(vm).as_operand(),
22514            ],
22515        );
22516    }
22517}
22518
22519impl<U3: Into<Imm>> VaadduVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
22520    fn vaaddu_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
22521        self.emit_n(
22522            Opcode::VAADDUVX as i64,
22523            &[
22524                vd.as_operand(),
22525                vs2.as_operand(),
22526                rs1.as_operand(),
22527                Into::<Imm>::into(vm).as_operand(),
22528            ],
22529        );
22530    }
22531}
22532
22533impl<U2: Into<Imm>> VadcVimEmitter<Vp, Vp, U2> for Assembler<'_> {
22534    fn vadc_vim(&mut self, vd: Vp, vs2: Vp, simm5: U2) {
22535        self.emit_n(
22536            Opcode::VADCVIM as i64,
22537            &[
22538                vd.as_operand(),
22539                vs2.as_operand(),
22540                Into::<Imm>::into(simm5).as_operand(),
22541            ],
22542        );
22543    }
22544}
22545
22546impl VadcVvmEmitter<Vp, Vp, Vp> for Assembler<'_> {
22547    fn vadc_vvm(&mut self, vd: Vp, vs1: Vp, vs2: Vp) {
22548        self.emit_n(
22549            Opcode::VADCVVM as i64,
22550            &[vd.as_operand(), vs1.as_operand(), vs2.as_operand()],
22551        );
22552    }
22553}
22554
22555impl VadcVxmEmitter<Vp, Gp, Vp> for Assembler<'_> {
22556    fn vadc_vxm(&mut self, vd: Vp, rs1: Gp, vs2: Vp) {
22557        self.emit_n(
22558            Opcode::VADCVXM as i64,
22559            &[vd.as_operand(), rs1.as_operand(), vs2.as_operand()],
22560        );
22561    }
22562}
22563
22564impl<U2: Into<Imm>, U3: Into<Imm>> VaddViEmitter<Vp, Vp, U2, U3> for Assembler<'_> {
22565    fn vadd_vi(&mut self, vd: Vp, vs2: Vp, simm5: U2, vm: U3) {
22566        self.emit_n(
22567            Opcode::VADDVI as i64,
22568            &[
22569                vd.as_operand(),
22570                vs2.as_operand(),
22571                Into::<Imm>::into(simm5).as_operand(),
22572                Into::<Imm>::into(vm).as_operand(),
22573            ],
22574        );
22575    }
22576}
22577
22578impl<U3: Into<Imm>> VaddVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
22579    fn vadd_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
22580        self.emit_n(
22581            Opcode::VADDVV as i64,
22582            &[
22583                vd.as_operand(),
22584                vs1.as_operand(),
22585                vs2.as_operand(),
22586                Into::<Imm>::into(vm).as_operand(),
22587            ],
22588        );
22589    }
22590}
22591
22592impl<U3: Into<Imm>> VaddVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
22593    fn vadd_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
22594        self.emit_n(
22595            Opcode::VADDVX as i64,
22596            &[
22597                vd.as_operand(),
22598                vs2.as_operand(),
22599                rs1.as_operand(),
22600                Into::<Imm>::into(vm).as_operand(),
22601            ],
22602        );
22603    }
22604}
22605
22606impl VaesdfVsEmitter<Vp, Vp> for Assembler<'_> {
22607    fn vaesdf_vs(&mut self, vd: Vp, vs2: Vp) {
22608        self.emit_n(
22609            Opcode::VAESDFVS as i64,
22610            &[vd.as_operand(), vs2.as_operand()],
22611        );
22612    }
22613}
22614
22615impl VaesdfVvEmitter<Vp, Vp> for Assembler<'_> {
22616    fn vaesdf_vv(&mut self, vd: Vp, vs2: Vp) {
22617        self.emit_n(
22618            Opcode::VAESDFVV as i64,
22619            &[vd.as_operand(), vs2.as_operand()],
22620        );
22621    }
22622}
22623
22624impl VaesdmVsEmitter<Vp, Vp> for Assembler<'_> {
22625    fn vaesdm_vs(&mut self, vd: Vp, vs2: Vp) {
22626        self.emit_n(
22627            Opcode::VAESDMVS as i64,
22628            &[vd.as_operand(), vs2.as_operand()],
22629        );
22630    }
22631}
22632
22633impl VaesdmVvEmitter<Vp, Vp> for Assembler<'_> {
22634    fn vaesdm_vv(&mut self, vd: Vp, vs2: Vp) {
22635        self.emit_n(
22636            Opcode::VAESDMVV as i64,
22637            &[vd.as_operand(), vs2.as_operand()],
22638        );
22639    }
22640}
22641
22642impl VaesefVsEmitter<Vp, Vp> for Assembler<'_> {
22643    fn vaesef_vs(&mut self, vd: Vp, vs2: Vp) {
22644        self.emit_n(
22645            Opcode::VAESEFVS as i64,
22646            &[vd.as_operand(), vs2.as_operand()],
22647        );
22648    }
22649}
22650
22651impl VaesefVvEmitter<Vp, Vp> for Assembler<'_> {
22652    fn vaesef_vv(&mut self, vd: Vp, vs2: Vp) {
22653        self.emit_n(
22654            Opcode::VAESEFVV as i64,
22655            &[vd.as_operand(), vs2.as_operand()],
22656        );
22657    }
22658}
22659
22660impl VaesemVsEmitter<Vp, Vp> for Assembler<'_> {
22661    fn vaesem_vs(&mut self, vd: Vp, vs2: Vp) {
22662        self.emit_n(
22663            Opcode::VAESEMVS as i64,
22664            &[vd.as_operand(), vs2.as_operand()],
22665        );
22666    }
22667}
22668
22669impl VaesemVvEmitter<Vp, Vp> for Assembler<'_> {
22670    fn vaesem_vv(&mut self, vd: Vp, vs2: Vp) {
22671        self.emit_n(
22672            Opcode::VAESEMVV as i64,
22673            &[vd.as_operand(), vs2.as_operand()],
22674        );
22675    }
22676}
22677
22678impl<U2: Into<Imm>> Vaeskf1ViEmitter<Vp, Vp, U2> for Assembler<'_> {
22679    fn vaeskf1_vi(&mut self, vd: Vp, vs2: Vp, zimm5: U2) {
22680        self.emit_n(
22681            Opcode::VAESKF1VI as i64,
22682            &[
22683                vd.as_operand(),
22684                vs2.as_operand(),
22685                Into::<Imm>::into(zimm5).as_operand(),
22686            ],
22687        );
22688    }
22689}
22690
22691impl<U2: Into<Imm>> Vaeskf2ViEmitter<Vp, Vp, U2> for Assembler<'_> {
22692    fn vaeskf2_vi(&mut self, vd: Vp, vs2: Vp, zimm5: U2) {
22693        self.emit_n(
22694            Opcode::VAESKF2VI as i64,
22695            &[
22696                vd.as_operand(),
22697                vs2.as_operand(),
22698                Into::<Imm>::into(zimm5).as_operand(),
22699            ],
22700        );
22701    }
22702}
22703
22704impl VaeszVsEmitter<Vp, Vp> for Assembler<'_> {
22705    fn vaesz_vs(&mut self, vd: Vp, vs2: Vp) {
22706        self.emit_n(Opcode::VAESZVS as i64, &[vd.as_operand(), vs2.as_operand()]);
22707    }
22708}
22709
22710impl<U2: Into<Imm>, U3: Into<Imm>> VandViEmitter<Vp, Vp, U2, U3> for Assembler<'_> {
22711    fn vand_vi(&mut self, vd: Vp, vs2: Vp, simm5: U2, vm: U3) {
22712        self.emit_n(
22713            Opcode::VANDVI as i64,
22714            &[
22715                vd.as_operand(),
22716                vs2.as_operand(),
22717                Into::<Imm>::into(simm5).as_operand(),
22718                Into::<Imm>::into(vm).as_operand(),
22719            ],
22720        );
22721    }
22722}
22723
22724impl<U3: Into<Imm>> VandVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
22725    fn vand_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
22726        self.emit_n(
22727            Opcode::VANDVV as i64,
22728            &[
22729                vd.as_operand(),
22730                vs1.as_operand(),
22731                vs2.as_operand(),
22732                Into::<Imm>::into(vm).as_operand(),
22733            ],
22734        );
22735    }
22736}
22737
22738impl<U3: Into<Imm>> VandVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
22739    fn vand_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
22740        self.emit_n(
22741            Opcode::VANDVX as i64,
22742            &[
22743                vd.as_operand(),
22744                vs2.as_operand(),
22745                rs1.as_operand(),
22746                Into::<Imm>::into(vm).as_operand(),
22747            ],
22748        );
22749    }
22750}
22751
22752impl<U3: Into<Imm>> VandnVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
22753    fn vandn_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
22754        self.emit_n(
22755            Opcode::VANDNVV as i64,
22756            &[
22757                vd.as_operand(),
22758                vs1.as_operand(),
22759                vs2.as_operand(),
22760                Into::<Imm>::into(vm).as_operand(),
22761            ],
22762        );
22763    }
22764}
22765
22766impl<U3: Into<Imm>> VandnVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
22767    fn vandn_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
22768        self.emit_n(
22769            Opcode::VANDNVX as i64,
22770            &[
22771                vd.as_operand(),
22772                vs2.as_operand(),
22773                rs1.as_operand(),
22774                Into::<Imm>::into(vm).as_operand(),
22775            ],
22776        );
22777    }
22778}
22779
22780impl<U3: Into<Imm>> VasubVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
22781    fn vasub_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
22782        self.emit_n(
22783            Opcode::VASUBVV as i64,
22784            &[
22785                vd.as_operand(),
22786                vs1.as_operand(),
22787                vs2.as_operand(),
22788                Into::<Imm>::into(vm).as_operand(),
22789            ],
22790        );
22791    }
22792}
22793
22794impl<U3: Into<Imm>> VasubVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
22795    fn vasub_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
22796        self.emit_n(
22797            Opcode::VASUBVX as i64,
22798            &[
22799                vd.as_operand(),
22800                vs2.as_operand(),
22801                rs1.as_operand(),
22802                Into::<Imm>::into(vm).as_operand(),
22803            ],
22804        );
22805    }
22806}
22807
22808impl<U3: Into<Imm>> VasubuVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
22809    fn vasubu_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
22810        self.emit_n(
22811            Opcode::VASUBUVV as i64,
22812            &[
22813                vd.as_operand(),
22814                vs1.as_operand(),
22815                vs2.as_operand(),
22816                Into::<Imm>::into(vm).as_operand(),
22817            ],
22818        );
22819    }
22820}
22821
22822impl<U3: Into<Imm>> VasubuVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
22823    fn vasubu_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
22824        self.emit_n(
22825            Opcode::VASUBUVX as i64,
22826            &[
22827                vd.as_operand(),
22828                vs2.as_operand(),
22829                rs1.as_operand(),
22830                Into::<Imm>::into(vm).as_operand(),
22831            ],
22832        );
22833    }
22834}
22835
22836impl<U2: Into<Imm>> Vbrev8VEmitter<Vp, Vp, U2> for Assembler<'_> {
22837    fn vbrev8_v(&mut self, vd: Vp, vs2: Vp, vm: U2) {
22838        self.emit_n(
22839            Opcode::VBREV8V as i64,
22840            &[
22841                vd.as_operand(),
22842                vs2.as_operand(),
22843                Into::<Imm>::into(vm).as_operand(),
22844            ],
22845        );
22846    }
22847}
22848
22849impl<U2: Into<Imm>> VbrevVEmitter<Vp, Vp, U2> for Assembler<'_> {
22850    fn vbrev_v(&mut self, vd: Vp, vs2: Vp, vm: U2) {
22851        self.emit_n(
22852            Opcode::VBREVV as i64,
22853            &[
22854                vd.as_operand(),
22855                vs2.as_operand(),
22856                Into::<Imm>::into(vm).as_operand(),
22857            ],
22858        );
22859    }
22860}
22861
22862impl<U3: Into<Imm>> VclmulVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
22863    fn vclmul_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
22864        self.emit_n(
22865            Opcode::VCLMULVV as i64,
22866            &[
22867                vd.as_operand(),
22868                vs1.as_operand(),
22869                vs2.as_operand(),
22870                Into::<Imm>::into(vm).as_operand(),
22871            ],
22872        );
22873    }
22874}
22875
22876impl<U3: Into<Imm>> VclmulVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
22877    fn vclmul_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
22878        self.emit_n(
22879            Opcode::VCLMULVX as i64,
22880            &[
22881                vd.as_operand(),
22882                vs2.as_operand(),
22883                rs1.as_operand(),
22884                Into::<Imm>::into(vm).as_operand(),
22885            ],
22886        );
22887    }
22888}
22889
22890impl<U3: Into<Imm>> VclmulhVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
22891    fn vclmulh_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
22892        self.emit_n(
22893            Opcode::VCLMULHVV as i64,
22894            &[
22895                vd.as_operand(),
22896                vs1.as_operand(),
22897                vs2.as_operand(),
22898                Into::<Imm>::into(vm).as_operand(),
22899            ],
22900        );
22901    }
22902}
22903
22904impl<U3: Into<Imm>> VclmulhVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
22905    fn vclmulh_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
22906        self.emit_n(
22907            Opcode::VCLMULHVX as i64,
22908            &[
22909                vd.as_operand(),
22910                vs2.as_operand(),
22911                rs1.as_operand(),
22912                Into::<Imm>::into(vm).as_operand(),
22913            ],
22914        );
22915    }
22916}
22917
22918impl<U2: Into<Imm>> VclzVEmitter<Vp, Vp, U2> for Assembler<'_> {
22919    fn vclz_v(&mut self, vd: Vp, vs2: Vp, vm: U2) {
22920        self.emit_n(
22921            Opcode::VCLZV as i64,
22922            &[
22923                vd.as_operand(),
22924                vs2.as_operand(),
22925                Into::<Imm>::into(vm).as_operand(),
22926            ],
22927        );
22928    }
22929}
22930
22931impl VcompressVmEmitter<Vp, Vp, Vp> for Assembler<'_> {
22932    fn vcompress_vm(&mut self, vd: Vp, vs1: Vp, vs2: Vp) {
22933        self.emit_n(
22934            Opcode::VCOMPRESSVM as i64,
22935            &[vd.as_operand(), vs1.as_operand(), vs2.as_operand()],
22936        );
22937    }
22938}
22939
22940impl<U2: Into<Imm>> VcpopMEmitter<Gp, Vp, U2> for Assembler<'_> {
22941    fn vcpop_m(&mut self, rd: Gp, vs2: Vp, vm: U2) {
22942        self.emit_n(
22943            Opcode::VCPOPM as i64,
22944            &[
22945                rd.as_operand(),
22946                vs2.as_operand(),
22947                Into::<Imm>::into(vm).as_operand(),
22948            ],
22949        );
22950    }
22951}
22952
22953impl<U2: Into<Imm>> VcpopVEmitter<Vp, Vp, U2> for Assembler<'_> {
22954    fn vcpop_v(&mut self, vd: Vp, vs2: Vp, vm: U2) {
22955        self.emit_n(
22956            Opcode::VCPOPV as i64,
22957            &[
22958                vd.as_operand(),
22959                vs2.as_operand(),
22960                Into::<Imm>::into(vm).as_operand(),
22961            ],
22962        );
22963    }
22964}
22965
22966impl<U2: Into<Imm>> VctzVEmitter<Vp, Vp, U2> for Assembler<'_> {
22967    fn vctz_v(&mut self, vd: Vp, vs2: Vp, vm: U2) {
22968        self.emit_n(
22969            Opcode::VCTZV as i64,
22970            &[
22971                vd.as_operand(),
22972                vs2.as_operand(),
22973                Into::<Imm>::into(vm).as_operand(),
22974            ],
22975        );
22976    }
22977}
22978
22979impl<U3: Into<Imm>> VdivVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
22980    fn vdiv_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
22981        self.emit_n(
22982            Opcode::VDIVVV as i64,
22983            &[
22984                vd.as_operand(),
22985                vs1.as_operand(),
22986                vs2.as_operand(),
22987                Into::<Imm>::into(vm).as_operand(),
22988            ],
22989        );
22990    }
22991}
22992
22993impl<U3: Into<Imm>> VdivVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
22994    fn vdiv_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
22995        self.emit_n(
22996            Opcode::VDIVVX as i64,
22997            &[
22998                vd.as_operand(),
22999                vs2.as_operand(),
23000                rs1.as_operand(),
23001                Into::<Imm>::into(vm).as_operand(),
23002            ],
23003        );
23004    }
23005}
23006
23007impl<U3: Into<Imm>> VdivuVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
23008    fn vdivu_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
23009        self.emit_n(
23010            Opcode::VDIVUVV as i64,
23011            &[
23012                vd.as_operand(),
23013                vs1.as_operand(),
23014                vs2.as_operand(),
23015                Into::<Imm>::into(vm).as_operand(),
23016            ],
23017        );
23018    }
23019}
23020
23021impl<U3: Into<Imm>> VdivuVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
23022    fn vdivu_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
23023        self.emit_n(
23024            Opcode::VDIVUVX as i64,
23025            &[
23026                vd.as_operand(),
23027                vs2.as_operand(),
23028                rs1.as_operand(),
23029                Into::<Imm>::into(vm).as_operand(),
23030            ],
23031        );
23032    }
23033}
23034
23035impl<U3: Into<Imm>> VfaddVfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
23036    fn vfadd_vf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
23037        self.emit_n(
23038            Opcode::VFADDVF as i64,
23039            &[
23040                vd.as_operand(),
23041                vs2.as_operand(),
23042                rs1.as_operand(),
23043                Into::<Imm>::into(vm).as_operand(),
23044            ],
23045        );
23046    }
23047}
23048
23049impl<U3: Into<Imm>> VfaddVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
23050    fn vfadd_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
23051        self.emit_n(
23052            Opcode::VFADDVV as i64,
23053            &[
23054                vd.as_operand(),
23055                vs1.as_operand(),
23056                vs2.as_operand(),
23057                Into::<Imm>::into(vm).as_operand(),
23058            ],
23059        );
23060    }
23061}
23062
23063impl<U2: Into<Imm>> VfclassVEmitter<Vp, Vp, U2> for Assembler<'_> {
23064    fn vfclass_v(&mut self, vd: Vp, vs2: Vp, vm: U2) {
23065        self.emit_n(
23066            Opcode::VFCLASSV as i64,
23067            &[
23068                vd.as_operand(),
23069                vs2.as_operand(),
23070                Into::<Imm>::into(vm).as_operand(),
23071            ],
23072        );
23073    }
23074}
23075
23076impl<U2: Into<Imm>> VfcvtFXVEmitter<Vp, Vp, U2> for Assembler<'_> {
23077    fn vfcvt_f_x_v(&mut self, vd: Vp, vs2: Vp, vm: U2) {
23078        self.emit_n(
23079            Opcode::VFCVTFXV as i64,
23080            &[
23081                vd.as_operand(),
23082                vs2.as_operand(),
23083                Into::<Imm>::into(vm).as_operand(),
23084            ],
23085        );
23086    }
23087}
23088
23089impl<U2: Into<Imm>> VfcvtFXuVEmitter<Vp, Vp, U2> for Assembler<'_> {
23090    fn vfcvt_f_xu_v(&mut self, vd: Vp, vs2: Vp, vm: U2) {
23091        self.emit_n(
23092            Opcode::VFCVTFXUV as i64,
23093            &[
23094                vd.as_operand(),
23095                vs2.as_operand(),
23096                Into::<Imm>::into(vm).as_operand(),
23097            ],
23098        );
23099    }
23100}
23101
23102impl<U2: Into<Imm>> VfcvtRtzXFVEmitter<Vp, Vp, U2> for Assembler<'_> {
23103    fn vfcvt_rtz_x_f_v(&mut self, vd: Vp, vs2: Vp, vm: U2) {
23104        self.emit_n(
23105            Opcode::VFCVTRTZXFV as i64,
23106            &[
23107                vd.as_operand(),
23108                vs2.as_operand(),
23109                Into::<Imm>::into(vm).as_operand(),
23110            ],
23111        );
23112    }
23113}
23114
23115impl<U2: Into<Imm>> VfcvtRtzXuFVEmitter<Vp, Vp, U2> for Assembler<'_> {
23116    fn vfcvt_rtz_xu_f_v(&mut self, vd: Vp, vs2: Vp, vm: U2) {
23117        self.emit_n(
23118            Opcode::VFCVTRTZXUFV as i64,
23119            &[
23120                vd.as_operand(),
23121                vs2.as_operand(),
23122                Into::<Imm>::into(vm).as_operand(),
23123            ],
23124        );
23125    }
23126}
23127
23128impl<U2: Into<Imm>> VfcvtXFVEmitter<Vp, Vp, U2> for Assembler<'_> {
23129    fn vfcvt_x_f_v(&mut self, vd: Vp, vs2: Vp, vm: U2) {
23130        self.emit_n(
23131            Opcode::VFCVTXFV as i64,
23132            &[
23133                vd.as_operand(),
23134                vs2.as_operand(),
23135                Into::<Imm>::into(vm).as_operand(),
23136            ],
23137        );
23138    }
23139}
23140
23141impl<U2: Into<Imm>> VfcvtXuFVEmitter<Vp, Vp, U2> for Assembler<'_> {
23142    fn vfcvt_xu_f_v(&mut self, vd: Vp, vs2: Vp, vm: U2) {
23143        self.emit_n(
23144            Opcode::VFCVTXUFV as i64,
23145            &[
23146                vd.as_operand(),
23147                vs2.as_operand(),
23148                Into::<Imm>::into(vm).as_operand(),
23149            ],
23150        );
23151    }
23152}
23153
23154impl<U3: Into<Imm>> VfdivVfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
23155    fn vfdiv_vf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
23156        self.emit_n(
23157            Opcode::VFDIVVF as i64,
23158            &[
23159                vd.as_operand(),
23160                vs2.as_operand(),
23161                rs1.as_operand(),
23162                Into::<Imm>::into(vm).as_operand(),
23163            ],
23164        );
23165    }
23166}
23167
23168impl<U3: Into<Imm>> VfdivVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
23169    fn vfdiv_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
23170        self.emit_n(
23171            Opcode::VFDIVVV as i64,
23172            &[
23173                vd.as_operand(),
23174                vs1.as_operand(),
23175                vs2.as_operand(),
23176                Into::<Imm>::into(vm).as_operand(),
23177            ],
23178        );
23179    }
23180}
23181
23182impl<U2: Into<Imm>> VfirstMEmitter<Gp, Vp, U2> for Assembler<'_> {
23183    fn vfirst_m(&mut self, rd: Gp, vs2: Vp, vm: U2) {
23184        self.emit_n(
23185            Opcode::VFIRSTM as i64,
23186            &[
23187                rd.as_operand(),
23188                vs2.as_operand(),
23189                Into::<Imm>::into(vm).as_operand(),
23190            ],
23191        );
23192    }
23193}
23194
23195impl<U3: Into<Imm>> VfmaccVfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
23196    fn vfmacc_vf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
23197        self.emit_n(
23198            Opcode::VFMACCVF as i64,
23199            &[
23200                vd.as_operand(),
23201                vs2.as_operand(),
23202                rs1.as_operand(),
23203                Into::<Imm>::into(vm).as_operand(),
23204            ],
23205        );
23206    }
23207}
23208
23209impl<U3: Into<Imm>> VfmaccVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
23210    fn vfmacc_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
23211        self.emit_n(
23212            Opcode::VFMACCVV as i64,
23213            &[
23214                vd.as_operand(),
23215                vs1.as_operand(),
23216                vs2.as_operand(),
23217                Into::<Imm>::into(vm).as_operand(),
23218            ],
23219        );
23220    }
23221}
23222
23223impl<U3: Into<Imm>> VfmaddVfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
23224    fn vfmadd_vf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
23225        self.emit_n(
23226            Opcode::VFMADDVF as i64,
23227            &[
23228                vd.as_operand(),
23229                vs2.as_operand(),
23230                rs1.as_operand(),
23231                Into::<Imm>::into(vm).as_operand(),
23232            ],
23233        );
23234    }
23235}
23236
23237impl<U3: Into<Imm>> VfmaddVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
23238    fn vfmadd_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
23239        self.emit_n(
23240            Opcode::VFMADDVV as i64,
23241            &[
23242                vd.as_operand(),
23243                vs1.as_operand(),
23244                vs2.as_operand(),
23245                Into::<Imm>::into(vm).as_operand(),
23246            ],
23247        );
23248    }
23249}
23250
23251impl<U3: Into<Imm>> VfmaxVfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
23252    fn vfmax_vf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
23253        self.emit_n(
23254            Opcode::VFMAXVF as i64,
23255            &[
23256                vd.as_operand(),
23257                vs2.as_operand(),
23258                rs1.as_operand(),
23259                Into::<Imm>::into(vm).as_operand(),
23260            ],
23261        );
23262    }
23263}
23264
23265impl<U3: Into<Imm>> VfmaxVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
23266    fn vfmax_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
23267        self.emit_n(
23268            Opcode::VFMAXVV as i64,
23269            &[
23270                vd.as_operand(),
23271                vs1.as_operand(),
23272                vs2.as_operand(),
23273                Into::<Imm>::into(vm).as_operand(),
23274            ],
23275        );
23276    }
23277}
23278
23279impl VfmergeVfmEmitter<Vp, Fp, Vp> for Assembler<'_> {
23280    fn vfmerge_vfm(&mut self, vd: Vp, rs1: Fp, vs2: Vp) {
23281        self.emit_n(
23282            Opcode::VFMERGEVFM as i64,
23283            &[vd.as_operand(), rs1.as_operand(), vs2.as_operand()],
23284        );
23285    }
23286}
23287
23288impl<U3: Into<Imm>> VfminVfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
23289    fn vfmin_vf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
23290        self.emit_n(
23291            Opcode::VFMINVF as i64,
23292            &[
23293                vd.as_operand(),
23294                vs2.as_operand(),
23295                rs1.as_operand(),
23296                Into::<Imm>::into(vm).as_operand(),
23297            ],
23298        );
23299    }
23300}
23301
23302impl<U3: Into<Imm>> VfminVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
23303    fn vfmin_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
23304        self.emit_n(
23305            Opcode::VFMINVV as i64,
23306            &[
23307                vd.as_operand(),
23308                vs1.as_operand(),
23309                vs2.as_operand(),
23310                Into::<Imm>::into(vm).as_operand(),
23311            ],
23312        );
23313    }
23314}
23315
23316impl<U3: Into<Imm>> VfmsacVfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
23317    fn vfmsac_vf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
23318        self.emit_n(
23319            Opcode::VFMSACVF as i64,
23320            &[
23321                vd.as_operand(),
23322                vs2.as_operand(),
23323                rs1.as_operand(),
23324                Into::<Imm>::into(vm).as_operand(),
23325            ],
23326        );
23327    }
23328}
23329
23330impl<U3: Into<Imm>> VfmsacVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
23331    fn vfmsac_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
23332        self.emit_n(
23333            Opcode::VFMSACVV as i64,
23334            &[
23335                vd.as_operand(),
23336                vs1.as_operand(),
23337                vs2.as_operand(),
23338                Into::<Imm>::into(vm).as_operand(),
23339            ],
23340        );
23341    }
23342}
23343
23344impl<U3: Into<Imm>> VfmsubVfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
23345    fn vfmsub_vf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
23346        self.emit_n(
23347            Opcode::VFMSUBVF as i64,
23348            &[
23349                vd.as_operand(),
23350                vs2.as_operand(),
23351                rs1.as_operand(),
23352                Into::<Imm>::into(vm).as_operand(),
23353            ],
23354        );
23355    }
23356}
23357
23358impl<U3: Into<Imm>> VfmsubVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
23359    fn vfmsub_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
23360        self.emit_n(
23361            Opcode::VFMSUBVV as i64,
23362            &[
23363                vd.as_operand(),
23364                vs1.as_operand(),
23365                vs2.as_operand(),
23366                Into::<Imm>::into(vm).as_operand(),
23367            ],
23368        );
23369    }
23370}
23371
23372impl<U3: Into<Imm>> VfmulVfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
23373    fn vfmul_vf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
23374        self.emit_n(
23375            Opcode::VFMULVF as i64,
23376            &[
23377                vd.as_operand(),
23378                vs2.as_operand(),
23379                rs1.as_operand(),
23380                Into::<Imm>::into(vm).as_operand(),
23381            ],
23382        );
23383    }
23384}
23385
23386impl<U3: Into<Imm>> VfmulVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
23387    fn vfmul_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
23388        self.emit_n(
23389            Opcode::VFMULVV as i64,
23390            &[
23391                vd.as_operand(),
23392                vs1.as_operand(),
23393                vs2.as_operand(),
23394                Into::<Imm>::into(vm).as_operand(),
23395            ],
23396        );
23397    }
23398}
23399
23400impl VfmvFSEmitter<Fp, Vp> for Assembler<'_> {
23401    fn vfmv_f_s(&mut self, rd: Fp, vs2: Vp) {
23402        self.emit_n(Opcode::VFMVFS as i64, &[rd.as_operand(), vs2.as_operand()]);
23403    }
23404}
23405
23406impl VfmvSFEmitter<Vp, Fp> for Assembler<'_> {
23407    fn vfmv_s_f(&mut self, vd: Vp, rs1: Fp) {
23408        self.emit_n(Opcode::VFMVSF as i64, &[vd.as_operand(), rs1.as_operand()]);
23409    }
23410}
23411
23412impl VfmvVFEmitter<Vp, Fp> for Assembler<'_> {
23413    fn vfmv_v_f(&mut self, vd: Vp, rs1: Fp) {
23414        self.emit_n(Opcode::VFMVVF as i64, &[vd.as_operand(), rs1.as_operand()]);
23415    }
23416}
23417
23418impl<U2: Into<Imm>> VfncvtFFWEmitter<Vp, Vp, U2> for Assembler<'_> {
23419    fn vfncvt_f_f_w(&mut self, vd: Vp, vs2: Vp, vm: U2) {
23420        self.emit_n(
23421            Opcode::VFNCVTFFW as i64,
23422            &[
23423                vd.as_operand(),
23424                vs2.as_operand(),
23425                Into::<Imm>::into(vm).as_operand(),
23426            ],
23427        );
23428    }
23429}
23430
23431impl<U2: Into<Imm>> VfncvtFXWEmitter<Vp, Vp, U2> for Assembler<'_> {
23432    fn vfncvt_f_x_w(&mut self, vd: Vp, vs2: Vp, vm: U2) {
23433        self.emit_n(
23434            Opcode::VFNCVTFXW as i64,
23435            &[
23436                vd.as_operand(),
23437                vs2.as_operand(),
23438                Into::<Imm>::into(vm).as_operand(),
23439            ],
23440        );
23441    }
23442}
23443
23444impl<U2: Into<Imm>> VfncvtFXuWEmitter<Vp, Vp, U2> for Assembler<'_> {
23445    fn vfncvt_f_xu_w(&mut self, vd: Vp, vs2: Vp, vm: U2) {
23446        self.emit_n(
23447            Opcode::VFNCVTFXUW as i64,
23448            &[
23449                vd.as_operand(),
23450                vs2.as_operand(),
23451                Into::<Imm>::into(vm).as_operand(),
23452            ],
23453        );
23454    }
23455}
23456
23457impl<U2: Into<Imm>> VfncvtRodFFWEmitter<Vp, Vp, U2> for Assembler<'_> {
23458    fn vfncvt_rod_f_f_w(&mut self, vd: Vp, vs2: Vp, vm: U2) {
23459        self.emit_n(
23460            Opcode::VFNCVTRODFFW as i64,
23461            &[
23462                vd.as_operand(),
23463                vs2.as_operand(),
23464                Into::<Imm>::into(vm).as_operand(),
23465            ],
23466        );
23467    }
23468}
23469
23470impl<U2: Into<Imm>> VfncvtRtzXFWEmitter<Vp, Vp, U2> for Assembler<'_> {
23471    fn vfncvt_rtz_x_f_w(&mut self, vd: Vp, vs2: Vp, vm: U2) {
23472        self.emit_n(
23473            Opcode::VFNCVTRTZXFW as i64,
23474            &[
23475                vd.as_operand(),
23476                vs2.as_operand(),
23477                Into::<Imm>::into(vm).as_operand(),
23478            ],
23479        );
23480    }
23481}
23482
23483impl<U2: Into<Imm>> VfncvtRtzXuFWEmitter<Vp, Vp, U2> for Assembler<'_> {
23484    fn vfncvt_rtz_xu_f_w(&mut self, vd: Vp, vs2: Vp, vm: U2) {
23485        self.emit_n(
23486            Opcode::VFNCVTRTZXUFW as i64,
23487            &[
23488                vd.as_operand(),
23489                vs2.as_operand(),
23490                Into::<Imm>::into(vm).as_operand(),
23491            ],
23492        );
23493    }
23494}
23495
23496impl<U2: Into<Imm>> VfncvtXFWEmitter<Vp, Vp, U2> for Assembler<'_> {
23497    fn vfncvt_x_f_w(&mut self, vd: Vp, vs2: Vp, vm: U2) {
23498        self.emit_n(
23499            Opcode::VFNCVTXFW as i64,
23500            &[
23501                vd.as_operand(),
23502                vs2.as_operand(),
23503                Into::<Imm>::into(vm).as_operand(),
23504            ],
23505        );
23506    }
23507}
23508
23509impl<U2: Into<Imm>> VfncvtXuFWEmitter<Vp, Vp, U2> for Assembler<'_> {
23510    fn vfncvt_xu_f_w(&mut self, vd: Vp, vs2: Vp, vm: U2) {
23511        self.emit_n(
23512            Opcode::VFNCVTXUFW as i64,
23513            &[
23514                vd.as_operand(),
23515                vs2.as_operand(),
23516                Into::<Imm>::into(vm).as_operand(),
23517            ],
23518        );
23519    }
23520}
23521
23522impl<U2: Into<Imm>> Vfncvtbf16FFWEmitter<Vp, Vp, U2> for Assembler<'_> {
23523    fn vfncvtbf16_f_f_w(&mut self, vd: Vp, vs2: Vp, vm: U2) {
23524        self.emit_n(
23525            Opcode::VFNCVTBF16FFW as i64,
23526            &[
23527                vd.as_operand(),
23528                vs2.as_operand(),
23529                Into::<Imm>::into(vm).as_operand(),
23530            ],
23531        );
23532    }
23533}
23534
23535impl<U3: Into<Imm>> VfnmaccVfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
23536    fn vfnmacc_vf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
23537        self.emit_n(
23538            Opcode::VFNMACCVF as i64,
23539            &[
23540                vd.as_operand(),
23541                vs2.as_operand(),
23542                rs1.as_operand(),
23543                Into::<Imm>::into(vm).as_operand(),
23544            ],
23545        );
23546    }
23547}
23548
23549impl<U3: Into<Imm>> VfnmaccVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
23550    fn vfnmacc_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
23551        self.emit_n(
23552            Opcode::VFNMACCVV as i64,
23553            &[
23554                vd.as_operand(),
23555                vs1.as_operand(),
23556                vs2.as_operand(),
23557                Into::<Imm>::into(vm).as_operand(),
23558            ],
23559        );
23560    }
23561}
23562
23563impl<U3: Into<Imm>> VfnmaddVfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
23564    fn vfnmadd_vf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
23565        self.emit_n(
23566            Opcode::VFNMADDVF as i64,
23567            &[
23568                vd.as_operand(),
23569                vs2.as_operand(),
23570                rs1.as_operand(),
23571                Into::<Imm>::into(vm).as_operand(),
23572            ],
23573        );
23574    }
23575}
23576
23577impl<U3: Into<Imm>> VfnmaddVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
23578    fn vfnmadd_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
23579        self.emit_n(
23580            Opcode::VFNMADDVV as i64,
23581            &[
23582                vd.as_operand(),
23583                vs1.as_operand(),
23584                vs2.as_operand(),
23585                Into::<Imm>::into(vm).as_operand(),
23586            ],
23587        );
23588    }
23589}
23590
23591impl<U3: Into<Imm>> VfnmsacVfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
23592    fn vfnmsac_vf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
23593        self.emit_n(
23594            Opcode::VFNMSACVF as i64,
23595            &[
23596                vd.as_operand(),
23597                vs2.as_operand(),
23598                rs1.as_operand(),
23599                Into::<Imm>::into(vm).as_operand(),
23600            ],
23601        );
23602    }
23603}
23604
23605impl<U3: Into<Imm>> VfnmsacVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
23606    fn vfnmsac_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
23607        self.emit_n(
23608            Opcode::VFNMSACVV as i64,
23609            &[
23610                vd.as_operand(),
23611                vs1.as_operand(),
23612                vs2.as_operand(),
23613                Into::<Imm>::into(vm).as_operand(),
23614            ],
23615        );
23616    }
23617}
23618
23619impl<U3: Into<Imm>> VfnmsubVfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
23620    fn vfnmsub_vf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
23621        self.emit_n(
23622            Opcode::VFNMSUBVF as i64,
23623            &[
23624                vd.as_operand(),
23625                vs2.as_operand(),
23626                rs1.as_operand(),
23627                Into::<Imm>::into(vm).as_operand(),
23628            ],
23629        );
23630    }
23631}
23632
23633impl<U3: Into<Imm>> VfnmsubVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
23634    fn vfnmsub_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
23635        self.emit_n(
23636            Opcode::VFNMSUBVV as i64,
23637            &[
23638                vd.as_operand(),
23639                vs1.as_operand(),
23640                vs2.as_operand(),
23641                Into::<Imm>::into(vm).as_operand(),
23642            ],
23643        );
23644    }
23645}
23646
23647impl<U3: Into<Imm>> VfrdivVfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
23648    fn vfrdiv_vf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
23649        self.emit_n(
23650            Opcode::VFRDIVVF as i64,
23651            &[
23652                vd.as_operand(),
23653                vs2.as_operand(),
23654                rs1.as_operand(),
23655                Into::<Imm>::into(vm).as_operand(),
23656            ],
23657        );
23658    }
23659}
23660
23661impl<U2: Into<Imm>> Vfrec7VEmitter<Vp, Vp, U2> for Assembler<'_> {
23662    fn vfrec7_v(&mut self, vd: Vp, vs2: Vp, vm: U2) {
23663        self.emit_n(
23664            Opcode::VFREC7V as i64,
23665            &[
23666                vd.as_operand(),
23667                vs2.as_operand(),
23668                Into::<Imm>::into(vm).as_operand(),
23669            ],
23670        );
23671    }
23672}
23673
23674impl<U3: Into<Imm>> VfredmaxVsEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
23675    fn vfredmax_vs(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
23676        self.emit_n(
23677            Opcode::VFREDMAXVS as i64,
23678            &[
23679                vd.as_operand(),
23680                vs1.as_operand(),
23681                vs2.as_operand(),
23682                Into::<Imm>::into(vm).as_operand(),
23683            ],
23684        );
23685    }
23686}
23687
23688impl<U3: Into<Imm>> VfredminVsEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
23689    fn vfredmin_vs(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
23690        self.emit_n(
23691            Opcode::VFREDMINVS as i64,
23692            &[
23693                vd.as_operand(),
23694                vs1.as_operand(),
23695                vs2.as_operand(),
23696                Into::<Imm>::into(vm).as_operand(),
23697            ],
23698        );
23699    }
23700}
23701
23702impl<U3: Into<Imm>> VfredosumVsEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
23703    fn vfredosum_vs(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
23704        self.emit_n(
23705            Opcode::VFREDOSUMVS as i64,
23706            &[
23707                vd.as_operand(),
23708                vs1.as_operand(),
23709                vs2.as_operand(),
23710                Into::<Imm>::into(vm).as_operand(),
23711            ],
23712        );
23713    }
23714}
23715
23716impl<U3: Into<Imm>> VfredsumVsEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
23717    fn vfredsum_vs(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
23718        self.emit_n(
23719            Opcode::VFREDSUMVS as i64,
23720            &[
23721                vd.as_operand(),
23722                vs1.as_operand(),
23723                vs2.as_operand(),
23724                Into::<Imm>::into(vm).as_operand(),
23725            ],
23726        );
23727    }
23728}
23729
23730impl<U3: Into<Imm>> VfredusumVsEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
23731    fn vfredusum_vs(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
23732        self.emit_n(
23733            Opcode::VFREDUSUMVS as i64,
23734            &[
23735                vd.as_operand(),
23736                vs1.as_operand(),
23737                vs2.as_operand(),
23738                Into::<Imm>::into(vm).as_operand(),
23739            ],
23740        );
23741    }
23742}
23743
23744impl<U2: Into<Imm>> Vfrsqrt7VEmitter<Vp, Vp, U2> for Assembler<'_> {
23745    fn vfrsqrt7_v(&mut self, vd: Vp, vs2: Vp, vm: U2) {
23746        self.emit_n(
23747            Opcode::VFRSQRT7V as i64,
23748            &[
23749                vd.as_operand(),
23750                vs2.as_operand(),
23751                Into::<Imm>::into(vm).as_operand(),
23752            ],
23753        );
23754    }
23755}
23756
23757impl<U3: Into<Imm>> VfrsubVfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
23758    fn vfrsub_vf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
23759        self.emit_n(
23760            Opcode::VFRSUBVF as i64,
23761            &[
23762                vd.as_operand(),
23763                vs2.as_operand(),
23764                rs1.as_operand(),
23765                Into::<Imm>::into(vm).as_operand(),
23766            ],
23767        );
23768    }
23769}
23770
23771impl<U3: Into<Imm>> VfsgnjVfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
23772    fn vfsgnj_vf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
23773        self.emit_n(
23774            Opcode::VFSGNJVF as i64,
23775            &[
23776                vd.as_operand(),
23777                vs2.as_operand(),
23778                rs1.as_operand(),
23779                Into::<Imm>::into(vm).as_operand(),
23780            ],
23781        );
23782    }
23783}
23784
23785impl<U3: Into<Imm>> VfsgnjVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
23786    fn vfsgnj_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
23787        self.emit_n(
23788            Opcode::VFSGNJVV as i64,
23789            &[
23790                vd.as_operand(),
23791                vs1.as_operand(),
23792                vs2.as_operand(),
23793                Into::<Imm>::into(vm).as_operand(),
23794            ],
23795        );
23796    }
23797}
23798
23799impl<U3: Into<Imm>> VfsgnjnVfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
23800    fn vfsgnjn_vf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
23801        self.emit_n(
23802            Opcode::VFSGNJNVF as i64,
23803            &[
23804                vd.as_operand(),
23805                vs2.as_operand(),
23806                rs1.as_operand(),
23807                Into::<Imm>::into(vm).as_operand(),
23808            ],
23809        );
23810    }
23811}
23812
23813impl<U3: Into<Imm>> VfsgnjnVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
23814    fn vfsgnjn_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
23815        self.emit_n(
23816            Opcode::VFSGNJNVV as i64,
23817            &[
23818                vd.as_operand(),
23819                vs1.as_operand(),
23820                vs2.as_operand(),
23821                Into::<Imm>::into(vm).as_operand(),
23822            ],
23823        );
23824    }
23825}
23826
23827impl<U3: Into<Imm>> VfsgnjxVfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
23828    fn vfsgnjx_vf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
23829        self.emit_n(
23830            Opcode::VFSGNJXVF as i64,
23831            &[
23832                vd.as_operand(),
23833                vs2.as_operand(),
23834                rs1.as_operand(),
23835                Into::<Imm>::into(vm).as_operand(),
23836            ],
23837        );
23838    }
23839}
23840
23841impl<U3: Into<Imm>> VfsgnjxVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
23842    fn vfsgnjx_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
23843        self.emit_n(
23844            Opcode::VFSGNJXVV as i64,
23845            &[
23846                vd.as_operand(),
23847                vs1.as_operand(),
23848                vs2.as_operand(),
23849                Into::<Imm>::into(vm).as_operand(),
23850            ],
23851        );
23852    }
23853}
23854
23855impl<U3: Into<Imm>> Vfslide1DownVfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
23856    fn vfslide1down_vf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
23857        self.emit_n(
23858            Opcode::VFSLIDE1DOWNVF as i64,
23859            &[
23860                vd.as_operand(),
23861                vs2.as_operand(),
23862                rs1.as_operand(),
23863                Into::<Imm>::into(vm).as_operand(),
23864            ],
23865        );
23866    }
23867}
23868
23869impl<U3: Into<Imm>> Vfslide1UpVfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
23870    fn vfslide1up_vf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
23871        self.emit_n(
23872            Opcode::VFSLIDE1UPVF as i64,
23873            &[
23874                vd.as_operand(),
23875                vs2.as_operand(),
23876                rs1.as_operand(),
23877                Into::<Imm>::into(vm).as_operand(),
23878            ],
23879        );
23880    }
23881}
23882
23883impl<U2: Into<Imm>> VfsqrtVEmitter<Vp, Vp, U2> for Assembler<'_> {
23884    fn vfsqrt_v(&mut self, vd: Vp, vs2: Vp, vm: U2) {
23885        self.emit_n(
23886            Opcode::VFSQRTV as i64,
23887            &[
23888                vd.as_operand(),
23889                vs2.as_operand(),
23890                Into::<Imm>::into(vm).as_operand(),
23891            ],
23892        );
23893    }
23894}
23895
23896impl<U3: Into<Imm>> VfsubVfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
23897    fn vfsub_vf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
23898        self.emit_n(
23899            Opcode::VFSUBVF as i64,
23900            &[
23901                vd.as_operand(),
23902                vs2.as_operand(),
23903                rs1.as_operand(),
23904                Into::<Imm>::into(vm).as_operand(),
23905            ],
23906        );
23907    }
23908}
23909
23910impl<U3: Into<Imm>> VfsubVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
23911    fn vfsub_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
23912        self.emit_n(
23913            Opcode::VFSUBVV as i64,
23914            &[
23915                vd.as_operand(),
23916                vs1.as_operand(),
23917                vs2.as_operand(),
23918                Into::<Imm>::into(vm).as_operand(),
23919            ],
23920        );
23921    }
23922}
23923
23924impl<U3: Into<Imm>> VfwaddVfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
23925    fn vfwadd_vf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
23926        self.emit_n(
23927            Opcode::VFWADDVF as i64,
23928            &[
23929                vd.as_operand(),
23930                vs2.as_operand(),
23931                rs1.as_operand(),
23932                Into::<Imm>::into(vm).as_operand(),
23933            ],
23934        );
23935    }
23936}
23937
23938impl<U3: Into<Imm>> VfwaddVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
23939    fn vfwadd_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
23940        self.emit_n(
23941            Opcode::VFWADDVV as i64,
23942            &[
23943                vd.as_operand(),
23944                vs1.as_operand(),
23945                vs2.as_operand(),
23946                Into::<Imm>::into(vm).as_operand(),
23947            ],
23948        );
23949    }
23950}
23951
23952impl<U3: Into<Imm>> VfwaddWfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
23953    fn vfwadd_wf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
23954        self.emit_n(
23955            Opcode::VFWADDWF as i64,
23956            &[
23957                vd.as_operand(),
23958                vs2.as_operand(),
23959                rs1.as_operand(),
23960                Into::<Imm>::into(vm).as_operand(),
23961            ],
23962        );
23963    }
23964}
23965
23966impl<U3: Into<Imm>> VfwaddWvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
23967    fn vfwadd_wv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
23968        self.emit_n(
23969            Opcode::VFWADDWV as i64,
23970            &[
23971                vd.as_operand(),
23972                vs1.as_operand(),
23973                vs2.as_operand(),
23974                Into::<Imm>::into(vm).as_operand(),
23975            ],
23976        );
23977    }
23978}
23979
23980impl<U2: Into<Imm>> VfwcvtFFVEmitter<Vp, Vp, U2> for Assembler<'_> {
23981    fn vfwcvt_f_f_v(&mut self, vd: Vp, vs2: Vp, vm: U2) {
23982        self.emit_n(
23983            Opcode::VFWCVTFFV as i64,
23984            &[
23985                vd.as_operand(),
23986                vs2.as_operand(),
23987                Into::<Imm>::into(vm).as_operand(),
23988            ],
23989        );
23990    }
23991}
23992
23993impl<U2: Into<Imm>> VfwcvtFXVEmitter<Vp, Vp, U2> for Assembler<'_> {
23994    fn vfwcvt_f_x_v(&mut self, vd: Vp, vs2: Vp, vm: U2) {
23995        self.emit_n(
23996            Opcode::VFWCVTFXV as i64,
23997            &[
23998                vd.as_operand(),
23999                vs2.as_operand(),
24000                Into::<Imm>::into(vm).as_operand(),
24001            ],
24002        );
24003    }
24004}
24005
24006impl<U2: Into<Imm>> VfwcvtFXuVEmitter<Vp, Vp, U2> for Assembler<'_> {
24007    fn vfwcvt_f_xu_v(&mut self, vd: Vp, vs2: Vp, vm: U2) {
24008        self.emit_n(
24009            Opcode::VFWCVTFXUV as i64,
24010            &[
24011                vd.as_operand(),
24012                vs2.as_operand(),
24013                Into::<Imm>::into(vm).as_operand(),
24014            ],
24015        );
24016    }
24017}
24018
24019impl<U2: Into<Imm>> VfwcvtRtzXFVEmitter<Vp, Vp, U2> for Assembler<'_> {
24020    fn vfwcvt_rtz_x_f_v(&mut self, vd: Vp, vs2: Vp, vm: U2) {
24021        self.emit_n(
24022            Opcode::VFWCVTRTZXFV as i64,
24023            &[
24024                vd.as_operand(),
24025                vs2.as_operand(),
24026                Into::<Imm>::into(vm).as_operand(),
24027            ],
24028        );
24029    }
24030}
24031
24032impl<U2: Into<Imm>> VfwcvtRtzXuFVEmitter<Vp, Vp, U2> for Assembler<'_> {
24033    fn vfwcvt_rtz_xu_f_v(&mut self, vd: Vp, vs2: Vp, vm: U2) {
24034        self.emit_n(
24035            Opcode::VFWCVTRTZXUFV as i64,
24036            &[
24037                vd.as_operand(),
24038                vs2.as_operand(),
24039                Into::<Imm>::into(vm).as_operand(),
24040            ],
24041        );
24042    }
24043}
24044
24045impl<U2: Into<Imm>> VfwcvtXFVEmitter<Vp, Vp, U2> for Assembler<'_> {
24046    fn vfwcvt_x_f_v(&mut self, vd: Vp, vs2: Vp, vm: U2) {
24047        self.emit_n(
24048            Opcode::VFWCVTXFV as i64,
24049            &[
24050                vd.as_operand(),
24051                vs2.as_operand(),
24052                Into::<Imm>::into(vm).as_operand(),
24053            ],
24054        );
24055    }
24056}
24057
24058impl<U2: Into<Imm>> VfwcvtXuFVEmitter<Vp, Vp, U2> for Assembler<'_> {
24059    fn vfwcvt_xu_f_v(&mut self, vd: Vp, vs2: Vp, vm: U2) {
24060        self.emit_n(
24061            Opcode::VFWCVTXUFV as i64,
24062            &[
24063                vd.as_operand(),
24064                vs2.as_operand(),
24065                Into::<Imm>::into(vm).as_operand(),
24066            ],
24067        );
24068    }
24069}
24070
24071impl<U2: Into<Imm>> Vfwcvtbf16FFVEmitter<Vp, Vp, U2> for Assembler<'_> {
24072    fn vfwcvtbf16_f_f_v(&mut self, vd: Vp, vs2: Vp, vm: U2) {
24073        self.emit_n(
24074            Opcode::VFWCVTBF16FFV as i64,
24075            &[
24076                vd.as_operand(),
24077                vs2.as_operand(),
24078                Into::<Imm>::into(vm).as_operand(),
24079            ],
24080        );
24081    }
24082}
24083
24084impl<U3: Into<Imm>> VfwmaccVfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
24085    fn vfwmacc_vf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
24086        self.emit_n(
24087            Opcode::VFWMACCVF as i64,
24088            &[
24089                vd.as_operand(),
24090                vs2.as_operand(),
24091                rs1.as_operand(),
24092                Into::<Imm>::into(vm).as_operand(),
24093            ],
24094        );
24095    }
24096}
24097
24098impl<U3: Into<Imm>> VfwmaccVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
24099    fn vfwmacc_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
24100        self.emit_n(
24101            Opcode::VFWMACCVV as i64,
24102            &[
24103                vd.as_operand(),
24104                vs1.as_operand(),
24105                vs2.as_operand(),
24106                Into::<Imm>::into(vm).as_operand(),
24107            ],
24108        );
24109    }
24110}
24111
24112impl<U3: Into<Imm>> Vfwmaccbf16VfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
24113    fn vfwmaccbf16_vf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
24114        self.emit_n(
24115            Opcode::VFWMACCBF16VF as i64,
24116            &[
24117                vd.as_operand(),
24118                vs2.as_operand(),
24119                rs1.as_operand(),
24120                Into::<Imm>::into(vm).as_operand(),
24121            ],
24122        );
24123    }
24124}
24125
24126impl<U3: Into<Imm>> Vfwmaccbf16VvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
24127    fn vfwmaccbf16_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
24128        self.emit_n(
24129            Opcode::VFWMACCBF16VV as i64,
24130            &[
24131                vd.as_operand(),
24132                vs1.as_operand(),
24133                vs2.as_operand(),
24134                Into::<Imm>::into(vm).as_operand(),
24135            ],
24136        );
24137    }
24138}
24139
24140impl<U3: Into<Imm>> VfwmsacVfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
24141    fn vfwmsac_vf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
24142        self.emit_n(
24143            Opcode::VFWMSACVF as i64,
24144            &[
24145                vd.as_operand(),
24146                vs2.as_operand(),
24147                rs1.as_operand(),
24148                Into::<Imm>::into(vm).as_operand(),
24149            ],
24150        );
24151    }
24152}
24153
24154impl<U3: Into<Imm>> VfwmsacVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
24155    fn vfwmsac_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
24156        self.emit_n(
24157            Opcode::VFWMSACVV as i64,
24158            &[
24159                vd.as_operand(),
24160                vs1.as_operand(),
24161                vs2.as_operand(),
24162                Into::<Imm>::into(vm).as_operand(),
24163            ],
24164        );
24165    }
24166}
24167
24168impl<U3: Into<Imm>> VfwmulVfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
24169    fn vfwmul_vf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
24170        self.emit_n(
24171            Opcode::VFWMULVF as i64,
24172            &[
24173                vd.as_operand(),
24174                vs2.as_operand(),
24175                rs1.as_operand(),
24176                Into::<Imm>::into(vm).as_operand(),
24177            ],
24178        );
24179    }
24180}
24181
24182impl<U3: Into<Imm>> VfwmulVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
24183    fn vfwmul_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
24184        self.emit_n(
24185            Opcode::VFWMULVV as i64,
24186            &[
24187                vd.as_operand(),
24188                vs1.as_operand(),
24189                vs2.as_operand(),
24190                Into::<Imm>::into(vm).as_operand(),
24191            ],
24192        );
24193    }
24194}
24195
24196impl<U3: Into<Imm>> VfwnmaccVfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
24197    fn vfwnmacc_vf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
24198        self.emit_n(
24199            Opcode::VFWNMACCVF as i64,
24200            &[
24201                vd.as_operand(),
24202                vs2.as_operand(),
24203                rs1.as_operand(),
24204                Into::<Imm>::into(vm).as_operand(),
24205            ],
24206        );
24207    }
24208}
24209
24210impl<U3: Into<Imm>> VfwnmaccVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
24211    fn vfwnmacc_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
24212        self.emit_n(
24213            Opcode::VFWNMACCVV as i64,
24214            &[
24215                vd.as_operand(),
24216                vs1.as_operand(),
24217                vs2.as_operand(),
24218                Into::<Imm>::into(vm).as_operand(),
24219            ],
24220        );
24221    }
24222}
24223
24224impl<U3: Into<Imm>> VfwnmsacVfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
24225    fn vfwnmsac_vf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
24226        self.emit_n(
24227            Opcode::VFWNMSACVF as i64,
24228            &[
24229                vd.as_operand(),
24230                vs2.as_operand(),
24231                rs1.as_operand(),
24232                Into::<Imm>::into(vm).as_operand(),
24233            ],
24234        );
24235    }
24236}
24237
24238impl<U3: Into<Imm>> VfwnmsacVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
24239    fn vfwnmsac_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
24240        self.emit_n(
24241            Opcode::VFWNMSACVV as i64,
24242            &[
24243                vd.as_operand(),
24244                vs1.as_operand(),
24245                vs2.as_operand(),
24246                Into::<Imm>::into(vm).as_operand(),
24247            ],
24248        );
24249    }
24250}
24251
24252impl<U3: Into<Imm>> VfwredosumVsEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
24253    fn vfwredosum_vs(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
24254        self.emit_n(
24255            Opcode::VFWREDOSUMVS as i64,
24256            &[
24257                vd.as_operand(),
24258                vs1.as_operand(),
24259                vs2.as_operand(),
24260                Into::<Imm>::into(vm).as_operand(),
24261            ],
24262        );
24263    }
24264}
24265
24266impl<U3: Into<Imm>> VfwredsumVsEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
24267    fn vfwredsum_vs(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
24268        self.emit_n(
24269            Opcode::VFWREDSUMVS as i64,
24270            &[
24271                vd.as_operand(),
24272                vs1.as_operand(),
24273                vs2.as_operand(),
24274                Into::<Imm>::into(vm).as_operand(),
24275            ],
24276        );
24277    }
24278}
24279
24280impl<U3: Into<Imm>> VfwredusumVsEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
24281    fn vfwredusum_vs(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
24282        self.emit_n(
24283            Opcode::VFWREDUSUMVS as i64,
24284            &[
24285                vd.as_operand(),
24286                vs1.as_operand(),
24287                vs2.as_operand(),
24288                Into::<Imm>::into(vm).as_operand(),
24289            ],
24290        );
24291    }
24292}
24293
24294impl<U3: Into<Imm>> VfwsubVfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
24295    fn vfwsub_vf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
24296        self.emit_n(
24297            Opcode::VFWSUBVF as i64,
24298            &[
24299                vd.as_operand(),
24300                vs2.as_operand(),
24301                rs1.as_operand(),
24302                Into::<Imm>::into(vm).as_operand(),
24303            ],
24304        );
24305    }
24306}
24307
24308impl<U3: Into<Imm>> VfwsubVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
24309    fn vfwsub_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
24310        self.emit_n(
24311            Opcode::VFWSUBVV as i64,
24312            &[
24313                vd.as_operand(),
24314                vs1.as_operand(),
24315                vs2.as_operand(),
24316                Into::<Imm>::into(vm).as_operand(),
24317            ],
24318        );
24319    }
24320}
24321
24322impl<U3: Into<Imm>> VfwsubWfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
24323    fn vfwsub_wf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
24324        self.emit_n(
24325            Opcode::VFWSUBWF as i64,
24326            &[
24327                vd.as_operand(),
24328                vs2.as_operand(),
24329                rs1.as_operand(),
24330                Into::<Imm>::into(vm).as_operand(),
24331            ],
24332        );
24333    }
24334}
24335
24336impl<U3: Into<Imm>> VfwsubWvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
24337    fn vfwsub_wv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
24338        self.emit_n(
24339            Opcode::VFWSUBWV as i64,
24340            &[
24341                vd.as_operand(),
24342                vs1.as_operand(),
24343                vs2.as_operand(),
24344                Into::<Imm>::into(vm).as_operand(),
24345            ],
24346        );
24347    }
24348}
24349
24350impl VghshVvEmitter<Vp, Vp, Vp> for Assembler<'_> {
24351    fn vghsh_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp) {
24352        self.emit_n(
24353            Opcode::VGHSHVV as i64,
24354            &[vd.as_operand(), vs1.as_operand(), vs2.as_operand()],
24355        );
24356    }
24357}
24358
24359impl VgmulVvEmitter<Vp, Vp> for Assembler<'_> {
24360    fn vgmul_vv(&mut self, vd: Vp, vs2: Vp) {
24361        self.emit_n(Opcode::VGMULVV as i64, &[vd.as_operand(), vs2.as_operand()]);
24362    }
24363}
24364
24365impl<U1: Into<Imm>> VidVEmitter<Vp, U1> for Assembler<'_> {
24366    fn vid_v(&mut self, vd: Vp, vm: U1) {
24367        self.emit_n(
24368            Opcode::VIDV as i64,
24369            &[vd.as_operand(), Into::<Imm>::into(vm).as_operand()],
24370        );
24371    }
24372}
24373
24374impl<U2: Into<Imm>> ViotaMEmitter<Vp, Vp, U2> for Assembler<'_> {
24375    fn viota_m(&mut self, vd: Vp, vs2: Vp, vm: U2) {
24376        self.emit_n(
24377            Opcode::VIOTAM as i64,
24378            &[
24379                vd.as_operand(),
24380                vs2.as_operand(),
24381                Into::<Imm>::into(vm).as_operand(),
24382            ],
24383        );
24384    }
24385}
24386
24387impl Vl1RVEmitter<Vp, Gp> for Assembler<'_> {
24388    fn vl1r_v(&mut self, vd: Vp, rs1: Gp) {
24389        self.emit_n(Opcode::VL1RV as i64, &[vd.as_operand(), rs1.as_operand()]);
24390    }
24391}
24392
24393impl Vl1Re16VEmitter<Vp, Gp> for Assembler<'_> {
24394    fn vl1re16_v(&mut self, vd: Vp, rs1: Gp) {
24395        self.emit_n(
24396            Opcode::VL1RE16V as i64,
24397            &[vd.as_operand(), rs1.as_operand()],
24398        );
24399    }
24400}
24401
24402impl Vl1Re32VEmitter<Vp, Gp> for Assembler<'_> {
24403    fn vl1re32_v(&mut self, vd: Vp, rs1: Gp) {
24404        self.emit_n(
24405            Opcode::VL1RE32V as i64,
24406            &[vd.as_operand(), rs1.as_operand()],
24407        );
24408    }
24409}
24410
24411impl Vl1Re64VEmitter<Vp, Gp> for Assembler<'_> {
24412    fn vl1re64_v(&mut self, vd: Vp, rs1: Gp) {
24413        self.emit_n(
24414            Opcode::VL1RE64V as i64,
24415            &[vd.as_operand(), rs1.as_operand()],
24416        );
24417    }
24418}
24419
24420impl Vl1Re8VEmitter<Vp, Gp> for Assembler<'_> {
24421    fn vl1re8_v(&mut self, vd: Vp, rs1: Gp) {
24422        self.emit_n(Opcode::VL1RE8V as i64, &[vd.as_operand(), rs1.as_operand()]);
24423    }
24424}
24425
24426impl Vl2RVEmitter<Vp, Gp> for Assembler<'_> {
24427    fn vl2r_v(&mut self, vd: Vp, rs1: Gp) {
24428        self.emit_n(Opcode::VL2RV as i64, &[vd.as_operand(), rs1.as_operand()]);
24429    }
24430}
24431
24432impl Vl2Re16VEmitter<Vp, Gp> for Assembler<'_> {
24433    fn vl2re16_v(&mut self, vd: Vp, rs1: Gp) {
24434        self.emit_n(
24435            Opcode::VL2RE16V as i64,
24436            &[vd.as_operand(), rs1.as_operand()],
24437        );
24438    }
24439}
24440
24441impl Vl2Re32VEmitter<Vp, Gp> for Assembler<'_> {
24442    fn vl2re32_v(&mut self, vd: Vp, rs1: Gp) {
24443        self.emit_n(
24444            Opcode::VL2RE32V as i64,
24445            &[vd.as_operand(), rs1.as_operand()],
24446        );
24447    }
24448}
24449
24450impl Vl2Re64VEmitter<Vp, Gp> for Assembler<'_> {
24451    fn vl2re64_v(&mut self, vd: Vp, rs1: Gp) {
24452        self.emit_n(
24453            Opcode::VL2RE64V as i64,
24454            &[vd.as_operand(), rs1.as_operand()],
24455        );
24456    }
24457}
24458
24459impl Vl2Re8VEmitter<Vp, Gp> for Assembler<'_> {
24460    fn vl2re8_v(&mut self, vd: Vp, rs1: Gp) {
24461        self.emit_n(Opcode::VL2RE8V as i64, &[vd.as_operand(), rs1.as_operand()]);
24462    }
24463}
24464
24465impl Vl4RVEmitter<Vp, Gp> for Assembler<'_> {
24466    fn vl4r_v(&mut self, vd: Vp, rs1: Gp) {
24467        self.emit_n(Opcode::VL4RV as i64, &[vd.as_operand(), rs1.as_operand()]);
24468    }
24469}
24470
24471impl Vl4Re16VEmitter<Vp, Gp> for Assembler<'_> {
24472    fn vl4re16_v(&mut self, vd: Vp, rs1: Gp) {
24473        self.emit_n(
24474            Opcode::VL4RE16V as i64,
24475            &[vd.as_operand(), rs1.as_operand()],
24476        );
24477    }
24478}
24479
24480impl Vl4Re32VEmitter<Vp, Gp> for Assembler<'_> {
24481    fn vl4re32_v(&mut self, vd: Vp, rs1: Gp) {
24482        self.emit_n(
24483            Opcode::VL4RE32V as i64,
24484            &[vd.as_operand(), rs1.as_operand()],
24485        );
24486    }
24487}
24488
24489impl Vl4Re64VEmitter<Vp, Gp> for Assembler<'_> {
24490    fn vl4re64_v(&mut self, vd: Vp, rs1: Gp) {
24491        self.emit_n(
24492            Opcode::VL4RE64V as i64,
24493            &[vd.as_operand(), rs1.as_operand()],
24494        );
24495    }
24496}
24497
24498impl Vl4Re8VEmitter<Vp, Gp> for Assembler<'_> {
24499    fn vl4re8_v(&mut self, vd: Vp, rs1: Gp) {
24500        self.emit_n(Opcode::VL4RE8V as i64, &[vd.as_operand(), rs1.as_operand()]);
24501    }
24502}
24503
24504impl Vl8RVEmitter<Vp, Gp> for Assembler<'_> {
24505    fn vl8r_v(&mut self, vd: Vp, rs1: Gp) {
24506        self.emit_n(Opcode::VL8RV as i64, &[vd.as_operand(), rs1.as_operand()]);
24507    }
24508}
24509
24510impl Vl8Re16VEmitter<Vp, Gp> for Assembler<'_> {
24511    fn vl8re16_v(&mut self, vd: Vp, rs1: Gp) {
24512        self.emit_n(
24513            Opcode::VL8RE16V as i64,
24514            &[vd.as_operand(), rs1.as_operand()],
24515        );
24516    }
24517}
24518
24519impl Vl8Re32VEmitter<Vp, Gp> for Assembler<'_> {
24520    fn vl8re32_v(&mut self, vd: Vp, rs1: Gp) {
24521        self.emit_n(
24522            Opcode::VL8RE32V as i64,
24523            &[vd.as_operand(), rs1.as_operand()],
24524        );
24525    }
24526}
24527
24528impl Vl8Re64VEmitter<Vp, Gp> for Assembler<'_> {
24529    fn vl8re64_v(&mut self, vd: Vp, rs1: Gp) {
24530        self.emit_n(
24531            Opcode::VL8RE64V as i64,
24532            &[vd.as_operand(), rs1.as_operand()],
24533        );
24534    }
24535}
24536
24537impl Vl8Re8VEmitter<Vp, Gp> for Assembler<'_> {
24538    fn vl8re8_v(&mut self, vd: Vp, rs1: Gp) {
24539        self.emit_n(Opcode::VL8RE8V as i64, &[vd.as_operand(), rs1.as_operand()]);
24540    }
24541}
24542
24543impl<U2: Into<Imm>, U3: Into<Imm>> Vle16VEmitter<Vp, Gp, U2, U3> for Assembler<'_> {
24544    fn vle16_v(&mut self, vd: Vp, rs1: Gp, vm: U2, nf: U3) {
24545        self.emit_n(
24546            Opcode::VLE16V as i64,
24547            &[
24548                vd.as_operand(),
24549                rs1.as_operand(),
24550                Into::<Imm>::into(vm).as_operand(),
24551                Into::<Imm>::into(nf).as_operand(),
24552            ],
24553        );
24554    }
24555}
24556
24557impl<U2: Into<Imm>, U3: Into<Imm>> Vle16FfVEmitter<Vp, Gp, U2, U3> for Assembler<'_> {
24558    fn vle16ff_v(&mut self, vd: Vp, rs1: Gp, vm: U2, nf: U3) {
24559        self.emit_n(
24560            Opcode::VLE16FFV as i64,
24561            &[
24562                vd.as_operand(),
24563                rs1.as_operand(),
24564                Into::<Imm>::into(vm).as_operand(),
24565                Into::<Imm>::into(nf).as_operand(),
24566            ],
24567        );
24568    }
24569}
24570
24571impl Vle1VEmitter<Vp, Gp> for Assembler<'_> {
24572    fn vle1_v(&mut self, vd: Vp, rs1: Gp) {
24573        self.emit_n(Opcode::VLE1V as i64, &[vd.as_operand(), rs1.as_operand()]);
24574    }
24575}
24576
24577impl<U2: Into<Imm>, U3: Into<Imm>> Vle32VEmitter<Vp, Gp, U2, U3> for Assembler<'_> {
24578    fn vle32_v(&mut self, vd: Vp, rs1: Gp, vm: U2, nf: U3) {
24579        self.emit_n(
24580            Opcode::VLE32V as i64,
24581            &[
24582                vd.as_operand(),
24583                rs1.as_operand(),
24584                Into::<Imm>::into(vm).as_operand(),
24585                Into::<Imm>::into(nf).as_operand(),
24586            ],
24587        );
24588    }
24589}
24590
24591impl<U2: Into<Imm>, U3: Into<Imm>> Vle32FfVEmitter<Vp, Gp, U2, U3> for Assembler<'_> {
24592    fn vle32ff_v(&mut self, vd: Vp, rs1: Gp, vm: U2, nf: U3) {
24593        self.emit_n(
24594            Opcode::VLE32FFV as i64,
24595            &[
24596                vd.as_operand(),
24597                rs1.as_operand(),
24598                Into::<Imm>::into(vm).as_operand(),
24599                Into::<Imm>::into(nf).as_operand(),
24600            ],
24601        );
24602    }
24603}
24604
24605impl<U2: Into<Imm>, U3: Into<Imm>> Vle64VEmitter<Vp, Gp, U2, U3> for Assembler<'_> {
24606    fn vle64_v(&mut self, vd: Vp, rs1: Gp, vm: U2, nf: U3) {
24607        self.emit_n(
24608            Opcode::VLE64V as i64,
24609            &[
24610                vd.as_operand(),
24611                rs1.as_operand(),
24612                Into::<Imm>::into(vm).as_operand(),
24613                Into::<Imm>::into(nf).as_operand(),
24614            ],
24615        );
24616    }
24617}
24618
24619impl<U2: Into<Imm>, U3: Into<Imm>> Vle64FfVEmitter<Vp, Gp, U2, U3> for Assembler<'_> {
24620    fn vle64ff_v(&mut self, vd: Vp, rs1: Gp, vm: U2, nf: U3) {
24621        self.emit_n(
24622            Opcode::VLE64FFV as i64,
24623            &[
24624                vd.as_operand(),
24625                rs1.as_operand(),
24626                Into::<Imm>::into(vm).as_operand(),
24627                Into::<Imm>::into(nf).as_operand(),
24628            ],
24629        );
24630    }
24631}
24632
24633impl<U2: Into<Imm>, U3: Into<Imm>> Vle8VEmitter<Vp, Gp, U2, U3> for Assembler<'_> {
24634    fn vle8_v(&mut self, vd: Vp, rs1: Gp, vm: U2, nf: U3) {
24635        self.emit_n(
24636            Opcode::VLE8V as i64,
24637            &[
24638                vd.as_operand(),
24639                rs1.as_operand(),
24640                Into::<Imm>::into(vm).as_operand(),
24641                Into::<Imm>::into(nf).as_operand(),
24642            ],
24643        );
24644    }
24645}
24646
24647impl<U2: Into<Imm>, U3: Into<Imm>> Vle8FfVEmitter<Vp, Gp, U2, U3> for Assembler<'_> {
24648    fn vle8ff_v(&mut self, vd: Vp, rs1: Gp, vm: U2, nf: U3) {
24649        self.emit_n(
24650            Opcode::VLE8FFV as i64,
24651            &[
24652                vd.as_operand(),
24653                rs1.as_operand(),
24654                Into::<Imm>::into(vm).as_operand(),
24655                Into::<Imm>::into(nf).as_operand(),
24656            ],
24657        );
24658    }
24659}
24660
24661impl VlmVEmitter<Vp, Gp> for Assembler<'_> {
24662    fn vlm_v(&mut self, vd: Vp, rs1: Gp) {
24663        self.emit_n(Opcode::VLMV as i64, &[vd.as_operand(), rs1.as_operand()]);
24664    }
24665}
24666
24667impl<U3: Into<Imm>, U4: Into<Imm>> Vloxei16VEmitter<Vp, Gp, Vp, U3, U4> for Assembler<'_> {
24668    fn vloxei16_v(&mut self, vd: Vp, rs1: Gp, vs2: Vp, vm: U3, nf: U4) {
24669        self.emit_n(
24670            Opcode::VLOXEI16V as i64,
24671            &[
24672                vd.as_operand(),
24673                rs1.as_operand(),
24674                vs2.as_operand(),
24675                Into::<Imm>::into(vm).as_operand(),
24676                Into::<Imm>::into(nf).as_operand(),
24677            ],
24678        );
24679    }
24680}
24681
24682impl<U3: Into<Imm>, U4: Into<Imm>> Vloxei32VEmitter<Vp, Gp, Vp, U3, U4> for Assembler<'_> {
24683    fn vloxei32_v(&mut self, vd: Vp, rs1: Gp, vs2: Vp, vm: U3, nf: U4) {
24684        self.emit_n(
24685            Opcode::VLOXEI32V as i64,
24686            &[
24687                vd.as_operand(),
24688                rs1.as_operand(),
24689                vs2.as_operand(),
24690                Into::<Imm>::into(vm).as_operand(),
24691                Into::<Imm>::into(nf).as_operand(),
24692            ],
24693        );
24694    }
24695}
24696
24697impl<U3: Into<Imm>, U4: Into<Imm>> Vloxei64VEmitter<Vp, Gp, Vp, U3, U4> for Assembler<'_> {
24698    fn vloxei64_v(&mut self, vd: Vp, rs1: Gp, vs2: Vp, vm: U3, nf: U4) {
24699        self.emit_n(
24700            Opcode::VLOXEI64V as i64,
24701            &[
24702                vd.as_operand(),
24703                rs1.as_operand(),
24704                vs2.as_operand(),
24705                Into::<Imm>::into(vm).as_operand(),
24706                Into::<Imm>::into(nf).as_operand(),
24707            ],
24708        );
24709    }
24710}
24711
24712impl<U3: Into<Imm>, U4: Into<Imm>> Vloxei8VEmitter<Vp, Gp, Vp, U3, U4> for Assembler<'_> {
24713    fn vloxei8_v(&mut self, vd: Vp, rs1: Gp, vs2: Vp, vm: U3, nf: U4) {
24714        self.emit_n(
24715            Opcode::VLOXEI8V as i64,
24716            &[
24717                vd.as_operand(),
24718                rs1.as_operand(),
24719                vs2.as_operand(),
24720                Into::<Imm>::into(vm).as_operand(),
24721                Into::<Imm>::into(nf).as_operand(),
24722            ],
24723        );
24724    }
24725}
24726
24727impl<U3: Into<Imm>, U4: Into<Imm>> Vlse16VEmitter<Vp, Gp, Gp, U3, U4> for Assembler<'_> {
24728    fn vlse16_v(&mut self, vd: Vp, rs1: Gp, rs2: Gp, vm: U3, nf: U4) {
24729        self.emit_n(
24730            Opcode::VLSE16V as i64,
24731            &[
24732                vd.as_operand(),
24733                rs1.as_operand(),
24734                rs2.as_operand(),
24735                Into::<Imm>::into(vm).as_operand(),
24736                Into::<Imm>::into(nf).as_operand(),
24737            ],
24738        );
24739    }
24740}
24741
24742impl<U3: Into<Imm>, U4: Into<Imm>> Vlse32VEmitter<Vp, Gp, Gp, U3, U4> for Assembler<'_> {
24743    fn vlse32_v(&mut self, vd: Vp, rs1: Gp, rs2: Gp, vm: U3, nf: U4) {
24744        self.emit_n(
24745            Opcode::VLSE32V as i64,
24746            &[
24747                vd.as_operand(),
24748                rs1.as_operand(),
24749                rs2.as_operand(),
24750                Into::<Imm>::into(vm).as_operand(),
24751                Into::<Imm>::into(nf).as_operand(),
24752            ],
24753        );
24754    }
24755}
24756
24757impl<U3: Into<Imm>, U4: Into<Imm>> Vlse64VEmitter<Vp, Gp, Gp, U3, U4> for Assembler<'_> {
24758    fn vlse64_v(&mut self, vd: Vp, rs1: Gp, rs2: Gp, vm: U3, nf: U4) {
24759        self.emit_n(
24760            Opcode::VLSE64V as i64,
24761            &[
24762                vd.as_operand(),
24763                rs1.as_operand(),
24764                rs2.as_operand(),
24765                Into::<Imm>::into(vm).as_operand(),
24766                Into::<Imm>::into(nf).as_operand(),
24767            ],
24768        );
24769    }
24770}
24771
24772impl<U3: Into<Imm>, U4: Into<Imm>> Vlse8VEmitter<Vp, Gp, Gp, U3, U4> for Assembler<'_> {
24773    fn vlse8_v(&mut self, vd: Vp, rs1: Gp, rs2: Gp, vm: U3, nf: U4) {
24774        self.emit_n(
24775            Opcode::VLSE8V as i64,
24776            &[
24777                vd.as_operand(),
24778                rs1.as_operand(),
24779                rs2.as_operand(),
24780                Into::<Imm>::into(vm).as_operand(),
24781                Into::<Imm>::into(nf).as_operand(),
24782            ],
24783        );
24784    }
24785}
24786
24787impl<U3: Into<Imm>, U4: Into<Imm>> Vluxei16VEmitter<Vp, Gp, Vp, U3, U4> for Assembler<'_> {
24788    fn vluxei16_v(&mut self, vd: Vp, rs1: Gp, vs2: Vp, vm: U3, nf: U4) {
24789        self.emit_n(
24790            Opcode::VLUXEI16V as i64,
24791            &[
24792                vd.as_operand(),
24793                rs1.as_operand(),
24794                vs2.as_operand(),
24795                Into::<Imm>::into(vm).as_operand(),
24796                Into::<Imm>::into(nf).as_operand(),
24797            ],
24798        );
24799    }
24800}
24801
24802impl<U3: Into<Imm>, U4: Into<Imm>> Vluxei32VEmitter<Vp, Gp, Vp, U3, U4> for Assembler<'_> {
24803    fn vluxei32_v(&mut self, vd: Vp, rs1: Gp, vs2: Vp, vm: U3, nf: U4) {
24804        self.emit_n(
24805            Opcode::VLUXEI32V as i64,
24806            &[
24807                vd.as_operand(),
24808                rs1.as_operand(),
24809                vs2.as_operand(),
24810                Into::<Imm>::into(vm).as_operand(),
24811                Into::<Imm>::into(nf).as_operand(),
24812            ],
24813        );
24814    }
24815}
24816
24817impl<U3: Into<Imm>, U4: Into<Imm>> Vluxei64VEmitter<Vp, Gp, Vp, U3, U4> for Assembler<'_> {
24818    fn vluxei64_v(&mut self, vd: Vp, rs1: Gp, vs2: Vp, vm: U3, nf: U4) {
24819        self.emit_n(
24820            Opcode::VLUXEI64V as i64,
24821            &[
24822                vd.as_operand(),
24823                rs1.as_operand(),
24824                vs2.as_operand(),
24825                Into::<Imm>::into(vm).as_operand(),
24826                Into::<Imm>::into(nf).as_operand(),
24827            ],
24828        );
24829    }
24830}
24831
24832impl<U3: Into<Imm>, U4: Into<Imm>> Vluxei8VEmitter<Vp, Gp, Vp, U3, U4> for Assembler<'_> {
24833    fn vluxei8_v(&mut self, vd: Vp, rs1: Gp, vs2: Vp, vm: U3, nf: U4) {
24834        self.emit_n(
24835            Opcode::VLUXEI8V as i64,
24836            &[
24837                vd.as_operand(),
24838                rs1.as_operand(),
24839                vs2.as_operand(),
24840                Into::<Imm>::into(vm).as_operand(),
24841                Into::<Imm>::into(nf).as_operand(),
24842            ],
24843        );
24844    }
24845}
24846
24847impl<U3: Into<Imm>> VmaccVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
24848    fn vmacc_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
24849        self.emit_n(
24850            Opcode::VMACCVV as i64,
24851            &[
24852                vd.as_operand(),
24853                vs1.as_operand(),
24854                vs2.as_operand(),
24855                Into::<Imm>::into(vm).as_operand(),
24856            ],
24857        );
24858    }
24859}
24860
24861impl<U3: Into<Imm>> VmaccVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
24862    fn vmacc_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
24863        self.emit_n(
24864            Opcode::VMACCVX as i64,
24865            &[
24866                vd.as_operand(),
24867                vs2.as_operand(),
24868                rs1.as_operand(),
24869                Into::<Imm>::into(vm).as_operand(),
24870            ],
24871        );
24872    }
24873}
24874
24875impl<U2: Into<Imm>> VmadcViEmitter<Vp, Vp, U2> for Assembler<'_> {
24876    fn vmadc_vi(&mut self, vd: Vp, vs2: Vp, simm5: U2) {
24877        self.emit_n(
24878            Opcode::VMADCVI as i64,
24879            &[
24880                vd.as_operand(),
24881                vs2.as_operand(),
24882                Into::<Imm>::into(simm5).as_operand(),
24883            ],
24884        );
24885    }
24886}
24887
24888impl<U2: Into<Imm>> VmadcVimEmitter<Vp, Vp, U2> for Assembler<'_> {
24889    fn vmadc_vim(&mut self, vd: Vp, vs2: Vp, simm5: U2) {
24890        self.emit_n(
24891            Opcode::VMADCVIM as i64,
24892            &[
24893                vd.as_operand(),
24894                vs2.as_operand(),
24895                Into::<Imm>::into(simm5).as_operand(),
24896            ],
24897        );
24898    }
24899}
24900
24901impl VmadcVvEmitter<Vp, Vp, Vp> for Assembler<'_> {
24902    fn vmadc_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp) {
24903        self.emit_n(
24904            Opcode::VMADCVV as i64,
24905            &[vd.as_operand(), vs1.as_operand(), vs2.as_operand()],
24906        );
24907    }
24908}
24909
24910impl VmadcVvmEmitter<Vp, Vp, Vp> for Assembler<'_> {
24911    fn vmadc_vvm(&mut self, vd: Vp, vs1: Vp, vs2: Vp) {
24912        self.emit_n(
24913            Opcode::VMADCVVM as i64,
24914            &[vd.as_operand(), vs1.as_operand(), vs2.as_operand()],
24915        );
24916    }
24917}
24918
24919impl VmadcVxEmitter<Vp, Gp, Vp> for Assembler<'_> {
24920    fn vmadc_vx(&mut self, vd: Vp, rs1: Gp, vs2: Vp) {
24921        self.emit_n(
24922            Opcode::VMADCVX as i64,
24923            &[vd.as_operand(), rs1.as_operand(), vs2.as_operand()],
24924        );
24925    }
24926}
24927
24928impl VmadcVxmEmitter<Vp, Gp, Vp> for Assembler<'_> {
24929    fn vmadc_vxm(&mut self, vd: Vp, rs1: Gp, vs2: Vp) {
24930        self.emit_n(
24931            Opcode::VMADCVXM as i64,
24932            &[vd.as_operand(), rs1.as_operand(), vs2.as_operand()],
24933        );
24934    }
24935}
24936
24937impl<U3: Into<Imm>> VmaddVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
24938    fn vmadd_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
24939        self.emit_n(
24940            Opcode::VMADDVV as i64,
24941            &[
24942                vd.as_operand(),
24943                vs1.as_operand(),
24944                vs2.as_operand(),
24945                Into::<Imm>::into(vm).as_operand(),
24946            ],
24947        );
24948    }
24949}
24950
24951impl<U3: Into<Imm>> VmaddVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
24952    fn vmadd_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
24953        self.emit_n(
24954            Opcode::VMADDVX as i64,
24955            &[
24956                vd.as_operand(),
24957                vs2.as_operand(),
24958                rs1.as_operand(),
24959                Into::<Imm>::into(vm).as_operand(),
24960            ],
24961        );
24962    }
24963}
24964
24965impl VmandMmEmitter<Vp, Vp, Vp> for Assembler<'_> {
24966    fn vmand_mm(&mut self, vd: Vp, vs1: Vp, vs2: Vp) {
24967        self.emit_n(
24968            Opcode::VMANDMM as i64,
24969            &[vd.as_operand(), vs1.as_operand(), vs2.as_operand()],
24970        );
24971    }
24972}
24973
24974impl VmandnMmEmitter<Vp, Vp, Vp> for Assembler<'_> {
24975    fn vmandn_mm(&mut self, vd: Vp, vs1: Vp, vs2: Vp) {
24976        self.emit_n(
24977            Opcode::VMANDNMM as i64,
24978            &[vd.as_operand(), vs1.as_operand(), vs2.as_operand()],
24979        );
24980    }
24981}
24982
24983impl<U3: Into<Imm>> VmandnotMmEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
24984    fn vmandnot_mm(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
24985        self.emit_n(
24986            Opcode::VMANDNOTMM as i64,
24987            &[
24988                vd.as_operand(),
24989                vs1.as_operand(),
24990                vs2.as_operand(),
24991                Into::<Imm>::into(vm).as_operand(),
24992            ],
24993        );
24994    }
24995}
24996
24997impl<U3: Into<Imm>> VmaxVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
24998    fn vmax_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
24999        self.emit_n(
25000            Opcode::VMAXVV as i64,
25001            &[
25002                vd.as_operand(),
25003                vs1.as_operand(),
25004                vs2.as_operand(),
25005                Into::<Imm>::into(vm).as_operand(),
25006            ],
25007        );
25008    }
25009}
25010
25011impl<U3: Into<Imm>> VmaxVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
25012    fn vmax_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
25013        self.emit_n(
25014            Opcode::VMAXVX as i64,
25015            &[
25016                vd.as_operand(),
25017                vs2.as_operand(),
25018                rs1.as_operand(),
25019                Into::<Imm>::into(vm).as_operand(),
25020            ],
25021        );
25022    }
25023}
25024
25025impl<U3: Into<Imm>> VmaxuVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
25026    fn vmaxu_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
25027        self.emit_n(
25028            Opcode::VMAXUVV as i64,
25029            &[
25030                vd.as_operand(),
25031                vs1.as_operand(),
25032                vs2.as_operand(),
25033                Into::<Imm>::into(vm).as_operand(),
25034            ],
25035        );
25036    }
25037}
25038
25039impl<U3: Into<Imm>> VmaxuVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
25040    fn vmaxu_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
25041        self.emit_n(
25042            Opcode::VMAXUVX as i64,
25043            &[
25044                vd.as_operand(),
25045                vs2.as_operand(),
25046                rs1.as_operand(),
25047                Into::<Imm>::into(vm).as_operand(),
25048            ],
25049        );
25050    }
25051}
25052
25053impl<U2: Into<Imm>> VmergeVimEmitter<Vp, Vp, U2> for Assembler<'_> {
25054    fn vmerge_vim(&mut self, vd: Vp, vs2: Vp, simm5: U2) {
25055        self.emit_n(
25056            Opcode::VMERGEVIM as i64,
25057            &[
25058                vd.as_operand(),
25059                vs2.as_operand(),
25060                Into::<Imm>::into(simm5).as_operand(),
25061            ],
25062        );
25063    }
25064}
25065
25066impl VmergeVvmEmitter<Vp, Vp, Vp> for Assembler<'_> {
25067    fn vmerge_vvm(&mut self, vd: Vp, vs1: Vp, vs2: Vp) {
25068        self.emit_n(
25069            Opcode::VMERGEVVM as i64,
25070            &[vd.as_operand(), vs1.as_operand(), vs2.as_operand()],
25071        );
25072    }
25073}
25074
25075impl VmergeVxmEmitter<Vp, Gp, Vp> for Assembler<'_> {
25076    fn vmerge_vxm(&mut self, vd: Vp, rs1: Gp, vs2: Vp) {
25077        self.emit_n(
25078            Opcode::VMERGEVXM as i64,
25079            &[vd.as_operand(), rs1.as_operand(), vs2.as_operand()],
25080        );
25081    }
25082}
25083
25084impl<U3: Into<Imm>> VmfeqVfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
25085    fn vmfeq_vf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
25086        self.emit_n(
25087            Opcode::VMFEQVF as i64,
25088            &[
25089                vd.as_operand(),
25090                vs2.as_operand(),
25091                rs1.as_operand(),
25092                Into::<Imm>::into(vm).as_operand(),
25093            ],
25094        );
25095    }
25096}
25097
25098impl<U3: Into<Imm>> VmfeqVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
25099    fn vmfeq_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
25100        self.emit_n(
25101            Opcode::VMFEQVV as i64,
25102            &[
25103                vd.as_operand(),
25104                vs1.as_operand(),
25105                vs2.as_operand(),
25106                Into::<Imm>::into(vm).as_operand(),
25107            ],
25108        );
25109    }
25110}
25111
25112impl<U3: Into<Imm>> VmfgeVfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
25113    fn vmfge_vf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
25114        self.emit_n(
25115            Opcode::VMFGEVF as i64,
25116            &[
25117                vd.as_operand(),
25118                vs2.as_operand(),
25119                rs1.as_operand(),
25120                Into::<Imm>::into(vm).as_operand(),
25121            ],
25122        );
25123    }
25124}
25125
25126impl<U3: Into<Imm>> VmfgtVfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
25127    fn vmfgt_vf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
25128        self.emit_n(
25129            Opcode::VMFGTVF as i64,
25130            &[
25131                vd.as_operand(),
25132                vs2.as_operand(),
25133                rs1.as_operand(),
25134                Into::<Imm>::into(vm).as_operand(),
25135            ],
25136        );
25137    }
25138}
25139
25140impl<U3: Into<Imm>> VmfleVfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
25141    fn vmfle_vf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
25142        self.emit_n(
25143            Opcode::VMFLEVF as i64,
25144            &[
25145                vd.as_operand(),
25146                vs2.as_operand(),
25147                rs1.as_operand(),
25148                Into::<Imm>::into(vm).as_operand(),
25149            ],
25150        );
25151    }
25152}
25153
25154impl<U3: Into<Imm>> VmfleVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
25155    fn vmfle_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
25156        self.emit_n(
25157            Opcode::VMFLEVV as i64,
25158            &[
25159                vd.as_operand(),
25160                vs1.as_operand(),
25161                vs2.as_operand(),
25162                Into::<Imm>::into(vm).as_operand(),
25163            ],
25164        );
25165    }
25166}
25167
25168impl<U3: Into<Imm>> VmfltVfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
25169    fn vmflt_vf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
25170        self.emit_n(
25171            Opcode::VMFLTVF as i64,
25172            &[
25173                vd.as_operand(),
25174                vs2.as_operand(),
25175                rs1.as_operand(),
25176                Into::<Imm>::into(vm).as_operand(),
25177            ],
25178        );
25179    }
25180}
25181
25182impl<U3: Into<Imm>> VmfltVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
25183    fn vmflt_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
25184        self.emit_n(
25185            Opcode::VMFLTVV as i64,
25186            &[
25187                vd.as_operand(),
25188                vs1.as_operand(),
25189                vs2.as_operand(),
25190                Into::<Imm>::into(vm).as_operand(),
25191            ],
25192        );
25193    }
25194}
25195
25196impl<U3: Into<Imm>> VmfneVfEmitter<Vp, Vp, Fp, U3> for Assembler<'_> {
25197    fn vmfne_vf(&mut self, vd: Vp, vs2: Vp, rs1: Fp, vm: U3) {
25198        self.emit_n(
25199            Opcode::VMFNEVF as i64,
25200            &[
25201                vd.as_operand(),
25202                vs2.as_operand(),
25203                rs1.as_operand(),
25204                Into::<Imm>::into(vm).as_operand(),
25205            ],
25206        );
25207    }
25208}
25209
25210impl<U3: Into<Imm>> VmfneVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
25211    fn vmfne_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
25212        self.emit_n(
25213            Opcode::VMFNEVV as i64,
25214            &[
25215                vd.as_operand(),
25216                vs1.as_operand(),
25217                vs2.as_operand(),
25218                Into::<Imm>::into(vm).as_operand(),
25219            ],
25220        );
25221    }
25222}
25223
25224impl<U3: Into<Imm>> VminVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
25225    fn vmin_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
25226        self.emit_n(
25227            Opcode::VMINVV as i64,
25228            &[
25229                vd.as_operand(),
25230                vs1.as_operand(),
25231                vs2.as_operand(),
25232                Into::<Imm>::into(vm).as_operand(),
25233            ],
25234        );
25235    }
25236}
25237
25238impl<U3: Into<Imm>> VminVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
25239    fn vmin_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
25240        self.emit_n(
25241            Opcode::VMINVX as i64,
25242            &[
25243                vd.as_operand(),
25244                vs2.as_operand(),
25245                rs1.as_operand(),
25246                Into::<Imm>::into(vm).as_operand(),
25247            ],
25248        );
25249    }
25250}
25251
25252impl<U3: Into<Imm>> VminuVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
25253    fn vminu_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
25254        self.emit_n(
25255            Opcode::VMINUVV as i64,
25256            &[
25257                vd.as_operand(),
25258                vs1.as_operand(),
25259                vs2.as_operand(),
25260                Into::<Imm>::into(vm).as_operand(),
25261            ],
25262        );
25263    }
25264}
25265
25266impl<U3: Into<Imm>> VminuVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
25267    fn vminu_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
25268        self.emit_n(
25269            Opcode::VMINUVX as i64,
25270            &[
25271                vd.as_operand(),
25272                vs2.as_operand(),
25273                rs1.as_operand(),
25274                Into::<Imm>::into(vm).as_operand(),
25275            ],
25276        );
25277    }
25278}
25279
25280impl VmnandMmEmitter<Vp, Vp, Vp> for Assembler<'_> {
25281    fn vmnand_mm(&mut self, vd: Vp, vs1: Vp, vs2: Vp) {
25282        self.emit_n(
25283            Opcode::VMNANDMM as i64,
25284            &[vd.as_operand(), vs1.as_operand(), vs2.as_operand()],
25285        );
25286    }
25287}
25288
25289impl VmnorMmEmitter<Vp, Vp, Vp> for Assembler<'_> {
25290    fn vmnor_mm(&mut self, vd: Vp, vs1: Vp, vs2: Vp) {
25291        self.emit_n(
25292            Opcode::VMNORMM as i64,
25293            &[vd.as_operand(), vs1.as_operand(), vs2.as_operand()],
25294        );
25295    }
25296}
25297
25298impl VmorMmEmitter<Vp, Vp, Vp> for Assembler<'_> {
25299    fn vmor_mm(&mut self, vd: Vp, vs1: Vp, vs2: Vp) {
25300        self.emit_n(
25301            Opcode::VMORMM as i64,
25302            &[vd.as_operand(), vs1.as_operand(), vs2.as_operand()],
25303        );
25304    }
25305}
25306
25307impl VmornMmEmitter<Vp, Vp, Vp> for Assembler<'_> {
25308    fn vmorn_mm(&mut self, vd: Vp, vs1: Vp, vs2: Vp) {
25309        self.emit_n(
25310            Opcode::VMORNMM as i64,
25311            &[vd.as_operand(), vs1.as_operand(), vs2.as_operand()],
25312        );
25313    }
25314}
25315
25316impl<U3: Into<Imm>> VmornotMmEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
25317    fn vmornot_mm(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
25318        self.emit_n(
25319            Opcode::VMORNOTMM as i64,
25320            &[
25321                vd.as_operand(),
25322                vs1.as_operand(),
25323                vs2.as_operand(),
25324                Into::<Imm>::into(vm).as_operand(),
25325            ],
25326        );
25327    }
25328}
25329
25330impl VmsbcVvEmitter<Vp, Vp, Vp> for Assembler<'_> {
25331    fn vmsbc_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp) {
25332        self.emit_n(
25333            Opcode::VMSBCVV as i64,
25334            &[vd.as_operand(), vs1.as_operand(), vs2.as_operand()],
25335        );
25336    }
25337}
25338
25339impl VmsbcVvmEmitter<Vp, Vp, Vp> for Assembler<'_> {
25340    fn vmsbc_vvm(&mut self, vd: Vp, vs1: Vp, vs2: Vp) {
25341        self.emit_n(
25342            Opcode::VMSBCVVM as i64,
25343            &[vd.as_operand(), vs1.as_operand(), vs2.as_operand()],
25344        );
25345    }
25346}
25347
25348impl VmsbcVxEmitter<Vp, Gp, Vp> for Assembler<'_> {
25349    fn vmsbc_vx(&mut self, vd: Vp, rs1: Gp, vs2: Vp) {
25350        self.emit_n(
25351            Opcode::VMSBCVX as i64,
25352            &[vd.as_operand(), rs1.as_operand(), vs2.as_operand()],
25353        );
25354    }
25355}
25356
25357impl VmsbcVxmEmitter<Vp, Gp, Vp> for Assembler<'_> {
25358    fn vmsbc_vxm(&mut self, vd: Vp, rs1: Gp, vs2: Vp) {
25359        self.emit_n(
25360            Opcode::VMSBCVXM as i64,
25361            &[vd.as_operand(), rs1.as_operand(), vs2.as_operand()],
25362        );
25363    }
25364}
25365
25366impl<U2: Into<Imm>> VmsbfMEmitter<Vp, Vp, U2> for Assembler<'_> {
25367    fn vmsbf_m(&mut self, vd: Vp, vs2: Vp, vm: U2) {
25368        self.emit_n(
25369            Opcode::VMSBFM as i64,
25370            &[
25371                vd.as_operand(),
25372                vs2.as_operand(),
25373                Into::<Imm>::into(vm).as_operand(),
25374            ],
25375        );
25376    }
25377}
25378
25379impl<U2: Into<Imm>, U3: Into<Imm>> VmseqViEmitter<Vp, Vp, U2, U3> for Assembler<'_> {
25380    fn vmseq_vi(&mut self, vd: Vp, vs2: Vp, simm5: U2, vm: U3) {
25381        self.emit_n(
25382            Opcode::VMSEQVI as i64,
25383            &[
25384                vd.as_operand(),
25385                vs2.as_operand(),
25386                Into::<Imm>::into(simm5).as_operand(),
25387                Into::<Imm>::into(vm).as_operand(),
25388            ],
25389        );
25390    }
25391}
25392
25393impl<U3: Into<Imm>> VmseqVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
25394    fn vmseq_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
25395        self.emit_n(
25396            Opcode::VMSEQVV as i64,
25397            &[
25398                vd.as_operand(),
25399                vs1.as_operand(),
25400                vs2.as_operand(),
25401                Into::<Imm>::into(vm).as_operand(),
25402            ],
25403        );
25404    }
25405}
25406
25407impl<U3: Into<Imm>> VmseqVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
25408    fn vmseq_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
25409        self.emit_n(
25410            Opcode::VMSEQVX as i64,
25411            &[
25412                vd.as_operand(),
25413                vs2.as_operand(),
25414                rs1.as_operand(),
25415                Into::<Imm>::into(vm).as_operand(),
25416            ],
25417        );
25418    }
25419}
25420
25421impl<U2: Into<Imm>, U3: Into<Imm>> VmsgtViEmitter<Vp, Vp, U2, U3> for Assembler<'_> {
25422    fn vmsgt_vi(&mut self, vd: Vp, vs2: Vp, simm5: U2, vm: U3) {
25423        self.emit_n(
25424            Opcode::VMSGTVI as i64,
25425            &[
25426                vd.as_operand(),
25427                vs2.as_operand(),
25428                Into::<Imm>::into(simm5).as_operand(),
25429                Into::<Imm>::into(vm).as_operand(),
25430            ],
25431        );
25432    }
25433}
25434
25435impl<U3: Into<Imm>> VmsgtVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
25436    fn vmsgt_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
25437        self.emit_n(
25438            Opcode::VMSGTVX as i64,
25439            &[
25440                vd.as_operand(),
25441                vs2.as_operand(),
25442                rs1.as_operand(),
25443                Into::<Imm>::into(vm).as_operand(),
25444            ],
25445        );
25446    }
25447}
25448
25449impl<U2: Into<Imm>, U3: Into<Imm>> VmsgtuViEmitter<Vp, Vp, U2, U3> for Assembler<'_> {
25450    fn vmsgtu_vi(&mut self, vd: Vp, vs2: Vp, simm5: U2, vm: U3) {
25451        self.emit_n(
25452            Opcode::VMSGTUVI as i64,
25453            &[
25454                vd.as_operand(),
25455                vs2.as_operand(),
25456                Into::<Imm>::into(simm5).as_operand(),
25457                Into::<Imm>::into(vm).as_operand(),
25458            ],
25459        );
25460    }
25461}
25462
25463impl<U3: Into<Imm>> VmsgtuVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
25464    fn vmsgtu_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
25465        self.emit_n(
25466            Opcode::VMSGTUVX as i64,
25467            &[
25468                vd.as_operand(),
25469                vs2.as_operand(),
25470                rs1.as_operand(),
25471                Into::<Imm>::into(vm).as_operand(),
25472            ],
25473        );
25474    }
25475}
25476
25477impl<U2: Into<Imm>> VmsifMEmitter<Vp, Vp, U2> for Assembler<'_> {
25478    fn vmsif_m(&mut self, vd: Vp, vs2: Vp, vm: U2) {
25479        self.emit_n(
25480            Opcode::VMSIFM as i64,
25481            &[
25482                vd.as_operand(),
25483                vs2.as_operand(),
25484                Into::<Imm>::into(vm).as_operand(),
25485            ],
25486        );
25487    }
25488}
25489
25490impl<U2: Into<Imm>, U3: Into<Imm>> VmsleViEmitter<Vp, Vp, U2, U3> for Assembler<'_> {
25491    fn vmsle_vi(&mut self, vd: Vp, vs2: Vp, simm5: U2, vm: U3) {
25492        self.emit_n(
25493            Opcode::VMSLEVI as i64,
25494            &[
25495                vd.as_operand(),
25496                vs2.as_operand(),
25497                Into::<Imm>::into(simm5).as_operand(),
25498                Into::<Imm>::into(vm).as_operand(),
25499            ],
25500        );
25501    }
25502}
25503
25504impl<U3: Into<Imm>> VmsleVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
25505    fn vmsle_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
25506        self.emit_n(
25507            Opcode::VMSLEVV as i64,
25508            &[
25509                vd.as_operand(),
25510                vs1.as_operand(),
25511                vs2.as_operand(),
25512                Into::<Imm>::into(vm).as_operand(),
25513            ],
25514        );
25515    }
25516}
25517
25518impl<U3: Into<Imm>> VmsleVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
25519    fn vmsle_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
25520        self.emit_n(
25521            Opcode::VMSLEVX as i64,
25522            &[
25523                vd.as_operand(),
25524                vs2.as_operand(),
25525                rs1.as_operand(),
25526                Into::<Imm>::into(vm).as_operand(),
25527            ],
25528        );
25529    }
25530}
25531
25532impl<U2: Into<Imm>, U3: Into<Imm>> VmsleuViEmitter<Vp, Vp, U2, U3> for Assembler<'_> {
25533    fn vmsleu_vi(&mut self, vd: Vp, vs2: Vp, simm5: U2, vm: U3) {
25534        self.emit_n(
25535            Opcode::VMSLEUVI as i64,
25536            &[
25537                vd.as_operand(),
25538                vs2.as_operand(),
25539                Into::<Imm>::into(simm5).as_operand(),
25540                Into::<Imm>::into(vm).as_operand(),
25541            ],
25542        );
25543    }
25544}
25545
25546impl<U3: Into<Imm>> VmsleuVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
25547    fn vmsleu_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
25548        self.emit_n(
25549            Opcode::VMSLEUVV as i64,
25550            &[
25551                vd.as_operand(),
25552                vs1.as_operand(),
25553                vs2.as_operand(),
25554                Into::<Imm>::into(vm).as_operand(),
25555            ],
25556        );
25557    }
25558}
25559
25560impl<U3: Into<Imm>> VmsleuVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
25561    fn vmsleu_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
25562        self.emit_n(
25563            Opcode::VMSLEUVX as i64,
25564            &[
25565                vd.as_operand(),
25566                vs2.as_operand(),
25567                rs1.as_operand(),
25568                Into::<Imm>::into(vm).as_operand(),
25569            ],
25570        );
25571    }
25572}
25573
25574impl<U3: Into<Imm>> VmsltVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
25575    fn vmslt_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
25576        self.emit_n(
25577            Opcode::VMSLTVV as i64,
25578            &[
25579                vd.as_operand(),
25580                vs1.as_operand(),
25581                vs2.as_operand(),
25582                Into::<Imm>::into(vm).as_operand(),
25583            ],
25584        );
25585    }
25586}
25587
25588impl<U3: Into<Imm>> VmsltVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
25589    fn vmslt_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
25590        self.emit_n(
25591            Opcode::VMSLTVX as i64,
25592            &[
25593                vd.as_operand(),
25594                vs2.as_operand(),
25595                rs1.as_operand(),
25596                Into::<Imm>::into(vm).as_operand(),
25597            ],
25598        );
25599    }
25600}
25601
25602impl<U3: Into<Imm>> VmsltuVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
25603    fn vmsltu_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
25604        self.emit_n(
25605            Opcode::VMSLTUVV as i64,
25606            &[
25607                vd.as_operand(),
25608                vs1.as_operand(),
25609                vs2.as_operand(),
25610                Into::<Imm>::into(vm).as_operand(),
25611            ],
25612        );
25613    }
25614}
25615
25616impl<U3: Into<Imm>> VmsltuVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
25617    fn vmsltu_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
25618        self.emit_n(
25619            Opcode::VMSLTUVX as i64,
25620            &[
25621                vd.as_operand(),
25622                vs2.as_operand(),
25623                rs1.as_operand(),
25624                Into::<Imm>::into(vm).as_operand(),
25625            ],
25626        );
25627    }
25628}
25629
25630impl<U2: Into<Imm>, U3: Into<Imm>> VmsneViEmitter<Vp, Vp, U2, U3> for Assembler<'_> {
25631    fn vmsne_vi(&mut self, vd: Vp, vs2: Vp, simm5: U2, vm: U3) {
25632        self.emit_n(
25633            Opcode::VMSNEVI as i64,
25634            &[
25635                vd.as_operand(),
25636                vs2.as_operand(),
25637                Into::<Imm>::into(simm5).as_operand(),
25638                Into::<Imm>::into(vm).as_operand(),
25639            ],
25640        );
25641    }
25642}
25643
25644impl<U3: Into<Imm>> VmsneVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
25645    fn vmsne_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
25646        self.emit_n(
25647            Opcode::VMSNEVV as i64,
25648            &[
25649                vd.as_operand(),
25650                vs1.as_operand(),
25651                vs2.as_operand(),
25652                Into::<Imm>::into(vm).as_operand(),
25653            ],
25654        );
25655    }
25656}
25657
25658impl<U3: Into<Imm>> VmsneVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
25659    fn vmsne_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
25660        self.emit_n(
25661            Opcode::VMSNEVX as i64,
25662            &[
25663                vd.as_operand(),
25664                vs2.as_operand(),
25665                rs1.as_operand(),
25666                Into::<Imm>::into(vm).as_operand(),
25667            ],
25668        );
25669    }
25670}
25671
25672impl<U2: Into<Imm>> VmsofMEmitter<Vp, Vp, U2> for Assembler<'_> {
25673    fn vmsof_m(&mut self, vd: Vp, vs2: Vp, vm: U2) {
25674        self.emit_n(
25675            Opcode::VMSOFM as i64,
25676            &[
25677                vd.as_operand(),
25678                vs2.as_operand(),
25679                Into::<Imm>::into(vm).as_operand(),
25680            ],
25681        );
25682    }
25683}
25684
25685impl<U3: Into<Imm>> VmulVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
25686    fn vmul_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
25687        self.emit_n(
25688            Opcode::VMULVV as i64,
25689            &[
25690                vd.as_operand(),
25691                vs1.as_operand(),
25692                vs2.as_operand(),
25693                Into::<Imm>::into(vm).as_operand(),
25694            ],
25695        );
25696    }
25697}
25698
25699impl<U3: Into<Imm>> VmulVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
25700    fn vmul_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
25701        self.emit_n(
25702            Opcode::VMULVX as i64,
25703            &[
25704                vd.as_operand(),
25705                vs2.as_operand(),
25706                rs1.as_operand(),
25707                Into::<Imm>::into(vm).as_operand(),
25708            ],
25709        );
25710    }
25711}
25712
25713impl<U3: Into<Imm>> VmulhVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
25714    fn vmulh_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
25715        self.emit_n(
25716            Opcode::VMULHVV as i64,
25717            &[
25718                vd.as_operand(),
25719                vs1.as_operand(),
25720                vs2.as_operand(),
25721                Into::<Imm>::into(vm).as_operand(),
25722            ],
25723        );
25724    }
25725}
25726
25727impl<U3: Into<Imm>> VmulhVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
25728    fn vmulh_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
25729        self.emit_n(
25730            Opcode::VMULHVX as i64,
25731            &[
25732                vd.as_operand(),
25733                vs2.as_operand(),
25734                rs1.as_operand(),
25735                Into::<Imm>::into(vm).as_operand(),
25736            ],
25737        );
25738    }
25739}
25740
25741impl<U3: Into<Imm>> VmulhsuVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
25742    fn vmulhsu_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
25743        self.emit_n(
25744            Opcode::VMULHSUVV as i64,
25745            &[
25746                vd.as_operand(),
25747                vs1.as_operand(),
25748                vs2.as_operand(),
25749                Into::<Imm>::into(vm).as_operand(),
25750            ],
25751        );
25752    }
25753}
25754
25755impl<U3: Into<Imm>> VmulhsuVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
25756    fn vmulhsu_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
25757        self.emit_n(
25758            Opcode::VMULHSUVX as i64,
25759            &[
25760                vd.as_operand(),
25761                vs2.as_operand(),
25762                rs1.as_operand(),
25763                Into::<Imm>::into(vm).as_operand(),
25764            ],
25765        );
25766    }
25767}
25768
25769impl<U3: Into<Imm>> VmulhuVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
25770    fn vmulhu_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
25771        self.emit_n(
25772            Opcode::VMULHUVV as i64,
25773            &[
25774                vd.as_operand(),
25775                vs1.as_operand(),
25776                vs2.as_operand(),
25777                Into::<Imm>::into(vm).as_operand(),
25778            ],
25779        );
25780    }
25781}
25782
25783impl<U3: Into<Imm>> VmulhuVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
25784    fn vmulhu_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
25785        self.emit_n(
25786            Opcode::VMULHUVX as i64,
25787            &[
25788                vd.as_operand(),
25789                vs2.as_operand(),
25790                rs1.as_operand(),
25791                Into::<Imm>::into(vm).as_operand(),
25792            ],
25793        );
25794    }
25795}
25796
25797impl Vmv1RVEmitter<Vp, Vp> for Assembler<'_> {
25798    fn vmv1r_v(&mut self, vd: Vp, vs2: Vp) {
25799        self.emit_n(Opcode::VMV1RV as i64, &[vd.as_operand(), vs2.as_operand()]);
25800    }
25801}
25802
25803impl Vmv2RVEmitter<Vp, Vp> for Assembler<'_> {
25804    fn vmv2r_v(&mut self, vd: Vp, vs2: Vp) {
25805        self.emit_n(Opcode::VMV2RV as i64, &[vd.as_operand(), vs2.as_operand()]);
25806    }
25807}
25808
25809impl Vmv4RVEmitter<Vp, Vp> for Assembler<'_> {
25810    fn vmv4r_v(&mut self, vd: Vp, vs2: Vp) {
25811        self.emit_n(Opcode::VMV4RV as i64, &[vd.as_operand(), vs2.as_operand()]);
25812    }
25813}
25814
25815impl Vmv8RVEmitter<Vp, Vp> for Assembler<'_> {
25816    fn vmv8r_v(&mut self, vd: Vp, vs2: Vp) {
25817        self.emit_n(Opcode::VMV8RV as i64, &[vd.as_operand(), vs2.as_operand()]);
25818    }
25819}
25820
25821impl VmvSXEmitter<Vp, Gp> for Assembler<'_> {
25822    fn vmv_s_x(&mut self, vd: Vp, rs1: Gp) {
25823        self.emit_n(Opcode::VMVSX as i64, &[vd.as_operand(), rs1.as_operand()]);
25824    }
25825}
25826
25827impl<U1: Into<Imm>> VmvVIEmitter<Vp, U1> for Assembler<'_> {
25828    fn vmv_v_i(&mut self, vd: Vp, simm5: U1) {
25829        self.emit_n(
25830            Opcode::VMVVI as i64,
25831            &[vd.as_operand(), Into::<Imm>::into(simm5).as_operand()],
25832        );
25833    }
25834}
25835
25836impl VmvVVEmitter<Vp, Vp> for Assembler<'_> {
25837    fn vmv_v_v(&mut self, vd: Vp, vs1: Vp) {
25838        self.emit_n(Opcode::VMVVV as i64, &[vd.as_operand(), vs1.as_operand()]);
25839    }
25840}
25841
25842impl VmvVXEmitter<Vp, Gp> for Assembler<'_> {
25843    fn vmv_v_x(&mut self, vd: Vp, rs1: Gp) {
25844        self.emit_n(Opcode::VMVVX as i64, &[vd.as_operand(), rs1.as_operand()]);
25845    }
25846}
25847
25848impl VmvXSEmitter<Gp, Vp> for Assembler<'_> {
25849    fn vmv_x_s(&mut self, rd: Gp, vs2: Vp) {
25850        self.emit_n(Opcode::VMVXS as i64, &[rd.as_operand(), vs2.as_operand()]);
25851    }
25852}
25853
25854impl VmxnorMmEmitter<Vp, Vp, Vp> for Assembler<'_> {
25855    fn vmxnor_mm(&mut self, vd: Vp, vs1: Vp, vs2: Vp) {
25856        self.emit_n(
25857            Opcode::VMXNORMM as i64,
25858            &[vd.as_operand(), vs1.as_operand(), vs2.as_operand()],
25859        );
25860    }
25861}
25862
25863impl VmxorMmEmitter<Vp, Vp, Vp> for Assembler<'_> {
25864    fn vmxor_mm(&mut self, vd: Vp, vs1: Vp, vs2: Vp) {
25865        self.emit_n(
25866            Opcode::VMXORMM as i64,
25867            &[vd.as_operand(), vs1.as_operand(), vs2.as_operand()],
25868        );
25869    }
25870}
25871
25872impl<U2: Into<Imm>, U3: Into<Imm>> VnclipWiEmitter<Vp, Vp, U2, U3> for Assembler<'_> {
25873    fn vnclip_wi(&mut self, vd: Vp, vs2: Vp, zimm5: U2, vm: U3) {
25874        self.emit_n(
25875            Opcode::VNCLIPWI as i64,
25876            &[
25877                vd.as_operand(),
25878                vs2.as_operand(),
25879                Into::<Imm>::into(zimm5).as_operand(),
25880                Into::<Imm>::into(vm).as_operand(),
25881            ],
25882        );
25883    }
25884}
25885
25886impl<U3: Into<Imm>> VnclipWvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
25887    fn vnclip_wv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
25888        self.emit_n(
25889            Opcode::VNCLIPWV as i64,
25890            &[
25891                vd.as_operand(),
25892                vs1.as_operand(),
25893                vs2.as_operand(),
25894                Into::<Imm>::into(vm).as_operand(),
25895            ],
25896        );
25897    }
25898}
25899
25900impl<U3: Into<Imm>> VnclipWxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
25901    fn vnclip_wx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
25902        self.emit_n(
25903            Opcode::VNCLIPWX as i64,
25904            &[
25905                vd.as_operand(),
25906                vs2.as_operand(),
25907                rs1.as_operand(),
25908                Into::<Imm>::into(vm).as_operand(),
25909            ],
25910        );
25911    }
25912}
25913
25914impl<U2: Into<Imm>, U3: Into<Imm>> VnclipuWiEmitter<Vp, Vp, U2, U3> for Assembler<'_> {
25915    fn vnclipu_wi(&mut self, vd: Vp, vs2: Vp, zimm5: U2, vm: U3) {
25916        self.emit_n(
25917            Opcode::VNCLIPUWI as i64,
25918            &[
25919                vd.as_operand(),
25920                vs2.as_operand(),
25921                Into::<Imm>::into(zimm5).as_operand(),
25922                Into::<Imm>::into(vm).as_operand(),
25923            ],
25924        );
25925    }
25926}
25927
25928impl<U3: Into<Imm>> VnclipuWvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
25929    fn vnclipu_wv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
25930        self.emit_n(
25931            Opcode::VNCLIPUWV as i64,
25932            &[
25933                vd.as_operand(),
25934                vs1.as_operand(),
25935                vs2.as_operand(),
25936                Into::<Imm>::into(vm).as_operand(),
25937            ],
25938        );
25939    }
25940}
25941
25942impl<U3: Into<Imm>> VnclipuWxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
25943    fn vnclipu_wx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
25944        self.emit_n(
25945            Opcode::VNCLIPUWX as i64,
25946            &[
25947                vd.as_operand(),
25948                vs2.as_operand(),
25949                rs1.as_operand(),
25950                Into::<Imm>::into(vm).as_operand(),
25951            ],
25952        );
25953    }
25954}
25955
25956impl<U3: Into<Imm>> VnmsacVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
25957    fn vnmsac_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
25958        self.emit_n(
25959            Opcode::VNMSACVV as i64,
25960            &[
25961                vd.as_operand(),
25962                vs1.as_operand(),
25963                vs2.as_operand(),
25964                Into::<Imm>::into(vm).as_operand(),
25965            ],
25966        );
25967    }
25968}
25969
25970impl<U3: Into<Imm>> VnmsacVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
25971    fn vnmsac_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
25972        self.emit_n(
25973            Opcode::VNMSACVX as i64,
25974            &[
25975                vd.as_operand(),
25976                vs2.as_operand(),
25977                rs1.as_operand(),
25978                Into::<Imm>::into(vm).as_operand(),
25979            ],
25980        );
25981    }
25982}
25983
25984impl<U3: Into<Imm>> VnmsubVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
25985    fn vnmsub_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
25986        self.emit_n(
25987            Opcode::VNMSUBVV as i64,
25988            &[
25989                vd.as_operand(),
25990                vs1.as_operand(),
25991                vs2.as_operand(),
25992                Into::<Imm>::into(vm).as_operand(),
25993            ],
25994        );
25995    }
25996}
25997
25998impl<U3: Into<Imm>> VnmsubVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
25999    fn vnmsub_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
26000        self.emit_n(
26001            Opcode::VNMSUBVX as i64,
26002            &[
26003                vd.as_operand(),
26004                vs2.as_operand(),
26005                rs1.as_operand(),
26006                Into::<Imm>::into(vm).as_operand(),
26007            ],
26008        );
26009    }
26010}
26011
26012impl<U2: Into<Imm>, U3: Into<Imm>> VnsraWiEmitter<Vp, Vp, U2, U3> for Assembler<'_> {
26013    fn vnsra_wi(&mut self, vd: Vp, vs2: Vp, zimm5: U2, vm: U3) {
26014        self.emit_n(
26015            Opcode::VNSRAWI as i64,
26016            &[
26017                vd.as_operand(),
26018                vs2.as_operand(),
26019                Into::<Imm>::into(zimm5).as_operand(),
26020                Into::<Imm>::into(vm).as_operand(),
26021            ],
26022        );
26023    }
26024}
26025
26026impl<U3: Into<Imm>> VnsraWvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
26027    fn vnsra_wv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
26028        self.emit_n(
26029            Opcode::VNSRAWV as i64,
26030            &[
26031                vd.as_operand(),
26032                vs1.as_operand(),
26033                vs2.as_operand(),
26034                Into::<Imm>::into(vm).as_operand(),
26035            ],
26036        );
26037    }
26038}
26039
26040impl<U3: Into<Imm>> VnsraWxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
26041    fn vnsra_wx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
26042        self.emit_n(
26043            Opcode::VNSRAWX as i64,
26044            &[
26045                vd.as_operand(),
26046                vs2.as_operand(),
26047                rs1.as_operand(),
26048                Into::<Imm>::into(vm).as_operand(),
26049            ],
26050        );
26051    }
26052}
26053
26054impl<U2: Into<Imm>, U3: Into<Imm>> VnsrlWiEmitter<Vp, Vp, U2, U3> for Assembler<'_> {
26055    fn vnsrl_wi(&mut self, vd: Vp, vs2: Vp, zimm5: U2, vm: U3) {
26056        self.emit_n(
26057            Opcode::VNSRLWI as i64,
26058            &[
26059                vd.as_operand(),
26060                vs2.as_operand(),
26061                Into::<Imm>::into(zimm5).as_operand(),
26062                Into::<Imm>::into(vm).as_operand(),
26063            ],
26064        );
26065    }
26066}
26067
26068impl<U3: Into<Imm>> VnsrlWvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
26069    fn vnsrl_wv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
26070        self.emit_n(
26071            Opcode::VNSRLWV as i64,
26072            &[
26073                vd.as_operand(),
26074                vs1.as_operand(),
26075                vs2.as_operand(),
26076                Into::<Imm>::into(vm).as_operand(),
26077            ],
26078        );
26079    }
26080}
26081
26082impl<U3: Into<Imm>> VnsrlWxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
26083    fn vnsrl_wx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
26084        self.emit_n(
26085            Opcode::VNSRLWX as i64,
26086            &[
26087                vd.as_operand(),
26088                vs2.as_operand(),
26089                rs1.as_operand(),
26090                Into::<Imm>::into(vm).as_operand(),
26091            ],
26092        );
26093    }
26094}
26095
26096impl<U2: Into<Imm>, U3: Into<Imm>> VorViEmitter<Vp, Vp, U2, U3> for Assembler<'_> {
26097    fn vor_vi(&mut self, vd: Vp, vs2: Vp, simm5: U2, vm: U3) {
26098        self.emit_n(
26099            Opcode::VORVI as i64,
26100            &[
26101                vd.as_operand(),
26102                vs2.as_operand(),
26103                Into::<Imm>::into(simm5).as_operand(),
26104                Into::<Imm>::into(vm).as_operand(),
26105            ],
26106        );
26107    }
26108}
26109
26110impl<U3: Into<Imm>> VorVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
26111    fn vor_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
26112        self.emit_n(
26113            Opcode::VORVV as i64,
26114            &[
26115                vd.as_operand(),
26116                vs1.as_operand(),
26117                vs2.as_operand(),
26118                Into::<Imm>::into(vm).as_operand(),
26119            ],
26120        );
26121    }
26122}
26123
26124impl<U3: Into<Imm>> VorVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
26125    fn vor_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
26126        self.emit_n(
26127            Opcode::VORVX as i64,
26128            &[
26129                vd.as_operand(),
26130                vs2.as_operand(),
26131                rs1.as_operand(),
26132                Into::<Imm>::into(vm).as_operand(),
26133            ],
26134        );
26135    }
26136}
26137
26138impl<U2: Into<Imm>> VpopcMEmitter<Gp, Vp, U2> for Assembler<'_> {
26139    fn vpopc_m(&mut self, rd: Gp, vs2: Vp, vm: U2) {
26140        self.emit_n(
26141            Opcode::VPOPCM as i64,
26142            &[
26143                rd.as_operand(),
26144                vs2.as_operand(),
26145                Into::<Imm>::into(vm).as_operand(),
26146            ],
26147        );
26148    }
26149}
26150
26151impl<U3: Into<Imm>> VredandVsEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
26152    fn vredand_vs(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
26153        self.emit_n(
26154            Opcode::VREDANDVS as i64,
26155            &[
26156                vd.as_operand(),
26157                vs1.as_operand(),
26158                vs2.as_operand(),
26159                Into::<Imm>::into(vm).as_operand(),
26160            ],
26161        );
26162    }
26163}
26164
26165impl<U3: Into<Imm>> VredmaxVsEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
26166    fn vredmax_vs(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
26167        self.emit_n(
26168            Opcode::VREDMAXVS as i64,
26169            &[
26170                vd.as_operand(),
26171                vs1.as_operand(),
26172                vs2.as_operand(),
26173                Into::<Imm>::into(vm).as_operand(),
26174            ],
26175        );
26176    }
26177}
26178
26179impl<U3: Into<Imm>> VredmaxuVsEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
26180    fn vredmaxu_vs(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
26181        self.emit_n(
26182            Opcode::VREDMAXUVS as i64,
26183            &[
26184                vd.as_operand(),
26185                vs1.as_operand(),
26186                vs2.as_operand(),
26187                Into::<Imm>::into(vm).as_operand(),
26188            ],
26189        );
26190    }
26191}
26192
26193impl<U3: Into<Imm>> VredminVsEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
26194    fn vredmin_vs(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
26195        self.emit_n(
26196            Opcode::VREDMINVS as i64,
26197            &[
26198                vd.as_operand(),
26199                vs1.as_operand(),
26200                vs2.as_operand(),
26201                Into::<Imm>::into(vm).as_operand(),
26202            ],
26203        );
26204    }
26205}
26206
26207impl<U3: Into<Imm>> VredminuVsEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
26208    fn vredminu_vs(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
26209        self.emit_n(
26210            Opcode::VREDMINUVS as i64,
26211            &[
26212                vd.as_operand(),
26213                vs1.as_operand(),
26214                vs2.as_operand(),
26215                Into::<Imm>::into(vm).as_operand(),
26216            ],
26217        );
26218    }
26219}
26220
26221impl<U3: Into<Imm>> VredorVsEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
26222    fn vredor_vs(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
26223        self.emit_n(
26224            Opcode::VREDORVS as i64,
26225            &[
26226                vd.as_operand(),
26227                vs1.as_operand(),
26228                vs2.as_operand(),
26229                Into::<Imm>::into(vm).as_operand(),
26230            ],
26231        );
26232    }
26233}
26234
26235impl<U3: Into<Imm>> VredsumVsEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
26236    fn vredsum_vs(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
26237        self.emit_n(
26238            Opcode::VREDSUMVS as i64,
26239            &[
26240                vd.as_operand(),
26241                vs1.as_operand(),
26242                vs2.as_operand(),
26243                Into::<Imm>::into(vm).as_operand(),
26244            ],
26245        );
26246    }
26247}
26248
26249impl<U3: Into<Imm>> VredxorVsEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
26250    fn vredxor_vs(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
26251        self.emit_n(
26252            Opcode::VREDXORVS as i64,
26253            &[
26254                vd.as_operand(),
26255                vs1.as_operand(),
26256                vs2.as_operand(),
26257                Into::<Imm>::into(vm).as_operand(),
26258            ],
26259        );
26260    }
26261}
26262
26263impl<U3: Into<Imm>> VremVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
26264    fn vrem_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
26265        self.emit_n(
26266            Opcode::VREMVV as i64,
26267            &[
26268                vd.as_operand(),
26269                vs1.as_operand(),
26270                vs2.as_operand(),
26271                Into::<Imm>::into(vm).as_operand(),
26272            ],
26273        );
26274    }
26275}
26276
26277impl<U3: Into<Imm>> VremVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
26278    fn vrem_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
26279        self.emit_n(
26280            Opcode::VREMVX as i64,
26281            &[
26282                vd.as_operand(),
26283                vs2.as_operand(),
26284                rs1.as_operand(),
26285                Into::<Imm>::into(vm).as_operand(),
26286            ],
26287        );
26288    }
26289}
26290
26291impl<U3: Into<Imm>> VremuVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
26292    fn vremu_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
26293        self.emit_n(
26294            Opcode::VREMUVV as i64,
26295            &[
26296                vd.as_operand(),
26297                vs1.as_operand(),
26298                vs2.as_operand(),
26299                Into::<Imm>::into(vm).as_operand(),
26300            ],
26301        );
26302    }
26303}
26304
26305impl<U3: Into<Imm>> VremuVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
26306    fn vremu_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
26307        self.emit_n(
26308            Opcode::VREMUVX as i64,
26309            &[
26310                vd.as_operand(),
26311                vs2.as_operand(),
26312                rs1.as_operand(),
26313                Into::<Imm>::into(vm).as_operand(),
26314            ],
26315        );
26316    }
26317}
26318
26319impl<U2: Into<Imm>> Vrev8VEmitter<Vp, Vp, U2> for Assembler<'_> {
26320    fn vrev8_v(&mut self, vd: Vp, vs2: Vp, vm: U2) {
26321        self.emit_n(
26322            Opcode::VREV8V as i64,
26323            &[
26324                vd.as_operand(),
26325                vs2.as_operand(),
26326                Into::<Imm>::into(vm).as_operand(),
26327            ],
26328        );
26329    }
26330}
26331
26332impl<U2: Into<Imm>, U3: Into<Imm>> VrgatherViEmitter<Vp, Vp, U2, U3> for Assembler<'_> {
26333    fn vrgather_vi(&mut self, vd: Vp, vs2: Vp, zimm5: U2, vm: U3) {
26334        self.emit_n(
26335            Opcode::VRGATHERVI as i64,
26336            &[
26337                vd.as_operand(),
26338                vs2.as_operand(),
26339                Into::<Imm>::into(zimm5).as_operand(),
26340                Into::<Imm>::into(vm).as_operand(),
26341            ],
26342        );
26343    }
26344}
26345
26346impl<U3: Into<Imm>> VrgatherVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
26347    fn vrgather_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
26348        self.emit_n(
26349            Opcode::VRGATHERVV as i64,
26350            &[
26351                vd.as_operand(),
26352                vs1.as_operand(),
26353                vs2.as_operand(),
26354                Into::<Imm>::into(vm).as_operand(),
26355            ],
26356        );
26357    }
26358}
26359
26360impl<U3: Into<Imm>> VrgatherVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
26361    fn vrgather_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
26362        self.emit_n(
26363            Opcode::VRGATHERVX as i64,
26364            &[
26365                vd.as_operand(),
26366                vs2.as_operand(),
26367                rs1.as_operand(),
26368                Into::<Imm>::into(vm).as_operand(),
26369            ],
26370        );
26371    }
26372}
26373
26374impl<U3: Into<Imm>> Vrgatherei16VvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
26375    fn vrgatherei16_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
26376        self.emit_n(
26377            Opcode::VRGATHEREI16VV as i64,
26378            &[
26379                vd.as_operand(),
26380                vs1.as_operand(),
26381                vs2.as_operand(),
26382                Into::<Imm>::into(vm).as_operand(),
26383            ],
26384        );
26385    }
26386}
26387
26388impl<U3: Into<Imm>> VrolVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
26389    fn vrol_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
26390        self.emit_n(
26391            Opcode::VROLVV as i64,
26392            &[
26393                vd.as_operand(),
26394                vs1.as_operand(),
26395                vs2.as_operand(),
26396                Into::<Imm>::into(vm).as_operand(),
26397            ],
26398        );
26399    }
26400}
26401
26402impl<U3: Into<Imm>> VrolVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
26403    fn vrol_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
26404        self.emit_n(
26405            Opcode::VROLVX as i64,
26406            &[
26407                vd.as_operand(),
26408                vs2.as_operand(),
26409                rs1.as_operand(),
26410                Into::<Imm>::into(vm).as_operand(),
26411            ],
26412        );
26413    }
26414}
26415
26416impl<U2: Into<Imm>, U3: Into<Imm>> VrorViEmitter<Vp, Vp, U2, U3> for Assembler<'_> {
26417    fn vror_vi(&mut self, vd: Vp, vs2: Vp, zimm6lohi: U2, vm: U3) {
26418        self.emit_n(
26419            Opcode::VRORVI as i64,
26420            &[
26421                vd.as_operand(),
26422                vs2.as_operand(),
26423                Into::<Imm>::into(zimm6lohi).as_operand(),
26424                Into::<Imm>::into(vm).as_operand(),
26425            ],
26426        );
26427    }
26428}
26429
26430impl<U3: Into<Imm>> VrorVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
26431    fn vror_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
26432        self.emit_n(
26433            Opcode::VRORVV as i64,
26434            &[
26435                vd.as_operand(),
26436                vs1.as_operand(),
26437                vs2.as_operand(),
26438                Into::<Imm>::into(vm).as_operand(),
26439            ],
26440        );
26441    }
26442}
26443
26444impl<U3: Into<Imm>> VrorVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
26445    fn vror_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
26446        self.emit_n(
26447            Opcode::VRORVX as i64,
26448            &[
26449                vd.as_operand(),
26450                vs2.as_operand(),
26451                rs1.as_operand(),
26452                Into::<Imm>::into(vm).as_operand(),
26453            ],
26454        );
26455    }
26456}
26457
26458impl<U2: Into<Imm>, U3: Into<Imm>> VrsubViEmitter<Vp, Vp, U2, U3> for Assembler<'_> {
26459    fn vrsub_vi(&mut self, vd: Vp, vs2: Vp, simm5: U2, vm: U3) {
26460        self.emit_n(
26461            Opcode::VRSUBVI as i64,
26462            &[
26463                vd.as_operand(),
26464                vs2.as_operand(),
26465                Into::<Imm>::into(simm5).as_operand(),
26466                Into::<Imm>::into(vm).as_operand(),
26467            ],
26468        );
26469    }
26470}
26471
26472impl<U3: Into<Imm>> VrsubVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
26473    fn vrsub_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
26474        self.emit_n(
26475            Opcode::VRSUBVX as i64,
26476            &[
26477                vd.as_operand(),
26478                vs2.as_operand(),
26479                rs1.as_operand(),
26480                Into::<Imm>::into(vm).as_operand(),
26481            ],
26482        );
26483    }
26484}
26485
26486impl Vs1RVEmitter<Vp, Gp> for Assembler<'_> {
26487    fn vs1r_v(&mut self, vs3: Vp, rs1: Gp) {
26488        self.emit_n(Opcode::VS1RV as i64, &[vs3.as_operand(), rs1.as_operand()]);
26489    }
26490}
26491
26492impl Vs2RVEmitter<Vp, Gp> for Assembler<'_> {
26493    fn vs2r_v(&mut self, vs3: Vp, rs1: Gp) {
26494        self.emit_n(Opcode::VS2RV as i64, &[vs3.as_operand(), rs1.as_operand()]);
26495    }
26496}
26497
26498impl Vs4RVEmitter<Vp, Gp> for Assembler<'_> {
26499    fn vs4r_v(&mut self, vs3: Vp, rs1: Gp) {
26500        self.emit_n(Opcode::VS4RV as i64, &[vs3.as_operand(), rs1.as_operand()]);
26501    }
26502}
26503
26504impl Vs8RVEmitter<Vp, Gp> for Assembler<'_> {
26505    fn vs8r_v(&mut self, vs3: Vp, rs1: Gp) {
26506        self.emit_n(Opcode::VS8RV as i64, &[vs3.as_operand(), rs1.as_operand()]);
26507    }
26508}
26509
26510impl<U2: Into<Imm>, U3: Into<Imm>> VsaddViEmitter<Vp, Vp, U2, U3> for Assembler<'_> {
26511    fn vsadd_vi(&mut self, vd: Vp, vs2: Vp, simm5: U2, vm: U3) {
26512        self.emit_n(
26513            Opcode::VSADDVI as i64,
26514            &[
26515                vd.as_operand(),
26516                vs2.as_operand(),
26517                Into::<Imm>::into(simm5).as_operand(),
26518                Into::<Imm>::into(vm).as_operand(),
26519            ],
26520        );
26521    }
26522}
26523
26524impl<U3: Into<Imm>> VsaddVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
26525    fn vsadd_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
26526        self.emit_n(
26527            Opcode::VSADDVV as i64,
26528            &[
26529                vd.as_operand(),
26530                vs1.as_operand(),
26531                vs2.as_operand(),
26532                Into::<Imm>::into(vm).as_operand(),
26533            ],
26534        );
26535    }
26536}
26537
26538impl<U3: Into<Imm>> VsaddVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
26539    fn vsadd_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
26540        self.emit_n(
26541            Opcode::VSADDVX as i64,
26542            &[
26543                vd.as_operand(),
26544                vs2.as_operand(),
26545                rs1.as_operand(),
26546                Into::<Imm>::into(vm).as_operand(),
26547            ],
26548        );
26549    }
26550}
26551
26552impl<U2: Into<Imm>, U3: Into<Imm>> VsadduViEmitter<Vp, Vp, U2, U3> for Assembler<'_> {
26553    fn vsaddu_vi(&mut self, vd: Vp, vs2: Vp, simm5: U2, vm: U3) {
26554        self.emit_n(
26555            Opcode::VSADDUVI as i64,
26556            &[
26557                vd.as_operand(),
26558                vs2.as_operand(),
26559                Into::<Imm>::into(simm5).as_operand(),
26560                Into::<Imm>::into(vm).as_operand(),
26561            ],
26562        );
26563    }
26564}
26565
26566impl<U3: Into<Imm>> VsadduVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
26567    fn vsaddu_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
26568        self.emit_n(
26569            Opcode::VSADDUVV as i64,
26570            &[
26571                vd.as_operand(),
26572                vs1.as_operand(),
26573                vs2.as_operand(),
26574                Into::<Imm>::into(vm).as_operand(),
26575            ],
26576        );
26577    }
26578}
26579
26580impl<U3: Into<Imm>> VsadduVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
26581    fn vsaddu_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
26582        self.emit_n(
26583            Opcode::VSADDUVX as i64,
26584            &[
26585                vd.as_operand(),
26586                vs2.as_operand(),
26587                rs1.as_operand(),
26588                Into::<Imm>::into(vm).as_operand(),
26589            ],
26590        );
26591    }
26592}
26593
26594impl VsbcVvmEmitter<Vp, Vp, Vp> for Assembler<'_> {
26595    fn vsbc_vvm(&mut self, vd: Vp, vs1: Vp, vs2: Vp) {
26596        self.emit_n(
26597            Opcode::VSBCVVM as i64,
26598            &[vd.as_operand(), vs1.as_operand(), vs2.as_operand()],
26599        );
26600    }
26601}
26602
26603impl VsbcVxmEmitter<Vp, Gp, Vp> for Assembler<'_> {
26604    fn vsbc_vxm(&mut self, vd: Vp, rs1: Gp, vs2: Vp) {
26605        self.emit_n(
26606            Opcode::VSBCVXM as i64,
26607            &[vd.as_operand(), rs1.as_operand(), vs2.as_operand()],
26608        );
26609    }
26610}
26611
26612impl<U2: Into<Imm>, U3: Into<Imm>> Vse16VEmitter<Vp, Gp, U2, U3> for Assembler<'_> {
26613    fn vse16_v(&mut self, vs3: Vp, rs1: Gp, vm: U2, nf: U3) {
26614        self.emit_n(
26615            Opcode::VSE16V as i64,
26616            &[
26617                vs3.as_operand(),
26618                rs1.as_operand(),
26619                Into::<Imm>::into(vm).as_operand(),
26620                Into::<Imm>::into(nf).as_operand(),
26621            ],
26622        );
26623    }
26624}
26625
26626impl Vse1VEmitter<Vp, Gp> for Assembler<'_> {
26627    fn vse1_v(&mut self, vs3: Vp, rs1: Gp) {
26628        self.emit_n(Opcode::VSE1V as i64, &[vs3.as_operand(), rs1.as_operand()]);
26629    }
26630}
26631
26632impl<U2: Into<Imm>, U3: Into<Imm>> Vse32VEmitter<Vp, Gp, U2, U3> for Assembler<'_> {
26633    fn vse32_v(&mut self, vs3: Vp, rs1: Gp, vm: U2, nf: U3) {
26634        self.emit_n(
26635            Opcode::VSE32V as i64,
26636            &[
26637                vs3.as_operand(),
26638                rs1.as_operand(),
26639                Into::<Imm>::into(vm).as_operand(),
26640                Into::<Imm>::into(nf).as_operand(),
26641            ],
26642        );
26643    }
26644}
26645
26646impl<U2: Into<Imm>, U3: Into<Imm>> Vse64VEmitter<Vp, Gp, U2, U3> for Assembler<'_> {
26647    fn vse64_v(&mut self, vs3: Vp, rs1: Gp, vm: U2, nf: U3) {
26648        self.emit_n(
26649            Opcode::VSE64V as i64,
26650            &[
26651                vs3.as_operand(),
26652                rs1.as_operand(),
26653                Into::<Imm>::into(vm).as_operand(),
26654                Into::<Imm>::into(nf).as_operand(),
26655            ],
26656        );
26657    }
26658}
26659
26660impl<U2: Into<Imm>, U3: Into<Imm>> Vse8VEmitter<Vp, Gp, U2, U3> for Assembler<'_> {
26661    fn vse8_v(&mut self, vs3: Vp, rs1: Gp, vm: U2, nf: U3) {
26662        self.emit_n(
26663            Opcode::VSE8V as i64,
26664            &[
26665                vs3.as_operand(),
26666                rs1.as_operand(),
26667                Into::<Imm>::into(vm).as_operand(),
26668                Into::<Imm>::into(nf).as_operand(),
26669            ],
26670        );
26671    }
26672}
26673
26674impl<U1: Into<Imm>, U2: Into<Imm>> VsetivliEmitter<Gp, U1, U2> for Assembler<'_> {
26675    fn vsetivli(&mut self, rd: Gp, zimm5: U1, zimm10: U2) {
26676        self.emit_n(
26677            Opcode::VSETIVLI as i64,
26678            &[
26679                rd.as_operand(),
26680                Into::<Imm>::into(zimm5).as_operand(),
26681                Into::<Imm>::into(zimm10).as_operand(),
26682            ],
26683        );
26684    }
26685}
26686
26687impl VsetvlEmitter<Gp, Gp, Gp> for Assembler<'_> {
26688    fn vsetvl(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
26689        self.emit_n(
26690            Opcode::VSETVL as i64,
26691            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
26692        );
26693    }
26694}
26695
26696impl<U2: Into<Imm>> VsetvliEmitter<Gp, Gp, U2> for Assembler<'_> {
26697    fn vsetvli(&mut self, rd: Gp, rs1: Gp, zimm11: U2) {
26698        self.emit_n(
26699            Opcode::VSETVLI as i64,
26700            &[
26701                rd.as_operand(),
26702                rs1.as_operand(),
26703                Into::<Imm>::into(zimm11).as_operand(),
26704            ],
26705        );
26706    }
26707}
26708
26709impl<U2: Into<Imm>> VsextVf2Emitter<Vp, Vp, U2> for Assembler<'_> {
26710    fn vsext_vf2(&mut self, vd: Vp, vs2: Vp, vm: U2) {
26711        self.emit_n(
26712            Opcode::VSEXTVF2 as i64,
26713            &[
26714                vd.as_operand(),
26715                vs2.as_operand(),
26716                Into::<Imm>::into(vm).as_operand(),
26717            ],
26718        );
26719    }
26720}
26721
26722impl<U2: Into<Imm>> VsextVf4Emitter<Vp, Vp, U2> for Assembler<'_> {
26723    fn vsext_vf4(&mut self, vd: Vp, vs2: Vp, vm: U2) {
26724        self.emit_n(
26725            Opcode::VSEXTVF4 as i64,
26726            &[
26727                vd.as_operand(),
26728                vs2.as_operand(),
26729                Into::<Imm>::into(vm).as_operand(),
26730            ],
26731        );
26732    }
26733}
26734
26735impl<U2: Into<Imm>> VsextVf8Emitter<Vp, Vp, U2> for Assembler<'_> {
26736    fn vsext_vf8(&mut self, vd: Vp, vs2: Vp, vm: U2) {
26737        self.emit_n(
26738            Opcode::VSEXTVF8 as i64,
26739            &[
26740                vd.as_operand(),
26741                vs2.as_operand(),
26742                Into::<Imm>::into(vm).as_operand(),
26743            ],
26744        );
26745    }
26746}
26747
26748impl Vsha2ChVvEmitter<Vp, Vp, Vp> for Assembler<'_> {
26749    fn vsha2ch_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp) {
26750        self.emit_n(
26751            Opcode::VSHA2CHVV as i64,
26752            &[vd.as_operand(), vs1.as_operand(), vs2.as_operand()],
26753        );
26754    }
26755}
26756
26757impl Vsha2ClVvEmitter<Vp, Vp, Vp> for Assembler<'_> {
26758    fn vsha2cl_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp) {
26759        self.emit_n(
26760            Opcode::VSHA2CLVV as i64,
26761            &[vd.as_operand(), vs1.as_operand(), vs2.as_operand()],
26762        );
26763    }
26764}
26765
26766impl Vsha2MsVvEmitter<Vp, Vp, Vp> for Assembler<'_> {
26767    fn vsha2ms_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp) {
26768        self.emit_n(
26769            Opcode::VSHA2MSVV as i64,
26770            &[vd.as_operand(), vs1.as_operand(), vs2.as_operand()],
26771        );
26772    }
26773}
26774
26775impl<U3: Into<Imm>> Vslide1DownVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
26776    fn vslide1down_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
26777        self.emit_n(
26778            Opcode::VSLIDE1DOWNVX as i64,
26779            &[
26780                vd.as_operand(),
26781                vs2.as_operand(),
26782                rs1.as_operand(),
26783                Into::<Imm>::into(vm).as_operand(),
26784            ],
26785        );
26786    }
26787}
26788
26789impl<U3: Into<Imm>> Vslide1UpVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
26790    fn vslide1up_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
26791        self.emit_n(
26792            Opcode::VSLIDE1UPVX as i64,
26793            &[
26794                vd.as_operand(),
26795                vs2.as_operand(),
26796                rs1.as_operand(),
26797                Into::<Imm>::into(vm).as_operand(),
26798            ],
26799        );
26800    }
26801}
26802
26803impl<U2: Into<Imm>, U3: Into<Imm>> VslidedownViEmitter<Vp, Vp, U2, U3> for Assembler<'_> {
26804    fn vslidedown_vi(&mut self, vd: Vp, vs2: Vp, zimm5: U2, vm: U3) {
26805        self.emit_n(
26806            Opcode::VSLIDEDOWNVI as i64,
26807            &[
26808                vd.as_operand(),
26809                vs2.as_operand(),
26810                Into::<Imm>::into(zimm5).as_operand(),
26811                Into::<Imm>::into(vm).as_operand(),
26812            ],
26813        );
26814    }
26815}
26816
26817impl<U3: Into<Imm>> VslidedownVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
26818    fn vslidedown_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
26819        self.emit_n(
26820            Opcode::VSLIDEDOWNVX as i64,
26821            &[
26822                vd.as_operand(),
26823                vs2.as_operand(),
26824                rs1.as_operand(),
26825                Into::<Imm>::into(vm).as_operand(),
26826            ],
26827        );
26828    }
26829}
26830
26831impl<U2: Into<Imm>, U3: Into<Imm>> VslideupViEmitter<Vp, Vp, U2, U3> for Assembler<'_> {
26832    fn vslideup_vi(&mut self, vd: Vp, vs2: Vp, zimm5: U2, vm: U3) {
26833        self.emit_n(
26834            Opcode::VSLIDEUPVI as i64,
26835            &[
26836                vd.as_operand(),
26837                vs2.as_operand(),
26838                Into::<Imm>::into(zimm5).as_operand(),
26839                Into::<Imm>::into(vm).as_operand(),
26840            ],
26841        );
26842    }
26843}
26844
26845impl<U3: Into<Imm>> VslideupVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
26846    fn vslideup_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
26847        self.emit_n(
26848            Opcode::VSLIDEUPVX as i64,
26849            &[
26850                vd.as_operand(),
26851                vs2.as_operand(),
26852                rs1.as_operand(),
26853                Into::<Imm>::into(vm).as_operand(),
26854            ],
26855        );
26856    }
26857}
26858
26859impl<U2: Into<Imm>, U3: Into<Imm>> VsllViEmitter<Vp, Vp, U2, U3> for Assembler<'_> {
26860    fn vsll_vi(&mut self, vd: Vp, vs2: Vp, zimm5: U2, vm: U3) {
26861        self.emit_n(
26862            Opcode::VSLLVI as i64,
26863            &[
26864                vd.as_operand(),
26865                vs2.as_operand(),
26866                Into::<Imm>::into(zimm5).as_operand(),
26867                Into::<Imm>::into(vm).as_operand(),
26868            ],
26869        );
26870    }
26871}
26872
26873impl<U3: Into<Imm>> VsllVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
26874    fn vsll_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
26875        self.emit_n(
26876            Opcode::VSLLVV as i64,
26877            &[
26878                vd.as_operand(),
26879                vs1.as_operand(),
26880                vs2.as_operand(),
26881                Into::<Imm>::into(vm).as_operand(),
26882            ],
26883        );
26884    }
26885}
26886
26887impl<U3: Into<Imm>> VsllVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
26888    fn vsll_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
26889        self.emit_n(
26890            Opcode::VSLLVX as i64,
26891            &[
26892                vd.as_operand(),
26893                vs2.as_operand(),
26894                rs1.as_operand(),
26895                Into::<Imm>::into(vm).as_operand(),
26896            ],
26897        );
26898    }
26899}
26900
26901impl<U2: Into<Imm>> Vsm3CViEmitter<Vp, Vp, U2> for Assembler<'_> {
26902    fn vsm3c_vi(&mut self, vd: Vp, vs2: Vp, zimm5: U2) {
26903        self.emit_n(
26904            Opcode::VSM3CVI as i64,
26905            &[
26906                vd.as_operand(),
26907                vs2.as_operand(),
26908                Into::<Imm>::into(zimm5).as_operand(),
26909            ],
26910        );
26911    }
26912}
26913
26914impl Vsm3MeVvEmitter<Vp, Vp, Vp> for Assembler<'_> {
26915    fn vsm3me_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp) {
26916        self.emit_n(
26917            Opcode::VSM3MEVV as i64,
26918            &[vd.as_operand(), vs1.as_operand(), vs2.as_operand()],
26919        );
26920    }
26921}
26922
26923impl<U2: Into<Imm>> Vsm4KViEmitter<Vp, Vp, U2> for Assembler<'_> {
26924    fn vsm4k_vi(&mut self, vd: Vp, vs2: Vp, zimm5: U2) {
26925        self.emit_n(
26926            Opcode::VSM4KVI as i64,
26927            &[
26928                vd.as_operand(),
26929                vs2.as_operand(),
26930                Into::<Imm>::into(zimm5).as_operand(),
26931            ],
26932        );
26933    }
26934}
26935
26936impl Vsm4RVsEmitter<Vp, Vp> for Assembler<'_> {
26937    fn vsm4r_vs(&mut self, vd: Vp, vs2: Vp) {
26938        self.emit_n(Opcode::VSM4RVS as i64, &[vd.as_operand(), vs2.as_operand()]);
26939    }
26940}
26941
26942impl Vsm4RVvEmitter<Vp, Vp> for Assembler<'_> {
26943    fn vsm4r_vv(&mut self, vd: Vp, vs2: Vp) {
26944        self.emit_n(Opcode::VSM4RVV as i64, &[vd.as_operand(), vs2.as_operand()]);
26945    }
26946}
26947
26948impl VsmVEmitter<Vp, Gp> for Assembler<'_> {
26949    fn vsm_v(&mut self, vs3: Vp, rs1: Gp) {
26950        self.emit_n(Opcode::VSMV as i64, &[vs3.as_operand(), rs1.as_operand()]);
26951    }
26952}
26953
26954impl<U3: Into<Imm>> VsmulVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
26955    fn vsmul_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
26956        self.emit_n(
26957            Opcode::VSMULVV as i64,
26958            &[
26959                vd.as_operand(),
26960                vs1.as_operand(),
26961                vs2.as_operand(),
26962                Into::<Imm>::into(vm).as_operand(),
26963            ],
26964        );
26965    }
26966}
26967
26968impl<U3: Into<Imm>> VsmulVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
26969    fn vsmul_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
26970        self.emit_n(
26971            Opcode::VSMULVX as i64,
26972            &[
26973                vd.as_operand(),
26974                vs2.as_operand(),
26975                rs1.as_operand(),
26976                Into::<Imm>::into(vm).as_operand(),
26977            ],
26978        );
26979    }
26980}
26981
26982impl<U3: Into<Imm>, U4: Into<Imm>> Vsoxei16VEmitter<Vp, Gp, Vp, U3, U4> for Assembler<'_> {
26983    fn vsoxei16_v(&mut self, vs3: Vp, rs1: Gp, vs2: Vp, vm: U3, nf: U4) {
26984        self.emit_n(
26985            Opcode::VSOXEI16V as i64,
26986            &[
26987                vs3.as_operand(),
26988                rs1.as_operand(),
26989                vs2.as_operand(),
26990                Into::<Imm>::into(vm).as_operand(),
26991                Into::<Imm>::into(nf).as_operand(),
26992            ],
26993        );
26994    }
26995}
26996
26997impl<U3: Into<Imm>, U4: Into<Imm>> Vsoxei32VEmitter<Vp, Gp, Vp, U3, U4> for Assembler<'_> {
26998    fn vsoxei32_v(&mut self, vs3: Vp, rs1: Gp, vs2: Vp, vm: U3, nf: U4) {
26999        self.emit_n(
27000            Opcode::VSOXEI32V as i64,
27001            &[
27002                vs3.as_operand(),
27003                rs1.as_operand(),
27004                vs2.as_operand(),
27005                Into::<Imm>::into(vm).as_operand(),
27006                Into::<Imm>::into(nf).as_operand(),
27007            ],
27008        );
27009    }
27010}
27011
27012impl<U3: Into<Imm>, U4: Into<Imm>> Vsoxei64VEmitter<Vp, Gp, Vp, U3, U4> for Assembler<'_> {
27013    fn vsoxei64_v(&mut self, vs3: Vp, rs1: Gp, vs2: Vp, vm: U3, nf: U4) {
27014        self.emit_n(
27015            Opcode::VSOXEI64V as i64,
27016            &[
27017                vs3.as_operand(),
27018                rs1.as_operand(),
27019                vs2.as_operand(),
27020                Into::<Imm>::into(vm).as_operand(),
27021                Into::<Imm>::into(nf).as_operand(),
27022            ],
27023        );
27024    }
27025}
27026
27027impl<U3: Into<Imm>, U4: Into<Imm>> Vsoxei8VEmitter<Vp, Gp, Vp, U3, U4> for Assembler<'_> {
27028    fn vsoxei8_v(&mut self, vs3: Vp, rs1: Gp, vs2: Vp, vm: U3, nf: U4) {
27029        self.emit_n(
27030            Opcode::VSOXEI8V as i64,
27031            &[
27032                vs3.as_operand(),
27033                rs1.as_operand(),
27034                vs2.as_operand(),
27035                Into::<Imm>::into(vm).as_operand(),
27036                Into::<Imm>::into(nf).as_operand(),
27037            ],
27038        );
27039    }
27040}
27041
27042impl<U2: Into<Imm>, U3: Into<Imm>> VsraViEmitter<Vp, Vp, U2, U3> for Assembler<'_> {
27043    fn vsra_vi(&mut self, vd: Vp, vs2: Vp, zimm5: U2, vm: U3) {
27044        self.emit_n(
27045            Opcode::VSRAVI as i64,
27046            &[
27047                vd.as_operand(),
27048                vs2.as_operand(),
27049                Into::<Imm>::into(zimm5).as_operand(),
27050                Into::<Imm>::into(vm).as_operand(),
27051            ],
27052        );
27053    }
27054}
27055
27056impl<U3: Into<Imm>> VsraVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
27057    fn vsra_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
27058        self.emit_n(
27059            Opcode::VSRAVV as i64,
27060            &[
27061                vd.as_operand(),
27062                vs1.as_operand(),
27063                vs2.as_operand(),
27064                Into::<Imm>::into(vm).as_operand(),
27065            ],
27066        );
27067    }
27068}
27069
27070impl<U3: Into<Imm>> VsraVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
27071    fn vsra_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
27072        self.emit_n(
27073            Opcode::VSRAVX as i64,
27074            &[
27075                vd.as_operand(),
27076                vs2.as_operand(),
27077                rs1.as_operand(),
27078                Into::<Imm>::into(vm).as_operand(),
27079            ],
27080        );
27081    }
27082}
27083
27084impl<U2: Into<Imm>, U3: Into<Imm>> VsrlViEmitter<Vp, Vp, U2, U3> for Assembler<'_> {
27085    fn vsrl_vi(&mut self, vd: Vp, vs2: Vp, zimm5: U2, vm: U3) {
27086        self.emit_n(
27087            Opcode::VSRLVI as i64,
27088            &[
27089                vd.as_operand(),
27090                vs2.as_operand(),
27091                Into::<Imm>::into(zimm5).as_operand(),
27092                Into::<Imm>::into(vm).as_operand(),
27093            ],
27094        );
27095    }
27096}
27097
27098impl<U3: Into<Imm>> VsrlVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
27099    fn vsrl_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
27100        self.emit_n(
27101            Opcode::VSRLVV as i64,
27102            &[
27103                vd.as_operand(),
27104                vs1.as_operand(),
27105                vs2.as_operand(),
27106                Into::<Imm>::into(vm).as_operand(),
27107            ],
27108        );
27109    }
27110}
27111
27112impl<U3: Into<Imm>> VsrlVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
27113    fn vsrl_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
27114        self.emit_n(
27115            Opcode::VSRLVX as i64,
27116            &[
27117                vd.as_operand(),
27118                vs2.as_operand(),
27119                rs1.as_operand(),
27120                Into::<Imm>::into(vm).as_operand(),
27121            ],
27122        );
27123    }
27124}
27125
27126impl<U3: Into<Imm>, U4: Into<Imm>> Vsse16VEmitter<Vp, Gp, Gp, U3, U4> for Assembler<'_> {
27127    fn vsse16_v(&mut self, vs3: Vp, rs1: Gp, rs2: Gp, vm: U3, nf: U4) {
27128        self.emit_n(
27129            Opcode::VSSE16V as i64,
27130            &[
27131                vs3.as_operand(),
27132                rs1.as_operand(),
27133                rs2.as_operand(),
27134                Into::<Imm>::into(vm).as_operand(),
27135                Into::<Imm>::into(nf).as_operand(),
27136            ],
27137        );
27138    }
27139}
27140
27141impl<U3: Into<Imm>, U4: Into<Imm>> Vsse32VEmitter<Vp, Gp, Gp, U3, U4> for Assembler<'_> {
27142    fn vsse32_v(&mut self, vs3: Vp, rs1: Gp, rs2: Gp, vm: U3, nf: U4) {
27143        self.emit_n(
27144            Opcode::VSSE32V as i64,
27145            &[
27146                vs3.as_operand(),
27147                rs1.as_operand(),
27148                rs2.as_operand(),
27149                Into::<Imm>::into(vm).as_operand(),
27150                Into::<Imm>::into(nf).as_operand(),
27151            ],
27152        );
27153    }
27154}
27155
27156impl<U3: Into<Imm>, U4: Into<Imm>> Vsse64VEmitter<Vp, Gp, Gp, U3, U4> for Assembler<'_> {
27157    fn vsse64_v(&mut self, vs3: Vp, rs1: Gp, rs2: Gp, vm: U3, nf: U4) {
27158        self.emit_n(
27159            Opcode::VSSE64V as i64,
27160            &[
27161                vs3.as_operand(),
27162                rs1.as_operand(),
27163                rs2.as_operand(),
27164                Into::<Imm>::into(vm).as_operand(),
27165                Into::<Imm>::into(nf).as_operand(),
27166            ],
27167        );
27168    }
27169}
27170
27171impl<U3: Into<Imm>, U4: Into<Imm>> Vsse8VEmitter<Vp, Gp, Gp, U3, U4> for Assembler<'_> {
27172    fn vsse8_v(&mut self, vs3: Vp, rs1: Gp, rs2: Gp, vm: U3, nf: U4) {
27173        self.emit_n(
27174            Opcode::VSSE8V as i64,
27175            &[
27176                vs3.as_operand(),
27177                rs1.as_operand(),
27178                rs2.as_operand(),
27179                Into::<Imm>::into(vm).as_operand(),
27180                Into::<Imm>::into(nf).as_operand(),
27181            ],
27182        );
27183    }
27184}
27185
27186impl<U2: Into<Imm>, U3: Into<Imm>> VssraViEmitter<Vp, Vp, U2, U3> for Assembler<'_> {
27187    fn vssra_vi(&mut self, vd: Vp, vs2: Vp, zimm5: U2, vm: U3) {
27188        self.emit_n(
27189            Opcode::VSSRAVI as i64,
27190            &[
27191                vd.as_operand(),
27192                vs2.as_operand(),
27193                Into::<Imm>::into(zimm5).as_operand(),
27194                Into::<Imm>::into(vm).as_operand(),
27195            ],
27196        );
27197    }
27198}
27199
27200impl<U3: Into<Imm>> VssraVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
27201    fn vssra_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
27202        self.emit_n(
27203            Opcode::VSSRAVV as i64,
27204            &[
27205                vd.as_operand(),
27206                vs1.as_operand(),
27207                vs2.as_operand(),
27208                Into::<Imm>::into(vm).as_operand(),
27209            ],
27210        );
27211    }
27212}
27213
27214impl<U3: Into<Imm>> VssraVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
27215    fn vssra_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
27216        self.emit_n(
27217            Opcode::VSSRAVX as i64,
27218            &[
27219                vd.as_operand(),
27220                vs2.as_operand(),
27221                rs1.as_operand(),
27222                Into::<Imm>::into(vm).as_operand(),
27223            ],
27224        );
27225    }
27226}
27227
27228impl<U2: Into<Imm>, U3: Into<Imm>> VssrlViEmitter<Vp, Vp, U2, U3> for Assembler<'_> {
27229    fn vssrl_vi(&mut self, vd: Vp, vs2: Vp, zimm5: U2, vm: U3) {
27230        self.emit_n(
27231            Opcode::VSSRLVI as i64,
27232            &[
27233                vd.as_operand(),
27234                vs2.as_operand(),
27235                Into::<Imm>::into(zimm5).as_operand(),
27236                Into::<Imm>::into(vm).as_operand(),
27237            ],
27238        );
27239    }
27240}
27241
27242impl<U3: Into<Imm>> VssrlVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
27243    fn vssrl_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
27244        self.emit_n(
27245            Opcode::VSSRLVV as i64,
27246            &[
27247                vd.as_operand(),
27248                vs1.as_operand(),
27249                vs2.as_operand(),
27250                Into::<Imm>::into(vm).as_operand(),
27251            ],
27252        );
27253    }
27254}
27255
27256impl<U3: Into<Imm>> VssrlVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
27257    fn vssrl_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
27258        self.emit_n(
27259            Opcode::VSSRLVX as i64,
27260            &[
27261                vd.as_operand(),
27262                vs2.as_operand(),
27263                rs1.as_operand(),
27264                Into::<Imm>::into(vm).as_operand(),
27265            ],
27266        );
27267    }
27268}
27269
27270impl<U3: Into<Imm>> VssubVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
27271    fn vssub_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
27272        self.emit_n(
27273            Opcode::VSSUBVV as i64,
27274            &[
27275                vd.as_operand(),
27276                vs1.as_operand(),
27277                vs2.as_operand(),
27278                Into::<Imm>::into(vm).as_operand(),
27279            ],
27280        );
27281    }
27282}
27283
27284impl<U3: Into<Imm>> VssubVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
27285    fn vssub_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
27286        self.emit_n(
27287            Opcode::VSSUBVX as i64,
27288            &[
27289                vd.as_operand(),
27290                vs2.as_operand(),
27291                rs1.as_operand(),
27292                Into::<Imm>::into(vm).as_operand(),
27293            ],
27294        );
27295    }
27296}
27297
27298impl<U3: Into<Imm>> VssubuVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
27299    fn vssubu_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
27300        self.emit_n(
27301            Opcode::VSSUBUVV as i64,
27302            &[
27303                vd.as_operand(),
27304                vs1.as_operand(),
27305                vs2.as_operand(),
27306                Into::<Imm>::into(vm).as_operand(),
27307            ],
27308        );
27309    }
27310}
27311
27312impl<U3: Into<Imm>> VssubuVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
27313    fn vssubu_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
27314        self.emit_n(
27315            Opcode::VSSUBUVX as i64,
27316            &[
27317                vd.as_operand(),
27318                vs2.as_operand(),
27319                rs1.as_operand(),
27320                Into::<Imm>::into(vm).as_operand(),
27321            ],
27322        );
27323    }
27324}
27325
27326impl<U3: Into<Imm>> VsubVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
27327    fn vsub_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
27328        self.emit_n(
27329            Opcode::VSUBVV as i64,
27330            &[
27331                vd.as_operand(),
27332                vs1.as_operand(),
27333                vs2.as_operand(),
27334                Into::<Imm>::into(vm).as_operand(),
27335            ],
27336        );
27337    }
27338}
27339
27340impl<U3: Into<Imm>> VsubVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
27341    fn vsub_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
27342        self.emit_n(
27343            Opcode::VSUBVX as i64,
27344            &[
27345                vd.as_operand(),
27346                vs2.as_operand(),
27347                rs1.as_operand(),
27348                Into::<Imm>::into(vm).as_operand(),
27349            ],
27350        );
27351    }
27352}
27353
27354impl<U3: Into<Imm>, U4: Into<Imm>> Vsuxei16VEmitter<Vp, Gp, Vp, U3, U4> for Assembler<'_> {
27355    fn vsuxei16_v(&mut self, vs3: Vp, rs1: Gp, vs2: Vp, vm: U3, nf: U4) {
27356        self.emit_n(
27357            Opcode::VSUXEI16V as i64,
27358            &[
27359                vs3.as_operand(),
27360                rs1.as_operand(),
27361                vs2.as_operand(),
27362                Into::<Imm>::into(vm).as_operand(),
27363                Into::<Imm>::into(nf).as_operand(),
27364            ],
27365        );
27366    }
27367}
27368
27369impl<U3: Into<Imm>, U4: Into<Imm>> Vsuxei32VEmitter<Vp, Gp, Vp, U3, U4> for Assembler<'_> {
27370    fn vsuxei32_v(&mut self, vs3: Vp, rs1: Gp, vs2: Vp, vm: U3, nf: U4) {
27371        self.emit_n(
27372            Opcode::VSUXEI32V as i64,
27373            &[
27374                vs3.as_operand(),
27375                rs1.as_operand(),
27376                vs2.as_operand(),
27377                Into::<Imm>::into(vm).as_operand(),
27378                Into::<Imm>::into(nf).as_operand(),
27379            ],
27380        );
27381    }
27382}
27383
27384impl<U3: Into<Imm>, U4: Into<Imm>> Vsuxei64VEmitter<Vp, Gp, Vp, U3, U4> for Assembler<'_> {
27385    fn vsuxei64_v(&mut self, vs3: Vp, rs1: Gp, vs2: Vp, vm: U3, nf: U4) {
27386        self.emit_n(
27387            Opcode::VSUXEI64V as i64,
27388            &[
27389                vs3.as_operand(),
27390                rs1.as_operand(),
27391                vs2.as_operand(),
27392                Into::<Imm>::into(vm).as_operand(),
27393                Into::<Imm>::into(nf).as_operand(),
27394            ],
27395        );
27396    }
27397}
27398
27399impl<U3: Into<Imm>, U4: Into<Imm>> Vsuxei8VEmitter<Vp, Gp, Vp, U3, U4> for Assembler<'_> {
27400    fn vsuxei8_v(&mut self, vs3: Vp, rs1: Gp, vs2: Vp, vm: U3, nf: U4) {
27401        self.emit_n(
27402            Opcode::VSUXEI8V as i64,
27403            &[
27404                vs3.as_operand(),
27405                rs1.as_operand(),
27406                vs2.as_operand(),
27407                Into::<Imm>::into(vm).as_operand(),
27408                Into::<Imm>::into(nf).as_operand(),
27409            ],
27410        );
27411    }
27412}
27413
27414impl<U3: Into<Imm>> VwaddVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
27415    fn vwadd_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
27416        self.emit_n(
27417            Opcode::VWADDVV as i64,
27418            &[
27419                vd.as_operand(),
27420                vs1.as_operand(),
27421                vs2.as_operand(),
27422                Into::<Imm>::into(vm).as_operand(),
27423            ],
27424        );
27425    }
27426}
27427
27428impl<U3: Into<Imm>> VwaddVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
27429    fn vwadd_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
27430        self.emit_n(
27431            Opcode::VWADDVX as i64,
27432            &[
27433                vd.as_operand(),
27434                vs2.as_operand(),
27435                rs1.as_operand(),
27436                Into::<Imm>::into(vm).as_operand(),
27437            ],
27438        );
27439    }
27440}
27441
27442impl<U3: Into<Imm>> VwaddWvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
27443    fn vwadd_wv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
27444        self.emit_n(
27445            Opcode::VWADDWV as i64,
27446            &[
27447                vd.as_operand(),
27448                vs1.as_operand(),
27449                vs2.as_operand(),
27450                Into::<Imm>::into(vm).as_operand(),
27451            ],
27452        );
27453    }
27454}
27455
27456impl<U3: Into<Imm>> VwaddWxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
27457    fn vwadd_wx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
27458        self.emit_n(
27459            Opcode::VWADDWX as i64,
27460            &[
27461                vd.as_operand(),
27462                vs2.as_operand(),
27463                rs1.as_operand(),
27464                Into::<Imm>::into(vm).as_operand(),
27465            ],
27466        );
27467    }
27468}
27469
27470impl<U3: Into<Imm>> VwadduVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
27471    fn vwaddu_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
27472        self.emit_n(
27473            Opcode::VWADDUVV as i64,
27474            &[
27475                vd.as_operand(),
27476                vs1.as_operand(),
27477                vs2.as_operand(),
27478                Into::<Imm>::into(vm).as_operand(),
27479            ],
27480        );
27481    }
27482}
27483
27484impl<U3: Into<Imm>> VwadduVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
27485    fn vwaddu_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
27486        self.emit_n(
27487            Opcode::VWADDUVX as i64,
27488            &[
27489                vd.as_operand(),
27490                vs2.as_operand(),
27491                rs1.as_operand(),
27492                Into::<Imm>::into(vm).as_operand(),
27493            ],
27494        );
27495    }
27496}
27497
27498impl<U3: Into<Imm>> VwadduWvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
27499    fn vwaddu_wv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
27500        self.emit_n(
27501            Opcode::VWADDUWV as i64,
27502            &[
27503                vd.as_operand(),
27504                vs1.as_operand(),
27505                vs2.as_operand(),
27506                Into::<Imm>::into(vm).as_operand(),
27507            ],
27508        );
27509    }
27510}
27511
27512impl<U3: Into<Imm>> VwadduWxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
27513    fn vwaddu_wx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
27514        self.emit_n(
27515            Opcode::VWADDUWX as i64,
27516            &[
27517                vd.as_operand(),
27518                vs2.as_operand(),
27519                rs1.as_operand(),
27520                Into::<Imm>::into(vm).as_operand(),
27521            ],
27522        );
27523    }
27524}
27525
27526impl<U3: Into<Imm>> VwmaccVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
27527    fn vwmacc_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
27528        self.emit_n(
27529            Opcode::VWMACCVV as i64,
27530            &[
27531                vd.as_operand(),
27532                vs1.as_operand(),
27533                vs2.as_operand(),
27534                Into::<Imm>::into(vm).as_operand(),
27535            ],
27536        );
27537    }
27538}
27539
27540impl<U3: Into<Imm>> VwmaccVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
27541    fn vwmacc_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
27542        self.emit_n(
27543            Opcode::VWMACCVX as i64,
27544            &[
27545                vd.as_operand(),
27546                vs2.as_operand(),
27547                rs1.as_operand(),
27548                Into::<Imm>::into(vm).as_operand(),
27549            ],
27550        );
27551    }
27552}
27553
27554impl<U3: Into<Imm>> VwmaccsuVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
27555    fn vwmaccsu_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
27556        self.emit_n(
27557            Opcode::VWMACCSUVV as i64,
27558            &[
27559                vd.as_operand(),
27560                vs1.as_operand(),
27561                vs2.as_operand(),
27562                Into::<Imm>::into(vm).as_operand(),
27563            ],
27564        );
27565    }
27566}
27567
27568impl<U3: Into<Imm>> VwmaccsuVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
27569    fn vwmaccsu_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
27570        self.emit_n(
27571            Opcode::VWMACCSUVX as i64,
27572            &[
27573                vd.as_operand(),
27574                vs2.as_operand(),
27575                rs1.as_operand(),
27576                Into::<Imm>::into(vm).as_operand(),
27577            ],
27578        );
27579    }
27580}
27581
27582impl<U3: Into<Imm>> VwmaccuVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
27583    fn vwmaccu_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
27584        self.emit_n(
27585            Opcode::VWMACCUVV as i64,
27586            &[
27587                vd.as_operand(),
27588                vs1.as_operand(),
27589                vs2.as_operand(),
27590                Into::<Imm>::into(vm).as_operand(),
27591            ],
27592        );
27593    }
27594}
27595
27596impl<U3: Into<Imm>> VwmaccuVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
27597    fn vwmaccu_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
27598        self.emit_n(
27599            Opcode::VWMACCUVX as i64,
27600            &[
27601                vd.as_operand(),
27602                vs2.as_operand(),
27603                rs1.as_operand(),
27604                Into::<Imm>::into(vm).as_operand(),
27605            ],
27606        );
27607    }
27608}
27609
27610impl<U3: Into<Imm>> VwmaccusVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
27611    fn vwmaccus_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
27612        self.emit_n(
27613            Opcode::VWMACCUSVX as i64,
27614            &[
27615                vd.as_operand(),
27616                vs2.as_operand(),
27617                rs1.as_operand(),
27618                Into::<Imm>::into(vm).as_operand(),
27619            ],
27620        );
27621    }
27622}
27623
27624impl<U3: Into<Imm>> VwmulVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
27625    fn vwmul_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
27626        self.emit_n(
27627            Opcode::VWMULVV as i64,
27628            &[
27629                vd.as_operand(),
27630                vs1.as_operand(),
27631                vs2.as_operand(),
27632                Into::<Imm>::into(vm).as_operand(),
27633            ],
27634        );
27635    }
27636}
27637
27638impl<U3: Into<Imm>> VwmulVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
27639    fn vwmul_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
27640        self.emit_n(
27641            Opcode::VWMULVX as i64,
27642            &[
27643                vd.as_operand(),
27644                vs2.as_operand(),
27645                rs1.as_operand(),
27646                Into::<Imm>::into(vm).as_operand(),
27647            ],
27648        );
27649    }
27650}
27651
27652impl<U3: Into<Imm>> VwmulsuVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
27653    fn vwmulsu_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
27654        self.emit_n(
27655            Opcode::VWMULSUVV as i64,
27656            &[
27657                vd.as_operand(),
27658                vs1.as_operand(),
27659                vs2.as_operand(),
27660                Into::<Imm>::into(vm).as_operand(),
27661            ],
27662        );
27663    }
27664}
27665
27666impl<U3: Into<Imm>> VwmulsuVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
27667    fn vwmulsu_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
27668        self.emit_n(
27669            Opcode::VWMULSUVX as i64,
27670            &[
27671                vd.as_operand(),
27672                vs2.as_operand(),
27673                rs1.as_operand(),
27674                Into::<Imm>::into(vm).as_operand(),
27675            ],
27676        );
27677    }
27678}
27679
27680impl<U3: Into<Imm>> VwmuluVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
27681    fn vwmulu_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
27682        self.emit_n(
27683            Opcode::VWMULUVV as i64,
27684            &[
27685                vd.as_operand(),
27686                vs1.as_operand(),
27687                vs2.as_operand(),
27688                Into::<Imm>::into(vm).as_operand(),
27689            ],
27690        );
27691    }
27692}
27693
27694impl<U3: Into<Imm>> VwmuluVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
27695    fn vwmulu_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
27696        self.emit_n(
27697            Opcode::VWMULUVX as i64,
27698            &[
27699                vd.as_operand(),
27700                vs2.as_operand(),
27701                rs1.as_operand(),
27702                Into::<Imm>::into(vm).as_operand(),
27703            ],
27704        );
27705    }
27706}
27707
27708impl<U3: Into<Imm>> VwredsumVsEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
27709    fn vwredsum_vs(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
27710        self.emit_n(
27711            Opcode::VWREDSUMVS as i64,
27712            &[
27713                vd.as_operand(),
27714                vs1.as_operand(),
27715                vs2.as_operand(),
27716                Into::<Imm>::into(vm).as_operand(),
27717            ],
27718        );
27719    }
27720}
27721
27722impl<U3: Into<Imm>> VwredsumuVsEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
27723    fn vwredsumu_vs(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
27724        self.emit_n(
27725            Opcode::VWREDSUMUVS as i64,
27726            &[
27727                vd.as_operand(),
27728                vs1.as_operand(),
27729                vs2.as_operand(),
27730                Into::<Imm>::into(vm).as_operand(),
27731            ],
27732        );
27733    }
27734}
27735
27736impl<U2: Into<Imm>, U3: Into<Imm>> VwsllViEmitter<Vp, Vp, U2, U3> for Assembler<'_> {
27737    fn vwsll_vi(&mut self, vd: Vp, vs2: Vp, zimm5: U2, vm: U3) {
27738        self.emit_n(
27739            Opcode::VWSLLVI as i64,
27740            &[
27741                vd.as_operand(),
27742                vs2.as_operand(),
27743                Into::<Imm>::into(zimm5).as_operand(),
27744                Into::<Imm>::into(vm).as_operand(),
27745            ],
27746        );
27747    }
27748}
27749
27750impl<U3: Into<Imm>> VwsllVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
27751    fn vwsll_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
27752        self.emit_n(
27753            Opcode::VWSLLVV as i64,
27754            &[
27755                vd.as_operand(),
27756                vs1.as_operand(),
27757                vs2.as_operand(),
27758                Into::<Imm>::into(vm).as_operand(),
27759            ],
27760        );
27761    }
27762}
27763
27764impl<U3: Into<Imm>> VwsllVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
27765    fn vwsll_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
27766        self.emit_n(
27767            Opcode::VWSLLVX as i64,
27768            &[
27769                vd.as_operand(),
27770                vs2.as_operand(),
27771                rs1.as_operand(),
27772                Into::<Imm>::into(vm).as_operand(),
27773            ],
27774        );
27775    }
27776}
27777
27778impl<U3: Into<Imm>> VwsubVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
27779    fn vwsub_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
27780        self.emit_n(
27781            Opcode::VWSUBVV as i64,
27782            &[
27783                vd.as_operand(),
27784                vs1.as_operand(),
27785                vs2.as_operand(),
27786                Into::<Imm>::into(vm).as_operand(),
27787            ],
27788        );
27789    }
27790}
27791
27792impl<U3: Into<Imm>> VwsubVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
27793    fn vwsub_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
27794        self.emit_n(
27795            Opcode::VWSUBVX as i64,
27796            &[
27797                vd.as_operand(),
27798                vs2.as_operand(),
27799                rs1.as_operand(),
27800                Into::<Imm>::into(vm).as_operand(),
27801            ],
27802        );
27803    }
27804}
27805
27806impl<U3: Into<Imm>> VwsubWvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
27807    fn vwsub_wv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
27808        self.emit_n(
27809            Opcode::VWSUBWV as i64,
27810            &[
27811                vd.as_operand(),
27812                vs1.as_operand(),
27813                vs2.as_operand(),
27814                Into::<Imm>::into(vm).as_operand(),
27815            ],
27816        );
27817    }
27818}
27819
27820impl<U3: Into<Imm>> VwsubWxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
27821    fn vwsub_wx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
27822        self.emit_n(
27823            Opcode::VWSUBWX as i64,
27824            &[
27825                vd.as_operand(),
27826                vs2.as_operand(),
27827                rs1.as_operand(),
27828                Into::<Imm>::into(vm).as_operand(),
27829            ],
27830        );
27831    }
27832}
27833
27834impl<U3: Into<Imm>> VwsubuVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
27835    fn vwsubu_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
27836        self.emit_n(
27837            Opcode::VWSUBUVV as i64,
27838            &[
27839                vd.as_operand(),
27840                vs1.as_operand(),
27841                vs2.as_operand(),
27842                Into::<Imm>::into(vm).as_operand(),
27843            ],
27844        );
27845    }
27846}
27847
27848impl<U3: Into<Imm>> VwsubuVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
27849    fn vwsubu_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
27850        self.emit_n(
27851            Opcode::VWSUBUVX as i64,
27852            &[
27853                vd.as_operand(),
27854                vs2.as_operand(),
27855                rs1.as_operand(),
27856                Into::<Imm>::into(vm).as_operand(),
27857            ],
27858        );
27859    }
27860}
27861
27862impl<U3: Into<Imm>> VwsubuWvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
27863    fn vwsubu_wv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
27864        self.emit_n(
27865            Opcode::VWSUBUWV as i64,
27866            &[
27867                vd.as_operand(),
27868                vs1.as_operand(),
27869                vs2.as_operand(),
27870                Into::<Imm>::into(vm).as_operand(),
27871            ],
27872        );
27873    }
27874}
27875
27876impl<U3: Into<Imm>> VwsubuWxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
27877    fn vwsubu_wx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
27878        self.emit_n(
27879            Opcode::VWSUBUWX as i64,
27880            &[
27881                vd.as_operand(),
27882                vs2.as_operand(),
27883                rs1.as_operand(),
27884                Into::<Imm>::into(vm).as_operand(),
27885            ],
27886        );
27887    }
27888}
27889
27890impl<U2: Into<Imm>, U3: Into<Imm>> VxorViEmitter<Vp, Vp, U2, U3> for Assembler<'_> {
27891    fn vxor_vi(&mut self, vd: Vp, vs2: Vp, simm5: U2, vm: U3) {
27892        self.emit_n(
27893            Opcode::VXORVI as i64,
27894            &[
27895                vd.as_operand(),
27896                vs2.as_operand(),
27897                Into::<Imm>::into(simm5).as_operand(),
27898                Into::<Imm>::into(vm).as_operand(),
27899            ],
27900        );
27901    }
27902}
27903
27904impl<U3: Into<Imm>> VxorVvEmitter<Vp, Vp, Vp, U3> for Assembler<'_> {
27905    fn vxor_vv(&mut self, vd: Vp, vs1: Vp, vs2: Vp, vm: U3) {
27906        self.emit_n(
27907            Opcode::VXORVV as i64,
27908            &[
27909                vd.as_operand(),
27910                vs1.as_operand(),
27911                vs2.as_operand(),
27912                Into::<Imm>::into(vm).as_operand(),
27913            ],
27914        );
27915    }
27916}
27917
27918impl<U3: Into<Imm>> VxorVxEmitter<Vp, Vp, Gp, U3> for Assembler<'_> {
27919    fn vxor_vx(&mut self, vd: Vp, vs2: Vp, rs1: Gp, vm: U3) {
27920        self.emit_n(
27921            Opcode::VXORVX as i64,
27922            &[
27923                vd.as_operand(),
27924                vs2.as_operand(),
27925                rs1.as_operand(),
27926                Into::<Imm>::into(vm).as_operand(),
27927            ],
27928        );
27929    }
27930}
27931
27932impl<U2: Into<Imm>> VzextVf2Emitter<Vp, Vp, U2> for Assembler<'_> {
27933    fn vzext_vf2(&mut self, vd: Vp, vs2: Vp, vm: U2) {
27934        self.emit_n(
27935            Opcode::VZEXTVF2 as i64,
27936            &[
27937                vd.as_operand(),
27938                vs2.as_operand(),
27939                Into::<Imm>::into(vm).as_operand(),
27940            ],
27941        );
27942    }
27943}
27944
27945impl<U2: Into<Imm>> VzextVf4Emitter<Vp, Vp, U2> for Assembler<'_> {
27946    fn vzext_vf4(&mut self, vd: Vp, vs2: Vp, vm: U2) {
27947        self.emit_n(
27948            Opcode::VZEXTVF4 as i64,
27949            &[
27950                vd.as_operand(),
27951                vs2.as_operand(),
27952                Into::<Imm>::into(vm).as_operand(),
27953            ],
27954        );
27955    }
27956}
27957
27958impl<U2: Into<Imm>> VzextVf8Emitter<Vp, Vp, U2> for Assembler<'_> {
27959    fn vzext_vf8(&mut self, vd: Vp, vs2: Vp, vm: U2) {
27960        self.emit_n(
27961            Opcode::VZEXTVF8 as i64,
27962            &[
27963                vd.as_operand(),
27964                vs2.as_operand(),
27965                Into::<Imm>::into(vm).as_operand(),
27966            ],
27967        );
27968    }
27969}
27970
27971impl WfiEmitter for Assembler<'_> {
27972    fn wfi(&mut self) {
27973        self.emit_n(Opcode::WFI as i64, &[]);
27974    }
27975}
27976
27977impl WrsNtoEmitter for Assembler<'_> {
27978    fn wrs_nto(&mut self) {
27979        self.emit_n(Opcode::WRSNTO as i64, &[]);
27980    }
27981}
27982
27983impl WrsStoEmitter for Assembler<'_> {
27984    fn wrs_sto(&mut self) {
27985        self.emit_n(Opcode::WRSSTO as i64, &[]);
27986    }
27987}
27988
27989impl XnorEmitter<Gp, Gp, Gp> for Assembler<'_> {
27990    fn xnor(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
27991        self.emit_n(
27992            Opcode::XNOR as i64,
27993            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
27994        );
27995    }
27996}
27997
27998impl XorEmitter<Gp, Gp, Gp> for Assembler<'_> {
27999    fn xor(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
28000        self.emit_n(
28001            Opcode::XOR as i64,
28002            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
28003        );
28004    }
28005}
28006
28007impl<U2: Into<Imm>> XoriEmitter<Gp, Gp, U2> for Assembler<'_> {
28008    fn xori(&mut self, rd: Gp, rs1: Gp, imm: U2) {
28009        self.emit_n(
28010            Opcode::XORI as i64,
28011            &[
28012                rd.as_operand(),
28013                rs1.as_operand(),
28014                Into::<Imm>::into(imm).as_operand(),
28015            ],
28016        );
28017    }
28018}
28019
28020impl Xperm4Emitter<Gp, Gp, Gp> for Assembler<'_> {
28021    fn xperm4(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
28022        self.emit_n(
28023            Opcode::XPERM4 as i64,
28024            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
28025        );
28026    }
28027}
28028
28029impl Xperm8Emitter<Gp, Gp, Gp> for Assembler<'_> {
28030    fn xperm8(&mut self, rd: Gp, rs1: Gp, rs2: Gp) {
28031        self.emit_n(
28032            Opcode::XPERM8 as i64,
28033            &[rd.as_operand(), rs1.as_operand(), rs2.as_operand()],
28034        );
28035    }
28036}
28037
28038impl ZextBEmitter<Gp, Gp> for Assembler<'_> {
28039    fn zext_b(&mut self, rd: Gp, rs1: Gp) {
28040        self.emit_n(Opcode::ZEXTB as i64, &[rd.as_operand(), rs1.as_operand()]);
28041    }
28042}
28043
28044impl ZextHEmitter<Gp, Gp> for Assembler<'_> {
28045    fn zext_h(&mut self, rd: Gp, rs1: Gp) {
28046        self.emit_n(Opcode::ZEXTH as i64, &[rd.as_operand(), rs1.as_operand()]);
28047    }
28048}
28049
28050impl ZextHRv32Emitter<Gp, Gp> for Assembler<'_> {
28051    fn zext_h_rv32(&mut self, rd: Gp, rs1: Gp) {
28052        self.emit_n(
28053            Opcode::ZEXTHRV32 as i64,
28054            &[rd.as_operand(), rs1.as_operand()],
28055        );
28056    }
28057}
28058
28059impl ZextWEmitter<Gp, Gp> for Assembler<'_> {
28060    fn zext_w(&mut self, rd: Gp, rs1: Gp) {
28061        self.emit_n(Opcode::ZEXTW as i64, &[rd.as_operand(), rs1.as_operand()]);
28062    }
28063}
28064
28065impl ZipEmitter<Gp, Gp> for Assembler<'_> {
28066    fn zip(&mut self, rd: Gp, rs1: Gp) {
28067        self.emit_n(Opcode::ZIP as i64, &[rd.as_operand(), rs1.as_operand()]);
28068    }
28069}
28070
28071impl Assembler<'_> {
28072    /// Integer add
28073    ///
28074    /// Add the value in rs1 to rs2, and store the result in rd.
28075    /// Any overflow is thrown away.
28076    ///
28077    /// # Forms
28078    /// Assembly: `add xd, xs1, xs2`
28079    /// Rust: `add(rd, rs1, rs2)`
28080    ///
28081    /// # Arguments
28082    /// - `rd` — Destination register.
28083    /// - `rs1` — Source register.
28084    /// - `rs2` — Source register.
28085    pub fn add<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
28086    where
28087        Self: AddEmitter<T0, T1, T2>,
28088    {
28089        <Self as AddEmitter<T0, T1, T2>>::add(self, rd, rs1, rs2);
28090    }
28091    /// Add unsigned word
28092    ///
28093    /// This instruction performs an XLEN-wide addition between rs2 and the
28094    /// zero-extended least-significant word of rs1.
28095    ///
28096    /// # Forms
28097    /// Assembly: `add.uw xd, xs1, xs2`
28098    /// Rust: `add_uw(rd, rs1, rs2)`
28099    ///
28100    /// # Arguments
28101    /// - `rd` — Destination register.
28102    /// - `rs1` — Source register.
28103    /// - `rs2` — Source register.
28104    pub fn add_uw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
28105    where
28106        Self: AddUwEmitter<T0, T1, T2>,
28107    {
28108        <Self as AddUwEmitter<T0, T1, T2>>::add_uw(self, rd, rs1, rs2);
28109    }
28110    /// Add immediate
28111    ///
28112    /// Add an immediate to the value in rs1, and store the result in rd
28113    ///
28114    /// # Forms
28115    /// Assembly: `addi xd, xs1, imm`
28116    /// Rust: `addi(rd, rs1, imm)`
28117    ///
28118    /// # Arguments
28119    /// - `rd` — Destination register.
28120    /// - `rs1` — Source register.
28121    /// - `imm` — Immediate encoding value.
28122    pub fn addi<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)
28123    where
28124        Self: AddiEmitter<T0, T1, T2>,
28125    {
28126        <Self as AddiEmitter<T0, T1, T2>>::addi(self, rd, rs1, imm);
28127    }
28128    /// Add immediate word
28129    ///
28130    /// Add an immediate to the 32-bit value in rs1, and store the sign extended result in rd
28131    ///
28132    /// # Forms
28133    /// Assembly: `addiw xd, xs1, imm`
28134    /// Rust: `addiw(rd, rs1, imm)`
28135    ///
28136    /// # Arguments
28137    /// - `rd` — Destination register.
28138    /// - `rs1` — Source register.
28139    /// - `imm` — Immediate encoding value.
28140    pub fn addiw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)
28141    where
28142        Self: AddiwEmitter<T0, T1, T2>,
28143    {
28144        <Self as AddiwEmitter<T0, T1, T2>>::addiw(self, rd, rs1, imm);
28145    }
28146    /// Add word
28147    ///
28148    /// Add the 32-bit values in rs1 to rs2, and store the sign-extended result in rd.
28149    /// Any overflow is thrown away.
28150    ///
28151    /// # Forms
28152    /// Assembly: `addw xd, xs1, xs2`
28153    /// Rust: `addw(rd, rs1, rs2)`
28154    ///
28155    /// # Arguments
28156    /// - `rd` — Destination register.
28157    /// - `rs1` — Source register.
28158    /// - `rs2` — Source register.
28159    pub fn addw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
28160    where
28161        Self: AddwEmitter<T0, T1, T2>,
28162    {
28163        <Self as AddwEmitter<T0, T1, T2>>::addw(self, rd, rs1, rs2);
28164    }
28165    /// RISC-V `aes32dsi` instruction.
28166    ///
28167    /// # Forms
28168    /// Assembly: `aes32dsi xd, xs1, xs2, bs`
28169    /// Rust: `aes32dsi(rd, rs1, rs2, bs)`
28170    ///
28171    /// # Arguments
28172    /// - `rd` — Destination register.
28173    /// - `rs1` — Source register.
28174    /// - `rs2` — Source register.
28175    /// - `bs` — Immediate encoding value.
28176    pub fn aes32dsi<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, bs: T3)
28177    where
28178        Self: Aes32DsiEmitter<T0, T1, T2, T3>,
28179    {
28180        <Self as Aes32DsiEmitter<T0, T1, T2, T3>>::aes32dsi(self, rd, rs1, rs2, bs);
28181    }
28182    /// RISC-V `aes32dsmi` instruction.
28183    ///
28184    /// # Forms
28185    /// Assembly: `aes32dsmi xd, xs1, xs2, bs`
28186    /// Rust: `aes32dsmi(rd, rs1, rs2, bs)`
28187    ///
28188    /// # Arguments
28189    /// - `rd` — Destination register.
28190    /// - `rs1` — Source register.
28191    /// - `rs2` — Source register.
28192    /// - `bs` — Immediate encoding value.
28193    pub fn aes32dsmi<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, bs: T3)
28194    where
28195        Self: Aes32DsmiEmitter<T0, T1, T2, T3>,
28196    {
28197        <Self as Aes32DsmiEmitter<T0, T1, T2, T3>>::aes32dsmi(self, rd, rs1, rs2, bs);
28198    }
28199    /// RISC-V `aes32esi` instruction.
28200    ///
28201    /// # Forms
28202    /// Assembly: `aes32esi xd, xs1, xs2, bs`
28203    /// Rust: `aes32esi(rd, rs1, rs2, bs)`
28204    ///
28205    /// # Arguments
28206    /// - `rd` — Destination register.
28207    /// - `rs1` — Source register.
28208    /// - `rs2` — Source register.
28209    /// - `bs` — Immediate encoding value.
28210    pub fn aes32esi<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, bs: T3)
28211    where
28212        Self: Aes32EsiEmitter<T0, T1, T2, T3>,
28213    {
28214        <Self as Aes32EsiEmitter<T0, T1, T2, T3>>::aes32esi(self, rd, rs1, rs2, bs);
28215    }
28216    /// RISC-V `aes32esmi` instruction.
28217    ///
28218    /// # Forms
28219    /// Assembly: `aes32esmi xd, xs1, xs2, bs`
28220    /// Rust: `aes32esmi(rd, rs1, rs2, bs)`
28221    ///
28222    /// # Arguments
28223    /// - `rd` — Destination register.
28224    /// - `rs1` — Source register.
28225    /// - `rs2` — Source register.
28226    /// - `bs` — Immediate encoding value.
28227    pub fn aes32esmi<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, bs: T3)
28228    where
28229        Self: Aes32EsmiEmitter<T0, T1, T2, T3>,
28230    {
28231        <Self as Aes32EsmiEmitter<T0, T1, T2, T3>>::aes32esmi(self, rd, rs1, rs2, bs);
28232    }
28233    /// RISC-V `aes64ds` instruction.
28234    ///
28235    /// # Forms
28236    /// Assembly: `aes64ds xd, xs1, xs2`
28237    /// Rust: `aes64ds(rd, rs1, rs2)`
28238    ///
28239    /// # Arguments
28240    /// - `rd` — Destination register.
28241    /// - `rs1` — Source register.
28242    /// - `rs2` — Source register.
28243    pub fn aes64ds<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
28244    where
28245        Self: Aes64DsEmitter<T0, T1, T2>,
28246    {
28247        <Self as Aes64DsEmitter<T0, T1, T2>>::aes64ds(self, rd, rs1, rs2);
28248    }
28249    /// RISC-V `aes64dsm` instruction.
28250    ///
28251    /// # Forms
28252    /// Assembly: `aes64dsm xd, xs1, xs2`
28253    /// Rust: `aes64dsm(rd, rs1, rs2)`
28254    ///
28255    /// # Arguments
28256    /// - `rd` — Destination register.
28257    /// - `rs1` — Source register.
28258    /// - `rs2` — Source register.
28259    pub fn aes64dsm<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
28260    where
28261        Self: Aes64DsmEmitter<T0, T1, T2>,
28262    {
28263        <Self as Aes64DsmEmitter<T0, T1, T2>>::aes64dsm(self, rd, rs1, rs2);
28264    }
28265    /// RISC-V `aes64es` instruction.
28266    ///
28267    /// # Forms
28268    /// Assembly: `aes64es xd, xs1, xs2`
28269    /// Rust: `aes64es(rd, rs1, rs2)`
28270    ///
28271    /// # Arguments
28272    /// - `rd` — Destination register.
28273    /// - `rs1` — Source register.
28274    /// - `rs2` — Source register.
28275    pub fn aes64es<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
28276    where
28277        Self: Aes64EsEmitter<T0, T1, T2>,
28278    {
28279        <Self as Aes64EsEmitter<T0, T1, T2>>::aes64es(self, rd, rs1, rs2);
28280    }
28281    /// RISC-V `aes64esm` instruction.
28282    ///
28283    /// # Forms
28284    /// Assembly: `aes64esm xd, xs1, xs2`
28285    /// Rust: `aes64esm(rd, rs1, rs2)`
28286    ///
28287    /// # Arguments
28288    /// - `rd` — Destination register.
28289    /// - `rs1` — Source register.
28290    /// - `rs2` — Source register.
28291    pub fn aes64esm<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
28292    where
28293        Self: Aes64EsmEmitter<T0, T1, T2>,
28294    {
28295        <Self as Aes64EsmEmitter<T0, T1, T2>>::aes64esm(self, rd, rs1, rs2);
28296    }
28297    /// RISC-V `aes64im` instruction.
28298    ///
28299    /// # Forms
28300    /// Assembly: `aes64im xd, xs1`
28301    /// Rust: `aes64im(rd, rs1)`
28302    ///
28303    /// # Arguments
28304    /// - `rd` — Destination register.
28305    /// - `rs1` — Source register.
28306    pub fn aes64im<T0, T1>(&mut self, rd: T0, rs1: T1)
28307    where
28308        Self: Aes64ImEmitter<T0, T1>,
28309    {
28310        <Self as Aes64ImEmitter<T0, T1>>::aes64im(self, rd, rs1);
28311    }
28312    /// RISC-V `aes64ks1i` instruction.
28313    ///
28314    /// # Forms
28315    /// Assembly: `aes64ks1i xd, xs1, rnum`
28316    /// Rust: `aes64ks1i(rd, rs1, rnum)`
28317    ///
28318    /// # Arguments
28319    /// - `rd` — Destination register.
28320    /// - `rs1` — Source register.
28321    /// - `rnum` — Immediate encoding value.
28322    pub fn aes64ks1i<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rnum: T2)
28323    where
28324        Self: Aes64Ks1IEmitter<T0, T1, T2>,
28325    {
28326        <Self as Aes64Ks1IEmitter<T0, T1, T2>>::aes64ks1i(self, rd, rs1, rnum);
28327    }
28328    /// RISC-V `aes64ks2` instruction.
28329    ///
28330    /// # Forms
28331    /// Assembly: `aes64ks2 xd, xs1, xs2`
28332    /// Rust: `aes64ks2(rd, rs1, rs2)`
28333    ///
28334    /// # Arguments
28335    /// - `rd` — Destination register.
28336    /// - `rs1` — Source register.
28337    /// - `rs2` — Source register.
28338    pub fn aes64ks2<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
28339    where
28340        Self: Aes64Ks2Emitter<T0, T1, T2>,
28341    {
28342        <Self as Aes64Ks2Emitter<T0, T1, T2>>::aes64ks2(self, rd, rs1, rs2);
28343    }
28344    /// RISC-V `amoadd.b` instruction.
28345    ///
28346    /// # Forms
28347    /// Assembly: `amoadd.b xd, xs1, xs2, aq, rl`
28348    /// Rust: `amoadd_b(rd, rs1, rs2, aq, rl)`
28349    ///
28350    /// # Arguments
28351    /// - `rd` — Destination register.
28352    /// - `rs1` — Memory base register.
28353    /// - `rs2` — Source register.
28354    /// - `aq` — Acquire-order bit.
28355    /// - `rl` — Release-order bit; retained for the existing emitter API.
28356    pub fn amoadd_b<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
28357    where
28358        Self: AmoaddBEmitter<T0, T1, T2, T3, T4>,
28359    {
28360        <Self as AmoaddBEmitter<T0, T1, T2, T3, T4>>::amoadd_b(self, rd, rs1, rs2, aq, rl);
28361    }
28362    /// Atomic fetch-and-add doubleword
28363    ///
28364    /// Atomically:
28365    ///
28366    ///   * Load the doubleword at address _rs1_
28367    ///   * Write the loaded value into _rd_
28368    ///   * Add the value of register _rs2_ to the loaded value
28369    ///   * Write the sum to the address in _rs1_
28370    ///
28371    /// # Forms
28372    /// Assembly: `amoadd.d xd, xs2, (xs1)`
28373    /// Rust: `amoadd_d(rd, rs1, rs2, aq, rl)`
28374    ///
28375    /// # Arguments
28376    /// - `rd` — Destination register.
28377    /// - `rs1` — Memory base register.
28378    /// - `rs2` — Source register.
28379    /// - `aq` — Acquire-order bit.
28380    /// - `rl` — Release-order bit; retained for the existing emitter API.
28381    pub fn amoadd_d<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
28382    where
28383        Self: AmoaddDEmitter<T0, T1, T2, T3, T4>,
28384    {
28385        <Self as AmoaddDEmitter<T0, T1, T2, T3, T4>>::amoadd_d(self, rd, rs1, rs2, aq, rl);
28386    }
28387    /// RISC-V `amoadd.h` instruction.
28388    ///
28389    /// # Forms
28390    /// Assembly: `amoadd.h xd, xs1, xs2, aq, rl`
28391    /// Rust: `amoadd_h(rd, rs1, rs2, aq, rl)`
28392    ///
28393    /// # Arguments
28394    /// - `rd` — Destination register.
28395    /// - `rs1` — Memory base register.
28396    /// - `rs2` — Source register.
28397    /// - `aq` — Acquire-order bit.
28398    /// - `rl` — Release-order bit; retained for the existing emitter API.
28399    pub fn amoadd_h<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
28400    where
28401        Self: AmoaddHEmitter<T0, T1, T2, T3, T4>,
28402    {
28403        <Self as AmoaddHEmitter<T0, T1, T2, T3, T4>>::amoadd_h(self, rd, rs1, rs2, aq, rl);
28404    }
28405    /// Atomic fetch-and-add word
28406    ///
28407    /// Atomically:
28408    ///
28409    ///   * Load the word at address _rs1_
28410    ///   * Write the sign-extended value into _rd_
28411    ///   * Add the least-significant word of register _rs2_ to the loaded value
28412    ///   * Write the sum to the address in _rs1_
28413    ///
28414    /// # Forms
28415    /// Assembly: `amoadd.w xd, xs2, (xrs1)`
28416    /// Rust: `amoadd_w(rd, rs1, rs2, aq, rl)`
28417    ///
28418    /// # Arguments
28419    /// - `rd` — Destination register.
28420    /// - `rs1` — Memory base register.
28421    /// - `rs2` — Source register.
28422    /// - `aq` — Acquire-order bit.
28423    /// - `rl` — Release-order bit; retained for the existing emitter API.
28424    pub fn amoadd_w<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
28425    where
28426        Self: AmoaddWEmitter<T0, T1, T2, T3, T4>,
28427    {
28428        <Self as AmoaddWEmitter<T0, T1, T2, T3, T4>>::amoadd_w(self, rd, rs1, rs2, aq, rl);
28429    }
28430    /// RISC-V `amoand.b` instruction.
28431    ///
28432    /// # Forms
28433    /// Assembly: `amoand.b xd, xs1, xs2, aq, rl`
28434    /// Rust: `amoand_b(rd, rs1, rs2, aq, rl)`
28435    ///
28436    /// # Arguments
28437    /// - `rd` — Destination register.
28438    /// - `rs1` — Memory base register.
28439    /// - `rs2` — Source register.
28440    /// - `aq` — Acquire-order bit.
28441    /// - `rl` — Release-order bit; retained for the existing emitter API.
28442    pub fn amoand_b<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
28443    where
28444        Self: AmoandBEmitter<T0, T1, T2, T3, T4>,
28445    {
28446        <Self as AmoandBEmitter<T0, T1, T2, T3, T4>>::amoand_b(self, rd, rs1, rs2, aq, rl);
28447    }
28448    /// Atomic fetch-and-and doubleword
28449    ///
28450    /// Atomically:
28451    ///
28452    ///   * Load the doubleword at address _rs1_
28453    ///   * Write the loaded value into _rd_
28454    ///   * AND the value of register _rs2_ to the loaded value
28455    ///   * Write the result to the address in _rs1_
28456    ///
28457    /// # Forms
28458    /// Assembly: `amoand.d xd, xs2, (xrs1)`
28459    /// Rust: `amoand_d(rd, rs1, rs2, aq, rl)`
28460    ///
28461    /// # Arguments
28462    /// - `rd` — Destination register.
28463    /// - `rs1` — Memory base register.
28464    /// - `rs2` — Source register.
28465    /// - `aq` — Acquire-order bit.
28466    /// - `rl` — Release-order bit; retained for the existing emitter API.
28467    pub fn amoand_d<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
28468    where
28469        Self: AmoandDEmitter<T0, T1, T2, T3, T4>,
28470    {
28471        <Self as AmoandDEmitter<T0, T1, T2, T3, T4>>::amoand_d(self, rd, rs1, rs2, aq, rl);
28472    }
28473    /// RISC-V `amoand.h` instruction.
28474    ///
28475    /// # Forms
28476    /// Assembly: `amoand.h xd, xs1, xs2, aq, rl`
28477    /// Rust: `amoand_h(rd, rs1, rs2, aq, rl)`
28478    ///
28479    /// # Arguments
28480    /// - `rd` — Destination register.
28481    /// - `rs1` — Memory base register.
28482    /// - `rs2` — Source register.
28483    /// - `aq` — Acquire-order bit.
28484    /// - `rl` — Release-order bit; retained for the existing emitter API.
28485    pub fn amoand_h<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
28486    where
28487        Self: AmoandHEmitter<T0, T1, T2, T3, T4>,
28488    {
28489        <Self as AmoandHEmitter<T0, T1, T2, T3, T4>>::amoand_h(self, rd, rs1, rs2, aq, rl);
28490    }
28491    /// Atomic fetch-and-and word
28492    ///
28493    /// Atomically:
28494    ///
28495    ///   * Load the word at address _rs1_
28496    ///   * Write the sign-extended value into _rd_
28497    ///   * AND the least-significant word of register _rs2_ to the loaded value
28498    ///   * Write the result to the address in _rs1_
28499    ///
28500    /// # Forms
28501    /// Assembly: `amoand.w xd, xs2, (xrs1)`
28502    /// Rust: `amoand_w(rd, rs1, rs2, aq, rl)`
28503    ///
28504    /// # Arguments
28505    /// - `rd` — Destination register.
28506    /// - `rs1` — Memory base register.
28507    /// - `rs2` — Source register.
28508    /// - `aq` — Acquire-order bit.
28509    /// - `rl` — Release-order bit; retained for the existing emitter API.
28510    pub fn amoand_w<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
28511    where
28512        Self: AmoandWEmitter<T0, T1, T2, T3, T4>,
28513    {
28514        <Self as AmoandWEmitter<T0, T1, T2, T3, T4>>::amoand_w(self, rd, rs1, rs2, aq, rl);
28515    }
28516    /// RISC-V `amocas.b` instruction.
28517    ///
28518    /// # Forms
28519    /// Assembly: `amocas.b xd, xs1, xs2, aq, rl`
28520    /// Rust: `amocas_b(rd, rs1, rs2, aq, rl)`
28521    ///
28522    /// # Arguments
28523    /// - `rd` — Destination register.
28524    /// - `rs1` — Memory base register.
28525    /// - `rs2` — Source register.
28526    /// - `aq` — Acquire-order bit.
28527    /// - `rl` — Release-order bit; retained for the existing emitter API.
28528    pub fn amocas_b<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
28529    where
28530        Self: AmocasBEmitter<T0, T1, T2, T3, T4>,
28531    {
28532        <Self as AmocasBEmitter<T0, T1, T2, T3, T4>>::amocas_b(self, rd, rs1, rs2, aq, rl);
28533    }
28534    /// RISC-V `amocas.d` instruction.
28535    ///
28536    /// # Forms
28537    /// Assembly: `amocas.d xd, xs1, xs2, aq, rl`
28538    /// Rust: `amocas_d(rd, rs1, rs2, aq, rl)`
28539    ///
28540    /// # Arguments
28541    /// - `rd` — Destination register.
28542    /// - `rs1` — Memory base register.
28543    /// - `rs2` — Source register.
28544    /// - `aq` — Acquire-order bit.
28545    /// - `rl` — Release-order bit; retained for the existing emitter API.
28546    pub fn amocas_d<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
28547    where
28548        Self: AmocasDEmitter<T0, T1, T2, T3, T4>,
28549    {
28550        <Self as AmocasDEmitter<T0, T1, T2, T3, T4>>::amocas_d(self, rd, rs1, rs2, aq, rl);
28551    }
28552    /// RISC-V `amocas.h` instruction.
28553    ///
28554    /// # Forms
28555    /// Assembly: `amocas.h xd, xs1, xs2, aq, rl`
28556    /// Rust: `amocas_h(rd, rs1, rs2, aq, rl)`
28557    ///
28558    /// # Arguments
28559    /// - `rd` — Destination register.
28560    /// - `rs1` — Memory base register.
28561    /// - `rs2` — Source register.
28562    /// - `aq` — Acquire-order bit.
28563    /// - `rl` — Release-order bit; retained for the existing emitter API.
28564    pub fn amocas_h<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
28565    where
28566        Self: AmocasHEmitter<T0, T1, T2, T3, T4>,
28567    {
28568        <Self as AmocasHEmitter<T0, T1, T2, T3, T4>>::amocas_h(self, rd, rs1, rs2, aq, rl);
28569    }
28570    /// RISC-V `amocas.q` instruction.
28571    ///
28572    /// # Forms
28573    /// Assembly: `amocas.q xd, xs1, xs2, aq, rl`
28574    /// Rust: `amocas_q(rd, rs1, rs2, aq, rl)`
28575    ///
28576    /// # Arguments
28577    /// - `rd` — Destination register.
28578    /// - `rs1` — Memory base register.
28579    /// - `rs2` — Source register.
28580    /// - `aq` — Acquire-order bit.
28581    /// - `rl` — Release-order bit; retained for the existing emitter API.
28582    pub fn amocas_q<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
28583    where
28584        Self: AmocasQEmitter<T0, T1, T2, T3, T4>,
28585    {
28586        <Self as AmocasQEmitter<T0, T1, T2, T3, T4>>::amocas_q(self, rd, rs1, rs2, aq, rl);
28587    }
28588    /// RISC-V `amocas.w` instruction.
28589    ///
28590    /// # Forms
28591    /// Assembly: `amocas.w xd, xs1, xs2, aq, rl`
28592    /// Rust: `amocas_w(rd, rs1, rs2, aq, rl)`
28593    ///
28594    /// # Arguments
28595    /// - `rd` — Destination register.
28596    /// - `rs1` — Memory base register.
28597    /// - `rs2` — Source register.
28598    /// - `aq` — Acquire-order bit.
28599    /// - `rl` — Release-order bit; retained for the existing emitter API.
28600    pub fn amocas_w<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
28601    where
28602        Self: AmocasWEmitter<T0, T1, T2, T3, T4>,
28603    {
28604        <Self as AmocasWEmitter<T0, T1, T2, T3, T4>>::amocas_w(self, rd, rs1, rs2, aq, rl);
28605    }
28606    /// RISC-V `amomax.b` instruction.
28607    ///
28608    /// # Forms
28609    /// Assembly: `amomax.b xd, xs1, xs2, aq, rl`
28610    /// Rust: `amomax_b(rd, rs1, rs2, aq, rl)`
28611    ///
28612    /// # Arguments
28613    /// - `rd` — Destination register.
28614    /// - `rs1` — Memory base register.
28615    /// - `rs2` — Source register.
28616    /// - `aq` — Acquire-order bit.
28617    /// - `rl` — Release-order bit; retained for the existing emitter API.
28618    pub fn amomax_b<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
28619    where
28620        Self: AmomaxBEmitter<T0, T1, T2, T3, T4>,
28621    {
28622        <Self as AmomaxBEmitter<T0, T1, T2, T3, T4>>::amomax_b(self, rd, rs1, rs2, aq, rl);
28623    }
28624    /// Atomic MAX doubleword
28625    ///
28626    /// Atomically:
28627    ///
28628    ///   * Load the doubleword at address _rs1_
28629    ///   * Write the loaded value into _rd_
28630    ///   * Signed compare the value of register _rs2_ to the loaded value, and select the maximum value
28631    ///   * Write the maximum to the address in _rs1_
28632    ///
28633    /// # Forms
28634    /// Assembly: `amomax.d xd, xs2, (xrs1)`
28635    /// Rust: `amomax_d(rd, rs1, rs2, aq, rl)`
28636    ///
28637    /// # Arguments
28638    /// - `rd` — Destination register.
28639    /// - `rs1` — Memory base register.
28640    /// - `rs2` — Source register.
28641    /// - `aq` — Acquire-order bit.
28642    /// - `rl` — Release-order bit; retained for the existing emitter API.
28643    pub fn amomax_d<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
28644    where
28645        Self: AmomaxDEmitter<T0, T1, T2, T3, T4>,
28646    {
28647        <Self as AmomaxDEmitter<T0, T1, T2, T3, T4>>::amomax_d(self, rd, rs1, rs2, aq, rl);
28648    }
28649    /// RISC-V `amomax.h` instruction.
28650    ///
28651    /// # Forms
28652    /// Assembly: `amomax.h xd, xs1, xs2, aq, rl`
28653    /// Rust: `amomax_h(rd, rs1, rs2, aq, rl)`
28654    ///
28655    /// # Arguments
28656    /// - `rd` — Destination register.
28657    /// - `rs1` — Memory base register.
28658    /// - `rs2` — Source register.
28659    /// - `aq` — Acquire-order bit.
28660    /// - `rl` — Release-order bit; retained for the existing emitter API.
28661    pub fn amomax_h<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
28662    where
28663        Self: AmomaxHEmitter<T0, T1, T2, T3, T4>,
28664    {
28665        <Self as AmomaxHEmitter<T0, T1, T2, T3, T4>>::amomax_h(self, rd, rs1, rs2, aq, rl);
28666    }
28667    /// Atomic MAX word
28668    ///
28669    /// Atomically:
28670    ///
28671    ///   * Load the word at address _rs1_
28672    ///   * Write the sign-extended value into _rd_
28673    ///   * Signed compare the least-significant word of register _rs2_ to the loaded value, and select the maximum value
28674    ///   * Write the maximum to the address in _rs1_
28675    ///
28676    /// # Forms
28677    /// Assembly: `amomax.w xd, xs2, (xrs1)`
28678    /// Rust: `amomax_w(rd, rs1, rs2, aq, rl)`
28679    ///
28680    /// # Arguments
28681    /// - `rd` — Destination register.
28682    /// - `rs1` — Memory base register.
28683    /// - `rs2` — Source register.
28684    /// - `aq` — Acquire-order bit.
28685    /// - `rl` — Release-order bit; retained for the existing emitter API.
28686    pub fn amomax_w<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
28687    where
28688        Self: AmomaxWEmitter<T0, T1, T2, T3, T4>,
28689    {
28690        <Self as AmomaxWEmitter<T0, T1, T2, T3, T4>>::amomax_w(self, rd, rs1, rs2, aq, rl);
28691    }
28692    /// RISC-V `amomaxu.b` instruction.
28693    ///
28694    /// # Forms
28695    /// Assembly: `amomaxu.b xd, xs1, xs2, aq, rl`
28696    /// Rust: `amomaxu_b(rd, rs1, rs2, aq, rl)`
28697    ///
28698    /// # Arguments
28699    /// - `rd` — Destination register.
28700    /// - `rs1` — Memory base register.
28701    /// - `rs2` — Source register.
28702    /// - `aq` — Acquire-order bit.
28703    /// - `rl` — Release-order bit; retained for the existing emitter API.
28704    pub fn amomaxu_b<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
28705    where
28706        Self: AmomaxuBEmitter<T0, T1, T2, T3, T4>,
28707    {
28708        <Self as AmomaxuBEmitter<T0, T1, T2, T3, T4>>::amomaxu_b(self, rd, rs1, rs2, aq, rl);
28709    }
28710    /// Atomic MAX unsigned doubleword
28711    ///
28712    /// Atomically:
28713    ///
28714    ///   * Load the doubleword at address _rs1_
28715    ///   * Write the loaded value into _rd_
28716    ///   * Unsigned compare the value of register _rs2_ to the loaded value, and select the maximum value
28717    ///   * Write the maximum to the address in _rs1_
28718    ///
28719    /// # Forms
28720    /// Assembly: `amomaxu.d xd, xs2, (xrs1)`
28721    /// Rust: `amomaxu_d(rd, rs1, rs2, aq, rl)`
28722    ///
28723    /// # Arguments
28724    /// - `rd` — Destination register.
28725    /// - `rs1` — Memory base register.
28726    /// - `rs2` — Source register.
28727    /// - `aq` — Acquire-order bit.
28728    /// - `rl` — Release-order bit; retained for the existing emitter API.
28729    pub fn amomaxu_d<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
28730    where
28731        Self: AmomaxuDEmitter<T0, T1, T2, T3, T4>,
28732    {
28733        <Self as AmomaxuDEmitter<T0, T1, T2, T3, T4>>::amomaxu_d(self, rd, rs1, rs2, aq, rl);
28734    }
28735    /// RISC-V `amomaxu.h` instruction.
28736    ///
28737    /// # Forms
28738    /// Assembly: `amomaxu.h xd, xs1, xs2, aq, rl`
28739    /// Rust: `amomaxu_h(rd, rs1, rs2, aq, rl)`
28740    ///
28741    /// # Arguments
28742    /// - `rd` — Destination register.
28743    /// - `rs1` — Memory base register.
28744    /// - `rs2` — Source register.
28745    /// - `aq` — Acquire-order bit.
28746    /// - `rl` — Release-order bit; retained for the existing emitter API.
28747    pub fn amomaxu_h<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
28748    where
28749        Self: AmomaxuHEmitter<T0, T1, T2, T3, T4>,
28750    {
28751        <Self as AmomaxuHEmitter<T0, T1, T2, T3, T4>>::amomaxu_h(self, rd, rs1, rs2, aq, rl);
28752    }
28753    /// Atomic MAX unsigned word
28754    ///
28755    /// Atomically:
28756    ///
28757    ///   * Load the word at address _rs1_
28758    ///   * Write the sign-extended value into _rd_
28759    ///   * Unsigned compare the least-significant word of register _rs2_ to the loaded value, and select the maximum value
28760    ///   * Write the maximum to the address in _rs1_
28761    ///
28762    /// # Forms
28763    /// Assembly: `amomaxu.w xd, xs2, (xrs1)`
28764    /// Rust: `amomaxu_w(rd, rs1, rs2, aq, rl)`
28765    ///
28766    /// # Arguments
28767    /// - `rd` — Destination register.
28768    /// - `rs1` — Memory base register.
28769    /// - `rs2` — Source register.
28770    /// - `aq` — Acquire-order bit.
28771    /// - `rl` — Release-order bit; retained for the existing emitter API.
28772    pub fn amomaxu_w<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
28773    where
28774        Self: AmomaxuWEmitter<T0, T1, T2, T3, T4>,
28775    {
28776        <Self as AmomaxuWEmitter<T0, T1, T2, T3, T4>>::amomaxu_w(self, rd, rs1, rs2, aq, rl);
28777    }
28778    /// RISC-V `amomin.b` instruction.
28779    ///
28780    /// # Forms
28781    /// Assembly: `amomin.b xd, xs1, xs2, aq, rl`
28782    /// Rust: `amomin_b(rd, rs1, rs2, aq, rl)`
28783    ///
28784    /// # Arguments
28785    /// - `rd` — Destination register.
28786    /// - `rs1` — Memory base register.
28787    /// - `rs2` — Source register.
28788    /// - `aq` — Acquire-order bit.
28789    /// - `rl` — Release-order bit; retained for the existing emitter API.
28790    pub fn amomin_b<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
28791    where
28792        Self: AmominBEmitter<T0, T1, T2, T3, T4>,
28793    {
28794        <Self as AmominBEmitter<T0, T1, T2, T3, T4>>::amomin_b(self, rd, rs1, rs2, aq, rl);
28795    }
28796    /// Atomic MIN doubleword
28797    ///
28798    /// Atomically:
28799    ///
28800    ///   * Load the doubleword at address _rs1_
28801    ///   * Write the loaded value into _rd_
28802    ///   * Signed compare the value of register _rs2_ to the loaded value, and select the minimum value
28803    ///   * Write the minimum to the address in _rs1_
28804    ///
28805    /// # Forms
28806    /// Assembly: `amomin.d xd, xs2, (xrs1)`
28807    /// Rust: `amomin_d(rd, rs1, rs2, aq, rl)`
28808    ///
28809    /// # Arguments
28810    /// - `rd` — Destination register.
28811    /// - `rs1` — Memory base register.
28812    /// - `rs2` — Source register.
28813    /// - `aq` — Acquire-order bit.
28814    /// - `rl` — Release-order bit; retained for the existing emitter API.
28815    pub fn amomin_d<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
28816    where
28817        Self: AmominDEmitter<T0, T1, T2, T3, T4>,
28818    {
28819        <Self as AmominDEmitter<T0, T1, T2, T3, T4>>::amomin_d(self, rd, rs1, rs2, aq, rl);
28820    }
28821    /// RISC-V `amomin.h` instruction.
28822    ///
28823    /// # Forms
28824    /// Assembly: `amomin.h xd, xs1, xs2, aq, rl`
28825    /// Rust: `amomin_h(rd, rs1, rs2, aq, rl)`
28826    ///
28827    /// # Arguments
28828    /// - `rd` — Destination register.
28829    /// - `rs1` — Memory base register.
28830    /// - `rs2` — Source register.
28831    /// - `aq` — Acquire-order bit.
28832    /// - `rl` — Release-order bit; retained for the existing emitter API.
28833    pub fn amomin_h<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
28834    where
28835        Self: AmominHEmitter<T0, T1, T2, T3, T4>,
28836    {
28837        <Self as AmominHEmitter<T0, T1, T2, T3, T4>>::amomin_h(self, rd, rs1, rs2, aq, rl);
28838    }
28839    /// Atomic MIN word
28840    ///
28841    /// Atomically:
28842    ///
28843    ///   * Load the word at address _rs1_
28844    ///   * Write the sign-extended value into _rd_
28845    ///   * Signed compare the least-significant word of register _rs2_ to the loaded value, and select the minimum value
28846    ///   * Write the result to the address in _rs1_
28847    ///
28848    /// # Forms
28849    /// Assembly: `amomin.w xd, xs2, (xrs1)`
28850    /// Rust: `amomin_w(rd, rs1, rs2, aq, rl)`
28851    ///
28852    /// # Arguments
28853    /// - `rd` — Destination register.
28854    /// - `rs1` — Memory base register.
28855    /// - `rs2` — Source register.
28856    /// - `aq` — Acquire-order bit.
28857    /// - `rl` — Release-order bit; retained for the existing emitter API.
28858    pub fn amomin_w<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
28859    where
28860        Self: AmominWEmitter<T0, T1, T2, T3, T4>,
28861    {
28862        <Self as AmominWEmitter<T0, T1, T2, T3, T4>>::amomin_w(self, rd, rs1, rs2, aq, rl);
28863    }
28864    /// RISC-V `amominu.b` instruction.
28865    ///
28866    /// # Forms
28867    /// Assembly: `amominu.b xd, xs1, xs2, aq, rl`
28868    /// Rust: `amominu_b(rd, rs1, rs2, aq, rl)`
28869    ///
28870    /// # Arguments
28871    /// - `rd` — Destination register.
28872    /// - `rs1` — Memory base register.
28873    /// - `rs2` — Source register.
28874    /// - `aq` — Acquire-order bit.
28875    /// - `rl` — Release-order bit; retained for the existing emitter API.
28876    pub fn amominu_b<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
28877    where
28878        Self: AmominuBEmitter<T0, T1, T2, T3, T4>,
28879    {
28880        <Self as AmominuBEmitter<T0, T1, T2, T3, T4>>::amominu_b(self, rd, rs1, rs2, aq, rl);
28881    }
28882    /// Atomic MIN unsigned doubleword
28883    ///
28884    /// Atomically:
28885    ///
28886    ///   * Load the doubleword at address _rs1_
28887    ///   * Write the loaded value into _rd_
28888    ///   * Unsigned compare the value of register _rs2_ to the loaded value, and select the minimum value
28889    ///   * Write the minimum to the address in _rs1_
28890    ///
28891    /// # Forms
28892    /// Assembly: `amominu.d xd, xs2, (xrs1)`
28893    /// Rust: `amominu_d(rd, rs1, rs2, aq, rl)`
28894    ///
28895    /// # Arguments
28896    /// - `rd` — Destination register.
28897    /// - `rs1` — Memory base register.
28898    /// - `rs2` — Source register.
28899    /// - `aq` — Acquire-order bit.
28900    /// - `rl` — Release-order bit; retained for the existing emitter API.
28901    pub fn amominu_d<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
28902    where
28903        Self: AmominuDEmitter<T0, T1, T2, T3, T4>,
28904    {
28905        <Self as AmominuDEmitter<T0, T1, T2, T3, T4>>::amominu_d(self, rd, rs1, rs2, aq, rl);
28906    }
28907    /// RISC-V `amominu.h` instruction.
28908    ///
28909    /// # Forms
28910    /// Assembly: `amominu.h xd, xs1, xs2, aq, rl`
28911    /// Rust: `amominu_h(rd, rs1, rs2, aq, rl)`
28912    ///
28913    /// # Arguments
28914    /// - `rd` — Destination register.
28915    /// - `rs1` — Memory base register.
28916    /// - `rs2` — Source register.
28917    /// - `aq` — Acquire-order bit.
28918    /// - `rl` — Release-order bit; retained for the existing emitter API.
28919    pub fn amominu_h<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
28920    where
28921        Self: AmominuHEmitter<T0, T1, T2, T3, T4>,
28922    {
28923        <Self as AmominuHEmitter<T0, T1, T2, T3, T4>>::amominu_h(self, rd, rs1, rs2, aq, rl);
28924    }
28925    /// Atomic MIN unsigned word
28926    ///
28927    /// Atomically:
28928    ///
28929    ///   * Load the word at address _rs1_
28930    ///   * Write the sign-extended value into _rd_
28931    ///   * Unsigned compare the least-significant word of register _rs2_ to the loaded word, and select the minimum value
28932    ///   * Write the result to the address in _rs1_
28933    ///
28934    /// # Forms
28935    /// Assembly: `amominu.w xd, xs2, (xrs1)`
28936    /// Rust: `amominu_w(rd, rs1, rs2, aq, rl)`
28937    ///
28938    /// # Arguments
28939    /// - `rd` — Destination register.
28940    /// - `rs1` — Memory base register.
28941    /// - `rs2` — Source register.
28942    /// - `aq` — Acquire-order bit.
28943    /// - `rl` — Release-order bit; retained for the existing emitter API.
28944    pub fn amominu_w<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
28945    where
28946        Self: AmominuWEmitter<T0, T1, T2, T3, T4>,
28947    {
28948        <Self as AmominuWEmitter<T0, T1, T2, T3, T4>>::amominu_w(self, rd, rs1, rs2, aq, rl);
28949    }
28950    /// RISC-V `amoor.b` instruction.
28951    ///
28952    /// # Forms
28953    /// Assembly: `amoor.b xd, xs1, xs2, aq, rl`
28954    /// Rust: `amoor_b(rd, rs1, rs2, aq, rl)`
28955    ///
28956    /// # Arguments
28957    /// - `rd` — Destination register.
28958    /// - `rs1` — Memory base register.
28959    /// - `rs2` — Source register.
28960    /// - `aq` — Acquire-order bit.
28961    /// - `rl` — Release-order bit; retained for the existing emitter API.
28962    pub fn amoor_b<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
28963    where
28964        Self: AmoorBEmitter<T0, T1, T2, T3, T4>,
28965    {
28966        <Self as AmoorBEmitter<T0, T1, T2, T3, T4>>::amoor_b(self, rd, rs1, rs2, aq, rl);
28967    }
28968    /// Atomic fetch-and-or doubleword
28969    ///
28970    /// Atomically:
28971    ///
28972    ///   * Load the doubleword at address _rs1_
28973    ///   * Write the loaded value into _rd_
28974    ///   * OR the value of register _rs2_ to the loaded value
28975    ///   * Write the result to the address in _rs1_
28976    ///
28977    /// # Forms
28978    /// Assembly: `amoor.d xd, xs2, (xrs1)`
28979    /// Rust: `amoor_d(rd, rs1, rs2, aq, rl)`
28980    ///
28981    /// # Arguments
28982    /// - `rd` — Destination register.
28983    /// - `rs1` — Memory base register.
28984    /// - `rs2` — Source register.
28985    /// - `aq` — Acquire-order bit.
28986    /// - `rl` — Release-order bit; retained for the existing emitter API.
28987    pub fn amoor_d<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
28988    where
28989        Self: AmoorDEmitter<T0, T1, T2, T3, T4>,
28990    {
28991        <Self as AmoorDEmitter<T0, T1, T2, T3, T4>>::amoor_d(self, rd, rs1, rs2, aq, rl);
28992    }
28993    /// RISC-V `amoor.h` instruction.
28994    ///
28995    /// # Forms
28996    /// Assembly: `amoor.h xd, xs1, xs2, aq, rl`
28997    /// Rust: `amoor_h(rd, rs1, rs2, aq, rl)`
28998    ///
28999    /// # Arguments
29000    /// - `rd` — Destination register.
29001    /// - `rs1` — Memory base register.
29002    /// - `rs2` — Source register.
29003    /// - `aq` — Acquire-order bit.
29004    /// - `rl` — Release-order bit; retained for the existing emitter API.
29005    pub fn amoor_h<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
29006    where
29007        Self: AmoorHEmitter<T0, T1, T2, T3, T4>,
29008    {
29009        <Self as AmoorHEmitter<T0, T1, T2, T3, T4>>::amoor_h(self, rd, rs1, rs2, aq, rl);
29010    }
29011    /// Atomic fetch-and-or word
29012    ///
29013    /// Atomically:
29014    ///
29015    ///   * Load the word at address _rs1_
29016    ///   * Write the sign-extended value into _rd_
29017    ///   * OR the least-significant word of register _rs2_ to the loaded value
29018    ///   * Write the result to the address in _rs1_
29019    ///
29020    /// # Forms
29021    /// Assembly: `amoor.w xd, xs2, (xrs1)`
29022    /// Rust: `amoor_w(rd, rs1, rs2, aq, rl)`
29023    ///
29024    /// # Arguments
29025    /// - `rd` — Destination register.
29026    /// - `rs1` — Memory base register.
29027    /// - `rs2` — Source register.
29028    /// - `aq` — Acquire-order bit.
29029    /// - `rl` — Release-order bit; retained for the existing emitter API.
29030    pub fn amoor_w<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
29031    where
29032        Self: AmoorWEmitter<T0, T1, T2, T3, T4>,
29033    {
29034        <Self as AmoorWEmitter<T0, T1, T2, T3, T4>>::amoor_w(self, rd, rs1, rs2, aq, rl);
29035    }
29036    /// RISC-V `amoswap.b` instruction.
29037    ///
29038    /// # Forms
29039    /// Assembly: `amoswap.b xd, xs1, xs2, aq, rl`
29040    /// Rust: `amoswap_b(rd, rs1, rs2, aq, rl)`
29041    ///
29042    /// # Arguments
29043    /// - `rd` — Destination register.
29044    /// - `rs1` — Memory base register.
29045    /// - `rs2` — Source register.
29046    /// - `aq` — Acquire-order bit.
29047    /// - `rl` — Release-order bit; retained for the existing emitter API.
29048    pub fn amoswap_b<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
29049    where
29050        Self: AmoswapBEmitter<T0, T1, T2, T3, T4>,
29051    {
29052        <Self as AmoswapBEmitter<T0, T1, T2, T3, T4>>::amoswap_b(self, rd, rs1, rs2, aq, rl);
29053    }
29054    /// Atomic SWAP doubleword
29055    ///
29056    /// Atomically:
29057    ///
29058    ///   * Load the doubleword at address _rs1_
29059    ///   * Write the value into _rd_
29060    ///   * Store the value of register _rs2_ to the address in _rs1_
29061    ///
29062    /// # Forms
29063    /// Assembly: `amoswap.d xd, xs2, (xrs1)`
29064    /// Rust: `amoswap_d(rd, rs1, rs2, aq, rl)`
29065    ///
29066    /// # Arguments
29067    /// - `rd` — Destination register.
29068    /// - `rs1` — Memory base register.
29069    /// - `rs2` — Source register.
29070    /// - `aq` — Acquire-order bit.
29071    /// - `rl` — Release-order bit; retained for the existing emitter API.
29072    pub fn amoswap_d<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
29073    where
29074        Self: AmoswapDEmitter<T0, T1, T2, T3, T4>,
29075    {
29076        <Self as AmoswapDEmitter<T0, T1, T2, T3, T4>>::amoswap_d(self, rd, rs1, rs2, aq, rl);
29077    }
29078    /// RISC-V `amoswap.h` instruction.
29079    ///
29080    /// # Forms
29081    /// Assembly: `amoswap.h xd, xs1, xs2, aq, rl`
29082    /// Rust: `amoswap_h(rd, rs1, rs2, aq, rl)`
29083    ///
29084    /// # Arguments
29085    /// - `rd` — Destination register.
29086    /// - `rs1` — Memory base register.
29087    /// - `rs2` — Source register.
29088    /// - `aq` — Acquire-order bit.
29089    /// - `rl` — Release-order bit; retained for the existing emitter API.
29090    pub fn amoswap_h<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
29091    where
29092        Self: AmoswapHEmitter<T0, T1, T2, T3, T4>,
29093    {
29094        <Self as AmoswapHEmitter<T0, T1, T2, T3, T4>>::amoswap_h(self, rd, rs1, rs2, aq, rl);
29095    }
29096    /// Atomic SWAP word
29097    ///
29098    /// Atomically:
29099    ///
29100    ///   * Load the word at address _rs1_
29101    ///   * Write the sign-extended value into _rd_
29102    ///   * Store the least-significant word of register _rs2_ to the address in _rs1_
29103    ///
29104    /// # Forms
29105    /// Assembly: `amoswap.w xd, xs2, (xrs1)`
29106    /// Rust: `amoswap_w(rd, rs1, rs2, aq, rl)`
29107    ///
29108    /// # Arguments
29109    /// - `rd` — Destination register.
29110    /// - `rs1` — Memory base register.
29111    /// - `rs2` — Source register.
29112    /// - `aq` — Acquire-order bit.
29113    /// - `rl` — Release-order bit; retained for the existing emitter API.
29114    pub fn amoswap_w<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
29115    where
29116        Self: AmoswapWEmitter<T0, T1, T2, T3, T4>,
29117    {
29118        <Self as AmoswapWEmitter<T0, T1, T2, T3, T4>>::amoswap_w(self, rd, rs1, rs2, aq, rl);
29119    }
29120    /// RISC-V `amoxor.b` instruction.
29121    ///
29122    /// # Forms
29123    /// Assembly: `amoxor.b xd, xs1, xs2, aq, rl`
29124    /// Rust: `amoxor_b(rd, rs1, rs2, aq, rl)`
29125    ///
29126    /// # Arguments
29127    /// - `rd` — Destination register.
29128    /// - `rs1` — Memory base register.
29129    /// - `rs2` — Source register.
29130    /// - `aq` — Acquire-order bit.
29131    /// - `rl` — Release-order bit; retained for the existing emitter API.
29132    pub fn amoxor_b<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
29133    where
29134        Self: AmoxorBEmitter<T0, T1, T2, T3, T4>,
29135    {
29136        <Self as AmoxorBEmitter<T0, T1, T2, T3, T4>>::amoxor_b(self, rd, rs1, rs2, aq, rl);
29137    }
29138    /// Atomic fetch-and-xor doubleword
29139    ///
29140    /// Atomically:
29141    ///
29142    ///   * Load the doubleword at address _rs1_
29143    ///   * Write the loaded value into _rd_
29144    ///   * XOR the value of register _rs2_ to the loaded value
29145    ///   * Write the result to the address in _rs1_
29146    ///
29147    /// # Forms
29148    /// Assembly: `amoxor.d xd, xs2, (xrs1)`
29149    /// Rust: `amoxor_d(rd, rs1, rs2, aq, rl)`
29150    ///
29151    /// # Arguments
29152    /// - `rd` — Destination register.
29153    /// - `rs1` — Memory base register.
29154    /// - `rs2` — Source register.
29155    /// - `aq` — Acquire-order bit.
29156    /// - `rl` — Release-order bit; retained for the existing emitter API.
29157    pub fn amoxor_d<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
29158    where
29159        Self: AmoxorDEmitter<T0, T1, T2, T3, T4>,
29160    {
29161        <Self as AmoxorDEmitter<T0, T1, T2, T3, T4>>::amoxor_d(self, rd, rs1, rs2, aq, rl);
29162    }
29163    /// RISC-V `amoxor.h` instruction.
29164    ///
29165    /// # Forms
29166    /// Assembly: `amoxor.h xd, xs1, xs2, aq, rl`
29167    /// Rust: `amoxor_h(rd, rs1, rs2, aq, rl)`
29168    ///
29169    /// # Arguments
29170    /// - `rd` — Destination register.
29171    /// - `rs1` — Memory base register.
29172    /// - `rs2` — Source register.
29173    /// - `aq` — Acquire-order bit.
29174    /// - `rl` — Release-order bit; retained for the existing emitter API.
29175    pub fn amoxor_h<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
29176    where
29177        Self: AmoxorHEmitter<T0, T1, T2, T3, T4>,
29178    {
29179        <Self as AmoxorHEmitter<T0, T1, T2, T3, T4>>::amoxor_h(self, rd, rs1, rs2, aq, rl);
29180    }
29181    /// Atomic fetch-and-xor word
29182    ///
29183    /// Atomically:
29184    ///
29185    ///   * Load the word at address _rs1_
29186    ///   * Write the sign-extended value into _rd_
29187    ///   * XOR the least-significant word of register _rs2_ to the loaded value
29188    ///   * Write the result to the address in _rs1_
29189    ///
29190    /// # Forms
29191    /// Assembly: `amoxor.w xd, xs2, (xrs1)`
29192    /// Rust: `amoxor_w(rd, rs1, rs2, aq, rl)`
29193    ///
29194    /// # Arguments
29195    /// - `rd` — Destination register.
29196    /// - `rs1` — Memory base register.
29197    /// - `rs2` — Source register.
29198    /// - `aq` — Acquire-order bit.
29199    /// - `rl` — Release-order bit; retained for the existing emitter API.
29200    pub fn amoxor_w<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
29201    where
29202        Self: AmoxorWEmitter<T0, T1, T2, T3, T4>,
29203    {
29204        <Self as AmoxorWEmitter<T0, T1, T2, T3, T4>>::amoxor_w(self, rd, rs1, rs2, aq, rl);
29205    }
29206    /// And
29207    ///
29208    /// And rs1 with rs2, and store the result in rd
29209    ///
29210    /// # Forms
29211    /// Assembly: `and xd, xs1, xs2`
29212    /// Rust: `and(rd, rs1, rs2)`
29213    ///
29214    /// # Arguments
29215    /// - `rd` — Destination register.
29216    /// - `rs1` — Source register.
29217    /// - `rs2` — Source register.
29218    pub fn and<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
29219    where
29220        Self: AndEmitter<T0, T1, T2>,
29221    {
29222        <Self as AndEmitter<T0, T1, T2>>::and(self, rd, rs1, rs2);
29223    }
29224    /// And immediate
29225    ///
29226    /// And an immediate to the value in rs1, and store the result in rd
29227    ///
29228    /// # Forms
29229    /// Assembly: `andi xd, xs1, imm`
29230    /// Rust: `andi(rd, rs1, imm)`
29231    ///
29232    /// # Arguments
29233    /// - `rd` — Destination register.
29234    /// - `rs1` — Source register.
29235    /// - `imm` — Immediate encoding value.
29236    pub fn andi<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)
29237    where
29238        Self: AndiEmitter<T0, T1, T2>,
29239    {
29240        <Self as AndiEmitter<T0, T1, T2>>::andi(self, rd, rs1, imm);
29241    }
29242    /// AND with inverted operand
29243    ///
29244    /// This instruction performs the bitwise logical AND operation between `rs1` and the
29245    /// bitwise inversion of `rs2`.
29246    ///
29247    /// # Forms
29248    /// Assembly: `andn xd, xs1, xs2`
29249    /// Rust: `andn(rd, rs1, rs2)`
29250    ///
29251    /// # Arguments
29252    /// - `rd` — Destination register.
29253    /// - `rs1` — Source register.
29254    /// - `rs2` — Source register.
29255    pub fn andn<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
29256    where
29257        Self: AndnEmitter<T0, T1, T2>,
29258    {
29259        <Self as AndnEmitter<T0, T1, T2>>::andn(self, rd, rs1, rs2);
29260    }
29261    /// Add upper immediate to pc
29262    ///
29263    /// Add an immediate to the current PC.
29264    ///
29265    /// # Forms
29266    /// Assembly: `auipc xd, imm`
29267    /// Rust: `auipc(rd, imm)`
29268    ///
29269    /// # Arguments
29270    /// - `rd` — Destination register.
29271    /// - `imm` — Immediate encoding value.
29272    pub fn auipc<T0, T1>(&mut self, rd: T0, imm: T1)
29273    where
29274        Self: AuipcEmitter<T0, T1>,
29275    {
29276        <Self as AuipcEmitter<T0, T1>>::auipc(self, rd, imm);
29277    }
29278    /// Single-Bit clear (Register)
29279    ///
29280    /// This instruction returns rs1 with a single bit cleared at the index specified in rs2.
29281    /// The index is read from the lower log2(XLEN) bits of rs2.
29282    ///
29283    /// # Forms
29284    /// Assembly: `bclr xd, xs1, xs2`
29285    /// Rust: `bclr(rd, rs1, rs2)`
29286    ///
29287    /// # Arguments
29288    /// - `rd` — Destination register.
29289    /// - `rs1` — Source register.
29290    /// - `rs2` — Source register.
29291    pub fn bclr<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
29292    where
29293        Self: BclrEmitter<T0, T1, T2>,
29294    {
29295        <Self as BclrEmitter<T0, T1, T2>>::bclr(self, rd, rs1, rs2);
29296    }
29297    /// Single-Bit clear (Immediate)
29298    ///
29299    /// This instruction returns rs1 with a single bit cleared at the index specified in shamt. The
29300    /// index is read from the lower log2(XLEN) bits of shamt. For RV32, the encodings corresponding
29301    /// to shamt\[5\]=1 are reserved.
29302    ///
29303    /// # Forms
29304    /// Assembly: `bclri xd, xs1, shamt`
29305    /// Rust: `bclri(rd, rs1, shamtd)`
29306    ///
29307    /// # Arguments
29308    /// - `rd` — Destination register.
29309    /// - `rs1` — Source register.
29310    /// - `shamtd` — Immediate encoding value.
29311    pub fn bclri<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtd: T2)
29312    where
29313        Self: BclriEmitter<T0, T1, T2>,
29314    {
29315        <Self as BclriEmitter<T0, T1, T2>>::bclri(self, rd, rs1, shamtd);
29316    }
29317    /// Single-Bit clear (Immediate)
29318    ///
29319    /// This instruction returns rs1 with a single bit cleared at the index specified in shamt. The
29320    /// index is read from the lower log2(XLEN) bits of shamt. For RV32, the encodings corresponding
29321    /// to shamt\[5\]=1 are reserved.
29322    ///
29323    /// # Forms
29324    /// Assembly: `bclri.rv32 xd, xs1, shamt`
29325    /// Rust: `bclri_rv32(rd, rs1, shamtw)`
29326    ///
29327    /// # Arguments
29328    /// - `rd` — Destination register.
29329    /// - `rs1` — Source register.
29330    /// - `shamtw` — Immediate encoding value.
29331    pub fn bclri_rv32<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtw: T2)
29332    where
29333        Self: BclriRv32Emitter<T0, T1, T2>,
29334    {
29335        <Self as BclriRv32Emitter<T0, T1, T2>>::bclri_rv32(self, rd, rs1, shamtw);
29336    }
29337    /// Branch if equal
29338    ///
29339    /// Branch to PC + imm if
29340    /// the value in register rs1 is equal to the value in register rs2.
29341    ///
29342    /// Raise a `MisalignedAddress` exception if PC + imm is misaligned.
29343    ///
29344    /// # Forms
29345    /// Assembly: `beq xs1, xs2, imm`
29346    /// Rust: `beq(rs1, rs2, imm)`
29347    ///
29348    /// # Arguments
29349    /// - `rs1` — Source register.
29350    /// - `rs2` — Source register.
29351    /// - `imm` — Immediate encoding value.
29352    pub fn beq<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)
29353    where
29354        Self: BeqEmitter<T0, T1, T2>,
29355    {
29356        <Self as BeqEmitter<T0, T1, T2>>::beq(self, rs1, rs2, imm);
29357    }
29358    /// RISC-V `beqz` instruction.
29359    ///
29360    /// # Forms
29361    /// Assembly: `beqz rs1 bimm12lohi`
29362    /// Rust: `beqz(rs1, imm)`
29363    ///
29364    /// # Arguments
29365    /// - `rs1` — Source register.
29366    /// - `imm` — Immediate encoding value.
29367    pub fn beqz<T0, T1>(&mut self, rs1: T0, imm: T1)
29368    where
29369        Self: BeqzEmitter<T0, T1>,
29370    {
29371        <Self as BeqzEmitter<T0, T1>>::beqz(self, rs1, imm);
29372    }
29373    /// Single-Bit extract (Register)
29374    ///
29375    /// This instruction returns a single bit extracted from rs1 at the index specified in rs2.
29376    /// The index is read from the lower log2(XLEN) bits of rs2.
29377    ///
29378    /// # Forms
29379    /// Assembly: `bext xd, xs1, xs2`
29380    /// Rust: `bext(rd, rs1, rs2)`
29381    ///
29382    /// # Arguments
29383    /// - `rd` — Destination register.
29384    /// - `rs1` — Source register.
29385    /// - `rs2` — Source register.
29386    pub fn bext<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
29387    where
29388        Self: BextEmitter<T0, T1, T2>,
29389    {
29390        <Self as BextEmitter<T0, T1, T2>>::bext(self, rd, rs1, rs2);
29391    }
29392    /// Single-Bit extract (Immediate)
29393    ///
29394    /// This instruction returns a single bit extracted from rs1 at the index specified in rs2.
29395    /// The index is read from the lower log2(XLEN) bits of shamt. For RV32, the encodings
29396    /// corresponding to shamt\[5\]=1 are reserved.
29397    ///
29398    /// # Forms
29399    /// Assembly: `bexti xd, xs1, shamt`
29400    /// Rust: `bexti(rd, rs1, shamtd)`
29401    ///
29402    /// # Arguments
29403    /// - `rd` — Destination register.
29404    /// - `rs1` — Source register.
29405    /// - `shamtd` — Immediate encoding value.
29406    pub fn bexti<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtd: T2)
29407    where
29408        Self: BextiEmitter<T0, T1, T2>,
29409    {
29410        <Self as BextiEmitter<T0, T1, T2>>::bexti(self, rd, rs1, shamtd);
29411    }
29412    /// Single-Bit extract (Immediate)
29413    ///
29414    /// This instruction returns a single bit extracted from rs1 at the index specified in rs2.
29415    /// The index is read from the lower log2(XLEN) bits of shamt. For RV32, the encodings
29416    /// corresponding to shamt\[5\]=1 are reserved.
29417    ///
29418    /// # Forms
29419    /// Assembly: `bexti.rv32 xd, xs1, shamt`
29420    /// Rust: `bexti_rv32(rd, rs1, shamtw)`
29421    ///
29422    /// # Arguments
29423    /// - `rd` — Destination register.
29424    /// - `rs1` — Source register.
29425    /// - `shamtw` — Immediate encoding value.
29426    pub fn bexti_rv32<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtw: T2)
29427    where
29428        Self: BextiRv32Emitter<T0, T1, T2>,
29429    {
29430        <Self as BextiRv32Emitter<T0, T1, T2>>::bexti_rv32(self, rd, rs1, shamtw);
29431    }
29432    /// Branch if greater than or equal
29433    ///
29434    /// Branch to PC + imm if
29435    /// the signed value in register rs1 is greater than or equal to the signed value in register rs2.
29436    ///
29437    /// Raise a `MisalignedAddress` exception if PC + imm is misaligned.
29438    ///
29439    /// # Forms
29440    /// Assembly: `bge xs1, xs2, imm`
29441    /// Rust: `bge(rs1, rs2, imm)`
29442    ///
29443    /// # Arguments
29444    /// - `rs1` — Source register.
29445    /// - `rs2` — Source register.
29446    /// - `imm` — Immediate encoding value.
29447    pub fn bge<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)
29448    where
29449        Self: BgeEmitter<T0, T1, T2>,
29450    {
29451        <Self as BgeEmitter<T0, T1, T2>>::bge(self, rs1, rs2, imm);
29452    }
29453    /// Branch if greater than or equal unsigned
29454    ///
29455    /// Branch to PC + imm if
29456    /// the unsigned value in register rs1 is greater than or equal to the unsigned value in register rs2.
29457    ///
29458    /// Raise a `MisalignedAddress` exception if PC + imm is misaligned.
29459    ///
29460    /// # Forms
29461    /// Assembly: `bgeu xs1, xs2, imm`
29462    /// Rust: `bgeu(rs1, rs2, imm)`
29463    ///
29464    /// # Arguments
29465    /// - `rs1` — Source register.
29466    /// - `rs2` — Source register.
29467    /// - `imm` — Immediate encoding value.
29468    pub fn bgeu<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)
29469    where
29470        Self: BgeuEmitter<T0, T1, T2>,
29471    {
29472        <Self as BgeuEmitter<T0, T1, T2>>::bgeu(self, rs1, rs2, imm);
29473    }
29474    /// RISC-V `bgez` instruction.
29475    ///
29476    /// # Forms
29477    /// Assembly: `bgez rs1 bimm12lohi`
29478    /// Rust: `bgez(rs1, imm)`
29479    ///
29480    /// # Arguments
29481    /// - `rs1` — Source register.
29482    /// - `imm` — Immediate encoding value.
29483    pub fn bgez<T0, T1>(&mut self, rs1: T0, imm: T1)
29484    where
29485        Self: BgezEmitter<T0, T1>,
29486    {
29487        <Self as BgezEmitter<T0, T1>>::bgez(self, rs1, imm);
29488    }
29489    /// RISC-V `bgt` instruction.
29490    ///
29491    /// # Forms
29492    /// Assembly: `bgt rs1 rs2 bimm12lohi`
29493    /// Rust: `bgt(rs1, rs2, imm)`
29494    ///
29495    /// # Arguments
29496    /// - `rs1` — Source register.
29497    /// - `rs2` — Source register.
29498    /// - `imm` — Immediate encoding value.
29499    pub fn bgt<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)
29500    where
29501        Self: BgtEmitter<T0, T1, T2>,
29502    {
29503        <Self as BgtEmitter<T0, T1, T2>>::bgt(self, rs1, rs2, imm);
29504    }
29505    /// RISC-V `bgtu` instruction.
29506    ///
29507    /// # Forms
29508    /// Assembly: `bgtu rs1 rs2 bimm12lohi`
29509    /// Rust: `bgtu(rs1, rs2, imm)`
29510    ///
29511    /// # Arguments
29512    /// - `rs1` — Source register.
29513    /// - `rs2` — Source register.
29514    /// - `imm` — Immediate encoding value.
29515    pub fn bgtu<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)
29516    where
29517        Self: BgtuEmitter<T0, T1, T2>,
29518    {
29519        <Self as BgtuEmitter<T0, T1, T2>>::bgtu(self, rs1, rs2, imm);
29520    }
29521    /// RISC-V `bgtz` instruction.
29522    ///
29523    /// # Forms
29524    /// Assembly: `bgtz rs2 bimm12lohi`
29525    /// Rust: `bgtz(rs2, imm)`
29526    ///
29527    /// # Arguments
29528    /// - `rs2` — Source register.
29529    /// - `imm` — Immediate encoding value.
29530    pub fn bgtz<T0, T1>(&mut self, rs2: T0, imm: T1)
29531    where
29532        Self: BgtzEmitter<T0, T1>,
29533    {
29534        <Self as BgtzEmitter<T0, T1>>::bgtz(self, rs2, imm);
29535    }
29536    /// Single-Bit invert (Register)
29537    ///
29538    /// This instruction returns rs1 with a single bit inverted at the index specified in rs2.
29539    /// The index is read from the lower log2(XLEN) bits of rs2.
29540    ///
29541    /// # Forms
29542    /// Assembly: `binv xd, xs1, xs2`
29543    /// Rust: `binv(rd, rs1, rs2)`
29544    ///
29545    /// # Arguments
29546    /// - `rd` — Destination register.
29547    /// - `rs1` — Source register.
29548    /// - `rs2` — Source register.
29549    pub fn binv<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
29550    where
29551        Self: BinvEmitter<T0, T1, T2>,
29552    {
29553        <Self as BinvEmitter<T0, T1, T2>>::binv(self, rd, rs1, rs2);
29554    }
29555    /// Single-Bit invert (Immediate)
29556    ///
29557    /// This instruction returns rs1 with a single bit inverted at the index specified in shamt.
29558    /// The index is read from the lower log2(XLEN) bits of shamt.
29559    /// For RV32, the encodings corresponding to shamt\[5\]=1 are reserved.
29560    ///
29561    /// # Forms
29562    /// Assembly: `binvi xd, xs1, shamt`
29563    /// Rust: `binvi(rd, rs1, shamtd)`
29564    ///
29565    /// # Arguments
29566    /// - `rd` — Destination register.
29567    /// - `rs1` — Source register.
29568    /// - `shamtd` — Immediate encoding value.
29569    pub fn binvi<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtd: T2)
29570    where
29571        Self: BinviEmitter<T0, T1, T2>,
29572    {
29573        <Self as BinviEmitter<T0, T1, T2>>::binvi(self, rd, rs1, shamtd);
29574    }
29575    /// Single-Bit invert (Immediate)
29576    ///
29577    /// This instruction returns rs1 with a single bit inverted at the index specified in shamt.
29578    /// The index is read from the lower log2(XLEN) bits of shamt.
29579    /// For RV32, the encodings corresponding to shamt\[5\]=1 are reserved.
29580    ///
29581    /// # Forms
29582    /// Assembly: `binvi.rv32 xd, xs1, shamt`
29583    /// Rust: `binvi_rv32(rd, rs1, shamtw)`
29584    ///
29585    /// # Arguments
29586    /// - `rd` — Destination register.
29587    /// - `rs1` — Source register.
29588    /// - `shamtw` — Immediate encoding value.
29589    pub fn binvi_rv32<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtw: T2)
29590    where
29591        Self: BinviRv32Emitter<T0, T1, T2>,
29592    {
29593        <Self as BinviRv32Emitter<T0, T1, T2>>::binvi_rv32(self, rd, rs1, shamtw);
29594    }
29595    /// RISC-V `ble` instruction.
29596    ///
29597    /// # Forms
29598    /// Assembly: `ble rs1 rs2 bimm12lohi`
29599    /// Rust: `ble(rs1, rs2, imm)`
29600    ///
29601    /// # Arguments
29602    /// - `rs1` — Source register.
29603    /// - `rs2` — Source register.
29604    /// - `imm` — Immediate encoding value.
29605    pub fn ble<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)
29606    where
29607        Self: BleEmitter<T0, T1, T2>,
29608    {
29609        <Self as BleEmitter<T0, T1, T2>>::ble(self, rs1, rs2, imm);
29610    }
29611    /// RISC-V `bleu` instruction.
29612    ///
29613    /// # Forms
29614    /// Assembly: `bleu rs1 rs2 bimm12lohi`
29615    /// Rust: `bleu(rs1, rs2, imm)`
29616    ///
29617    /// # Arguments
29618    /// - `rs1` — Source register.
29619    /// - `rs2` — Source register.
29620    /// - `imm` — Immediate encoding value.
29621    pub fn bleu<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)
29622    where
29623        Self: BleuEmitter<T0, T1, T2>,
29624    {
29625        <Self as BleuEmitter<T0, T1, T2>>::bleu(self, rs1, rs2, imm);
29626    }
29627    /// RISC-V `blez` instruction.
29628    ///
29629    /// # Forms
29630    /// Assembly: `blez rs2 bimm12lohi`
29631    /// Rust: `blez(rs2, imm)`
29632    ///
29633    /// # Arguments
29634    /// - `rs2` — Source register.
29635    /// - `imm` — Immediate encoding value.
29636    pub fn blez<T0, T1>(&mut self, rs2: T0, imm: T1)
29637    where
29638        Self: BlezEmitter<T0, T1>,
29639    {
29640        <Self as BlezEmitter<T0, T1>>::blez(self, rs2, imm);
29641    }
29642    /// Branch if less than
29643    ///
29644    /// Branch to PC + imm if
29645    /// the signed value in register rs1 is less than the signed value in register rs2.
29646    ///
29647    /// Raise a `MisalignedAddress` exception if PC + imm is misaligned.
29648    ///
29649    /// # Forms
29650    /// Assembly: `blt xs1, xs2, imm`
29651    /// Rust: `blt(rs1, rs2, imm)`
29652    ///
29653    /// # Arguments
29654    /// - `rs1` — Source register.
29655    /// - `rs2` — Source register.
29656    /// - `imm` — Immediate encoding value.
29657    pub fn blt<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)
29658    where
29659        Self: BltEmitter<T0, T1, T2>,
29660    {
29661        <Self as BltEmitter<T0, T1, T2>>::blt(self, rs1, rs2, imm);
29662    }
29663    /// Branch if less than unsigned
29664    ///
29665    /// Branch to PC + imm if
29666    /// the unsigned value in register rs1 is less than the unsigned value in register rs2.
29667    ///
29668    /// Raise a `MisalignedAddress` exception if PC + imm is misaligned.
29669    ///
29670    /// # Forms
29671    /// Assembly: `bltu xs1, xs2, imm`
29672    /// Rust: `bltu(rs1, rs2, imm)`
29673    ///
29674    /// # Arguments
29675    /// - `rs1` — Source register.
29676    /// - `rs2` — Source register.
29677    /// - `imm` — Immediate encoding value.
29678    pub fn bltu<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)
29679    where
29680        Self: BltuEmitter<T0, T1, T2>,
29681    {
29682        <Self as BltuEmitter<T0, T1, T2>>::bltu(self, rs1, rs2, imm);
29683    }
29684    /// RISC-V `bltz` instruction.
29685    ///
29686    /// # Forms
29687    /// Assembly: `bltz rs1 bimm12lohi`
29688    /// Rust: `bltz(rs1, imm)`
29689    ///
29690    /// # Arguments
29691    /// - `rs1` — Source register.
29692    /// - `imm` — Immediate encoding value.
29693    pub fn bltz<T0, T1>(&mut self, rs1: T0, imm: T1)
29694    where
29695        Self: BltzEmitter<T0, T1>,
29696    {
29697        <Self as BltzEmitter<T0, T1>>::bltz(self, rs1, imm);
29698    }
29699    /// Branch if not equal
29700    ///
29701    /// Branch to PC + imm if
29702    /// the value in register rs1 is not equal to the value in register rs2.
29703    ///
29704    /// Raise a `MisalignedAddress` exception if PC + imm is misaligned.
29705    ///
29706    /// # Forms
29707    /// Assembly: `bne xs1, xs2, imm`
29708    /// Rust: `bne(rs1, rs2, imm)`
29709    ///
29710    /// # Arguments
29711    /// - `rs1` — Source register.
29712    /// - `rs2` — Source register.
29713    /// - `imm` — Immediate encoding value.
29714    pub fn bne<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)
29715    where
29716        Self: BneEmitter<T0, T1, T2>,
29717    {
29718        <Self as BneEmitter<T0, T1, T2>>::bne(self, rs1, rs2, imm);
29719    }
29720    /// RISC-V `bnez` instruction.
29721    ///
29722    /// # Forms
29723    /// Assembly: `bnez rs1 bimm12lohi`
29724    /// Rust: `bnez(rs1, imm)`
29725    ///
29726    /// # Arguments
29727    /// - `rs1` — Source register.
29728    /// - `imm` — Immediate encoding value.
29729    pub fn bnez<T0, T1>(&mut self, rs1: T0, imm: T1)
29730    where
29731        Self: BnezEmitter<T0, T1>,
29732    {
29733        <Self as BnezEmitter<T0, T1>>::bnez(self, rs1, imm);
29734    }
29735    /// Reverse bits in bytes
29736    ///
29737    /// This instruction reverses the order of the bits in every byte of a register.
29738    ///
29739    /// # Forms
29740    /// Assembly: `brev8 xd, xs1`
29741    /// Rust: `brev8(rd, rs1)`
29742    ///
29743    /// # Arguments
29744    /// - `rd` — Destination register.
29745    /// - `rs1` — Source register.
29746    pub fn brev8<T0, T1>(&mut self, rd: T0, rs1: T1)
29747    where
29748        Self: Brev8Emitter<T0, T1>,
29749    {
29750        <Self as Brev8Emitter<T0, T1>>::brev8(self, rd, rs1);
29751    }
29752    /// Single-Bit set (Register)
29753    ///
29754    /// This instruction returns rs1 with a single bit set at the index specified in rs2.
29755    /// The index is read from the lower log2(XLEN) bits of rs2.
29756    ///
29757    /// # Forms
29758    /// Assembly: `bset xd, xs1, xs2`
29759    /// Rust: `bset(rd, rs1, rs2)`
29760    ///
29761    /// # Arguments
29762    /// - `rd` — Destination register.
29763    /// - `rs1` — Source register.
29764    /// - `rs2` — Source register.
29765    pub fn bset<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
29766    where
29767        Self: BsetEmitter<T0, T1, T2>,
29768    {
29769        <Self as BsetEmitter<T0, T1, T2>>::bset(self, rd, rs1, rs2);
29770    }
29771    /// Single-Bit set (Immediate)
29772    ///
29773    /// This instruction returns rs1 with a single bit set at the index specified in shamt.
29774    /// The index is read from the lower log2(XLEN) bits of shamt.
29775    /// For RV32, the encodings corresponding to shamt\[5\]=1 are reserved.
29776    ///
29777    /// # Forms
29778    /// Assembly: `bseti xd, xs1, shamt`
29779    /// Rust: `bseti(rd, rs1, shamtd)`
29780    ///
29781    /// # Arguments
29782    /// - `rd` — Destination register.
29783    /// - `rs1` — Source register.
29784    /// - `shamtd` — Immediate encoding value.
29785    pub fn bseti<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtd: T2)
29786    where
29787        Self: BsetiEmitter<T0, T1, T2>,
29788    {
29789        <Self as BsetiEmitter<T0, T1, T2>>::bseti(self, rd, rs1, shamtd);
29790    }
29791    /// Single-Bit set (Immediate)
29792    ///
29793    /// This instruction returns rs1 with a single bit set at the index specified in shamt.
29794    /// The index is read from the lower log2(XLEN) bits of shamt.
29795    /// For RV32, the encodings corresponding to shamt\[5\]=1 are reserved.
29796    ///
29797    /// # Forms
29798    /// Assembly: `bseti.rv32 xd, xs1, shamt`
29799    /// Rust: `bseti_rv32(rd, rs1, shamtw)`
29800    ///
29801    /// # Arguments
29802    /// - `rd` — Destination register.
29803    /// - `rs1` — Source register.
29804    /// - `shamtw` — Immediate encoding value.
29805    pub fn bseti_rv32<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtw: T2)
29806    where
29807        Self: BsetiRv32Emitter<T0, T1, T2>,
29808    {
29809        <Self as BsetiRv32Emitter<T0, T1, T2>>::bseti_rv32(self, rd, rs1, shamtw);
29810    }
29811    /// Add
29812    ///
29813    /// Add the value in rs2 to rd, and store the result in rd.
29814    /// C.ADD expands into `add rd, rd, rs2`.
29815    ///
29816    /// # Forms
29817    /// Assembly: `c.add xd, rs2`
29818    /// Rust: `c_add(rd, rs2)`
29819    ///
29820    /// # Arguments
29821    /// - `rd` — Destination/source register.
29822    /// - `rs2` — Instruction operand.
29823    pub fn c_add<T0, T1>(&mut self, rd: T0, rs2: T1)
29824    where
29825        Self: CAddEmitter<T0, T1>,
29826    {
29827        <Self as CAddEmitter<T0, T1>>::c_add(self, rd, rs2);
29828    }
29829    /// Add a sign-extended non-zero immediate
29830    ///
29831    /// C.ADDI adds the non-zero sign-extended 6-bit immediate to the value in register rd then writes the result to rd.
29832    /// C.ADDI expands into `addi rd, rd, imm`.
29833    /// C.ADDI is only valid when rd &ne; x0 and imm &ne; 0.
29834    /// The code points with rd=x0 encode the C.NOP instruction; the remaining code points with imm=0 encode HINTs.
29835    ///
29836    /// # Forms
29837    /// Assembly: `c.addi xd, imm`
29838    /// Rust: `c_addi(rd, imm)`
29839    ///
29840    /// # Arguments
29841    /// - `rd` — Destination/source register.
29842    /// - `imm` — Immediate encoding value.
29843    pub fn c_addi<T0, T1>(&mut self, rd: T0, imm: T1)
29844    where
29845        Self: CAddiEmitter<T0, T1>,
29846    {
29847        <Self as CAddiEmitter<T0, T1>>::c_addi(self, rd, imm);
29848    }
29849    /// Add a sign-extended non-zero immediate
29850    ///
29851    /// C.ADDI16SP adds the non-zero sign-extended 6-bit immediate to the value in the stack pointer (sp=x2), where the immediate is scaled to represent multiples of 16 in the range (-512,496).
29852    /// C.ADDI16SP is used to adjust the stack pointer in procedure prologues and epilogues.
29853    /// It expands into `addi x2, x2, nzimm\[9:4\]`.
29854    /// C.ADDI16SP is only valid when nzimm &ne; 0; the code point with nzimm=0 is reserved.
29855    ///
29856    /// # Forms
29857    /// Assembly: `c.addi16sp imm`
29858    /// Rust: `c_addi16sp(imm)`
29859    ///
29860    /// # Arguments
29861    /// - `imm` — Immediate encoding value.
29862    pub fn c_addi16sp<T0>(&mut self, imm: T0)
29863    where
29864        Self: CAddi16spEmitter<T0>,
29865    {
29866        <Self as CAddi16spEmitter<T0>>::c_addi16sp(self, imm);
29867    }
29868    /// Add a zero-extended non-zero immediate, scaled by 4, to the stack pointer
29869    ///
29870    /// Adds a zero-extended non-zero immediate, scaled by 4, to the stack pointer, x2, and writes the result to rd'.
29871    /// This instruction is used to generate pointers to stack-allocated variables.
29872    /// It expands to `addi rd', x2, nzuimm\[9:2\]`.
29873    /// C.ADDI4SPN is only valid when nzuimm &ne; 0; the code points with nzuimm=0 are reserved.
29874    ///
29875    /// # Forms
29876    /// Assembly: `c.addi4spn xd, imm`
29877    /// Rust: `c_addi4spn(rd, imm)`
29878    ///
29879    /// # Arguments
29880    /// - `rd` — Destination register.
29881    /// - `imm` — Immediate encoding value.
29882    pub fn c_addi4spn<T0, T1>(&mut self, rd: T0, imm: T1)
29883    where
29884        Self: CAddi4spnEmitter<T0, T1>,
29885    {
29886        <Self as CAddi4spnEmitter<T0, T1>>::c_addi4spn(self, rd, imm);
29887    }
29888    /// Add a sign-extended non-zero immediate
29889    ///
29890    /// C.ADDIW is an RV64C/RV128C-only instruction that performs the same computation as C.ADDI but produces a 32-bit result, then sign-extends result to 64 bits.
29891    /// C.ADDIW expands into `addiw rd, rd, imm`.
29892    /// The immediate can be zero for C.ADDIW, where this corresponds to `sext.w rd`.
29893    /// C.ADDIW is only valid when rd &ne; x0; the code points with rd=x0 are reserved.
29894    ///
29895    /// # Forms
29896    /// Assembly: `c.addiw xd, imm`
29897    /// Rust: `c_addiw(rd, imm)`
29898    ///
29899    /// # Arguments
29900    /// - `rd` — Destination/source register.
29901    /// - `imm` — Immediate encoding value.
29902    pub fn c_addiw<T0, T1>(&mut self, rd: T0, imm: T1)
29903    where
29904        Self: CAddiwEmitter<T0, T1>,
29905    {
29906        <Self as CAddiwEmitter<T0, T1>>::c_addiw(self, rd, imm);
29907    }
29908    /// Add word
29909    ///
29910    /// Add the 32-bit values in rs2 from rd, and store the result in rd.
29911    /// The rd and rs2 register indexes should be used as rd+8 and rs2+8 (registers x8-x15).
29912    /// C.ADDW expands into `addw rd, rd, rs2`.
29913    ///
29914    /// # Forms
29915    /// Assembly: `c.addw xd, rs2`
29916    /// Rust: `c_addw(rd, rs2)`
29917    ///
29918    /// # Arguments
29919    /// - `rd` — Destination/source register.
29920    /// - `rs2` — Source register.
29921    pub fn c_addw<T0, T1>(&mut self, rd: T0, rs2: T1)
29922    where
29923        Self: CAddwEmitter<T0, T1>,
29924    {
29925        <Self as CAddwEmitter<T0, T1>>::c_addw(self, rd, rs2);
29926    }
29927    /// And
29928    ///
29929    /// And rd with rs2, and store the result in rd
29930    /// The rd and rs2 register indexes should be used as rd+8 and rs2+8 (registers x8-x15).
29931    /// C.AND expands into `and rd, rd, rs2`.
29932    ///
29933    /// # Forms
29934    /// Assembly: `c.and xd, rs2`
29935    /// Rust: `c_and(rd, rs2)`
29936    ///
29937    /// # Arguments
29938    /// - `rd` — Destination/source register.
29939    /// - `rs2` — Source register.
29940    pub fn c_and<T0, T1>(&mut self, rd: T0, rs2: T1)
29941    where
29942        Self: CAndEmitter<T0, T1>,
29943    {
29944        <Self as CAndEmitter<T0, T1>>::c_and(self, rd, rs2);
29945    }
29946    /// And immediate
29947    ///
29948    /// And an immediate to the value in rd, and store the result in rd.
29949    /// The rd register index should be used as rd+8 (registers x8-x15).
29950    /// C.ANDI expands into `andi rd, rd, imm`.
29951    ///
29952    /// # Forms
29953    /// Assembly: `c.andi xd, imm`
29954    /// Rust: `c_andi(rd, imm)`
29955    ///
29956    /// # Arguments
29957    /// - `rd` — Destination/source register.
29958    /// - `imm` — Immediate encoding value.
29959    pub fn c_andi<T0, T1>(&mut self, rd: T0, imm: T1)
29960    where
29961        Self: CAndiEmitter<T0, T1>,
29962    {
29963        <Self as CAndiEmitter<T0, T1>>::c_andi(self, rd, imm);
29964    }
29965    /// Branch if Equal Zero
29966    ///
29967    /// C.BEQZ performs conditional control transfers. The offset is sign-extended and added to the pc to form the branch target address. It can therefore target a &pm;256 B range. C.BEQZ takes the branch if the value in register rs1' is zero.
29968    /// It expands to `beq` `rs1, x0, offset`.
29969    ///
29970    /// # Forms
29971    /// Assembly: `c.beqz xs1, imm`
29972    /// Rust: `c_beqz(rs1, bimm9lohi)`
29973    ///
29974    /// # Arguments
29975    /// - `rs1` — Source register.
29976    /// - `bimm9lohi` — Immediate encoding value.
29977    pub fn c_beqz<T0, T1>(&mut self, rs1: T0, bimm9lohi: T1)
29978    where
29979        Self: CBeqzEmitter<T0, T1>,
29980    {
29981        <Self as CBeqzEmitter<T0, T1>>::c_beqz(self, rs1, bimm9lohi);
29982    }
29983    /// Branch if NOT Equal Zero
29984    ///
29985    /// C.BEQZ performs conditional control transfers. The offset is sign-extended and added to the pc to form the branch target address. It can therefore target a &pm;256 B range. C.BEQZ takes the branch if the value in register rs1' is NOT zero.
29986    /// It expands to `beq` `rs1, x0, offset`.
29987    ///
29988    /// # Forms
29989    /// Assembly: `c.bnez xs1, imm`
29990    /// Rust: `c_bnez(rs1, bimm9lohi)`
29991    ///
29992    /// # Arguments
29993    /// - `rs1` — Source register.
29994    /// - `bimm9lohi` — Immediate encoding value.
29995    pub fn c_bnez<T0, T1>(&mut self, rs1: T0, bimm9lohi: T1)
29996    where
29997        Self: CBnezEmitter<T0, T1>,
29998    {
29999        <Self as CBnezEmitter<T0, T1>>::c_bnez(self, rs1, bimm9lohi);
30000    }
30001    /// Breakpoint exception.
30002    ///
30003    /// The C.EBREAK instruction is used by debuggers to cause control to be transferred back to
30004    /// a debugging environment. Unless overridden by an external debug environment,
30005    /// C.EBREAK raises a breakpoint exception and performs no other operation.
30006    ///
30007    /// \[NOTE\]
30008    /// As described in the `C` Standard Extension for Compressed Instructions, the `c.ebreak`
30009    /// instruction performs the same operation as the EBREAK instruction.
30010    ///
30011    /// EBREAK causes the receiving privilege mode's epc register to be set to the address of
30012    /// the EBREAK instruction itself, not the address of the following instruction.
30013    /// As EBREAK causes a synchronous exception, it is not considered to retire,
30014    /// and should not increment the `minstret` CSR.
30015    ///
30016    /// # Forms
30017    /// Assembly: `c.ebreak " "`
30018    /// Rust: `c_ebreak()`
30019    ///
30020    /// # Arguments
30021    pub fn c_ebreak(&mut self)
30022    where
30023        Self: CEbreakEmitter,
30024    {
30025        <Self as CEbreakEmitter>::c_ebreak(self);
30026    }
30027    /// Load double-precision
30028    ///
30029    /// Loads a double precision floating-point value from memory into register rd.
30030    /// It computes an effective address by adding the zero-extended offset, scaled by 8,
30031    /// to the base address in register rs1.
30032    /// It expands to `fld` `rd, offset(rs1)`.
30033    ///
30034    /// # Forms
30035    /// Assembly: `c.fld xd, imm(xs1)`
30036    /// Rust: `c_fld(rd, rs1, imm)`
30037    ///
30038    /// # Arguments
30039    /// - `rd` — Destination register.
30040    /// - `rs1` — Memory base register.
30041    /// - `imm` — Immediate encoding value.
30042    pub fn c_fld<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)
30043    where
30044        Self: CFldEmitter<T0, T1, T2>,
30045    {
30046        <Self as CFldEmitter<T0, T1, T2>>::c_fld(self, rd, rs1, imm);
30047    }
30048    /// Load doubleword into floating-point register from stack
30049    ///
30050    /// Loads a double-precision floating-point value from memory into floating-point register rd.
30051    /// It computes its effective address by adding the zero-extended offset, scaled by 8,
30052    /// to the stack pointer, x2.
30053    /// It expands to `fld` `rd, offset(x2)`.
30054    ///
30055    /// # Forms
30056    /// Assembly: `c.fldsp fd, imm(sp)`
30057    /// Rust: `c_fldsp(rd, imm)`
30058    ///
30059    /// # Arguments
30060    /// - `rd` — Destination register.
30061    /// - `imm` — Immediate encoding value.
30062    pub fn c_fldsp<T0, T1>(&mut self, rd: T0, imm: T1)
30063    where
30064        Self: CFldspEmitter<T0, T1>,
30065    {
30066        <Self as CFldspEmitter<T0, T1>>::c_fldsp(self, rd, imm);
30067    }
30068    /// Load single-precision
30069    ///
30070    /// Loads a single precision floating-point value from memory into register rd.
30071    /// It computes an effective address by adding the zero-extended offset, scaled by 4,
30072    /// to the base address in register rs1.
30073    /// It expands to `flw` `rd, offset(rs1)`.
30074    ///
30075    /// # Forms
30076    /// Assembly: `c.flw xd, imm(xs1)`
30077    /// Rust: `c_flw(rd, rs1, imm)`
30078    ///
30079    /// # Arguments
30080    /// - `rd` — Destination register.
30081    /// - `rs1` — Memory base register.
30082    /// - `imm` — Immediate encoding value.
30083    pub fn c_flw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)
30084    where
30085        Self: CFlwEmitter<T0, T1, T2>,
30086    {
30087        <Self as CFlwEmitter<T0, T1, T2>>::c_flw(self, rd, rs1, imm);
30088    }
30089    /// Load word into floating-point register from stack
30090    ///
30091    /// Loads a single-precision floating-point value from memory into floating-point register rd.
30092    /// It computes its effective address by adding the zero-extended offset, scaled by 4,
30093    /// to the stack pointer, x2.
30094    /// It expands to `flw` `rd, offset(x2)`.
30095    ///
30096    /// # Forms
30097    /// Assembly: `c.flwsp fd, imm(sp)`
30098    /// Rust: `c_flwsp(rd, imm)`
30099    ///
30100    /// # Arguments
30101    /// - `rd` — Destination register.
30102    /// - `imm` — Immediate encoding value.
30103    pub fn c_flwsp<T0, T1>(&mut self, rd: T0, imm: T1)
30104    where
30105        Self: CFlwspEmitter<T0, T1>,
30106    {
30107        <Self as CFlwspEmitter<T0, T1>>::c_flwsp(self, rd, imm);
30108    }
30109    /// Store double-precision
30110    ///
30111    /// Stores a double precision floating-point value in register rs2 to memory.
30112    /// It computes an effective address by adding the zero-extended offset, scaled by 8,
30113    /// to the base address in register rs1.
30114    /// It expands to `fsd` `rs2, offset(rs1)`.
30115    ///
30116    /// # Forms
30117    /// Assembly: `c.fsd xs2, imm(xs1)`
30118    /// Rust: `c_fsd(rs1, rs2, imm)`
30119    ///
30120    /// # Arguments
30121    /// - `rs1` — Memory base register.
30122    /// - `rs2` — Source register.
30123    /// - `imm` — Immediate encoding value.
30124    pub fn c_fsd<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)
30125    where
30126        Self: CFsdEmitter<T0, T1, T2>,
30127    {
30128        <Self as CFsdEmitter<T0, T1, T2>>::c_fsd(self, rs1, rs2, imm);
30129    }
30130    /// Store double-precision value to stack
30131    ///
30132    /// Stores a double-precision floating-point value in floating-point register rs2 to memory.
30133    /// It computes an effective address by adding the zero-extended offset, scaled by 8,
30134    /// to the stack pointer, x2.
30135    /// It expands to `fsd` `rs2, offset(x2)`.
30136    ///
30137    /// # Forms
30138    /// Assembly: `c.fsdsp fs2, imm(sp)`
30139    /// Rust: `c_fsdsp(rs2, imm)`
30140    ///
30141    /// # Arguments
30142    /// - `rs2` — Instruction operand.
30143    /// - `imm` — Immediate encoding value.
30144    pub fn c_fsdsp<T0, T1>(&mut self, rs2: T0, imm: T1)
30145    where
30146        Self: CFsdspEmitter<T0, T1>,
30147    {
30148        <Self as CFsdspEmitter<T0, T1>>::c_fsdsp(self, rs2, imm);
30149    }
30150    /// Store single-precision
30151    ///
30152    /// Stores a single precision floating-point value in register rs2 to memory.
30153    /// It computes an effective address by adding the zero-extended offset, scaled by 4,
30154    /// to the base address in register rs1.
30155    /// It expands to `fsw` `rs2, offset(rs1)`.
30156    ///
30157    /// # Forms
30158    /// Assembly: `c.fsw xs2, imm(xs1)`
30159    /// Rust: `c_fsw(rs1, rs2, imm)`
30160    ///
30161    /// # Arguments
30162    /// - `rs1` — Memory base register.
30163    /// - `rs2` — Source register.
30164    /// - `imm` — Immediate encoding value.
30165    pub fn c_fsw<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)
30166    where
30167        Self: CFswEmitter<T0, T1, T2>,
30168    {
30169        <Self as CFswEmitter<T0, T1, T2>>::c_fsw(self, rs1, rs2, imm);
30170    }
30171    /// Store single-precision value to stack
30172    ///
30173    /// Stores a single-precision floating-point value in floating-point register rs2 to memory.
30174    /// It computes an effective address by adding the zero-extended offset, scaled by 4,
30175    /// to the stack pointer, x2.
30176    /// It expands to `fsw` `rs2, offset(x2)`.
30177    ///
30178    /// # Forms
30179    /// Assembly: `c.fswsp fs2, imm(sp)`
30180    /// Rust: `c_fswsp(rs2, imm)`
30181    ///
30182    /// # Arguments
30183    /// - `rs2` — Instruction operand.
30184    /// - `imm` — Immediate encoding value.
30185    pub fn c_fswsp<T0, T1>(&mut self, rs2: T0, imm: T1)
30186    where
30187        Self: CFswspEmitter<T0, T1>,
30188    {
30189        <Self as CFswspEmitter<T0, T1>>::c_fswsp(self, rs2, imm);
30190    }
30191    /// Jump
30192    ///
30193    /// C.J performs an unconditional control transfer. The offset is sign-extended and added to the pc to form the jump target address. C.J can therefore target a &pm;2 KiB range.
30194    /// It expands to `jal` `x0, offset`.
30195    ///
30196    /// # Forms
30197    /// Assembly: `c.j imm`
30198    /// Rust: `c_j(imm)`
30199    ///
30200    /// # Arguments
30201    /// - `imm` — Immediate encoding value.
30202    pub fn c_j<T0>(&mut self, imm: T0)
30203    where
30204        Self: CJEmitter<T0>,
30205    {
30206        <Self as CJEmitter<T0>>::c_j(self, imm);
30207    }
30208    /// Jump and Link
30209    ///
30210    /// C.JAL is an RV32C-only instruction that performs the same operation as C.J, but additionally writes the address of the instruction following the jump (pc+2) to the link register, x1.
30211    /// It expands to `jal` `x1, offset`.
30212    ///
30213    /// # Forms
30214    /// Assembly: `c.jal imm`
30215    /// Rust: `c_jal(imm)`
30216    ///
30217    /// # Arguments
30218    /// - `imm` — Immediate encoding value.
30219    pub fn c_jal<T0>(&mut self, imm: T0)
30220    where
30221        Self: CJalEmitter<T0>,
30222    {
30223        <Self as CJalEmitter<T0>>::c_jal(self, imm);
30224    }
30225    /// Jump and Link Register.
30226    ///
30227    /// C.JALR (jump and link register) performs the same operation as C.JR, but additionally writes the address of the instruction following the jump (pc+2) to the link register, x1.
30228    /// C.JALR expands to jalr x1, 0(rs1).
30229    ///
30230    /// # Forms
30231    /// Assembly: `c.jalr xs1`
30232    /// Rust: `c_jalr(rs1)`
30233    ///
30234    /// # Arguments
30235    /// - `rs1` — Instruction operand.
30236    pub fn c_jalr<T0>(&mut self, rs1: T0)
30237    where
30238        Self: CJalrEmitter<T0>,
30239    {
30240        <Self as CJalrEmitter<T0>>::c_jalr(self, rs1);
30241    }
30242    /// Jump Register
30243    ///
30244    /// C.JR (jump register) performs an unconditional control transfer to the address in register rs1.
30245    /// C.JR expands to jalr x0, 0(rs1).
30246    ///
30247    /// # Forms
30248    /// Assembly: `c.jr xs1`
30249    /// Rust: `c_jr(rs1)`
30250    ///
30251    /// # Arguments
30252    /// - `rs1` — Source register.
30253    pub fn c_jr<T0>(&mut self, rs1: T0)
30254    where
30255        Self: CJrEmitter<T0>,
30256    {
30257        <Self as CJrEmitter<T0>>::c_jr(self, rs1);
30258    }
30259    /// Load unsigned byte, 16-bit encoding
30260    ///
30261    /// Loads a 8-bit value from memory into register rd.
30262    /// It computes an effective address by adding the zero-extended offset, to the base address in register rs1.
30263    /// It expands to `lbu` `rd, offset(rs1)`.
30264    ///
30265    /// # Forms
30266    /// Assembly: `c.lbu xd, imm(xs1)`
30267    /// Rust: `c_lbu(rd, rs1, imm)`
30268    ///
30269    /// # Arguments
30270    /// - `rd` — Destination register.
30271    /// - `rs1` — Source register.
30272    /// - `imm` — Immediate encoding value.
30273    pub fn c_lbu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)
30274    where
30275        Self: CLbuEmitter<T0, T1, T2>,
30276    {
30277        <Self as CLbuEmitter<T0, T1, T2>>::c_lbu(self, rd, rs1, imm);
30278    }
30279    /// Load double
30280    ///
30281    /// Loads a 64-bit value from memory into register rd.
30282    /// It computes an effective address by adding the zero-extended offset, scaled by 8,
30283    /// to the base address in register rs1.
30284    /// It expands to `ld` `rd, offset(rs1)`.
30285    ///
30286    /// # Forms
30287    /// Assembly: `c.ld xd, imm(xs1)`
30288    /// Rust: `c_ld(rd, rs1, imm)`
30289    ///
30290    /// # Arguments
30291    /// - `rd` — Destination register.
30292    /// - `rs1` — Memory base register.
30293    /// - `imm` — Immediate encoding value.
30294    pub fn c_ld<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)
30295    where
30296        Self: CLdEmitter<T0, T1, T2>,
30297    {
30298        <Self as CLdEmitter<T0, T1, T2>>::c_ld(self, rd, rs1, imm);
30299    }
30300    /// Load doubleword from stack pointer
30301    ///
30302    /// C.LDSP is an RV64C/RV128C-only instruction that loads a 64-bit value from memory
30303    /// into register rd.
30304    /// It computes its effective address by adding the zero-extended offset, scaled by 8,
30305    /// to the stack pointer, x2.
30306    /// It expands to `ld` `rd, offset(x2)`.
30307    /// C.LDSP is only valid when rd &ne; x0 the code points with rd=x0 are reserved.
30308    ///
30309    /// # Forms
30310    /// Assembly: `c.ldsp xd, imm(sp)`
30311    /// Rust: `c_ldsp(rd, imm)`
30312    ///
30313    /// # Arguments
30314    /// - `rd` — Destination register.
30315    /// - `imm` — Immediate encoding value.
30316    pub fn c_ldsp<T0, T1>(&mut self, rd: T0, imm: T1)
30317    where
30318        Self: CLdspEmitter<T0, T1>,
30319    {
30320        <Self as CLdspEmitter<T0, T1>>::c_ldsp(self, rd, imm);
30321    }
30322    /// Load signed halfword, 16-bit encoding
30323    ///
30324    /// Loads a 16-bit value from memory into register rd.
30325    /// It computes an effective address by adding the zero-extended offset, to the base address in register rs1.
30326    /// It expands to `lh` `rd, offset(rs1)`.
30327    ///
30328    /// # Forms
30329    /// Assembly: `c.lh xd, imm(xs1)`
30330    /// Rust: `c_lh(rd, rs1, imm)`
30331    ///
30332    /// # Arguments
30333    /// - `rd` — Destination register.
30334    /// - `rs1` — Source register.
30335    /// - `imm` — Immediate encoding value.
30336    pub fn c_lh<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)
30337    where
30338        Self: CLhEmitter<T0, T1, T2>,
30339    {
30340        <Self as CLhEmitter<T0, T1, T2>>::c_lh(self, rd, rs1, imm);
30341    }
30342    /// Load unsigned halfword, 16-bit encoding
30343    ///
30344    /// Loads a 16-bit value from memory into register rd.
30345    /// It computes an effective address by adding the zero-extended offset, to the base address in register rs1.
30346    /// It expands to `lhu` `rd, offset(rs1)`.
30347    ///
30348    /// # Forms
30349    /// Assembly: `c.lhu xd, imm(xs1)`
30350    /// Rust: `c_lhu(rd, rs1, imm)`
30351    ///
30352    /// # Arguments
30353    /// - `rd` — Destination register.
30354    /// - `rs1` — Source register.
30355    /// - `imm` — Immediate encoding value.
30356    pub fn c_lhu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)
30357    where
30358        Self: CLhuEmitter<T0, T1, T2>,
30359    {
30360        <Self as CLhuEmitter<T0, T1, T2>>::c_lhu(self, rd, rs1, imm);
30361    }
30362    /// Load the sign-extended 6-bit immediate
30363    ///
30364    /// C.LI loads the sign-extended 6-bit immediate, imm, into register rd.
30365    /// C.LI expands into `addi rd, x0, imm`.
30366    /// C.LI is only valid when rd &ne; x0; the code points with rd=x0 encode HINTs.
30367    ///
30368    /// # Forms
30369    /// Assembly: `c.li xd, imm`
30370    /// Rust: `c_li(rd, imm)`
30371    ///
30372    /// # Arguments
30373    /// - `rd` — Destination register.
30374    /// - `imm` — Immediate encoding value.
30375    pub fn c_li<T0, T1>(&mut self, rd: T0, imm: T1)
30376    where
30377        Self: CLiEmitter<T0, T1>,
30378    {
30379        <Self as CLiEmitter<T0, T1>>::c_li(self, rd, imm);
30380    }
30381    /// Load the non-zero 6-bit immediate field into bits 17-12 of the destination register
30382    ///
30383    /// C.LUI loads the non-zero 6-bit immediate field into bits 17-12 of the destination register, clears the bottom 12 bits, and sign-extends bit 17 into all higher bits of the destination.
30384    /// C.LUI expands into `lui rd, imm`.
30385    /// C.LUI is only valid when rd&ne;x0 and rd&ne;x2, and when the immediate is not equal to zero.
30386    /// The code points with imm=0 are reserved; the remaining code points with rd=x0 are HINTs; and the remaining code points with rd=x2 correspond to the C.ADDI16SP instruction
30387    ///
30388    /// # Forms
30389    /// Assembly: `c.lui xd, imm`
30390    /// Rust: `c_lui(rd, imm)`
30391    ///
30392    /// # Arguments
30393    /// - `rd` — Destination register.
30394    /// - `imm` — Immediate encoding value.
30395    pub fn c_lui<T0, T1>(&mut self, rd: T0, imm: T1)
30396    where
30397        Self: CLuiEmitter<T0, T1>,
30398    {
30399        <Self as CLuiEmitter<T0, T1>>::c_lui(self, rd, imm);
30400    }
30401    /// Load word
30402    ///
30403    /// Loads a 32-bit value from memory into register rd.
30404    /// It computes an effective address by adding the zero-extended offset, scaled by 4,
30405    /// to the base address in register rs1.
30406    /// It expands to `lw` `rd, offset(rs1)`.
30407    ///
30408    /// # Forms
30409    /// Assembly: `c.lw xd, imm(xs1)`
30410    /// Rust: `c_lw(rd, rs1, imm)`
30411    ///
30412    /// # Arguments
30413    /// - `rd` — Destination register.
30414    /// - `rs1` — Memory base register.
30415    /// - `imm` — Immediate encoding value.
30416    pub fn c_lw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)
30417    where
30418        Self: CLwEmitter<T0, T1, T2>,
30419    {
30420        <Self as CLwEmitter<T0, T1, T2>>::c_lw(self, rd, rs1, imm);
30421    }
30422    /// Load word from stack pointer
30423    ///
30424    /// Loads a 32-bit value from memory into register rd.
30425    /// It computes an effective address by adding the zero-extended offset, scaled by 4,
30426    /// to the stack pointer, x2.
30427    /// It expands to `lw` `rd, offset(x2)`.
30428    /// C.LWSP is only valid when rd &ne; x0. The code points with rd=x0 are reserved.
30429    ///
30430    /// # Forms
30431    /// Assembly: `c.lwsp xd, imm(sp)`
30432    /// Rust: `c_lwsp(rd, imm)`
30433    ///
30434    /// # Arguments
30435    /// - `rd` — Destination register.
30436    /// - `imm` — Immediate encoding value.
30437    pub fn c_lwsp<T0, T1>(&mut self, rd: T0, imm: T1)
30438    where
30439        Self: CLwspEmitter<T0, T1>,
30440    {
30441        <Self as CLwspEmitter<T0, T1>>::c_lwsp(self, rd, imm);
30442    }
30443    /// RISC-V `c.mop.1` instruction.
30444    ///
30445    /// # Forms
30446    /// Assembly: `c.mop.1`
30447    /// Rust: `c_mop_1()`
30448    ///
30449    /// # Arguments
30450    pub fn c_mop_1(&mut self)
30451    where
30452        Self: CMop1Emitter,
30453    {
30454        <Self as CMop1Emitter>::c_mop_1(self);
30455    }
30456    /// RISC-V `c.mop.11` instruction.
30457    ///
30458    /// # Forms
30459    /// Assembly: `c.mop.11`
30460    /// Rust: `c_mop_11()`
30461    ///
30462    /// # Arguments
30463    pub fn c_mop_11(&mut self)
30464    where
30465        Self: CMop11Emitter,
30466    {
30467        <Self as CMop11Emitter>::c_mop_11(self);
30468    }
30469    /// RISC-V `c.mop.13` instruction.
30470    ///
30471    /// # Forms
30472    /// Assembly: `c.mop.13`
30473    /// Rust: `c_mop_13()`
30474    ///
30475    /// # Arguments
30476    pub fn c_mop_13(&mut self)
30477    where
30478        Self: CMop13Emitter,
30479    {
30480        <Self as CMop13Emitter>::c_mop_13(self);
30481    }
30482    /// RISC-V `c.mop.15` instruction.
30483    ///
30484    /// # Forms
30485    /// Assembly: `c.mop.15`
30486    /// Rust: `c_mop_15()`
30487    ///
30488    /// # Arguments
30489    pub fn c_mop_15(&mut self)
30490    where
30491        Self: CMop15Emitter,
30492    {
30493        <Self as CMop15Emitter>::c_mop_15(self);
30494    }
30495    /// RISC-V `c.mop.3` instruction.
30496    ///
30497    /// # Forms
30498    /// Assembly: `c.mop.3`
30499    /// Rust: `c_mop_3()`
30500    ///
30501    /// # Arguments
30502    pub fn c_mop_3(&mut self)
30503    where
30504        Self: CMop3Emitter,
30505    {
30506        <Self as CMop3Emitter>::c_mop_3(self);
30507    }
30508    /// RISC-V `c.mop.5` instruction.
30509    ///
30510    /// # Forms
30511    /// Assembly: `c.mop.5`
30512    /// Rust: `c_mop_5()`
30513    ///
30514    /// # Arguments
30515    pub fn c_mop_5(&mut self)
30516    where
30517        Self: CMop5Emitter,
30518    {
30519        <Self as CMop5Emitter>::c_mop_5(self);
30520    }
30521    /// RISC-V `c.mop.7` instruction.
30522    ///
30523    /// # Forms
30524    /// Assembly: `c.mop.7`
30525    /// Rust: `c_mop_7()`
30526    ///
30527    /// # Arguments
30528    pub fn c_mop_7(&mut self)
30529    where
30530        Self: CMop7Emitter,
30531    {
30532        <Self as CMop7Emitter>::c_mop_7(self);
30533    }
30534    /// RISC-V `c.mop.9` instruction.
30535    ///
30536    /// # Forms
30537    /// Assembly: `c.mop.9`
30538    /// Rust: `c_mop_9()`
30539    ///
30540    /// # Arguments
30541    pub fn c_mop_9(&mut self)
30542    where
30543        Self: CMop9Emitter,
30544    {
30545        <Self as CMop9Emitter>::c_mop_9(self);
30546    }
30547    /// RISC-V `c.mop.n` instruction.
30548    ///
30549    /// # Forms
30550    /// Assembly: `c.mop.n c_mop_t`
30551    /// Rust: `c_mop_n(mop_t)`
30552    ///
30553    /// # Arguments
30554    /// - `mop_t` — Instruction operand.
30555    pub fn c_mop_n<T0>(&mut self, mop_t: T0)
30556    where
30557        Self: CMopNEmitter<T0>,
30558    {
30559        <Self as CMopNEmitter<T0>>::c_mop_n(self, mop_t);
30560    }
30561    /// Multiply, 16-bit encoding
30562    ///
30563    /// This instruction multiplies XLEN bits of the source operands from rsd' and rs2' and writes the lowest XLEN bits of the result to rsd'.
30564    ///
30565    /// # Forms
30566    /// Assembly: `c.mul xd, xs2`
30567    /// Rust: `c_mul(rd, rs2)`
30568    ///
30569    /// # Arguments
30570    /// - `rd` — Destination/source register.
30571    /// - `rs2` — Source register.
30572    pub fn c_mul<T0, T1>(&mut self, rd: T0, rs2: T1)
30573    where
30574        Self: CMulEmitter<T0, T1>,
30575    {
30576        <Self as CMulEmitter<T0, T1>>::c_mul(self, rd, rs2);
30577    }
30578    /// Move Register
30579    ///
30580    /// C.MV (move register) performs copy of the data in register rs2 to register rd
30581    /// C.MV expands to addi rd, x0, rs2.
30582    ///
30583    /// # Forms
30584    /// Assembly: `c.mv xd, xs2`
30585    /// Rust: `c_mv(rd, rs2)`
30586    ///
30587    /// # Arguments
30588    /// - `rd` — Destination register.
30589    /// - `rs2` — Instruction operand.
30590    pub fn c_mv<T0, T1>(&mut self, rd: T0, rs2: T1)
30591    where
30592        Self: CMvEmitter<T0, T1>,
30593    {
30594        <Self as CMvEmitter<T0, T1>>::c_mv(self, rd, rs2);
30595    }
30596    /// Non-operation
30597    ///
30598    /// C.NOP expands into `addi x0, x0, imm`.
30599    ///
30600    /// # Forms
30601    /// Assembly: `c.nop imm`
30602    /// Rust: `c_nop(imm)`
30603    ///
30604    /// # Arguments
30605    /// - `imm` — Immediate encoding value.
30606    pub fn c_nop<T0>(&mut self, imm: T0)
30607    where
30608        Self: CNopEmitter<T0>,
30609    {
30610        <Self as CNopEmitter<T0>>::c_nop(self, imm);
30611    }
30612    /// Bitwise not, 16-bit encoding
30613    ///
30614    /// This instruction takes a single source/destination operand.
30615    /// This instruction takes the one's complement of rd'/rs1' and writes the result to the same register.
30616    ///
30617    /// # Forms
30618    /// Assembly: `c.not xd`
30619    /// Rust: `c_not(rd)`
30620    ///
30621    /// # Arguments
30622    /// - `rd` — Destination/source register.
30623    pub fn c_not<T0>(&mut self, rd: T0)
30624    where
30625        Self: CNotEmitter<T0>,
30626    {
30627        <Self as CNotEmitter<T0>>::c_not(self, rd);
30628    }
30629    /// RISC-V `c.ntl.all` instruction.
30630    ///
30631    /// # Forms
30632    /// Assembly: `c.ntl.all`
30633    /// Rust: `c_ntl_all()`
30634    ///
30635    /// # Arguments
30636    pub fn c_ntl_all(&mut self)
30637    where
30638        Self: CNtlAllEmitter,
30639    {
30640        <Self as CNtlAllEmitter>::c_ntl_all(self);
30641    }
30642    /// RISC-V `c.ntl.p1` instruction.
30643    ///
30644    /// # Forms
30645    /// Assembly: `c.ntl.p1`
30646    /// Rust: `c_ntl_p1()`
30647    ///
30648    /// # Arguments
30649    pub fn c_ntl_p1(&mut self)
30650    where
30651        Self: CNtlP1Emitter,
30652    {
30653        <Self as CNtlP1Emitter>::c_ntl_p1(self);
30654    }
30655    /// RISC-V `c.ntl.pall` instruction.
30656    ///
30657    /// # Forms
30658    /// Assembly: `c.ntl.pall`
30659    /// Rust: `c_ntl_pall()`
30660    ///
30661    /// # Arguments
30662    pub fn c_ntl_pall(&mut self)
30663    where
30664        Self: CNtlPallEmitter,
30665    {
30666        <Self as CNtlPallEmitter>::c_ntl_pall(self);
30667    }
30668    /// RISC-V `c.ntl.s1` instruction.
30669    ///
30670    /// # Forms
30671    /// Assembly: `c.ntl.s1`
30672    /// Rust: `c_ntl_s1()`
30673    ///
30674    /// # Arguments
30675    pub fn c_ntl_s1(&mut self)
30676    where
30677        Self: CNtlS1Emitter,
30678    {
30679        <Self as CNtlS1Emitter>::c_ntl_s1(self);
30680    }
30681    /// Or
30682    ///
30683    /// Or rd with rs2, and store the result in rd
30684    /// The rd and rs2 register indexes should be used as rd+8 and rs2+8 (registers x8-x15).
30685    /// C.OR expands into `or rd, rd, rs2`.
30686    ///
30687    /// # Forms
30688    /// Assembly: `c.or xd, rs2`
30689    /// Rust: `c_or(rd, rs2)`
30690    ///
30691    /// # Arguments
30692    /// - `rd` — Destination/source register.
30693    /// - `rs2` — Source register.
30694    pub fn c_or<T0, T1>(&mut self, rd: T0, rs2: T1)
30695    where
30696        Self: COrEmitter<T0, T1>,
30697    {
30698        <Self as COrEmitter<T0, T1>>::c_or(self, rd, rs2);
30699    }
30700    /// Store unsigned byte, 16-bit encoding
30701    ///
30702    /// Stores a 8-bit value from register rs2 into memory.
30703    /// It computes an effective address by adding the zero-extended offset, to the base address in register rs1.
30704    /// It expands to `sb` `rs2, offset(rs1)`.
30705    ///
30706    /// # Forms
30707    /// Assembly: `c.sb xs2, imm(xs1)`
30708    /// Rust: `c_sb(rs1, rs2, imm)`
30709    ///
30710    /// # Arguments
30711    /// - `rs1` — Source register.
30712    /// - `rs2` — Source register.
30713    /// - `imm` — Immediate encoding value.
30714    pub fn c_sb<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)
30715    where
30716        Self: CSbEmitter<T0, T1, T2>,
30717    {
30718        <Self as CSbEmitter<T0, T1, T2>>::c_sb(self, rs1, rs2, imm);
30719    }
30720    /// Store double
30721    ///
30722    /// Stores a 64-bit value in register rs2 to memory.
30723    /// It computes an effective address by adding the zero-extended offset, scaled by 8,
30724    /// to the base address in register rs1.
30725    /// It expands to `sd` `rs2, offset(rs1)`.
30726    ///
30727    /// # Forms
30728    /// Assembly: `c.sd xs2, imm(xs1)`
30729    /// Rust: `c_sd(rs1, rs2, imm)`
30730    ///
30731    /// # Arguments
30732    /// - `rs1` — Memory base register.
30733    /// - `rs2` — Source register.
30734    /// - `imm` — Immediate encoding value.
30735    pub fn c_sd<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)
30736    where
30737        Self: CSdEmitter<T0, T1, T2>,
30738    {
30739        <Self as CSdEmitter<T0, T1, T2>>::c_sd(self, rs1, rs2, imm);
30740    }
30741    /// Store doubleword to stack
30742    ///
30743    /// Stores a 64-bit value in register rs2 to memory.
30744    /// It computes an effective address by adding the zero-extended offset, scaled by 8,
30745    /// to the stack pointer, x2.
30746    /// It expands to `sd` `rs2, offset(x2)`.
30747    ///
30748    /// # Forms
30749    /// Assembly: `c.sdsp xs2, imm(sp)`
30750    /// Rust: `c_sdsp(rs2, imm)`
30751    ///
30752    /// # Arguments
30753    /// - `rs2` — Instruction operand.
30754    /// - `imm` — Immediate encoding value.
30755    pub fn c_sdsp<T0, T1>(&mut self, rs2: T0, imm: T1)
30756    where
30757        Self: CSdspEmitter<T0, T1>,
30758    {
30759        <Self as CSdspEmitter<T0, T1>>::c_sdsp(self, rs2, imm);
30760    }
30761    /// Sign-extend byte, 16-bit encoding
30762    ///
30763    /// This instruction takes a single source/destination operand.
30764    /// This instruction sign-extends the least-significant byte of the source to XLEN by copying
30765    /// the most-significant bit in the byte (i.e., bit 7) to all of the more-significant bits.
30766    ///
30767    /// # Forms
30768    /// Assembly: `c.sext.b xd`
30769    /// Rust: `c_sext_b(rd)`
30770    ///
30771    /// # Arguments
30772    /// - `rd` — Destination/source register.
30773    pub fn c_sext_b<T0>(&mut self, rd: T0)
30774    where
30775        Self: CSextBEmitter<T0>,
30776    {
30777        <Self as CSextBEmitter<T0>>::c_sext_b(self, rd);
30778    }
30779    /// Sign-extend halfword, 16-bit encoding
30780    ///
30781    /// This instruction takes a single source/destination operand.
30782    /// This instruction sign-extends the least-significant halfword of the source to XLEN by copying
30783    /// the most-significant bit in the halfword (i.e., bit 15) to all of the more-significant bits.
30784    ///
30785    /// # Forms
30786    /// Assembly: `c.sext.h xd`
30787    /// Rust: `c_sext_h(rd)`
30788    ///
30789    /// # Arguments
30790    /// - `rd` — Destination/source register.
30791    pub fn c_sext_h<T0>(&mut self, rd: T0)
30792    where
30793        Self: CSextHEmitter<T0>,
30794    {
30795        <Self as CSextHEmitter<T0>>::c_sext_h(self, rd);
30796    }
30797    /// Store unsigned halfword, 16-bit encoding
30798    ///
30799    /// Stores a 16-bit value from register rs2 into memory.
30800    /// It computes an effective address by adding the zero-extended offset, to the base address in register rs1.
30801    /// It expands to `sh` `rs2, offset(rs1)`.
30802    ///
30803    /// # Forms
30804    /// Assembly: `c.sh xs2, imm(xs1)`
30805    /// Rust: `c_sh(rs1, rs2, imm)`
30806    ///
30807    /// # Arguments
30808    /// - `rs1` — Source register.
30809    /// - `rs2` — Source register.
30810    /// - `imm` — Immediate encoding value.
30811    pub fn c_sh<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)
30812    where
30813        Self: CShEmitter<T0, T1, T2>,
30814    {
30815        <Self as CShEmitter<T0, T1, T2>>::c_sh(self, rs1, rs2, imm);
30816    }
30817    /// Shift left logical immediate
30818    ///
30819    /// Shift the value in rd left by shamt, and store the result back in rd.
30820    /// C.SLLI expands into `slli rd, rd, shamt`.
30821    ///
30822    /// # Forms
30823    /// Assembly: `c.slli xd, shamt`
30824    /// Rust: `c_slli(rd, imm)`
30825    ///
30826    /// # Arguments
30827    /// - `rd` — Destination/source register.
30828    /// - `imm` — Immediate encoding value.
30829    pub fn c_slli<T0, T1>(&mut self, rd: T0, imm: T1)
30830    where
30831        Self: CSlliEmitter<T0, T1>,
30832    {
30833        <Self as CSlliEmitter<T0, T1>>::c_slli(self, rd, imm);
30834    }
30835    /// Shift left logical immediate
30836    ///
30837    /// Shift the value in rd left by shamt, and store the result back in rd.
30838    /// C.SLLI expands into `slli rd, rd, shamt`.
30839    ///
30840    /// # Forms
30841    /// Assembly: `c.slli.rv32 xd, shamt`
30842    /// Rust: `c_slli_rv32(rd, imm)`
30843    ///
30844    /// # Arguments
30845    /// - `rd` — Destination/source register.
30846    /// - `imm` — Immediate encoding value.
30847    pub fn c_slli_rv32<T0, T1>(&mut self, rd: T0, imm: T1)
30848    where
30849        Self: CSlliRv32Emitter<T0, T1>,
30850    {
30851        <Self as CSlliRv32Emitter<T0, T1>>::c_slli_rv32(self, rd, imm);
30852    }
30853    /// Shift right arithmetical immediate
30854    ///
30855    /// Arithmetic shift (the original sign bit is copied into the vacated upper bits) the value in rd right by shamt, and store the result in rd.
30856    /// The rd register index should be used as rd+8 (registers x8-x15).
30857    /// C.SRAI expands into `srai rd, rd, shamt`.
30858    ///
30859    /// # Forms
30860    /// Assembly: `c.srai xd, shamt`
30861    /// Rust: `c_srai(rd, imm)`
30862    ///
30863    /// # Arguments
30864    /// - `rd` — Destination/source register.
30865    /// - `imm` — Immediate encoding value.
30866    pub fn c_srai<T0, T1>(&mut self, rd: T0, imm: T1)
30867    where
30868        Self: CSraiEmitter<T0, T1>,
30869    {
30870        <Self as CSraiEmitter<T0, T1>>::c_srai(self, rd, imm);
30871    }
30872    /// Shift right arithmetical immediate
30873    ///
30874    /// Arithmetic shift (the original sign bit is copied into the vacated upper bits) the value in rd right by shamt, and store the result in rd.
30875    /// The rd register index should be used as rd+8 (registers x8-x15).
30876    /// C.SRAI expands into `srai rd, rd, shamt`.
30877    ///
30878    /// # Forms
30879    /// Assembly: `c.srai.rv32 xd, shamt`
30880    /// Rust: `c_srai_rv32(rd, imm)`
30881    ///
30882    /// # Arguments
30883    /// - `rd` — Destination/source register.
30884    /// - `imm` — Immediate encoding value.
30885    pub fn c_srai_rv32<T0, T1>(&mut self, rd: T0, imm: T1)
30886    where
30887        Self: CSraiRv32Emitter<T0, T1>,
30888    {
30889        <Self as CSraiRv32Emitter<T0, T1>>::c_srai_rv32(self, rd, imm);
30890    }
30891    /// Shift right logical immediate
30892    ///
30893    /// Shift the value in rd right by shamt, and store the result back in rd.
30894    /// The rd register index should be used as rd+8 (registers x8-x15).
30895    /// C.SRLI expands into `srli rd, rd, shamt`.
30896    ///
30897    /// # Forms
30898    /// Assembly: `c.srli xd, shamt`
30899    /// Rust: `c_srli(rd, imm)`
30900    ///
30901    /// # Arguments
30902    /// - `rd` — Destination/source register.
30903    /// - `imm` — Immediate encoding value.
30904    pub fn c_srli<T0, T1>(&mut self, rd: T0, imm: T1)
30905    where
30906        Self: CSrliEmitter<T0, T1>,
30907    {
30908        <Self as CSrliEmitter<T0, T1>>::c_srli(self, rd, imm);
30909    }
30910    /// Shift right logical immediate
30911    ///
30912    /// Shift the value in rd right by shamt, and store the result back in rd.
30913    /// The rd register index should be used as rd+8 (registers x8-x15).
30914    /// C.SRLI expands into `srli rd, rd, shamt`.
30915    ///
30916    /// # Forms
30917    /// Assembly: `c.srli.rv32 xd, shamt`
30918    /// Rust: `c_srli_rv32(rd, imm)`
30919    ///
30920    /// # Arguments
30921    /// - `rd` — Destination/source register.
30922    /// - `imm` — Immediate encoding value.
30923    pub fn c_srli_rv32<T0, T1>(&mut self, rd: T0, imm: T1)
30924    where
30925        Self: CSrliRv32Emitter<T0, T1>,
30926    {
30927        <Self as CSrliRv32Emitter<T0, T1>>::c_srli_rv32(self, rd, imm);
30928    }
30929    /// RISC-V `c.sspopchk.x5` instruction.
30930    ///
30931    /// # Forms
30932    /// Assembly: `c.sspopchk.x5`
30933    /// Rust: `c_sspopchk_x5()`
30934    ///
30935    /// # Arguments
30936    pub fn c_sspopchk_x5(&mut self)
30937    where
30938        Self: CSspopchkX5Emitter,
30939    {
30940        <Self as CSspopchkX5Emitter>::c_sspopchk_x5(self);
30941    }
30942    /// RISC-V `c.sspush.x1` instruction.
30943    ///
30944    /// # Forms
30945    /// Assembly: `c.sspush.x1`
30946    /// Rust: `c_sspush_x1()`
30947    ///
30948    /// # Arguments
30949    pub fn c_sspush_x1(&mut self)
30950    where
30951        Self: CSspushX1Emitter,
30952    {
30953        <Self as CSspushX1Emitter>::c_sspush_x1(self);
30954    }
30955    /// Subtract
30956    ///
30957    /// Subtract the value in rs2 from rd, and store the result in rd.
30958    /// The rd and rs2 register indexes should be used as rd+8 and rs2+8 (registers x8-x15).
30959    /// C.SUB expands into `sub rd, rd, rs2`.
30960    ///
30961    /// # Forms
30962    /// Assembly: `c.sub xd, rs2`
30963    /// Rust: `c_sub(rd, rs2)`
30964    ///
30965    /// # Arguments
30966    /// - `rd` — Destination/source register.
30967    /// - `rs2` — Source register.
30968    pub fn c_sub<T0, T1>(&mut self, rd: T0, rs2: T1)
30969    where
30970        Self: CSubEmitter<T0, T1>,
30971    {
30972        <Self as CSubEmitter<T0, T1>>::c_sub(self, rd, rs2);
30973    }
30974    /// Subtract word
30975    ///
30976    /// Subtract the 32-bit values in rs2 from rd, and store the result in rd.
30977    /// The rd and rs2 register indexes should be used as rd+8 and rs2+8 (registers x8-x15).
30978    /// C.SUBW expands into `subw rd, rd, rs2`.
30979    ///
30980    /// # Forms
30981    /// Assembly: `c.subw xd, rs2`
30982    /// Rust: `c_subw(rd, rs2)`
30983    ///
30984    /// # Arguments
30985    /// - `rd` — Destination/source register.
30986    /// - `rs2` — Source register.
30987    pub fn c_subw<T0, T1>(&mut self, rd: T0, rs2: T1)
30988    where
30989        Self: CSubwEmitter<T0, T1>,
30990    {
30991        <Self as CSubwEmitter<T0, T1>>::c_subw(self, rd, rs2);
30992    }
30993    /// Store word
30994    ///
30995    /// Stores a 32-bit value in register rs2 to memory.
30996    /// It computes an effective address by adding the zero-extended offset, scaled by 4,
30997    /// to the base address in register rs1.
30998    /// It expands to `sw` `rs2, offset(rs1)`.
30999    ///
31000    /// # Forms
31001    /// Assembly: `c.sw xs2, imm(xs1)`
31002    /// Rust: `c_sw(rs1, rs2, imm)`
31003    ///
31004    /// # Arguments
31005    /// - `rs1` — Memory base register.
31006    /// - `rs2` — Source register.
31007    /// - `imm` — Immediate encoding value.
31008    pub fn c_sw<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)
31009    where
31010        Self: CSwEmitter<T0, T1, T2>,
31011    {
31012        <Self as CSwEmitter<T0, T1, T2>>::c_sw(self, rs1, rs2, imm);
31013    }
31014    /// Store word to stack
31015    ///
31016    /// Stores a 32-bit value in register rs2 to memory.
31017    /// It computes an effective address by adding the zero-extended offset, scaled by 4,
31018    /// to the stack pointer, x2.
31019    /// It expands to `sw` `rs2, offset(x2)`.
31020    ///
31021    /// # Forms
31022    /// Assembly: `c.swsp xs2, imm(sp)`
31023    /// Rust: `c_swsp(rs2, imm)`
31024    ///
31025    /// # Arguments
31026    /// - `rs2` — Instruction operand.
31027    /// - `imm` — Immediate encoding value.
31028    pub fn c_swsp<T0, T1>(&mut self, rs2: T0, imm: T1)
31029    where
31030        Self: CSwspEmitter<T0, T1>,
31031    {
31032        <Self as CSwspEmitter<T0, T1>>::c_swsp(self, rs2, imm);
31033    }
31034    /// Exclusive Or
31035    ///
31036    /// Exclusive or rd with rs2, and store the result in rd
31037    /// The rd and rs2 register indexes should be used as rd+8 and rs2+8 (registers x8-x15).
31038    /// C.XOR expands into `xor rd, rd, rs2`.
31039    ///
31040    /// # Forms
31041    /// Assembly: `c.xor xd, rs2`
31042    /// Rust: `c_xor(rd, rs2)`
31043    ///
31044    /// # Arguments
31045    /// - `rd` — Destination/source register.
31046    /// - `rs2` — Source register.
31047    pub fn c_xor<T0, T1>(&mut self, rd: T0, rs2: T1)
31048    where
31049        Self: CXorEmitter<T0, T1>,
31050    {
31051        <Self as CXorEmitter<T0, T1>>::c_xor(self, rd, rs2);
31052    }
31053    /// Zero-extend byte, 16-bit encoding
31054    ///
31055    /// This instruction takes a single source/destination operand.
31056    /// This instruction zero-extends the least-significant byte of the source to XLEN by inserting
31057    /// 0's into all of the bits more significant than 7.
31058    ///
31059    /// # Forms
31060    /// Assembly: `c.zext.b xd`
31061    /// Rust: `c_zext_b(rd)`
31062    ///
31063    /// # Arguments
31064    /// - `rd` — Destination/source register.
31065    pub fn c_zext_b<T0>(&mut self, rd: T0)
31066    where
31067        Self: CZextBEmitter<T0>,
31068    {
31069        <Self as CZextBEmitter<T0>>::c_zext_b(self, rd);
31070    }
31071    /// Zero-extend halfword, 16-bit encoding
31072    ///
31073    /// This instruction takes a single source/destination operand.
31074    /// This instruction zero-extends the least-significant halfword of the source to XLEN by inserting
31075    /// 0's into all of the bits more significant than 15.
31076    ///
31077    /// # Forms
31078    /// Assembly: `c.zext.h xd`
31079    /// Rust: `c_zext_h(rd)`
31080    ///
31081    /// # Arguments
31082    /// - `rd` — Destination/source register.
31083    pub fn c_zext_h<T0>(&mut self, rd: T0)
31084    where
31085        Self: CZextHEmitter<T0>,
31086    {
31087        <Self as CZextHEmitter<T0>>::c_zext_h(self, rd);
31088    }
31089    /// Zero-extend word, 16-bit encoding
31090    ///
31091    /// This instruction takes a single source/destination operand.
31092    /// It zero-extends the least-significant word of the operand to XLEN bits by inserting zeros into all of the bits more significant than 31.
31093    ///
31094    /// # Forms
31095    /// Assembly: `c.zext.w xd`
31096    /// Rust: `c_zext_w(rd)`
31097    ///
31098    /// # Arguments
31099    /// - `rd` — Destination/source register.
31100    pub fn c_zext_w<T0>(&mut self, rd: T0)
31101    where
31102        Self: CZextWEmitter<T0>,
31103    {
31104        <Self as CZextWEmitter<T0>>::c_zext_w(self, rd);
31105    }
31106    /// Cache Block Clean
31107    ///
31108    /// Cleans an entire cache block globally throughout the system.
31109    ///
31110    /// Exactly what happens is coherence protocol-dependent, but in general it is expected that after this
31111    /// operation():
31112    ///
31113    ///   * The cache block will be in the clean (not dirty) state in any coherent cache holding a valid copy of the line.
31114    ///   * The data will be cleaned to a point such that an incoherent load can observe the cleaned data.
31115    ///
31116    /// `cbo.clean` is ordered by `FENCE` instructions but not `FENCE.I` or `SFENCE.VMA`.
31117    ///
31118    /// &lt;%- if CACHE_BLOCK_SIZE.bit_length &gt; \[PMP_GRANULARITY, PMA_GRANULARITY\].min -%&gt;
31119    /// Both PMP and PMA access control must be the same for all bytes in the block; otherwise, `cbo.clean` has UNSPECIFIED behavior.
31120    /// &lt;%- end -%&gt;
31121    ///
31122    /// Clean operations are treated as stores for page and access permissions. If permission checks fail,
31123    /// one of the following exceptions will occur:
31124    ///
31125    ///   &lt;%- if ext?(:H) -%&gt;
31126    ///   * `Store/AMO Guest-Page Fault` if virtual memory translation fails during G-stage translation.
31127    ///   &lt;%- end -%&gt;
31128    ///   * `Store/AMO Page Fault` if virtual memory translation fails &lt;% if ext?(:H) %&gt;when V=0 or during VS-stage translation&lt;% end %&gt;
31129    ///   * `Store/AMO Access Fault` if a PMP or PMA access check fails
31130    ///
31131    /// &lt;%- if CACHE_BLOCK_SIZE.bit_length &lt;= \[PMP_GRANULARITY, PMA_GRANULARITY\].min -%&gt;
31132    /// Because cache blocks are naturally aligned and always fit in a single PMP or PMA regions, the PMP
31133    /// and PMA access checks only need to check a single address in the line.
31134    /// &lt;%- end -%&gt;
31135    ///
31136    /// CBO operations never raise a misaligned address fault.
31137    ///
31138    /// # Forms
31139    /// Assembly: `cbo.clean "TODO"`
31140    /// Rust: `cbo_clean(rs1)`
31141    ///
31142    /// # Arguments
31143    /// - `rs1` — Source register.
31144    pub fn cbo_clean<T0>(&mut self, rs1: T0)
31145    where
31146        Self: CboCleanEmitter<T0>,
31147    {
31148        <Self as CboCleanEmitter<T0>>::cbo_clean(self, rs1);
31149    }
31150    /// Cache Block Flush
31151    ///
31152    /// Flushes an entire cache block by cleaning it and then invalidating it in all caches.
31153    ///
31154    /// `cbo.flush` is ordered by `FENCE` instructions but not `FENCE.I` or `SFENCE.VMA`.
31155    ///
31156    /// &lt;%- if CACHE_BLOCK_SIZE.bit_length &gt; \[PMP_GRANULARITY, PMA_GRANULARITY\].min -%&gt;
31157    /// Both PMP and PMA access control must be the same for all bytes in the block; otherwise, `cbo.flush` has UNSPECIFIED behavior.
31158    /// &lt;%- end -%&gt;
31159    ///
31160    /// Flush operations are treated as stores for page and access permissions. If permission checks fail,
31161    /// one of the following exceptions will occur:
31162    ///
31163    ///   &lt;%- if ext?(:H) -%&gt;
31164    ///   * `Store/AMO Guest-Page Fault` if virtual memory translation fails during G-stage translation.
31165    ///   &lt;%- end -%&gt;
31166    ///   * `Store/AMO Page Fault` if virtual memory translation fails &lt;% if ext?(:H) %&gt;when V=0 or during VS-stage translation&lt;% end %&gt;
31167    ///   * `Store/AMO Access Fault` if a PMP or PMA access check fails.
31168    ///
31169    /// &lt;%- if CACHE_BLOCK_SIZE.bit_length &lt;= \[PMP_GRANULARITY, PMA_GRANULARITY\].min -%&gt;
31170    /// Because cache blocks are naturally aligned and always fit in a single PMP or PMA regions, the PMP
31171    /// and PMA access checks only need to check a single address in the line.
31172    /// &lt;%- end -%&gt;
31173    ///
31174    /// CBO operations never raise a misaligned address fault.
31175    ///
31176    /// # Forms
31177    /// Assembly: `cbo.flush "TODO"`
31178    /// Rust: `cbo_flush(rs1)`
31179    ///
31180    /// # Arguments
31181    /// - `rs1` — Source register.
31182    pub fn cbo_flush<T0>(&mut self, rs1: T0)
31183    where
31184        Self: CboFlushEmitter<T0>,
31185    {
31186        <Self as CboFlushEmitter<T0>>::cbo_flush(self, rs1);
31187    }
31188    /// Cache Block Invalidate
31189    ///
31190    /// Either invalidates or flushes (clean + invalidate) a cache block, depending on the current mode and value of
31191    /// `menvcfg.CBIE`, `senvcfg.CBIE`, and/or `henvcfg.CBIE`.
31192    ///
31193    /// The instruction is an invalidate (without a clean) when:
31194    ///
31195    ///   * In M-mode
31196    ///   * In (H)S-mode and `menvcfg.CBIE` == 11
31197    ///   * In U-mode and `menvcfg.CBIE` == 11 and `senvcfg.CBIE` == 11
31198    ///   * In VS-mode and `menvcfg.CBIE` == 11 and `henvcfg.CBIE` == 11
31199    ///   * In VU-mode and `menvcfg.CBIE` == 11 and `henvcfg.CBIE` == 11 and `senvcfg.CBIE` == 11
31200    ///
31201    /// Otherwise, if the instruction does not trap (see Access section), the operation is a flush.
31202    /// The table below summarizes the options.
31203    ///
31204    /// \[%autowidth,cols="1,1,1,1,1,1,1,1",separator="!"\]
31205    /// !===
31206    /// .2+h!\[.rotate\]#`menvcfg.CBIE`# .2+h! \[.rotate\]#`senvcfg.CBIE`# .2+h! \[.rotate\]#`henvcfg.CBIE`#
31207    /// 5+^.&gt;h! `cbe.inval` Operation
31208    /// .^h! M-mode .^h! S-mode .^h! U-mode .^h! VS-mode .^h! VU-mode
31209    ///
31210    /// ! 00 ! - ! - ! Invalidate ! `Illegal Instruction` ! `Illegal Instruction` ! `Virtual Instruction` ! `Virtual Instruction`
31211    /// ! 01 ! 00 ! 00 ! Invalidate ! Flush  ! `Illegal Instruction` ! `Virtual Instruction` ! `Virtual Instruction`
31212    /// ! 01 ! 00 ! 01 ! Invalidate ! Flush  ! `Illegal Instruction` ! Flush ! `Virtual Instruction`
31213    /// ! 01 ! 00 ! 11 ! Invalidate ! Flush  ! `Illegal Instruction` ! Flush ! `Virtual Instruction`
31214    /// ! 01 ! 01 ! 00 ! Invalidate ! Flush  ! Flush ! `Virtual Instruction` ! `Virtual Instruction`
31215    /// ! 01 ! 01 ! 01 ! Invalidate ! Flush  ! Flush ! Flush ! Flush
31216    /// ! 01 ! 01 ! 11 ! Invalidate ! Flush  ! Flush ! Flush ! Flush
31217    /// ! 01 ! 11 ! 00 ! Invalidate ! Flush  ! Flush ! `Virtual Instruction` ! `Virtual Instruction`
31218    /// ! 01 ! 11 ! 01 ! Invalidate ! Flush  ! Flush ! Flush ! Flush
31219    /// ! 01 ! 11 ! 11 ! Invalidate ! Flush  ! Flush ! Flush ! Flush
31220    /// ! 11 ! 00 ! 00  ! Invalidate ! Invalidate  ! `Illegal Instruction` ! `Virtual Instruction` ! `Virtual Instruction`
31221    /// ! 11 ! 00 ! 01  ! Invalidate ! Invalidate  ! `Illegal Instruction` ! Flush ! `Virtual Instruction`
31222    /// ! 11 ! 00 ! 11  ! Invalidate ! Invalidate  ! `Illegal Instruction` ! Invalidate ! `Virtual Instruction`
31223    /// ! 11 ! 01 ! 00 ! Invalidate ! Invalidate  ! Flush ! `Virtual Instruction` ! `Virtual Instruction`
31224    /// ! 11 ! 01 ! 01 ! Invalidate ! Invalidate  ! Flush ! Flush ! Flush
31225    /// ! 11 ! 01 ! 11 ! Invalidate ! Invalidate  ! Flush ! Invalidate ! Flush
31226    /// ! 11 ! 11 ! 00 ! Invalidate ! Invalidate  ! Invalidate ! `Virtual Instruction` ! `Virtual Instruction`
31227    /// ! 11 ! 11 ! 01 ! Invalidate ! Invalidate  ! Invalidate ! Flush ! Flush
31228    /// ! 11 ! 11 ! 11 ! Invalidate ! Invalidate  ! Invalidate ! Invalidate ! Invalidate
31229    /// !===
31230    ///
31231    /// `cbo.inval` is ordered by `FENCE` instructions but not `FENCE.I` or `SFENCE.VMA`.
31232    ///
31233    /// &lt;%- if CACHE_BLOCK_SIZE.bit_length &gt; \[PMP_GRANULARITY, PMA_GRANULARITY\].min -%&gt;
31234    /// Both PMP and PMA access control must be the same for all bytes in the block; otherwise, `cbo.zero` has UNSPECIFIED behavior.
31235    /// &lt;%- end -%&gt;
31236    ///
31237    /// Invalidate operations are treated as stores for page and access permissions. If permission checks fail,
31238    /// one of the following exceptions will occur:
31239    ///
31240    ///   &lt;%- if ext?(:H) -%&gt;
31241    ///   * `Store/AMO Guest-Page Fault` if virtual memory translation fails during G-stage translation.
31242    ///   &lt;%- end -%&gt;
31243    ///   * `Store/AMO Page Fault` if virtual memory translation fails &lt;% if ext?(:H) %&gt;when V=0 or during VS-stage translation&lt;% end %&gt;
31244    ///   * `Store/AMO Access Fault` if a PMP or PMA access check fails.
31245    ///
31246    /// &lt;%- if CACHE_BLOCK_SIZE.bit_length &lt;= \[PMP_GRANULARITY, PMA_GRANULARITY\].min -%&gt;
31247    /// Because cache blocks are naturally aligned and always fit in a single PMP or PMA regions, the PMP
31248    /// and PMA access checks only need to check a single address in the line.
31249    /// &lt;%- end -%&gt;
31250    ///
31251    /// CBO operations never raise a misaligned address fault.
31252    ///
31253    /// # Forms
31254    /// Assembly: `cbo.inval "TODO"`
31255    /// Rust: `cbo_inval(rs1)`
31256    ///
31257    /// # Arguments
31258    /// - `rs1` — Source register.
31259    pub fn cbo_inval<T0>(&mut self, rs1: T0)
31260    where
31261        Self: CboInvalEmitter<T0>,
31262    {
31263        <Self as CboInvalEmitter<T0>>::cbo_inval(self, rs1);
31264    }
31265    /// Cache Block Zero
31266    ///
31267    /// Zeros an entire cache block
31268    ///
31269    /// The block zeroing does not need to be atomic.
31270    ///
31271    /// `cbo.zero` is ordered by `FENCE` instructions but not `FENCE.I` or `SFENCE.VMA`.
31272    ///
31273    /// &lt;%- if CACHE_BLOCK_SIZE.bit_length &gt; \[PMP_GRANULARITY, PMA_GRANULARITY\].min -%&gt;
31274    /// Both PMP and PMA access control must be the same for all bytes in the block; otherwise, `cbo.zero` has UNSPECIFIED behavior.
31275    /// &lt;%- end -%&gt;
31276    ///
31277    /// Clean operations are treated as stores for page and access permissions. If permission checks fail,
31278    /// one of the following exceptions will occur:
31279    ///
31280    ///   &lt;%- if ext?(:H) -%&gt;
31281    ///   * `Store/AMO Guest-Page Fault` if virtual memory translation fails during G-stage translation.
31282    ///   &lt;%- end -%&gt;
31283    ///   * `Store/AMO Page Fault` if virtual memory translation fails &lt;% if ext?(:H) %&gt;when V=0 or during VS-stage translation&lt;% end %&gt;
31284    ///   * `Store/AMO Access Fault` if a PMP or PMA access check fails.
31285    ///
31286    /// &lt;%- if CACHE_BLOCK_SIZE.bit_length &lt;= \[PMP_GRANULARITY, PMA_GRANULARITY\].min -%&gt;
31287    /// Because cache blocks are naturally aligned and always fit in a single PMP or PMA regions, the PMP
31288    /// and PMA access checks only need to check a single address in the line.
31289    /// &lt;%- end -%&gt;
31290    ///
31291    /// CBO operations never raise a misaligned address fault.
31292    ///
31293    /// # Forms
31294    /// Assembly: `cbo.zero "TODO"`
31295    /// Rust: `cbo_zero(rs1)`
31296    ///
31297    /// # Arguments
31298    /// - `rs1` — Source register.
31299    pub fn cbo_zero<T0>(&mut self, rs1: T0)
31300    where
31301        Self: CboZeroEmitter<T0>,
31302    {
31303        <Self as CboZeroEmitter<T0>>::cbo_zero(self, rs1);
31304    }
31305    /// Carry-less multiply (low-part)
31306    ///
31307    /// `clmul` produces the lower half of the 2*XLEN carry-less product
31308    ///
31309    /// # Forms
31310    /// Assembly: `clmul xd, xs1, xs2`
31311    /// Rust: `clmul(rd, rs1, rs2)`
31312    ///
31313    /// # Arguments
31314    /// - `rd` — Destination register.
31315    /// - `rs1` — Source register.
31316    /// - `rs2` — Source register.
31317    pub fn clmul<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
31318    where
31319        Self: ClmulEmitter<T0, T1, T2>,
31320    {
31321        <Self as ClmulEmitter<T0, T1, T2>>::clmul(self, rd, rs1, rs2);
31322    }
31323    /// Carry-less multiply (high-part)
31324    ///
31325    /// `clmulh` produces the upper half of the 2*XLEN carry-less product
31326    ///
31327    /// # Forms
31328    /// Assembly: `clmulh xd, xs1, xs2`
31329    /// Rust: `clmulh(rd, rs1, rs2)`
31330    ///
31331    /// # Arguments
31332    /// - `rd` — Destination register.
31333    /// - `rs1` — Source register.
31334    /// - `rs2` — Source register.
31335    pub fn clmulh<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
31336    where
31337        Self: ClmulhEmitter<T0, T1, T2>,
31338    {
31339        <Self as ClmulhEmitter<T0, T1, T2>>::clmulh(self, rd, rs1, rs2);
31340    }
31341    /// Carry-less multiply (reversed)
31342    ///
31343    /// `clmulr` produces bits 2*XLEN-2:XLEN-1 of the 2*XLEN carry-less product
31344    ///
31345    /// # Forms
31346    /// Assembly: `clmulr xd, xs1, xs2`
31347    /// Rust: `clmulr(rd, rs1, rs2)`
31348    ///
31349    /// # Arguments
31350    /// - `rd` — Destination register.
31351    /// - `rs1` — Source register.
31352    /// - `rs2` — Source register.
31353    pub fn clmulr<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
31354    where
31355        Self: ClmulrEmitter<T0, T1, T2>,
31356    {
31357        <Self as ClmulrEmitter<T0, T1, T2>>::clmulr(self, rd, rs1, rs2);
31358    }
31359    /// Count leading zero bits
31360    ///
31361    /// This instruction counts the number of 0's before the first 1,
31362    /// starting at the most-significant bit (i.e., XLEN-1) and progressing to bit 0.
31363    /// Accordingly, if the input is 0, the output is XLEN, and if the most-significant
31364    /// bit of the input is a 1, the output is 0.
31365    ///
31366    /// # Forms
31367    /// Assembly: `clz xd, xs1`
31368    /// Rust: `clz(rd, rs1)`
31369    ///
31370    /// # Arguments
31371    /// - `rd` — Destination register.
31372    /// - `rs1` — Source register.
31373    pub fn clz<T0, T1>(&mut self, rd: T0, rs1: T1)
31374    where
31375        Self: ClzEmitter<T0, T1>,
31376    {
31377        <Self as ClzEmitter<T0, T1>>::clz(self, rd, rs1);
31378    }
31379    /// Count leading zero bits in word
31380    ///
31381    /// This instruction counts the number of 0's before the first 1 starting at bit 31 and progressing to bit 0.
31382    /// Accordingly, if the least-significant word is 0, the output is 32, and if the most-significant
31383    /// bit of the word (_i.e._, bit 31) is a 1, the output is 0.
31384    ///
31385    /// # Forms
31386    /// Assembly: `clzw xd, xs1`
31387    /// Rust: `clzw(rd, rs1)`
31388    ///
31389    /// # Arguments
31390    /// - `rd` — Destination register.
31391    /// - `rs1` — Source register.
31392    pub fn clzw<T0, T1>(&mut self, rd: T0, rs1: T1)
31393    where
31394        Self: ClzwEmitter<T0, T1>,
31395    {
31396        <Self as ClzwEmitter<T0, T1>>::clzw(self, rd, rs1);
31397    }
31398    /// RISC-V `cm.jalt` instruction.
31399    ///
31400    /// # Forms
31401    /// Assembly: `cm.jalt c_index`
31402    /// Rust: `cm_jalt(index)`
31403    ///
31404    /// # Arguments
31405    /// - `index` — Instruction operand.
31406    pub fn cm_jalt<T0>(&mut self, index: T0)
31407    where
31408        Self: CmJaltEmitter<T0>,
31409    {
31410        <Self as CmJaltEmitter<T0>>::cm_jalt(self, index);
31411    }
31412    /// Count set bits
31413    ///
31414    /// This instructions counts the number of 1's (i.e., set bits) in the source register.
31415    ///
31416    /// .Software Hint
31417    /// \[NOTE\]
31418    /// ----
31419    /// This operations is known as population count, popcount, sideways sum,
31420    /// bit summation, or Hamming weight.
31421    ///
31422    /// The GCC builtin function `__builtin_popcount (unsigned int x)` is
31423    /// implemented by cpop on RV32 and by cpopw on RV64. The GCC builtin
31424    /// function `__builtin_popcountl (unsigned long x)` for LP64 is
31425    /// implemented by cpop on RV64.
31426    /// ----
31427    ///
31428    /// # Forms
31429    /// Assembly: `cpop xd, xs1`
31430    /// Rust: `cpop(rd, rs1)`
31431    ///
31432    /// # Arguments
31433    /// - `rd` — Destination register.
31434    /// - `rs1` — Source register.
31435    pub fn cpop<T0, T1>(&mut self, rd: T0, rs1: T1)
31436    where
31437        Self: CpopEmitter<T0, T1>,
31438    {
31439        <Self as CpopEmitter<T0, T1>>::cpop(self, rd, rs1);
31440    }
31441    /// Count set bits in word
31442    ///
31443    /// This instructions counts the number of 1's (i.e., set bits) in the least-significant word of the source register.
31444    ///
31445    /// .Software Hint
31446    /// \[NOTE\]
31447    /// ----
31448    /// This operations is known as population count, popcount, sideways sum,
31449    /// bit summation, or Hamming weight.
31450    ///
31451    /// The GCC builtin function `__builtin_popcount (unsigned int x)` is
31452    /// implemented by cpop on RV32 and by cpopw on RV64. The GCC builtin
31453    /// function `__builtin_popcountl (unsigned long x)` for LP64 is
31454    /// implemented by cpop on RV64.
31455    /// ----
31456    ///
31457    /// # Forms
31458    /// Assembly: `cpopw xd, xs1`
31459    /// Rust: `cpopw(rd, rs1)`
31460    ///
31461    /// # Arguments
31462    /// - `rd` — Destination register.
31463    /// - `rs1` — Source register.
31464    pub fn cpopw<T0, T1>(&mut self, rd: T0, rs1: T1)
31465    where
31466        Self: CpopwEmitter<T0, T1>,
31467    {
31468        <Self as CpopwEmitter<T0, T1>>::cpopw(self, rd, rs1);
31469    }
31470    /// RISC-V `csrc` instruction.
31471    ///
31472    /// # Forms
31473    /// Assembly: `csrc rs1 csr`
31474    /// Rust: `csrc(rs1, csr)`
31475    ///
31476    /// # Arguments
31477    /// - `rs1` — Source register.
31478    /// - `csr` — Control and status register number.
31479    pub fn csrc<T0, T1>(&mut self, rs1: T0, csr: T1)
31480    where
31481        Self: CsrcEmitter<T0, T1>,
31482    {
31483        <Self as CsrcEmitter<T0, T1>>::csrc(self, rs1, csr);
31484    }
31485    /// RISC-V `csrci` instruction.
31486    ///
31487    /// # Forms
31488    /// Assembly: `csrci csr zimm5`
31489    /// Rust: `csrci(csr, zimm5)`
31490    ///
31491    /// # Arguments
31492    /// - `csr` — Control and status register number.
31493    /// - `zimm5` — Immediate encoding value.
31494    pub fn csrci<T0, T1>(&mut self, csr: T0, zimm5: T1)
31495    where
31496        Self: CsrciEmitter<T0, T1>,
31497    {
31498        <Self as CsrciEmitter<T0, T1>>::csrci(self, csr, zimm5);
31499    }
31500    /// RISC-V `csrr` instruction.
31501    ///
31502    /// # Forms
31503    /// Assembly: `csrr rd csr`
31504    /// Rust: `csrr(rd, csr)`
31505    ///
31506    /// # Arguments
31507    /// - `rd` — Destination register.
31508    /// - `csr` — Control and status register number.
31509    pub fn csrr<T0, T1>(&mut self, rd: T0, csr: T1)
31510    where
31511        Self: CsrrEmitter<T0, T1>,
31512    {
31513        <Self as CsrrEmitter<T0, T1>>::csrr(self, rd, csr);
31514    }
31515    /// RISC-V `csrrc` instruction.
31516    ///
31517    /// # Forms
31518    /// Assembly: `csrrc xd, xs1, csr`
31519    /// Rust: `csrrc(rd, rs1, csr)`
31520    ///
31521    /// # Arguments
31522    /// - `rd` — Destination register.
31523    /// - `rs1` — Source register.
31524    /// - `csr` — Control and status register number.
31525    pub fn csrrc<T0, T1, T2>(&mut self, rd: T0, rs1: T1, csr: T2)
31526    where
31527        Self: CsrrcEmitter<T0, T1, T2>,
31528    {
31529        <Self as CsrrcEmitter<T0, T1, T2>>::csrrc(self, rd, rs1, csr);
31530    }
31531    /// RISC-V `csrrci` instruction.
31532    ///
31533    /// # Forms
31534    /// Assembly: `csrrci xd, csr, imm`
31535    /// Rust: `csrrci(rd, csr, zimm5)`
31536    ///
31537    /// # Arguments
31538    /// - `rd` — Destination register.
31539    /// - `csr` — Control and status register number.
31540    /// - `zimm5` — Immediate encoding value.
31541    pub fn csrrci<T0, T1, T2>(&mut self, rd: T0, csr: T1, zimm5: T2)
31542    where
31543        Self: CsrrciEmitter<T0, T1, T2>,
31544    {
31545        <Self as CsrrciEmitter<T0, T1, T2>>::csrrci(self, rd, csr, zimm5);
31546    }
31547    /// Atomic Read and Set Bits in CSR
31548    ///
31549    /// Atomically read and set bits in a CSR.
31550    ///
31551    /// Reads the value of the CSR, zero-extends the value to `XLEN` bits,
31552    /// and writes it to integer register `rd`. The initial value in integer
31553    /// register `rs1` is treated as a bit mask that specifies bit positions
31554    /// to be set in the CSR. Any bit that is high in `rs1` will cause the
31555    /// corresponding bit to be set in the CSR, if that CSR bit is writable.
31556    /// Other bits in the CSR are not explicitly written.
31557    ///
31558    /// # Forms
31559    /// Assembly: `csrrs xd, xs1, csr`
31560    /// Rust: `csrrs(rd, rs1, csr)`
31561    ///
31562    /// # Arguments
31563    /// - `rd` — Destination register.
31564    /// - `rs1` — Source register.
31565    /// - `csr` — Control and status register number.
31566    pub fn csrrs<T0, T1, T2>(&mut self, rd: T0, rs1: T1, csr: T2)
31567    where
31568        Self: CsrrsEmitter<T0, T1, T2>,
31569    {
31570        <Self as CsrrsEmitter<T0, T1, T2>>::csrrs(self, rd, rs1, csr);
31571    }
31572    /// RISC-V `csrrsi` instruction.
31573    ///
31574    /// # Forms
31575    /// Assembly: `csrrsi xd, csr, imm`
31576    /// Rust: `csrrsi(rd, csr, zimm5)`
31577    ///
31578    /// # Arguments
31579    /// - `rd` — Destination register.
31580    /// - `csr` — Control and status register number.
31581    /// - `zimm5` — Immediate encoding value.
31582    pub fn csrrsi<T0, T1, T2>(&mut self, rd: T0, csr: T1, zimm5: T2)
31583    where
31584        Self: CsrrsiEmitter<T0, T1, T2>,
31585    {
31586        <Self as CsrrsiEmitter<T0, T1, T2>>::csrrsi(self, rd, csr, zimm5);
31587    }
31588    /// Atomic Read/Write CSR
31589    ///
31590    /// Atomically swap values in the CSRs and integer registers.
31591    ///
31592    /// Read the old value of the CSR, zero-extends the value to `XLEN` bits,
31593    /// and then write it to integer register rd.
31594    /// The initial value in rs1 is written to the CSR.
31595    /// If `rd=x0`, then the instruction shall not read the CSR and shall not
31596    /// cause any of the side effects that might occur on a CSR read.
31597    ///
31598    /// # Forms
31599    /// Assembly: `csrrw xd, xs1, csr`
31600    /// Rust: `csrrw(rd, rs1, csr)`
31601    ///
31602    /// # Arguments
31603    /// - `rd` — Destination register.
31604    /// - `rs1` — Source register.
31605    /// - `csr` — Control and status register number.
31606    pub fn csrrw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, csr: T2)
31607    where
31608        Self: CsrrwEmitter<T0, T1, T2>,
31609    {
31610        <Self as CsrrwEmitter<T0, T1, T2>>::csrrw(self, rd, rs1, csr);
31611    }
31612    /// Atomic Read/Write CSR Immediate
31613    ///
31614    /// Atomically write CSR using a 5-bit immediate, and load the previous value into 'rd'.
31615    ///
31616    /// Read the old value of the CSR, zero-extends the value to `XLEN` bits,
31617    /// and then write it to integer register rd.
31618    /// The 5-bit uimm field is zero-extended and written to the CSR.
31619    /// If `rd=x0`, then the instruction shall not read the CSR and shall not
31620    /// cause any of the side effects that might occur on a CSR read.
31621    ///
31622    /// # Forms
31623    /// Assembly: `csrrwi xd, zimm, csr`
31624    /// Rust: `csrrwi(rd, csr, zimm5)`
31625    ///
31626    /// # Arguments
31627    /// - `rd` — Destination register.
31628    /// - `csr` — Control and status register number.
31629    /// - `zimm5` — Immediate encoding value.
31630    pub fn csrrwi<T0, T1, T2>(&mut self, rd: T0, csr: T1, zimm5: T2)
31631    where
31632        Self: CsrrwiEmitter<T0, T1, T2>,
31633    {
31634        <Self as CsrrwiEmitter<T0, T1, T2>>::csrrwi(self, rd, csr, zimm5);
31635    }
31636    /// RISC-V `csrs` instruction.
31637    ///
31638    /// # Forms
31639    /// Assembly: `csrs rs1 csr`
31640    /// Rust: `csrs(rs1, csr)`
31641    ///
31642    /// # Arguments
31643    /// - `rs1` — Source register.
31644    /// - `csr` — Control and status register number.
31645    pub fn csrs<T0, T1>(&mut self, rs1: T0, csr: T1)
31646    where
31647        Self: CsrsEmitter<T0, T1>,
31648    {
31649        <Self as CsrsEmitter<T0, T1>>::csrs(self, rs1, csr);
31650    }
31651    /// RISC-V `csrsi` instruction.
31652    ///
31653    /// # Forms
31654    /// Assembly: `csrsi csr zimm5`
31655    /// Rust: `csrsi(csr, zimm5)`
31656    ///
31657    /// # Arguments
31658    /// - `csr` — Control and status register number.
31659    /// - `zimm5` — Immediate encoding value.
31660    pub fn csrsi<T0, T1>(&mut self, csr: T0, zimm5: T1)
31661    where
31662        Self: CsrsiEmitter<T0, T1>,
31663    {
31664        <Self as CsrsiEmitter<T0, T1>>::csrsi(self, csr, zimm5);
31665    }
31666    /// RISC-V `csrw` instruction.
31667    ///
31668    /// # Forms
31669    /// Assembly: `csrw rs1 csr`
31670    /// Rust: `csrw(rs1, csr)`
31671    ///
31672    /// # Arguments
31673    /// - `rs1` — Source register.
31674    /// - `csr` — Control and status register number.
31675    pub fn csrw<T0, T1>(&mut self, rs1: T0, csr: T1)
31676    where
31677        Self: CsrwEmitter<T0, T1>,
31678    {
31679        <Self as CsrwEmitter<T0, T1>>::csrw(self, rs1, csr);
31680    }
31681    /// RISC-V `csrwi` instruction.
31682    ///
31683    /// # Forms
31684    /// Assembly: `csrwi csr zimm5`
31685    /// Rust: `csrwi(csr, zimm5)`
31686    ///
31687    /// # Arguments
31688    /// - `csr` — Control and status register number.
31689    /// - `zimm5` — Immediate encoding value.
31690    pub fn csrwi<T0, T1>(&mut self, csr: T0, zimm5: T1)
31691    where
31692        Self: CsrwiEmitter<T0, T1>,
31693    {
31694        <Self as CsrwiEmitter<T0, T1>>::csrwi(self, csr, zimm5);
31695    }
31696    /// Count trailing zero bits
31697    ///
31698    /// This instruction counts the number of 0's before the first 1,
31699    /// starting at the least-significant bit (i.e., 0) and progressing
31700    /// to the most-significant bit (i.e., XLEN-1). Accordingly, if the
31701    /// input is 0, the output is XLEN, and if the least-significant bit
31702    /// of the input is a 1, the output is 0.
31703    ///
31704    /// # Forms
31705    /// Assembly: `ctz xd, xs1`
31706    /// Rust: `ctz(rd, rs1)`
31707    ///
31708    /// # Arguments
31709    /// - `rd` — Destination register.
31710    /// - `rs1` — Source register.
31711    pub fn ctz<T0, T1>(&mut self, rd: T0, rs1: T1)
31712    where
31713        Self: CtzEmitter<T0, T1>,
31714    {
31715        <Self as CtzEmitter<T0, T1>>::ctz(self, rd, rs1);
31716    }
31717    /// Count trailing zero bits in word
31718    ///
31719    /// This instruction counts the number of 0's before the first 1,
31720    /// starting at the least-significant bit (i.e., 0) and progressing
31721    /// to the most-significant bit of the least-significant word (i.e., 31). Accordingly, if the
31722    /// least-significant word is 0, the output is 32, and if the least-significant bit
31723    /// of the input is a 1, the output is 0.
31724    ///
31725    /// # Forms
31726    /// Assembly: `ctzw xd, xs1`
31727    /// Rust: `ctzw(rd, rs1)`
31728    ///
31729    /// # Arguments
31730    /// - `rd` — Destination register.
31731    /// - `rs1` — Source register.
31732    pub fn ctzw<T0, T1>(&mut self, rd: T0, rs1: T1)
31733    where
31734        Self: CtzwEmitter<T0, T1>,
31735    {
31736        <Self as CtzwEmitter<T0, T1>>::ctzw(self, rd, rs1);
31737    }
31738    /// RISC-V `czero.eqz` instruction.
31739    ///
31740    /// # Forms
31741    /// Assembly: `czero.eqz xd, xs1, xs2`
31742    /// Rust: `czero_eqz(rd, rs1, rs2)`
31743    ///
31744    /// # Arguments
31745    /// - `rd` — Destination register.
31746    /// - `rs1` — Source register.
31747    /// - `rs2` — Source register.
31748    pub fn czero_eqz<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
31749    where
31750        Self: CzeroEqzEmitter<T0, T1, T2>,
31751    {
31752        <Self as CzeroEqzEmitter<T0, T1, T2>>::czero_eqz(self, rd, rs1, rs2);
31753    }
31754    /// RISC-V `czero.nez` instruction.
31755    ///
31756    /// # Forms
31757    /// Assembly: `czero.nez xd, xs1, xs2`
31758    /// Rust: `czero_nez(rd, rs1, rs2)`
31759    ///
31760    /// # Arguments
31761    /// - `rd` — Destination register.
31762    /// - `rs1` — Source register.
31763    /// - `rs2` — Source register.
31764    pub fn czero_nez<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
31765    where
31766        Self: CzeroNezEmitter<T0, T1, T2>,
31767    {
31768        <Self as CzeroNezEmitter<T0, T1, T2>>::czero_nez(self, rd, rs1, rs2);
31769    }
31770    /// Signed division
31771    ///
31772    /// Divide rs1 by rs2, and store the result in rd. The remainder is discarded.
31773    ///
31774    /// Division by zero will put -1 into rd.
31775    ///
31776    /// Division resulting in signed overflow (when most negative number is divided by -1)
31777    /// will put the most negative number into rd;
31778    ///
31779    /// # Forms
31780    /// Assembly: `div xd, xs1, xs2`
31781    /// Rust: `div(rd, rs1, rs2)`
31782    ///
31783    /// # Arguments
31784    /// - `rd` — Destination register.
31785    /// - `rs1` — Source register.
31786    /// - `rs2` — Source register.
31787    pub fn div<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
31788    where
31789        Self: DivEmitter<T0, T1, T2>,
31790    {
31791        <Self as DivEmitter<T0, T1, T2>>::div(self, rd, rs1, rs2);
31792    }
31793    /// Unsigned division
31794    ///
31795    /// Divide unsigned values in rs1 by rs2, and store the result in rd.
31796    ///
31797    /// The remainder is discarded.
31798    ///
31799    /// If the value in rs2 is zero, rd gets the largest unsigned value.
31800    ///
31801    /// # Forms
31802    /// Assembly: `divu xd, xs1, xs2`
31803    /// Rust: `divu(rd, rs1, rs2)`
31804    ///
31805    /// # Arguments
31806    /// - `rd` — Destination register.
31807    /// - `rs1` — Source register.
31808    /// - `rs2` — Source register.
31809    pub fn divu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
31810    where
31811        Self: DivuEmitter<T0, T1, T2>,
31812    {
31813        <Self as DivuEmitter<T0, T1, T2>>::divu(self, rd, rs1, rs2);
31814    }
31815    /// Unsigned 32-bit division
31816    ///
31817    /// Divide the unsigned 32-bit values in rs1 and rs2, and store the sign-extended result in rd.
31818    ///
31819    /// The remainder is discarded.
31820    ///
31821    /// If the value in rs2 is zero, rd is written with all 1s.
31822    ///
31823    /// # Forms
31824    /// Assembly: `divuw xd, xs1, xs2`
31825    /// Rust: `divuw(rd, rs1, rs2)`
31826    ///
31827    /// # Arguments
31828    /// - `rd` — Destination register.
31829    /// - `rs1` — Source register.
31830    /// - `rs2` — Source register.
31831    pub fn divuw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
31832    where
31833        Self: DivuwEmitter<T0, T1, T2>,
31834    {
31835        <Self as DivuwEmitter<T0, T1, T2>>::divuw(self, rd, rs1, rs2);
31836    }
31837    /// Signed 32-bit division
31838    ///
31839    /// Divide the lower 32-bits of register rs1 by the lower 32-bits of register rs2,
31840    /// and store the sign-extended result in rd.
31841    ///
31842    /// The remainder is discarded.
31843    ///
31844    /// Division by zero will put -1 into rd.
31845    ///
31846    /// Division resulting in signed overflow (when most negative number is divided by -1)
31847    /// will put the most negative number into rd;
31848    ///
31849    /// # Forms
31850    /// Assembly: `divw xd, xs1, xs2`
31851    /// Rust: `divw(rd, rs1, rs2)`
31852    ///
31853    /// # Arguments
31854    /// - `rd` — Destination register.
31855    /// - `rs1` — Source register.
31856    /// - `rs2` — Source register.
31857    pub fn divw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
31858    where
31859        Self: DivwEmitter<T0, T1, T2>,
31860    {
31861        <Self as DivwEmitter<T0, T1, T2>>::divw(self, rd, rs1, rs2);
31862    }
31863    /// RISC-V `dret` instruction.
31864    ///
31865    /// # Forms
31866    /// Assembly: `dret dret`
31867    /// Rust: `dret()`
31868    ///
31869    /// # Arguments
31870    pub fn dret(&mut self)
31871    where
31872        Self: DretEmitter,
31873    {
31874        <Self as DretEmitter>::dret(self);
31875    }
31876    /// Breakpoint exception
31877    ///
31878    /// The EBREAK instruction is used by debuggers to cause control to be transferred back to
31879    /// a debugging environment. Unless overridden by an external debug environment,
31880    /// EBREAK raises a breakpoint exception and performs no other operation.
31881    ///
31882    /// \[NOTE\]
31883    /// As described in the `C` Standard Extension for Compressed Instructions, the `c.ebreak`
31884    /// instruction performs the same operation as the EBREAK instruction.
31885    ///
31886    /// EBREAK causes the receiving privilege mode's epc register to be set to the address of
31887    /// the EBREAK instruction itself, not the address of the following instruction.
31888    /// As EBREAK causes a synchronous exception, it is not considered to retire,
31889    /// and should not increment the `minstret` CSR.
31890    ///
31891    /// # Forms
31892    /// Assembly: `ebreak ""`
31893    /// Rust: `ebreak()`
31894    ///
31895    /// # Arguments
31896    pub fn ebreak(&mut self)
31897    where
31898        Self: EbreakEmitter,
31899    {
31900        <Self as EbreakEmitter>::ebreak(self);
31901    }
31902    /// Environment call
31903    ///
31904    /// The ECALL instruction is used to make a request to the supporting execution environment.
31905    /// When executed in U-mode, S-mode, or M-mode, it generates an environment-call-from-U-mode
31906    /// exception, environment-call-from-S-mode exception, or environment-call-from-M-mode
31907    /// exception, respectively, and performs no other operation.
31908    ///
31909    /// \[NOTE\]
31910    /// ECALL generates a different exception for each originating privilege mode so that
31911    /// environment call exceptions can be selectively delegated.
31912    /// A typical use case for Unix-like operating systems is to delegate to S-mode
31913    /// the environment-call-from-U-mode exception but not the others.
31914    ///
31915    /// ECALL causes the receiving privilege mode's epc register to be set to the address of
31916    /// the ECALL instruction itself, not the address of the following instruction.
31917    /// As ECALL causes a synchronous exception, it is not considered to retire,
31918    /// and should not increment the `minstret` CSR.
31919    ///
31920    /// # Forms
31921    /// Assembly: `ecall ""`
31922    /// Rust: `ecall()`
31923    ///
31924    /// # Arguments
31925    pub fn ecall(&mut self)
31926    where
31927        Self: EcallEmitter,
31928    {
31929        <Self as EcallEmitter>::ecall(self);
31930    }
31931    /// RISC-V `fabs.d` instruction.
31932    ///
31933    /// # Forms
31934    /// Assembly: `fabs.d rd rs1 rs2_eq_rs1`
31935    /// Rust: `fabs_d(rd, rs1, rs2)`
31936    ///
31937    /// # Arguments
31938    /// - `rd` — Destination register.
31939    /// - `rs1` — Source register.
31940    /// - `rs2` — Source register.
31941    pub fn fabs_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
31942    where
31943        Self: FabsDEmitter<T0, T1, T2>,
31944    {
31945        <Self as FabsDEmitter<T0, T1, T2>>::fabs_d(self, rd, rs1, rs2);
31946    }
31947    /// RISC-V `fabs.h` instruction.
31948    ///
31949    /// # Forms
31950    /// Assembly: `fabs.h rd rs1 rs2_eq_rs1`
31951    /// Rust: `fabs_h(rd, rs1, rs2)`
31952    ///
31953    /// # Arguments
31954    /// - `rd` — Destination register.
31955    /// - `rs1` — Source register.
31956    /// - `rs2` — Source register.
31957    pub fn fabs_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
31958    where
31959        Self: FabsHEmitter<T0, T1, T2>,
31960    {
31961        <Self as FabsHEmitter<T0, T1, T2>>::fabs_h(self, rd, rs1, rs2);
31962    }
31963    /// RISC-V `fabs.q` instruction.
31964    ///
31965    /// # Forms
31966    /// Assembly: `fabs.q rd rs1 rs2_eq_rs1`
31967    /// Rust: `fabs_q(rd, rs1, rs2)`
31968    ///
31969    /// # Arguments
31970    /// - `rd` — Destination register.
31971    /// - `rs1` — Source register.
31972    /// - `rs2` — Source register.
31973    pub fn fabs_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
31974    where
31975        Self: FabsQEmitter<T0, T1, T2>,
31976    {
31977        <Self as FabsQEmitter<T0, T1, T2>>::fabs_q(self, rd, rs1, rs2);
31978    }
31979    /// RISC-V `fabs.s` instruction.
31980    ///
31981    /// # Forms
31982    /// Assembly: `fabs.s rd rs1 rs2_eq_rs1`
31983    /// Rust: `fabs_s(rd, rs1, rs2)`
31984    ///
31985    /// # Arguments
31986    /// - `rd` — Destination register.
31987    /// - `rs1` — Source register.
31988    /// - `rs2` — Source register.
31989    pub fn fabs_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
31990    where
31991        Self: FabsSEmitter<T0, T1, T2>,
31992    {
31993        <Self as FabsSEmitter<T0, T1, T2>>::fabs_s(self, rd, rs1, rs2);
31994    }
31995    /// RISC-V `fadd.d` instruction.
31996    ///
31997    /// # Forms
31998    /// Assembly: `fadd.d xd, xs1, xs2, rm`
31999    /// Rust: `fadd_d(rd, rs1, rs2, rm)`
32000    ///
32001    /// # Arguments
32002    /// - `rd` — Destination register.
32003    /// - `rs1` — Source register.
32004    /// - `rs2` — Source register.
32005    /// - `rm` — Rounding mode.
32006    pub fn fadd_d<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)
32007    where
32008        Self: FaddDEmitter<T0, T1, T2, T3>,
32009    {
32010        <Self as FaddDEmitter<T0, T1, T2, T3>>::fadd_d(self, rd, rs1, rs2, rm);
32011    }
32012    /// RISC-V `fadd.h` instruction.
32013    ///
32014    /// # Forms
32015    /// Assembly: `fadd.h xd, xs1, xs2, rm`
32016    /// Rust: `fadd_h(rd, rs1, rs2, rm)`
32017    ///
32018    /// # Arguments
32019    /// - `rd` — Destination register.
32020    /// - `rs1` — Source register.
32021    /// - `rs2` — Source register.
32022    /// - `rm` — Rounding mode.
32023    pub fn fadd_h<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)
32024    where
32025        Self: FaddHEmitter<T0, T1, T2, T3>,
32026    {
32027        <Self as FaddHEmitter<T0, T1, T2, T3>>::fadd_h(self, rd, rs1, rs2, rm);
32028    }
32029    /// RISC-V `fadd.q` instruction.
32030    ///
32031    /// # Forms
32032    /// Assembly: `fadd.q qd, qs1, qs2, rm`
32033    /// Rust: `fadd_q(rd, rs1, rs2, rm)`
32034    ///
32035    /// # Arguments
32036    /// - `rd` — Destination register.
32037    /// - `rs1` — Source register.
32038    /// - `rs2` — Source register.
32039    /// - `rm` — Rounding mode.
32040    pub fn fadd_q<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)
32041    where
32042        Self: FaddQEmitter<T0, T1, T2, T3>,
32043    {
32044        <Self as FaddQEmitter<T0, T1, T2, T3>>::fadd_q(self, rd, rs1, rs2, rm);
32045    }
32046    /// Single-precision floating-point addition
32047    ///
32048    /// Do the single-precision floating-point addition of fs1 and fs2 and store the result in fd.
32049    /// rm is the dynamic Rounding Mode.
32050    ///
32051    /// # Forms
32052    /// Assembly: `fadd.s fd, fs1, fs2, rm`
32053    /// Rust: `fadd_s(rd, rs1, rs2, rm)`
32054    ///
32055    /// # Arguments
32056    /// - `rd` — Destination register.
32057    /// - `rs1` — Source register.
32058    /// - `rs2` — Source register.
32059    /// - `rm` — Rounding mode.
32060    pub fn fadd_s<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)
32061    where
32062        Self: FaddSEmitter<T0, T1, T2, T3>,
32063    {
32064        <Self as FaddSEmitter<T0, T1, T2, T3>>::fadd_s(self, rd, rs1, rs2, rm);
32065    }
32066    /// RISC-V `fclass.d` instruction.
32067    ///
32068    /// # Forms
32069    /// Assembly: `fclass.d xd, xs1`
32070    /// Rust: `fclass_d(rd, rs1)`
32071    ///
32072    /// # Arguments
32073    /// - `rd` — Destination register.
32074    /// - `rs1` — Source register.
32075    pub fn fclass_d<T0, T1>(&mut self, rd: T0, rs1: T1)
32076    where
32077        Self: FclassDEmitter<T0, T1>,
32078    {
32079        <Self as FclassDEmitter<T0, T1>>::fclass_d(self, rd, rs1);
32080    }
32081    /// RISC-V `fclass.h` instruction.
32082    ///
32083    /// # Forms
32084    /// Assembly: `fclass.h xd, xs1`
32085    /// Rust: `fclass_h(rd, rs1)`
32086    ///
32087    /// # Arguments
32088    /// - `rd` — Destination register.
32089    /// - `rs1` — Source register.
32090    pub fn fclass_h<T0, T1>(&mut self, rd: T0, rs1: T1)
32091    where
32092        Self: FclassHEmitter<T0, T1>,
32093    {
32094        <Self as FclassHEmitter<T0, T1>>::fclass_h(self, rd, rs1);
32095    }
32096    /// RISC-V `fclass.q` instruction.
32097    ///
32098    /// # Forms
32099    /// Assembly: `fclass.q xd, qs1`
32100    /// Rust: `fclass_q(rd, rs1)`
32101    ///
32102    /// # Arguments
32103    /// - `rd` — Destination register.
32104    /// - `rs1` — Source register.
32105    pub fn fclass_q<T0, T1>(&mut self, rd: T0, rs1: T1)
32106    where
32107        Self: FclassQEmitter<T0, T1>,
32108    {
32109        <Self as FclassQEmitter<T0, T1>>::fclass_q(self, rd, rs1);
32110    }
32111    /// Single-precision floating-point classify.
32112    ///
32113    /// The `fclass.s` instruction examines the value in floating-point register
32114    /// _fs1_ and writes to integer register _rd_ a 10-bit mask that indicates
32115    /// the class of the floating-point number.
32116    /// The format of the mask is described in the table below.
32117    /// The corresponding bit in _rd_ will be set if the property is true and
32118    /// clear otherwise.
32119    /// All other bits in _rd_ are cleared.
32120    /// Note that exactly one bit in rd will be set.
32121    /// `fclass.s` does not set the floating-point exception flags.
32122    ///
32123    /// .Format of result of `fclass` instruction.
32124    /// \[%autowidth,float="center",align="center",cols="^,&lt;",options="header",\]
32125    /// |===
32126    /// |_rd_ bit |Meaning
32127    /// |0 |_rs1_ is latexmath:\[$-\infty$\].
32128    /// |1 |_rs1_ is a negative normal number.
32129    /// |2 |_rs1_ is a negative subnormal number.
32130    /// |3 |_rs1_ is latexmath:\[$-0$\].
32131    /// |4 |_rs1_ is latexmath:\[$+0$\].
32132    /// |5 |_rs1_ is a positive subnormal number.
32133    /// |6 |_rs1_ is a positive normal number.
32134    /// |7 |_rs1_ is latexmath:\[$+\infty$\].
32135    /// |8 |_rs1_ is a signaling NaN.
32136    /// |9 |_rs1_ is a quiet NaN.
32137    /// |===
32138    ///
32139    /// # Forms
32140    /// Assembly: `fclass.s xd, fs1`
32141    /// Rust: `fclass_s(rd, rs1)`
32142    ///
32143    /// # Arguments
32144    /// - `rd` — Destination register.
32145    /// - `rs1` — Source register.
32146    pub fn fclass_s<T0, T1>(&mut self, rd: T0, rs1: T1)
32147    where
32148        Self: FclassSEmitter<T0, T1>,
32149    {
32150        <Self as FclassSEmitter<T0, T1>>::fclass_s(self, rd, rs1);
32151    }
32152    /// RISC-V `fcvt.bf16.s` instruction.
32153    ///
32154    /// # Forms
32155    /// Assembly: `fcvt.bf16.s xd, xs1, rm`
32156    /// Rust: `fcvt_bf16_s(rd, rs1, rm)`
32157    ///
32158    /// # Arguments
32159    /// - `rd` — Destination register.
32160    /// - `rs1` — Source register.
32161    /// - `rm` — Rounding mode.
32162    pub fn fcvt_bf16_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32163    where
32164        Self: FcvtBf16SEmitter<T0, T1, T2>,
32165    {
32166        <Self as FcvtBf16SEmitter<T0, T1, T2>>::fcvt_bf16_s(self, rd, rs1, rm);
32167    }
32168    /// RISC-V `fcvt.d.h` instruction.
32169    ///
32170    /// # Forms
32171    /// Assembly: `fcvt.d.h xd, xs1, rm`
32172    /// Rust: `fcvt_d_h(rd, rs1, rm)`
32173    ///
32174    /// # Arguments
32175    /// - `rd` — Destination register.
32176    /// - `rs1` — Source register.
32177    /// - `rm` — Rounding mode.
32178    pub fn fcvt_d_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32179    where
32180        Self: FcvtDHEmitter<T0, T1, T2>,
32181    {
32182        <Self as FcvtDHEmitter<T0, T1, T2>>::fcvt_d_h(self, rd, rs1, rm);
32183    }
32184    /// RISC-V `fcvt.d.l` instruction.
32185    ///
32186    /// # Forms
32187    /// Assembly: `fcvt.d.l xd, xs1, rm`
32188    /// Rust: `fcvt_d_l(rd, rs1, rm)`
32189    ///
32190    /// # Arguments
32191    /// - `rd` — Destination register.
32192    /// - `rs1` — Source register.
32193    /// - `rm` — Rounding mode.
32194    pub fn fcvt_d_l<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32195    where
32196        Self: FcvtDLEmitter<T0, T1, T2>,
32197    {
32198        <Self as FcvtDLEmitter<T0, T1, T2>>::fcvt_d_l(self, rd, rs1, rm);
32199    }
32200    /// RISC-V `fcvt.d.lu` instruction.
32201    ///
32202    /// # Forms
32203    /// Assembly: `fcvt.d.lu xd, xs1, rm`
32204    /// Rust: `fcvt_d_lu(rd, rs1, rm)`
32205    ///
32206    /// # Arguments
32207    /// - `rd` — Destination register.
32208    /// - `rs1` — Source register.
32209    /// - `rm` — Rounding mode.
32210    pub fn fcvt_d_lu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32211    where
32212        Self: FcvtDLuEmitter<T0, T1, T2>,
32213    {
32214        <Self as FcvtDLuEmitter<T0, T1, T2>>::fcvt_d_lu(self, rd, rs1, rm);
32215    }
32216    /// RISC-V `fcvt.d.q` instruction.
32217    ///
32218    /// # Forms
32219    /// Assembly: `fcvt.d.q xd, qs1, rm`
32220    /// Rust: `fcvt_d_q(rd, rs1, rm)`
32221    ///
32222    /// # Arguments
32223    /// - `rd` — Destination register.
32224    /// - `rs1` — Source register.
32225    /// - `rm` — Rounding mode.
32226    pub fn fcvt_d_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32227    where
32228        Self: FcvtDQEmitter<T0, T1, T2>,
32229    {
32230        <Self as FcvtDQEmitter<T0, T1, T2>>::fcvt_d_q(self, rd, rs1, rm);
32231    }
32232    /// RISC-V `fcvt.d.s` instruction.
32233    ///
32234    /// # Forms
32235    /// Assembly: `fcvt.d.s xd, xs1, rm`
32236    /// Rust: `fcvt_d_s(rd, rs1, rm)`
32237    ///
32238    /// # Arguments
32239    /// - `rd` — Destination register.
32240    /// - `rs1` — Source register.
32241    /// - `rm` — Rounding mode.
32242    pub fn fcvt_d_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32243    where
32244        Self: FcvtDSEmitter<T0, T1, T2>,
32245    {
32246        <Self as FcvtDSEmitter<T0, T1, T2>>::fcvt_d_s(self, rd, rs1, rm);
32247    }
32248    /// RISC-V `fcvt.d.w` instruction.
32249    ///
32250    /// # Forms
32251    /// Assembly: `fcvt.d.w xd, xs1, rm`
32252    /// Rust: `fcvt_d_w(rd, rs1, rm)`
32253    ///
32254    /// # Arguments
32255    /// - `rd` — Destination register.
32256    /// - `rs1` — Source register.
32257    /// - `rm` — Rounding mode.
32258    pub fn fcvt_d_w<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32259    where
32260        Self: FcvtDWEmitter<T0, T1, T2>,
32261    {
32262        <Self as FcvtDWEmitter<T0, T1, T2>>::fcvt_d_w(self, rd, rs1, rm);
32263    }
32264    /// RISC-V `fcvt.d.wu` instruction.
32265    ///
32266    /// # Forms
32267    /// Assembly: `fcvt.d.wu xd, xs1, rm`
32268    /// Rust: `fcvt_d_wu(rd, rs1, rm)`
32269    ///
32270    /// # Arguments
32271    /// - `rd` — Destination register.
32272    /// - `rs1` — Source register.
32273    /// - `rm` — Rounding mode.
32274    pub fn fcvt_d_wu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32275    where
32276        Self: FcvtDWuEmitter<T0, T1, T2>,
32277    {
32278        <Self as FcvtDWuEmitter<T0, T1, T2>>::fcvt_d_wu(self, rd, rs1, rm);
32279    }
32280    /// RISC-V `fcvt.h.d` instruction.
32281    ///
32282    /// # Forms
32283    /// Assembly: `fcvt.h.d xd, xs1, rm`
32284    /// Rust: `fcvt_h_d(rd, rs1, rm)`
32285    ///
32286    /// # Arguments
32287    /// - `rd` — Destination register.
32288    /// - `rs1` — Source register.
32289    /// - `rm` — Rounding mode.
32290    pub fn fcvt_h_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32291    where
32292        Self: FcvtHDEmitter<T0, T1, T2>,
32293    {
32294        <Self as FcvtHDEmitter<T0, T1, T2>>::fcvt_h_d(self, rd, rs1, rm);
32295    }
32296    /// RISC-V `fcvt.h.l` instruction.
32297    ///
32298    /// # Forms
32299    /// Assembly: `fcvt.h.l xd, xs1, rm`
32300    /// Rust: `fcvt_h_l(rd, rs1, rm)`
32301    ///
32302    /// # Arguments
32303    /// - `rd` — Destination register.
32304    /// - `rs1` — Source register.
32305    /// - `rm` — Rounding mode.
32306    pub fn fcvt_h_l<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32307    where
32308        Self: FcvtHLEmitter<T0, T1, T2>,
32309    {
32310        <Self as FcvtHLEmitter<T0, T1, T2>>::fcvt_h_l(self, rd, rs1, rm);
32311    }
32312    /// RISC-V `fcvt.h.lu` instruction.
32313    ///
32314    /// # Forms
32315    /// Assembly: `fcvt.h.lu xd, xs1, rm`
32316    /// Rust: `fcvt_h_lu(rd, rs1, rm)`
32317    ///
32318    /// # Arguments
32319    /// - `rd` — Destination register.
32320    /// - `rs1` — Source register.
32321    /// - `rm` — Rounding mode.
32322    pub fn fcvt_h_lu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32323    where
32324        Self: FcvtHLuEmitter<T0, T1, T2>,
32325    {
32326        <Self as FcvtHLuEmitter<T0, T1, T2>>::fcvt_h_lu(self, rd, rs1, rm);
32327    }
32328    /// RISC-V `fcvt.h.q` instruction.
32329    ///
32330    /// # Forms
32331    /// Assembly: `fcvt.h.q xd, qs1, rm`
32332    /// Rust: `fcvt_h_q(rd, rs1, rm)`
32333    ///
32334    /// # Arguments
32335    /// - `rd` — Destination register.
32336    /// - `rs1` — Source register.
32337    /// - `rm` — Rounding mode.
32338    pub fn fcvt_h_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32339    where
32340        Self: FcvtHQEmitter<T0, T1, T2>,
32341    {
32342        <Self as FcvtHQEmitter<T0, T1, T2>>::fcvt_h_q(self, rd, rs1, rm);
32343    }
32344    /// Convert half-precision float to a single-precision float
32345    ///
32346    /// Converts a half-precision number in floating-point register _fs1_ into a single-precision floating-point number in
32347    /// floating-point register _fd_.
32348    ///
32349    /// `fcvt.h.s` rounds according to the _rm_ field.
32350    ///
32351    /// All floating-point conversion instructions set the Inexact exception flag if the rounded
32352    /// result differs from the operand value and the Invalid exception flag is not set.
32353    ///
32354    /// # Forms
32355    /// Assembly: `fcvt.h.s fd, xs1`
32356    /// Rust: `fcvt_h_s(rd, rs1, rm)`
32357    ///
32358    /// # Arguments
32359    /// - `rd` — Destination register.
32360    /// - `rs1` — Source register.
32361    /// - `rm` — Rounding mode.
32362    pub fn fcvt_h_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32363    where
32364        Self: FcvtHSEmitter<T0, T1, T2>,
32365    {
32366        <Self as FcvtHSEmitter<T0, T1, T2>>::fcvt_h_s(self, rd, rs1, rm);
32367    }
32368    /// RISC-V `fcvt.h.w` instruction.
32369    ///
32370    /// # Forms
32371    /// Assembly: `fcvt.h.w xd, xs1, rm`
32372    /// Rust: `fcvt_h_w(rd, rs1, rm)`
32373    ///
32374    /// # Arguments
32375    /// - `rd` — Destination register.
32376    /// - `rs1` — Source register.
32377    /// - `rm` — Rounding mode.
32378    pub fn fcvt_h_w<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32379    where
32380        Self: FcvtHWEmitter<T0, T1, T2>,
32381    {
32382        <Self as FcvtHWEmitter<T0, T1, T2>>::fcvt_h_w(self, rd, rs1, rm);
32383    }
32384    /// RISC-V `fcvt.h.wu` instruction.
32385    ///
32386    /// # Forms
32387    /// Assembly: `fcvt.h.wu xd, xs1, rm`
32388    /// Rust: `fcvt_h_wu(rd, rs1, rm)`
32389    ///
32390    /// # Arguments
32391    /// - `rd` — Destination register.
32392    /// - `rs1` — Source register.
32393    /// - `rm` — Rounding mode.
32394    pub fn fcvt_h_wu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32395    where
32396        Self: FcvtHWuEmitter<T0, T1, T2>,
32397    {
32398        <Self as FcvtHWuEmitter<T0, T1, T2>>::fcvt_h_wu(self, rd, rs1, rm);
32399    }
32400    /// RISC-V `fcvt.l.d` instruction.
32401    ///
32402    /// # Forms
32403    /// Assembly: `fcvt.l.d xd, xs1, rm`
32404    /// Rust: `fcvt_l_d(rd, rs1, rm)`
32405    ///
32406    /// # Arguments
32407    /// - `rd` — Destination register.
32408    /// - `rs1` — Source register.
32409    /// - `rm` — Rounding mode.
32410    pub fn fcvt_l_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32411    where
32412        Self: FcvtLDEmitter<T0, T1, T2>,
32413    {
32414        <Self as FcvtLDEmitter<T0, T1, T2>>::fcvt_l_d(self, rd, rs1, rm);
32415    }
32416    /// RISC-V `fcvt.l.h` instruction.
32417    ///
32418    /// # Forms
32419    /// Assembly: `fcvt.l.h xd, xs1, rm`
32420    /// Rust: `fcvt_l_h(rd, rs1, rm)`
32421    ///
32422    /// # Arguments
32423    /// - `rd` — Destination register.
32424    /// - `rs1` — Source register.
32425    /// - `rm` — Rounding mode.
32426    pub fn fcvt_l_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32427    where
32428        Self: FcvtLHEmitter<T0, T1, T2>,
32429    {
32430        <Self as FcvtLHEmitter<T0, T1, T2>>::fcvt_l_h(self, rd, rs1, rm);
32431    }
32432    /// RISC-V `fcvt.l.q` instruction.
32433    ///
32434    /// # Forms
32435    /// Assembly: `fcvt.l.q xd, qs1, rm`
32436    /// Rust: `fcvt_l_q(rd, rs1, rm)`
32437    ///
32438    /// # Arguments
32439    /// - `rd` — Destination register.
32440    /// - `rs1` — Source register.
32441    /// - `rm` — Rounding mode.
32442    pub fn fcvt_l_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32443    where
32444        Self: FcvtLQEmitter<T0, T1, T2>,
32445    {
32446        <Self as FcvtLQEmitter<T0, T1, T2>>::fcvt_l_q(self, rd, rs1, rm);
32447    }
32448    /// RISC-V `fcvt.l.s` instruction.
32449    ///
32450    /// # Forms
32451    /// Assembly: `fcvt.l.s xd, fs1, rm`
32452    /// Rust: `fcvt_l_s(rd, rs1, rm)`
32453    ///
32454    /// # Arguments
32455    /// - `rd` — Destination register.
32456    /// - `rs1` — Source register.
32457    /// - `rm` — Rounding mode.
32458    pub fn fcvt_l_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32459    where
32460        Self: FcvtLSEmitter<T0, T1, T2>,
32461    {
32462        <Self as FcvtLSEmitter<T0, T1, T2>>::fcvt_l_s(self, rd, rs1, rm);
32463    }
32464    /// RISC-V `fcvt.lu.d` instruction.
32465    ///
32466    /// # Forms
32467    /// Assembly: `fcvt.lu.d xd, xs1, rm`
32468    /// Rust: `fcvt_lu_d(rd, rs1, rm)`
32469    ///
32470    /// # Arguments
32471    /// - `rd` — Destination register.
32472    /// - `rs1` — Source register.
32473    /// - `rm` — Rounding mode.
32474    pub fn fcvt_lu_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32475    where
32476        Self: FcvtLuDEmitter<T0, T1, T2>,
32477    {
32478        <Self as FcvtLuDEmitter<T0, T1, T2>>::fcvt_lu_d(self, rd, rs1, rm);
32479    }
32480    /// RISC-V `fcvt.lu.h` instruction.
32481    ///
32482    /// # Forms
32483    /// Assembly: `fcvt.lu.h xd, xs1, rm`
32484    /// Rust: `fcvt_lu_h(rd, rs1, rm)`
32485    ///
32486    /// # Arguments
32487    /// - `rd` — Destination register.
32488    /// - `rs1` — Source register.
32489    /// - `rm` — Rounding mode.
32490    pub fn fcvt_lu_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32491    where
32492        Self: FcvtLuHEmitter<T0, T1, T2>,
32493    {
32494        <Self as FcvtLuHEmitter<T0, T1, T2>>::fcvt_lu_h(self, rd, rs1, rm);
32495    }
32496    /// RISC-V `fcvt.lu.q` instruction.
32497    ///
32498    /// # Forms
32499    /// Assembly: `fcvt.lu.q qd, hs1, rm`
32500    /// Rust: `fcvt_lu_q(rd, rs1, rm)`
32501    ///
32502    /// # Arguments
32503    /// - `rd` — Destination register.
32504    /// - `rs1` — Source register.
32505    /// - `rm` — Rounding mode.
32506    pub fn fcvt_lu_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32507    where
32508        Self: FcvtLuQEmitter<T0, T1, T2>,
32509    {
32510        <Self as FcvtLuQEmitter<T0, T1, T2>>::fcvt_lu_q(self, rd, rs1, rm);
32511    }
32512    /// RISC-V `fcvt.lu.s` instruction.
32513    ///
32514    /// # Forms
32515    /// Assembly: `fcvt.lu.s xd, fs1, rm`
32516    /// Rust: `fcvt_lu_s(rd, rs1, rm)`
32517    ///
32518    /// # Arguments
32519    /// - `rd` — Destination register.
32520    /// - `rs1` — Source register.
32521    /// - `rm` — Rounding mode.
32522    pub fn fcvt_lu_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32523    where
32524        Self: FcvtLuSEmitter<T0, T1, T2>,
32525    {
32526        <Self as FcvtLuSEmitter<T0, T1, T2>>::fcvt_lu_s(self, rd, rs1, rm);
32527    }
32528    /// RISC-V `fcvt.q.d` instruction.
32529    ///
32530    /// # Forms
32531    /// Assembly: `fcvt.q.d dd, fs1, rm`
32532    /// Rust: `fcvt_q_d(rd, rs1, rm)`
32533    ///
32534    /// # Arguments
32535    /// - `rd` — Destination register.
32536    /// - `rs1` — Source register.
32537    /// - `rm` — Rounding mode.
32538    pub fn fcvt_q_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32539    where
32540        Self: FcvtQDEmitter<T0, T1, T2>,
32541    {
32542        <Self as FcvtQDEmitter<T0, T1, T2>>::fcvt_q_d(self, rd, rs1, rm);
32543    }
32544    /// RISC-V `fcvt.q.h` instruction.
32545    ///
32546    /// # Forms
32547    /// Assembly: `fcvt.q.h hd, qs1, rm`
32548    /// Rust: `fcvt_q_h(rd, rs1, rm)`
32549    ///
32550    /// # Arguments
32551    /// - `rd` — Destination register.
32552    /// - `rs1` — Source register.
32553    /// - `rm` — Rounding mode.
32554    pub fn fcvt_q_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32555    where
32556        Self: FcvtQHEmitter<T0, T1, T2>,
32557    {
32558        <Self as FcvtQHEmitter<T0, T1, T2>>::fcvt_q_h(self, rd, rs1, rm);
32559    }
32560    /// RISC-V `fcvt.q.l` instruction.
32561    ///
32562    /// # Forms
32563    /// Assembly: `fcvt.q.l qd, xs1, rm`
32564    /// Rust: `fcvt_q_l(rd, rs1, rm)`
32565    ///
32566    /// # Arguments
32567    /// - `rd` — Destination register.
32568    /// - `rs1` — Source register.
32569    /// - `rm` — Rounding mode.
32570    pub fn fcvt_q_l<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32571    where
32572        Self: FcvtQLEmitter<T0, T1, T2>,
32573    {
32574        <Self as FcvtQLEmitter<T0, T1, T2>>::fcvt_q_l(self, rd, rs1, rm);
32575    }
32576    /// RISC-V `fcvt.q.lu` instruction.
32577    ///
32578    /// # Forms
32579    /// Assembly: `fcvt.q.lu qd, xs1, rm`
32580    /// Rust: `fcvt_q_lu(rd, rs1, rm)`
32581    ///
32582    /// # Arguments
32583    /// - `rd` — Destination register.
32584    /// - `rs1` — Source register.
32585    /// - `rm` — Rounding mode.
32586    pub fn fcvt_q_lu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32587    where
32588        Self: FcvtQLuEmitter<T0, T1, T2>,
32589    {
32590        <Self as FcvtQLuEmitter<T0, T1, T2>>::fcvt_q_lu(self, rd, rs1, rm);
32591    }
32592    /// RISC-V `fcvt.q.s` instruction.
32593    ///
32594    /// # Forms
32595    /// Assembly: `fcvt.q.s qd, fs1, rm`
32596    /// Rust: `fcvt_q_s(rd, rs1, rm)`
32597    ///
32598    /// # Arguments
32599    /// - `rd` — Destination register.
32600    /// - `rs1` — Source register.
32601    /// - `rm` — Rounding mode.
32602    pub fn fcvt_q_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32603    where
32604        Self: FcvtQSEmitter<T0, T1, T2>,
32605    {
32606        <Self as FcvtQSEmitter<T0, T1, T2>>::fcvt_q_s(self, rd, rs1, rm);
32607    }
32608    /// RISC-V `fcvt.q.w` instruction.
32609    ///
32610    /// # Forms
32611    /// Assembly: `fcvt.q.w fd, xs1, rm`
32612    /// Rust: `fcvt_q_w(rd, rs1, rm)`
32613    ///
32614    /// # Arguments
32615    /// - `rd` — Destination register.
32616    /// - `rs1` — Source register.
32617    /// - `rm` — Rounding mode.
32618    pub fn fcvt_q_w<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32619    where
32620        Self: FcvtQWEmitter<T0, T1, T2>,
32621    {
32622        <Self as FcvtQWEmitter<T0, T1, T2>>::fcvt_q_w(self, rd, rs1, rm);
32623    }
32624    /// RISC-V `fcvt.q.wu` instruction.
32625    ///
32626    /// # Forms
32627    /// Assembly: `fcvt.q.wu qd, xs1, rm`
32628    /// Rust: `fcvt_q_wu(rd, rs1, rm)`
32629    ///
32630    /// # Arguments
32631    /// - `rd` — Destination register.
32632    /// - `rs1` — Source register.
32633    /// - `rm` — Rounding mode.
32634    pub fn fcvt_q_wu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32635    where
32636        Self: FcvtQWuEmitter<T0, T1, T2>,
32637    {
32638        <Self as FcvtQWuEmitter<T0, T1, T2>>::fcvt_q_wu(self, rd, rs1, rm);
32639    }
32640    /// RISC-V `fcvt.s.bf16` instruction.
32641    ///
32642    /// # Forms
32643    /// Assembly: `fcvt.s.bf16 xd, xs1, rm`
32644    /// Rust: `fcvt_s_bf16(rd, rs1, rm)`
32645    ///
32646    /// # Arguments
32647    /// - `rd` — Destination register.
32648    /// - `rs1` — Source register.
32649    /// - `rm` — Rounding mode.
32650    pub fn fcvt_s_bf16<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32651    where
32652        Self: FcvtSBf16Emitter<T0, T1, T2>,
32653    {
32654        <Self as FcvtSBf16Emitter<T0, T1, T2>>::fcvt_s_bf16(self, rd, rs1, rm);
32655    }
32656    /// RISC-V `fcvt.s.d` instruction.
32657    ///
32658    /// # Forms
32659    /// Assembly: `fcvt.s.d xd, xs1, rm`
32660    /// Rust: `fcvt_s_d(rd, rs1, rm)`
32661    ///
32662    /// # Arguments
32663    /// - `rd` — Destination register.
32664    /// - `rs1` — Source register.
32665    /// - `rm` — Rounding mode.
32666    pub fn fcvt_s_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32667    where
32668        Self: FcvtSDEmitter<T0, T1, T2>,
32669    {
32670        <Self as FcvtSDEmitter<T0, T1, T2>>::fcvt_s_d(self, rd, rs1, rm);
32671    }
32672    /// Convert single-precision float to a half-precision float
32673    ///
32674    /// Converts a single-precision number in floating-point register _fs1_ into a half-precision floating-point number in
32675    /// floating-point register _fd_.
32676    ///
32677    /// `fcvt.s.h` will never round, and so the 'rm' field is effectively ignored.
32678    ///
32679    /// # Forms
32680    /// Assembly: `fcvt.s.h fd, xs1`
32681    /// Rust: `fcvt_s_h(rd, rs1, rm)`
32682    ///
32683    /// # Arguments
32684    /// - `rd` — Destination register.
32685    /// - `rs1` — Source register.
32686    /// - `rm` — Rounding mode.
32687    pub fn fcvt_s_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32688    where
32689        Self: FcvtSHEmitter<T0, T1, T2>,
32690    {
32691        <Self as FcvtSHEmitter<T0, T1, T2>>::fcvt_s_h(self, rd, rs1, rm);
32692    }
32693    /// RISC-V `fcvt.s.l` instruction.
32694    ///
32695    /// # Forms
32696    /// Assembly: `fcvt.s.l fd, xs1, rm`
32697    /// Rust: `fcvt_s_l(rd, rs1, rm)`
32698    ///
32699    /// # Arguments
32700    /// - `rd` — Destination register.
32701    /// - `rs1` — Source register.
32702    /// - `rm` — Rounding mode.
32703    pub fn fcvt_s_l<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32704    where
32705        Self: FcvtSLEmitter<T0, T1, T2>,
32706    {
32707        <Self as FcvtSLEmitter<T0, T1, T2>>::fcvt_s_l(self, rd, rs1, rm);
32708    }
32709    /// RISC-V `fcvt.s.lu` instruction.
32710    ///
32711    /// # Forms
32712    /// Assembly: `fcvt.s.lu fd, xs1, rm`
32713    /// Rust: `fcvt_s_lu(rd, rs1, rm)`
32714    ///
32715    /// # Arguments
32716    /// - `rd` — Destination register.
32717    /// - `rs1` — Source register.
32718    /// - `rm` — Rounding mode.
32719    pub fn fcvt_s_lu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32720    where
32721        Self: FcvtSLuEmitter<T0, T1, T2>,
32722    {
32723        <Self as FcvtSLuEmitter<T0, T1, T2>>::fcvt_s_lu(self, rd, rs1, rm);
32724    }
32725    /// RISC-V `fcvt.s.q` instruction.
32726    ///
32727    /// # Forms
32728    /// Assembly: `fcvt.s.q fd, qs1, rm`
32729    /// Rust: `fcvt_s_q(rd, rs1, rm)`
32730    ///
32731    /// # Arguments
32732    /// - `rd` — Destination register.
32733    /// - `rs1` — Source register.
32734    /// - `rm` — Rounding mode.
32735    pub fn fcvt_s_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32736    where
32737        Self: FcvtSQEmitter<T0, T1, T2>,
32738    {
32739        <Self as FcvtSQEmitter<T0, T1, T2>>::fcvt_s_q(self, rd, rs1, rm);
32740    }
32741    /// Convert signed 32-bit integer to single-precision float
32742    ///
32743    /// Converts a 32-bit signed integer in integer register _rs1_ into a floating-point number in
32744    /// floating-point register _fd_.
32745    ///
32746    /// All floating-point to integer and integer to floating-point conversion instructions round
32747    /// according to the _rm_ field.
32748    /// A floating-point register can be initialized to floating-point positive zero using
32749    /// `fcvt.s.w rd, x0`, which will never set any exception flags.
32750    ///
32751    /// All floating-point conversion instructions set the Inexact exception flag if the rounded
32752    /// result differs from the operand value and the Invalid exception flag is not set.
32753    ///
32754    /// # Forms
32755    /// Assembly: `fcvt.s.w fd, xs1`
32756    /// Rust: `fcvt_s_w(rd, rs1, rm)`
32757    ///
32758    /// # Arguments
32759    /// - `rd` — Destination register.
32760    /// - `rs1` — Source register.
32761    /// - `rm` — Rounding mode.
32762    pub fn fcvt_s_w<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32763    where
32764        Self: FcvtSWEmitter<T0, T1, T2>,
32765    {
32766        <Self as FcvtSWEmitter<T0, T1, T2>>::fcvt_s_w(self, rd, rs1, rm);
32767    }
32768    /// RISC-V `fcvt.s.wu` instruction.
32769    ///
32770    /// # Forms
32771    /// Assembly: `fcvt.s.wu fd, xs1, rm`
32772    /// Rust: `fcvt_s_wu(rd, rs1, rm)`
32773    ///
32774    /// # Arguments
32775    /// - `rd` — Destination register.
32776    /// - `rs1` — Source register.
32777    /// - `rm` — Rounding mode.
32778    pub fn fcvt_s_wu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32779    where
32780        Self: FcvtSWuEmitter<T0, T1, T2>,
32781    {
32782        <Self as FcvtSWuEmitter<T0, T1, T2>>::fcvt_s_wu(self, rd, rs1, rm);
32783    }
32784    /// RISC-V `fcvt.w.d` instruction.
32785    ///
32786    /// # Forms
32787    /// Assembly: `fcvt.w.d xd, xs1, rm`
32788    /// Rust: `fcvt_w_d(rd, rs1, rm)`
32789    ///
32790    /// # Arguments
32791    /// - `rd` — Destination register.
32792    /// - `rs1` — Source register.
32793    /// - `rm` — Rounding mode.
32794    pub fn fcvt_w_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32795    where
32796        Self: FcvtWDEmitter<T0, T1, T2>,
32797    {
32798        <Self as FcvtWDEmitter<T0, T1, T2>>::fcvt_w_d(self, rd, rs1, rm);
32799    }
32800    /// RISC-V `fcvt.w.h` instruction.
32801    ///
32802    /// # Forms
32803    /// Assembly: `fcvt.w.h xd, xs1, rm`
32804    /// Rust: `fcvt_w_h(rd, rs1, rm)`
32805    ///
32806    /// # Arguments
32807    /// - `rd` — Destination register.
32808    /// - `rs1` — Source register.
32809    /// - `rm` — Rounding mode.
32810    pub fn fcvt_w_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32811    where
32812        Self: FcvtWHEmitter<T0, T1, T2>,
32813    {
32814        <Self as FcvtWHEmitter<T0, T1, T2>>::fcvt_w_h(self, rd, rs1, rm);
32815    }
32816    /// RISC-V `fcvt.w.q` instruction.
32817    ///
32818    /// # Forms
32819    /// Assembly: `fcvt.w.q xd, qs1, rm`
32820    /// Rust: `fcvt_w_q(rd, rs1, rm)`
32821    ///
32822    /// # Arguments
32823    /// - `rd` — Destination register.
32824    /// - `rs1` — Source register.
32825    /// - `rm` — Rounding mode.
32826    pub fn fcvt_w_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32827    where
32828        Self: FcvtWQEmitter<T0, T1, T2>,
32829    {
32830        <Self as FcvtWQEmitter<T0, T1, T2>>::fcvt_w_q(self, rd, rs1, rm);
32831    }
32832    /// Convert single-precision float to integer word to signed 32-bit integer.
32833    ///
32834    /// Converts a floating-point number in floating-point register _fs1_ to a signed 32-bit integer indicates
32835    /// integer register _rd_.
32836    ///
32837    /// For XLEN &gt;32, `fcvt.w.s` sign-extends the 32-bit result to the destination register width.
32838    ///
32839    /// If the rounded result is not representable as a 32-bit signed integer, it is clipped to the
32840    /// nearest value and the invalid flag is set.
32841    ///
32842    /// The range of valid inputs and behavior for invalid inputs are:
32843    ///
32844    /// \[separator="!"\]
32845    /// !===
32846    /// ! ! Value
32847    ///
32848    /// h! Minimum valid input (after rounding) ! `-2^31`
32849    /// h! Maximum valid input (after rounding) ! `2^31 - 1`
32850    /// h! Output for out-of-range negative input ! `-2^31`
32851    /// h! Output for `-&infin;` ! `-2^31`
32852    /// h! Output for out-of-range positive input ! `2^31 - 1`
32853    /// h! Output for `+&infin;` for `NaN` ! `2^31 - 1`
32854    /// !===
32855    ///
32856    /// All floating-point to integer and integer to floating-point conversion instructions round
32857    /// according to the _rm_ field.
32858    /// A floating-point register can be initialized to floating-point positive zero using
32859    /// `fcvt.s.w rd, x0`, which will never set any exception flags.
32860    ///
32861    /// All floating-point conversion instructions set the Inexact exception flag if the rounded
32862    /// result differs from the operand value and the Invalid exception flag is not set.
32863    ///
32864    /// # Forms
32865    /// Assembly: `fcvt.w.s xd, fs1`
32866    /// Rust: `fcvt_w_s(rd, rs1, rm)`
32867    ///
32868    /// # Arguments
32869    /// - `rd` — Destination register.
32870    /// - `rs1` — Source register.
32871    /// - `rm` — Rounding mode.
32872    pub fn fcvt_w_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32873    where
32874        Self: FcvtWSEmitter<T0, T1, T2>,
32875    {
32876        <Self as FcvtWSEmitter<T0, T1, T2>>::fcvt_w_s(self, rd, rs1, rm);
32877    }
32878    /// RISC-V `fcvt.wu.d` instruction.
32879    ///
32880    /// # Forms
32881    /// Assembly: `fcvt.wu.d xd, xs1, rm`
32882    /// Rust: `fcvt_wu_d(rd, rs1, rm)`
32883    ///
32884    /// # Arguments
32885    /// - `rd` — Destination register.
32886    /// - `rs1` — Source register.
32887    /// - `rm` — Rounding mode.
32888    pub fn fcvt_wu_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32889    where
32890        Self: FcvtWuDEmitter<T0, T1, T2>,
32891    {
32892        <Self as FcvtWuDEmitter<T0, T1, T2>>::fcvt_wu_d(self, rd, rs1, rm);
32893    }
32894    /// RISC-V `fcvt.wu.h` instruction.
32895    ///
32896    /// # Forms
32897    /// Assembly: `fcvt.wu.h xd, xs1, rm`
32898    /// Rust: `fcvt_wu_h(rd, rs1, rm)`
32899    ///
32900    /// # Arguments
32901    /// - `rd` — Destination register.
32902    /// - `rs1` — Source register.
32903    /// - `rm` — Rounding mode.
32904    pub fn fcvt_wu_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32905    where
32906        Self: FcvtWuHEmitter<T0, T1, T2>,
32907    {
32908        <Self as FcvtWuHEmitter<T0, T1, T2>>::fcvt_wu_h(self, rd, rs1, rm);
32909    }
32910    /// RISC-V `fcvt.wu.q` instruction.
32911    ///
32912    /// # Forms
32913    /// Assembly: `fcvt.wu.q xd, xs1, rm`
32914    /// Rust: `fcvt_wu_q(rd, rs1, rm)`
32915    ///
32916    /// # Arguments
32917    /// - `rd` — Destination register.
32918    /// - `rs1` — Source register.
32919    /// - `rm` — Rounding mode.
32920    pub fn fcvt_wu_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32921    where
32922        Self: FcvtWuQEmitter<T0, T1, T2>,
32923    {
32924        <Self as FcvtWuQEmitter<T0, T1, T2>>::fcvt_wu_q(self, rd, rs1, rm);
32925    }
32926    /// RISC-V `fcvt.wu.s` instruction.
32927    ///
32928    /// # Forms
32929    /// Assembly: `fcvt.wu.s xd, fs1, rm`
32930    /// Rust: `fcvt_wu_s(rd, rs1, rm)`
32931    ///
32932    /// # Arguments
32933    /// - `rd` — Destination register.
32934    /// - `rs1` — Source register.
32935    /// - `rm` — Rounding mode.
32936    pub fn fcvt_wu_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
32937    where
32938        Self: FcvtWuSEmitter<T0, T1, T2>,
32939    {
32940        <Self as FcvtWuSEmitter<T0, T1, T2>>::fcvt_wu_s(self, rd, rs1, rm);
32941    }
32942    /// RISC-V `fcvtmod.w.d` instruction.
32943    ///
32944    /// # Forms
32945    /// Assembly: `fcvtmod.w.d xd, xs1`
32946    /// Rust: `fcvtmod_w_d(rd, rs1)`
32947    ///
32948    /// # Arguments
32949    /// - `rd` — Destination register.
32950    /// - `rs1` — Source register.
32951    pub fn fcvtmod_w_d<T0, T1>(&mut self, rd: T0, rs1: T1)
32952    where
32953        Self: FcvtmodWDEmitter<T0, T1>,
32954    {
32955        <Self as FcvtmodWDEmitter<T0, T1>>::fcvtmod_w_d(self, rd, rs1);
32956    }
32957    /// RISC-V `fdiv.d` instruction.
32958    ///
32959    /// # Forms
32960    /// Assembly: `fdiv.d xd, xs1, xs2, rm`
32961    /// Rust: `fdiv_d(rd, rs1, rs2, rm)`
32962    ///
32963    /// # Arguments
32964    /// - `rd` — Destination register.
32965    /// - `rs1` — Source register.
32966    /// - `rs2` — Source register.
32967    /// - `rm` — Rounding mode.
32968    pub fn fdiv_d<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)
32969    where
32970        Self: FdivDEmitter<T0, T1, T2, T3>,
32971    {
32972        <Self as FdivDEmitter<T0, T1, T2, T3>>::fdiv_d(self, rd, rs1, rs2, rm);
32973    }
32974    /// RISC-V `fdiv.h` instruction.
32975    ///
32976    /// # Forms
32977    /// Assembly: `fdiv.h xd, xs1, xs2, rm`
32978    /// Rust: `fdiv_h(rd, rs1, rs2, rm)`
32979    ///
32980    /// # Arguments
32981    /// - `rd` — Destination register.
32982    /// - `rs1` — Source register.
32983    /// - `rs2` — Source register.
32984    /// - `rm` — Rounding mode.
32985    pub fn fdiv_h<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)
32986    where
32987        Self: FdivHEmitter<T0, T1, T2, T3>,
32988    {
32989        <Self as FdivHEmitter<T0, T1, T2, T3>>::fdiv_h(self, rd, rs1, rs2, rm);
32990    }
32991    /// RISC-V `fdiv.q` instruction.
32992    ///
32993    /// # Forms
32994    /// Assembly: `fdiv.q qd, qs1, qs2, rm`
32995    /// Rust: `fdiv_q(rd, rs1, rs2, rm)`
32996    ///
32997    /// # Arguments
32998    /// - `rd` — Destination register.
32999    /// - `rs1` — Source register.
33000    /// - `rs2` — Source register.
33001    /// - `rm` — Rounding mode.
33002    pub fn fdiv_q<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)
33003    where
33004        Self: FdivQEmitter<T0, T1, T2, T3>,
33005    {
33006        <Self as FdivQEmitter<T0, T1, T2, T3>>::fdiv_q(self, rd, rs1, rs2, rm);
33007    }
33008    /// RISC-V `fdiv.s` instruction.
33009    ///
33010    /// # Forms
33011    /// Assembly: `fdiv.s fd, fs1, fs2, rm`
33012    /// Rust: `fdiv_s(rd, rs1, rs2, rm)`
33013    ///
33014    /// # Arguments
33015    /// - `rd` — Destination register.
33016    /// - `rs1` — Source register.
33017    /// - `rs2` — Source register.
33018    /// - `rm` — Rounding mode.
33019    pub fn fdiv_s<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)
33020    where
33021        Self: FdivSEmitter<T0, T1, T2, T3>,
33022    {
33023        <Self as FdivSEmitter<T0, T1, T2, T3>>::fdiv_s(self, rd, rs1, rs2, rm);
33024    }
33025    /// Memory ordering fence
33026    ///
33027    /// Orders memory operations.
33028    ///
33029    /// The `fence` instruction is used to order device I/O and memory accesses as
33030    /// viewed by other RISC-V harts and external devices or coprocessors. Any
33031    /// combination of device input (I), device output (O), memory reads \(R),
33032    /// and memory writes (W) may be ordered with respect to any combination of
33033    /// the same. Informally, no other RISC-V hart or external device can
33034    /// observe any operation in the _successor_ set following a `fence` before
33035    /// any operation in the _predecessor_ set preceding the `fence`.
33036    ///
33037    /// The predecessor and successor fields have the same format to specify operation types:
33038    ///
33039    /// \[%autowidth\]
33040    /// |===
33041    /// 4+| `pred` 4+| `succ`
33042    ///
33043    /// | 27 | 26 |25 | 24 | 23 | 22 | 21| 20
33044    /// | PI | PO |PR | PW | SI | SO |SR | SW
33045    /// |===
33046    ///
33047    /// \[%autowidth,align="center",cols="^1,^1,&lt;3",options="header"\]
33048    /// .Fence mode encoding
33049    /// |===
33050    /// |_fm_ field |Mnemonic |Meaning
33051    /// |0000 |_none_ |Normal Fence
33052    /// |1000 |TSO |With `FENCE RW,RW`: exclude write-to-read ordering; otherwise: _Reserved for future use._
33053    /// 2+|_other_ |_Reserved for future use._
33054    /// |===
33055    ///
33056    /// When the mode field _fm_ is `0001` and both the predecessor and successor sets are 'RW',
33057    /// then the instruction acts as a special-case `fence.tso`. `fence.tso` orders all load operations
33058    /// in its predecessor set before all memory operations in its successor set, and all store operations
33059    /// in its predecessor set before all store operations in its successor set. This leaves non-AMO store
33060    /// operations in the 'fence.tso's predecessor set unordered with non-AMO loads in its successor set.
33061    ///
33062    /// When mode field _fm_ is not `0001`, or when mode field _fm_ is `0001` but the _pred_ and
33063    /// _succ_ fields are not both 'RW' (0x3), then the fence acts as a baseline fence (_e.g._, _fm_ is
33064    /// effectively `0000`). This is unaffected by the FIOM bits, described below (implicit promotion does
33065    /// not change how `fence.tso` is decoded).
33066    ///
33067    /// The `rs1` and `rd` fields are unused and ignored.
33068    ///
33069    /// In modes other than M-mode, `fence` is further affected by `menvcfg.FIOM`,
33070    /// `senvcfg.FIOM`&lt;% if ext?(:H) %&gt;, and/or `henvcfg.FIOM`&lt;% end %&gt;
33071    /// as follows:
33072    ///
33073    /// .Effective PR/PW/SR/SW in (H)S-mode
33074    /// \[%autowidth,cols=",,,",options="header",separator="!"\]
33075    /// !===
33076    /// ! \[.rotate\]#`menvcfg.FIOM`# ! `pred.PI` +
33077    /// `pred.PO` +
33078    /// `succ.SI` +
33079    /// `succ.SO`
33080    /// ! -&gt; +
33081    /// -&gt; +
33082    /// -&gt; +
33083    /// -&gt;
33084    /// ! effective `PR` +
33085    /// effective `PW` +
33086    /// effective `SR` +
33087    /// effective `SW`
33088    ///
33089    /// ! 0 ! - ! ! from encoding
33090    /// ! 1 ! 0 ! ! from encoding
33091    /// ! 1 ! 1 ! ! 1
33092    /// !===
33093    ///
33094    /// .Effective PR/PW/SR/SW in U-mode
33095    /// \[%autowidth,options="header",separator="!",cols=",,,,"\]
33096    /// !===
33097    /// ! \[.rotate\]#`menvcfg.FIOM`# ! \[.rotate\]#`senvcfg.FIOM`# !  `pred.PI` +
33098    /// `pred.PO` +
33099    /// `succ.SI` +
33100    /// `succ.SO`
33101    /// ! -&gt; +
33102    /// -&gt; +
33103    /// -&gt; +
33104    /// -&gt;
33105    /// ! effective `PR` +
33106    /// effective `PW` +
33107    /// effective `SR` +
33108    /// effective `SW`
33109    ///
33110    /// ! 0 ! 0 ! - ! ! from encoding
33111    /// ! 0 ! 1 ! 0 ! ! from encoding
33112    /// ! 0 ! 1 ! 1 ! ! 1
33113    /// ! 1 ! - ! 0 ! ! from encoding
33114    /// ! 1 ! - ! 1 ! ! 1
33115    /// !===
33116    ///
33117    /// &lt;%- if ext?(:H) -%&gt;
33118    /// .Effective PR/PW/SR/SW in VS-mode and VU-mode
33119    /// \[%autowidth,options="header",separator="!",cols=",,,,"\]
33120    /// !===
33121    /// ! \[.rotate\]#`menvcfg.FIOM`# ! \[.rotate\]#`henvcfg.FIOM`# !  `pred.PI` +
33122    /// `pred.PO` +
33123    /// `succ.SI` +
33124    /// `succ.SO`
33125    /// ! -&gt; +
33126    /// -&gt; +
33127    /// -&gt; +
33128    /// -&gt;
33129    /// ! effective `PR` +
33130    /// effective `PW` +
33131    /// effective `SR` +
33132    /// effective `SW`
33133    ///
33134    /// ! 0 ! 0 ! - ! ! from encoding
33135    /// ! 0 ! 1 ! 0 ! ! from encoding
33136    /// ! 0 ! 1 ! 1 ! ! 1
33137    /// ! 1 ! - ! 0 ! ! from encoding
33138    /// ! 1 ! - ! 1 ! ! 1
33139    /// !===
33140    /// &lt;%- end -%&gt;
33141    ///
33142    /// # Forms
33143    /// Assembly: `fence "TODO"`
33144    /// Rust: `fence(fm, pred, succ, rs1, rd)`
33145    ///
33146    /// # Arguments
33147    /// - `fm` — Immediate encoding value.
33148    /// - `pred` — Immediate encoding value.
33149    /// - `succ` — Immediate encoding value.
33150    /// - `rs1` — Source register.
33151    /// - `rd` — Destination/source register.
33152    pub fn fence<T0, T1, T2, T3, T4>(&mut self, fm: T0, pred: T1, succ: T2, rs1: T3, rd: T4)
33153    where
33154        Self: FenceEmitter<T0, T1, T2, T3, T4>,
33155    {
33156        <Self as FenceEmitter<T0, T1, T2, T3, T4>>::fence(self, fm, pred, succ, rs1, rd);
33157    }
33158    /// Instruction fence
33159    ///
33160    /// The FENCE.I instruction is used to synchronize the instruction and data
33161    /// streams. RISC-V does not guarantee that stores to instruction memory
33162    /// will be made visible to instruction fetches on a RISC-V hart until that
33163    /// hart executes a FENCE.I instruction. A FENCE.I instruction ensures that
33164    /// a subsequent instruction fetch on a RISC-V hart will see any previous
33165    /// data stores already visible to the same RISC-V hart. FENCE.I does _not_
33166    /// ensure that other RISC-V harts' instruction fetches will observe the
33167    /// local hart's stores in a multiprocessor system. To make a store to
33168    /// instruction memory visible to all RISC-V harts, the writing hart also
33169    /// has to execute a data FENCE before requesting that all remote RISC-V
33170    /// harts execute a FENCE.I.
33171    ///
33172    /// The unused fields in the FENCE.I instruction, _imm\[11:0\]_, _rs1_, and
33173    /// _rd_, are reserved for finer-grain fences in future extensions. For
33174    /// forward compatibility, base implementations shall ignore these fields,
33175    /// and standard software shall zero these fields.
33176    /// (((FENCE.I, finer-grained)))
33177    /// (((FENCE.I, forward compatibility)))
33178    ///
33179    /// \[NOTE\]
33180    /// ====
33181    /// Because FENCE.I only orders stores with a hart's own instruction
33182    /// fetches, application code should only rely upon FENCE.I if the
33183    /// application thread will not be migrated to a different hart. The EEI can
33184    /// provide mechanisms for efficient multiprocessor instruction-stream
33185    /// synchronization.
33186    /// ====
33187    ///
33188    /// # Forms
33189    /// Assembly: `fence.i ""`
33190    /// Rust: `fence_i()`
33191    ///
33192    /// # Arguments
33193    pub fn fence_i(&mut self)
33194    where
33195        Self: FenceIEmitter,
33196    {
33197        <Self as FenceIEmitter>::fence_i(self);
33198    }
33199    /// RISC-V `fence.tso` instruction.
33200    ///
33201    /// # Forms
33202    /// Assembly: `fence.tso`
33203    /// Rust: `fence_tso()`
33204    ///
33205    /// # Arguments
33206    pub fn fence_tso(&mut self)
33207    where
33208        Self: FenceTsoEmitter,
33209    {
33210        <Self as FenceTsoEmitter>::fence_tso(self);
33211    }
33212    /// RISC-V `feq.d` instruction.
33213    ///
33214    /// # Forms
33215    /// Assembly: `feq.d xd, xs1, xs2`
33216    /// Rust: `feq_d(rd, rs1, rs2)`
33217    ///
33218    /// # Arguments
33219    /// - `rd` — Destination register.
33220    /// - `rs1` — Source register.
33221    /// - `rs2` — Source register.
33222    pub fn feq_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
33223    where
33224        Self: FeqDEmitter<T0, T1, T2>,
33225    {
33226        <Self as FeqDEmitter<T0, T1, T2>>::feq_d(self, rd, rs1, rs2);
33227    }
33228    /// RISC-V `feq.h` instruction.
33229    ///
33230    /// # Forms
33231    /// Assembly: `feq.h xd, xs1, xs2`
33232    /// Rust: `feq_h(rd, rs1, rs2)`
33233    ///
33234    /// # Arguments
33235    /// - `rd` — Destination register.
33236    /// - `rs1` — Source register.
33237    /// - `rs2` — Source register.
33238    pub fn feq_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
33239    where
33240        Self: FeqHEmitter<T0, T1, T2>,
33241    {
33242        <Self as FeqHEmitter<T0, T1, T2>>::feq_h(self, rd, rs1, rs2);
33243    }
33244    /// RISC-V `feq.q` instruction.
33245    ///
33246    /// # Forms
33247    /// Assembly: `feq.q xd, qs1, qs2`
33248    /// Rust: `feq_q(rd, rs1, rs2)`
33249    ///
33250    /// # Arguments
33251    /// - `rd` — Destination register.
33252    /// - `rs1` — Source register.
33253    /// - `rs2` — Source register.
33254    pub fn feq_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
33255    where
33256        Self: FeqQEmitter<T0, T1, T2>,
33257    {
33258        <Self as FeqQEmitter<T0, T1, T2>>::feq_q(self, rd, rs1, rs2);
33259    }
33260    /// Single-precision floating-point equal
33261    ///
33262    /// Writes 1 to _rd_ if _fs1_ and _fs2_ are equal, and 0 otherwise.
33263    ///
33264    /// If either operand is NaN, the result is 0 (not equal). If either operand is a signaling NaN, the invalid flag is set.
33265    ///
33266    /// Positive zero is considered equal to negative zero.
33267    ///
33268    /// # Forms
33269    /// Assembly: `feq.s xd, fs1, fs2`
33270    /// Rust: `feq_s(rd, rs1, rs2)`
33271    ///
33272    /// # Arguments
33273    /// - `rd` — Destination register.
33274    /// - `rs1` — Source register.
33275    /// - `rs2` — Source register.
33276    pub fn feq_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
33277    where
33278        Self: FeqSEmitter<T0, T1, T2>,
33279    {
33280        <Self as FeqSEmitter<T0, T1, T2>>::feq_s(self, rd, rs1, rs2);
33281    }
33282    /// RISC-V `fld` instruction.
33283    ///
33284    /// # Forms
33285    /// Assembly: `fld xd, xs1, imm`
33286    /// Rust: `fld(rd, rs1, imm)`
33287    ///
33288    /// # Arguments
33289    /// - `rd` — Destination register.
33290    /// - `rs1` — Memory base register.
33291    /// - `imm` — Immediate encoding value.
33292    pub fn fld<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)
33293    where
33294        Self: FldEmitter<T0, T1, T2>,
33295    {
33296        <Self as FldEmitter<T0, T1, T2>>::fld(self, rd, rs1, imm);
33297    }
33298    /// RISC-V `fle.d` instruction.
33299    ///
33300    /// # Forms
33301    /// Assembly: `fle.d xd, xs1, xs2`
33302    /// Rust: `fle_d(rd, rs1, rs2)`
33303    ///
33304    /// # Arguments
33305    /// - `rd` — Destination register.
33306    /// - `rs1` — Source register.
33307    /// - `rs2` — Source register.
33308    pub fn fle_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
33309    where
33310        Self: FleDEmitter<T0, T1, T2>,
33311    {
33312        <Self as FleDEmitter<T0, T1, T2>>::fle_d(self, rd, rs1, rs2);
33313    }
33314    /// RISC-V `fle.h` instruction.
33315    ///
33316    /// # Forms
33317    /// Assembly: `fle.h xd, xs1, xs2`
33318    /// Rust: `fle_h(rd, rs1, rs2)`
33319    ///
33320    /// # Arguments
33321    /// - `rd` — Destination register.
33322    /// - `rs1` — Source register.
33323    /// - `rs2` — Source register.
33324    pub fn fle_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
33325    where
33326        Self: FleHEmitter<T0, T1, T2>,
33327    {
33328        <Self as FleHEmitter<T0, T1, T2>>::fle_h(self, rd, rs1, rs2);
33329    }
33330    /// RISC-V `fle.q` instruction.
33331    ///
33332    /// # Forms
33333    /// Assembly: `fle.q xd, qs1, qs2`
33334    /// Rust: `fle_q(rd, rs1, rs2)`
33335    ///
33336    /// # Arguments
33337    /// - `rd` — Destination register.
33338    /// - `rs1` — Source register.
33339    /// - `rs2` — Source register.
33340    pub fn fle_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
33341    where
33342        Self: FleQEmitter<T0, T1, T2>,
33343    {
33344        <Self as FleQEmitter<T0, T1, T2>>::fle_q(self, rd, rs1, rs2);
33345    }
33346    /// Single-precision floating-point less than or equal
33347    ///
33348    /// Writes 1 to _rd_ if _fs1_ is less than or equal to _fs2_, and 0 otherwise.
33349    ///
33350    /// If either operand is NaN, the result is 0 (not equal).
33351    /// If either operand is a NaN (signaling or quiet), the invalid flag is set.
33352    ///
33353    /// Positive zero and negative zero are considered equal.
33354    ///
33355    /// # Forms
33356    /// Assembly: `fle.s xd, fs1, fs2`
33357    /// Rust: `fle_s(rd, rs1, rs2)`
33358    ///
33359    /// # Arguments
33360    /// - `rd` — Destination register.
33361    /// - `rs1` — Source register.
33362    /// - `rs2` — Source register.
33363    pub fn fle_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
33364    where
33365        Self: FleSEmitter<T0, T1, T2>,
33366    {
33367        <Self as FleSEmitter<T0, T1, T2>>::fle_s(self, rd, rs1, rs2);
33368    }
33369    /// RISC-V `fleq.d` instruction.
33370    ///
33371    /// # Forms
33372    /// Assembly: `fleq.d xd, xs1, xs2`
33373    /// Rust: `fleq_d(rd, rs1, rs2)`
33374    ///
33375    /// # Arguments
33376    /// - `rd` — Destination register.
33377    /// - `rs1` — Source register.
33378    /// - `rs2` — Source register.
33379    pub fn fleq_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
33380    where
33381        Self: FleqDEmitter<T0, T1, T2>,
33382    {
33383        <Self as FleqDEmitter<T0, T1, T2>>::fleq_d(self, rd, rs1, rs2);
33384    }
33385    /// RISC-V `fleq.h` instruction.
33386    ///
33387    /// # Forms
33388    /// Assembly: `fleq.h xd, xs1, xs2`
33389    /// Rust: `fleq_h(rd, rs1, rs2)`
33390    ///
33391    /// # Arguments
33392    /// - `rd` — Destination register.
33393    /// - `rs1` — Source register.
33394    /// - `rs2` — Source register.
33395    pub fn fleq_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
33396    where
33397        Self: FleqHEmitter<T0, T1, T2>,
33398    {
33399        <Self as FleqHEmitter<T0, T1, T2>>::fleq_h(self, rd, rs1, rs2);
33400    }
33401    /// RISC-V `fleq.q` instruction.
33402    ///
33403    /// # Forms
33404    /// Assembly: `fleq.q xd, qs1, qs2`
33405    /// Rust: `fleq_q(rd, rs1, rs2)`
33406    ///
33407    /// # Arguments
33408    /// - `rd` — Destination register.
33409    /// - `rs1` — Source register.
33410    /// - `rs2` — Source register.
33411    pub fn fleq_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
33412    where
33413        Self: FleqQEmitter<T0, T1, T2>,
33414    {
33415        <Self as FleqQEmitter<T0, T1, T2>>::fleq_q(self, rd, rs1, rs2);
33416    }
33417    /// RISC-V `fleq.s` instruction.
33418    ///
33419    /// # Forms
33420    /// Assembly: `fleq.s xd, fs1, fs2`
33421    /// Rust: `fleq_s(rd, rs1, rs2)`
33422    ///
33423    /// # Arguments
33424    /// - `rd` — Destination register.
33425    /// - `rs1` — Source register.
33426    /// - `rs2` — Source register.
33427    pub fn fleq_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
33428    where
33429        Self: FleqSEmitter<T0, T1, T2>,
33430    {
33431        <Self as FleqSEmitter<T0, T1, T2>>::fleq_s(self, rd, rs1, rs2);
33432    }
33433    /// Half-precision floating-point load
33434    ///
33435    /// The `flh` instruction loads a single-precision floating-point value from memory at address _rs1_ + _imm_ into floating-point register _rd_.
33436    ///
33437    /// `flh` does not modify the bits being transferred; in particular, the payloads of non-canonical NaNs are preserved.
33438    ///
33439    /// `flh` is only guaranteed to execute atomically if the effective address is naturally aligned.
33440    ///
33441    /// # Forms
33442    /// Assembly: `flh fd, imm(xs1)`
33443    /// Rust: `flh(rd, rs1, imm)`
33444    ///
33445    /// # Arguments
33446    /// - `rd` — Destination register.
33447    /// - `rs1` — Memory base register.
33448    /// - `imm` — Immediate encoding value.
33449    pub fn flh<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)
33450    where
33451        Self: FlhEmitter<T0, T1, T2>,
33452    {
33453        <Self as FlhEmitter<T0, T1, T2>>::flh(self, rd, rs1, imm);
33454    }
33455    /// RISC-V `fli.d` instruction.
33456    ///
33457    /// # Forms
33458    /// Assembly: `fli.d xd, xs1`
33459    /// Rust: `fli_d(rd, rs1)`
33460    ///
33461    /// # Arguments
33462    /// - `rd` — Destination register.
33463    /// - `rs1` — Source register.
33464    pub fn fli_d<T0, T1>(&mut self, rd: T0, rs1: T1)
33465    where
33466        Self: FliDEmitter<T0, T1>,
33467    {
33468        <Self as FliDEmitter<T0, T1>>::fli_d(self, rd, rs1);
33469    }
33470    /// RISC-V `fli.h` instruction.
33471    ///
33472    /// # Forms
33473    /// Assembly: `fli.h xd, xs1`
33474    /// Rust: `fli_h(rd, rs1)`
33475    ///
33476    /// # Arguments
33477    /// - `rd` — Destination register.
33478    /// - `rs1` — Source register.
33479    pub fn fli_h<T0, T1>(&mut self, rd: T0, rs1: T1)
33480    where
33481        Self: FliHEmitter<T0, T1>,
33482    {
33483        <Self as FliHEmitter<T0, T1>>::fli_h(self, rd, rs1);
33484    }
33485    /// RISC-V `fli.q` instruction.
33486    ///
33487    /// # Forms
33488    /// Assembly: `fli.q fd, qs1`
33489    /// Rust: `fli_q(rd, rs1)`
33490    ///
33491    /// # Arguments
33492    /// - `rd` — Destination register.
33493    /// - `rs1` — Source register.
33494    pub fn fli_q<T0, T1>(&mut self, rd: T0, rs1: T1)
33495    where
33496        Self: FliQEmitter<T0, T1>,
33497    {
33498        <Self as FliQEmitter<T0, T1>>::fli_q(self, rd, rs1);
33499    }
33500    /// RISC-V `fli.s` instruction.
33501    ///
33502    /// # Forms
33503    /// Assembly: `fli.s fd, fs1`
33504    /// Rust: `fli_s(rd, rs1)`
33505    ///
33506    /// # Arguments
33507    /// - `rd` — Destination register.
33508    /// - `rs1` — Source register.
33509    pub fn fli_s<T0, T1>(&mut self, rd: T0, rs1: T1)
33510    where
33511        Self: FliSEmitter<T0, T1>,
33512    {
33513        <Self as FliSEmitter<T0, T1>>::fli_s(self, rd, rs1);
33514    }
33515    /// RISC-V `flq` instruction.
33516    ///
33517    /// # Forms
33518    /// Assembly: `flq qd, xs1, imm`
33519    /// Rust: `flq(rd, rs1, imm)`
33520    ///
33521    /// # Arguments
33522    /// - `rd` — Destination register.
33523    /// - `rs1` — Memory base register.
33524    /// - `imm` — Immediate encoding value.
33525    pub fn flq<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)
33526    where
33527        Self: FlqEmitter<T0, T1, T2>,
33528    {
33529        <Self as FlqEmitter<T0, T1, T2>>::flq(self, rd, rs1, imm);
33530    }
33531    /// RISC-V `flt.d` instruction.
33532    ///
33533    /// # Forms
33534    /// Assembly: `flt.d xd, xs1, xs2`
33535    /// Rust: `flt_d(rd, rs1, rs2)`
33536    ///
33537    /// # Arguments
33538    /// - `rd` — Destination register.
33539    /// - `rs1` — Source register.
33540    /// - `rs2` — Source register.
33541    pub fn flt_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
33542    where
33543        Self: FltDEmitter<T0, T1, T2>,
33544    {
33545        <Self as FltDEmitter<T0, T1, T2>>::flt_d(self, rd, rs1, rs2);
33546    }
33547    /// RISC-V `flt.h` instruction.
33548    ///
33549    /// # Forms
33550    /// Assembly: `flt.h xd, xs1, xs2`
33551    /// Rust: `flt_h(rd, rs1, rs2)`
33552    ///
33553    /// # Arguments
33554    /// - `rd` — Destination register.
33555    /// - `rs1` — Source register.
33556    /// - `rs2` — Source register.
33557    pub fn flt_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
33558    where
33559        Self: FltHEmitter<T0, T1, T2>,
33560    {
33561        <Self as FltHEmitter<T0, T1, T2>>::flt_h(self, rd, rs1, rs2);
33562    }
33563    /// RISC-V `flt.q` instruction.
33564    ///
33565    /// # Forms
33566    /// Assembly: `flt.q xd, qs1, qs2`
33567    /// Rust: `flt_q(rd, rs1, rs2)`
33568    ///
33569    /// # Arguments
33570    /// - `rd` — Destination register.
33571    /// - `rs1` — Source register.
33572    /// - `rs2` — Source register.
33573    pub fn flt_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
33574    where
33575        Self: FltQEmitter<T0, T1, T2>,
33576    {
33577        <Self as FltQEmitter<T0, T1, T2>>::flt_q(self, rd, rs1, rs2);
33578    }
33579    /// Single-precision floating-point less than
33580    ///
33581    /// Writes 1 to _rd_ if _fs1_ is less than _fs2_, and 0 otherwise.
33582    ///
33583    /// If either operand is NaN, the result is 0 (not equal).
33584    /// If either operand is a NaN (signaling or quiet), the invalid flag is set.
33585    ///
33586    /// # Forms
33587    /// Assembly: `flt.s xd, fs1, fs2`
33588    /// Rust: `flt_s(rd, rs1, rs2)`
33589    ///
33590    /// # Arguments
33591    /// - `rd` — Destination register.
33592    /// - `rs1` — Source register.
33593    /// - `rs2` — Source register.
33594    pub fn flt_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
33595    where
33596        Self: FltSEmitter<T0, T1, T2>,
33597    {
33598        <Self as FltSEmitter<T0, T1, T2>>::flt_s(self, rd, rs1, rs2);
33599    }
33600    /// RISC-V `fltq.d` instruction.
33601    ///
33602    /// # Forms
33603    /// Assembly: `fltq.d xd, xs1, xs2`
33604    /// Rust: `fltq_d(rd, rs1, rs2)`
33605    ///
33606    /// # Arguments
33607    /// - `rd` — Destination register.
33608    /// - `rs1` — Source register.
33609    /// - `rs2` — Source register.
33610    pub fn fltq_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
33611    where
33612        Self: FltqDEmitter<T0, T1, T2>,
33613    {
33614        <Self as FltqDEmitter<T0, T1, T2>>::fltq_d(self, rd, rs1, rs2);
33615    }
33616    /// RISC-V `fltq.h` instruction.
33617    ///
33618    /// # Forms
33619    /// Assembly: `fltq.h xd, xs1, xs2`
33620    /// Rust: `fltq_h(rd, rs1, rs2)`
33621    ///
33622    /// # Arguments
33623    /// - `rd` — Destination register.
33624    /// - `rs1` — Source register.
33625    /// - `rs2` — Source register.
33626    pub fn fltq_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
33627    where
33628        Self: FltqHEmitter<T0, T1, T2>,
33629    {
33630        <Self as FltqHEmitter<T0, T1, T2>>::fltq_h(self, rd, rs1, rs2);
33631    }
33632    /// RISC-V `fltq.q` instruction.
33633    ///
33634    /// # Forms
33635    /// Assembly: `fltq.q qd, qs1, qs2`
33636    /// Rust: `fltq_q(rd, rs1, rs2)`
33637    ///
33638    /// # Arguments
33639    /// - `rd` — Destination register.
33640    /// - `rs1` — Source register.
33641    /// - `rs2` — Source register.
33642    pub fn fltq_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
33643    where
33644        Self: FltqQEmitter<T0, T1, T2>,
33645    {
33646        <Self as FltqQEmitter<T0, T1, T2>>::fltq_q(self, rd, rs1, rs2);
33647    }
33648    /// RISC-V `fltq.s` instruction.
33649    ///
33650    /// # Forms
33651    /// Assembly: `fltq.s xd, fs1, fs2`
33652    /// Rust: `fltq_s(rd, rs1, rs2)`
33653    ///
33654    /// # Arguments
33655    /// - `rd` — Destination register.
33656    /// - `rs1` — Source register.
33657    /// - `rs2` — Source register.
33658    pub fn fltq_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
33659    where
33660        Self: FltqSEmitter<T0, T1, T2>,
33661    {
33662        <Self as FltqSEmitter<T0, T1, T2>>::fltq_s(self, rd, rs1, rs2);
33663    }
33664    /// Single-precision floating-point load
33665    ///
33666    /// The `flw` instruction loads a single-precision floating-point value from memory at address _rs1_ + _imm_ into floating-point register _fd_.
33667    ///
33668    /// `flw` does not modify the bits being transferred; in particular, the payloads of non-canonical NaNs are preserved.
33669    ///
33670    /// # Forms
33671    /// Assembly: `flw fd, xs1, imm`
33672    /// Rust: `flw(rd, rs1, imm)`
33673    ///
33674    /// # Arguments
33675    /// - `rd` — Destination register.
33676    /// - `rs1` — Memory base register.
33677    /// - `imm` — Immediate encoding value.
33678    pub fn flw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)
33679    where
33680        Self: FlwEmitter<T0, T1, T2>,
33681    {
33682        <Self as FlwEmitter<T0, T1, T2>>::flw(self, rd, rs1, imm);
33683    }
33684    /// RISC-V `fmadd.d` instruction.
33685    ///
33686    /// # Forms
33687    /// Assembly: `fmadd.d xd, xs1, xs2, xs3, rm`
33688    /// Rust: `fmadd_d(rd, rs1, rs2, rs3, rm)`
33689    ///
33690    /// # Arguments
33691    /// - `rd` — Destination register.
33692    /// - `rs1` — Source register.
33693    /// - `rs2` — Source register.
33694    /// - `rs3` — Source register.
33695    /// - `rm` — Rounding mode.
33696    pub fn fmadd_d<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, rs3: T3, rm: T4)
33697    where
33698        Self: FmaddDEmitter<T0, T1, T2, T3, T4>,
33699    {
33700        <Self as FmaddDEmitter<T0, T1, T2, T3, T4>>::fmadd_d(self, rd, rs1, rs2, rs3, rm);
33701    }
33702    /// RISC-V `fmadd.h` instruction.
33703    ///
33704    /// # Forms
33705    /// Assembly: `fmadd.h xd, xs1, xs2, xs3, rm`
33706    /// Rust: `fmadd_h(rd, rs1, rs2, rs3, rm)`
33707    ///
33708    /// # Arguments
33709    /// - `rd` — Destination register.
33710    /// - `rs1` — Source register.
33711    /// - `rs2` — Source register.
33712    /// - `rs3` — Source register.
33713    /// - `rm` — Rounding mode.
33714    pub fn fmadd_h<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, rs3: T3, rm: T4)
33715    where
33716        Self: FmaddHEmitter<T0, T1, T2, T3, T4>,
33717    {
33718        <Self as FmaddHEmitter<T0, T1, T2, T3, T4>>::fmadd_h(self, rd, rs1, rs2, rs3, rm);
33719    }
33720    /// RISC-V `fmadd.q` instruction.
33721    ///
33722    /// # Forms
33723    /// Assembly: `fmadd.q qd, qs1, qs2, qs3, rm`
33724    /// Rust: `fmadd_q(rd, rs1, rs2, rs3, rm)`
33725    ///
33726    /// # Arguments
33727    /// - `rd` — Destination register.
33728    /// - `rs1` — Source register.
33729    /// - `rs2` — Source register.
33730    /// - `rs3` — Source register.
33731    /// - `rm` — Rounding mode.
33732    pub fn fmadd_q<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, rs3: T3, rm: T4)
33733    where
33734        Self: FmaddQEmitter<T0, T1, T2, T3, T4>,
33735    {
33736        <Self as FmaddQEmitter<T0, T1, T2, T3, T4>>::fmadd_q(self, rd, rs1, rs2, rs3, rm);
33737    }
33738    /// RISC-V `fmadd.s` instruction.
33739    ///
33740    /// # Forms
33741    /// Assembly: `fmadd.s fd, fs1, fs2, fs3, rm`
33742    /// Rust: `fmadd_s(rd, rs1, rs2, rs3, rm)`
33743    ///
33744    /// # Arguments
33745    /// - `rd` — Destination register.
33746    /// - `rs1` — Source register.
33747    /// - `rs2` — Source register.
33748    /// - `rs3` — Source register.
33749    /// - `rm` — Rounding mode.
33750    pub fn fmadd_s<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, rs3: T3, rm: T4)
33751    where
33752        Self: FmaddSEmitter<T0, T1, T2, T3, T4>,
33753    {
33754        <Self as FmaddSEmitter<T0, T1, T2, T3, T4>>::fmadd_s(self, rd, rs1, rs2, rs3, rm);
33755    }
33756    /// RISC-V `fmax.d` instruction.
33757    ///
33758    /// # Forms
33759    /// Assembly: `fmax.d xd, xs1, xs2`
33760    /// Rust: `fmax_d(rd, rs1, rs2)`
33761    ///
33762    /// # Arguments
33763    /// - `rd` — Destination register.
33764    /// - `rs1` — Source register.
33765    /// - `rs2` — Source register.
33766    pub fn fmax_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
33767    where
33768        Self: FmaxDEmitter<T0, T1, T2>,
33769    {
33770        <Self as FmaxDEmitter<T0, T1, T2>>::fmax_d(self, rd, rs1, rs2);
33771    }
33772    /// RISC-V `fmax.h` instruction.
33773    ///
33774    /// # Forms
33775    /// Assembly: `fmax.h xd, xs1, xs2`
33776    /// Rust: `fmax_h(rd, rs1, rs2)`
33777    ///
33778    /// # Arguments
33779    /// - `rd` — Destination register.
33780    /// - `rs1` — Source register.
33781    /// - `rs2` — Source register.
33782    pub fn fmax_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
33783    where
33784        Self: FmaxHEmitter<T0, T1, T2>,
33785    {
33786        <Self as FmaxHEmitter<T0, T1, T2>>::fmax_h(self, rd, rs1, rs2);
33787    }
33788    /// RISC-V `fmax.q` instruction.
33789    ///
33790    /// # Forms
33791    /// Assembly: `fmax.q qd, qs1, qs2`
33792    /// Rust: `fmax_q(rd, rs1, rs2)`
33793    ///
33794    /// # Arguments
33795    /// - `rd` — Destination register.
33796    /// - `rs1` — Source register.
33797    /// - `rs2` — Source register.
33798    pub fn fmax_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
33799    where
33800        Self: FmaxQEmitter<T0, T1, T2>,
33801    {
33802        <Self as FmaxQEmitter<T0, T1, T2>>::fmax_q(self, rd, rs1, rs2);
33803    }
33804    /// RISC-V `fmax.s` instruction.
33805    ///
33806    /// # Forms
33807    /// Assembly: `fmax.s fd, fs1, fs2`
33808    /// Rust: `fmax_s(rd, rs1, rs2)`
33809    ///
33810    /// # Arguments
33811    /// - `rd` — Destination register.
33812    /// - `rs1` — Source register.
33813    /// - `rs2` — Source register.
33814    pub fn fmax_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
33815    where
33816        Self: FmaxSEmitter<T0, T1, T2>,
33817    {
33818        <Self as FmaxSEmitter<T0, T1, T2>>::fmax_s(self, rd, rs1, rs2);
33819    }
33820    /// RISC-V `fmaxm.d` instruction.
33821    ///
33822    /// # Forms
33823    /// Assembly: `fmaxm.d xd, xs1, xs2`
33824    /// Rust: `fmaxm_d(rd, rs1, rs2)`
33825    ///
33826    /// # Arguments
33827    /// - `rd` — Destination register.
33828    /// - `rs1` — Source register.
33829    /// - `rs2` — Source register.
33830    pub fn fmaxm_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
33831    where
33832        Self: FmaxmDEmitter<T0, T1, T2>,
33833    {
33834        <Self as FmaxmDEmitter<T0, T1, T2>>::fmaxm_d(self, rd, rs1, rs2);
33835    }
33836    /// RISC-V `fmaxm.h` instruction.
33837    ///
33838    /// # Forms
33839    /// Assembly: `fmaxm.h xd, xs1, xs2`
33840    /// Rust: `fmaxm_h(rd, rs1, rs2)`
33841    ///
33842    /// # Arguments
33843    /// - `rd` — Destination register.
33844    /// - `rs1` — Source register.
33845    /// - `rs2` — Source register.
33846    pub fn fmaxm_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
33847    where
33848        Self: FmaxmHEmitter<T0, T1, T2>,
33849    {
33850        <Self as FmaxmHEmitter<T0, T1, T2>>::fmaxm_h(self, rd, rs1, rs2);
33851    }
33852    /// RISC-V `fmaxm.q` instruction.
33853    ///
33854    /// # Forms
33855    /// Assembly: `fmaxm.q qd, qs1, qs2`
33856    /// Rust: `fmaxm_q(rd, rs1, rs2)`
33857    ///
33858    /// # Arguments
33859    /// - `rd` — Destination register.
33860    /// - `rs1` — Source register.
33861    /// - `rs2` — Source register.
33862    pub fn fmaxm_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
33863    where
33864        Self: FmaxmQEmitter<T0, T1, T2>,
33865    {
33866        <Self as FmaxmQEmitter<T0, T1, T2>>::fmaxm_q(self, rd, rs1, rs2);
33867    }
33868    /// RISC-V `fmaxm.s` instruction.
33869    ///
33870    /// # Forms
33871    /// Assembly: `fmaxm.s xd, xs1, xs2`
33872    /// Rust: `fmaxm_s(rd, rs1, rs2)`
33873    ///
33874    /// # Arguments
33875    /// - `rd` — Destination register.
33876    /// - `rs1` — Source register.
33877    /// - `rs2` — Source register.
33878    pub fn fmaxm_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
33879    where
33880        Self: FmaxmSEmitter<T0, T1, T2>,
33881    {
33882        <Self as FmaxmSEmitter<T0, T1, T2>>::fmaxm_s(self, rd, rs1, rs2);
33883    }
33884    /// RISC-V `fmin.d` instruction.
33885    ///
33886    /// # Forms
33887    /// Assembly: `fmin.d xd, xs1, xs2`
33888    /// Rust: `fmin_d(rd, rs1, rs2)`
33889    ///
33890    /// # Arguments
33891    /// - `rd` — Destination register.
33892    /// - `rs1` — Source register.
33893    /// - `rs2` — Source register.
33894    pub fn fmin_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
33895    where
33896        Self: FminDEmitter<T0, T1, T2>,
33897    {
33898        <Self as FminDEmitter<T0, T1, T2>>::fmin_d(self, rd, rs1, rs2);
33899    }
33900    /// RISC-V `fmin.h` instruction.
33901    ///
33902    /// # Forms
33903    /// Assembly: `fmin.h xd, xs1, xs2`
33904    /// Rust: `fmin_h(rd, rs1, rs2)`
33905    ///
33906    /// # Arguments
33907    /// - `rd` — Destination register.
33908    /// - `rs1` — Source register.
33909    /// - `rs2` — Source register.
33910    pub fn fmin_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
33911    where
33912        Self: FminHEmitter<T0, T1, T2>,
33913    {
33914        <Self as FminHEmitter<T0, T1, T2>>::fmin_h(self, rd, rs1, rs2);
33915    }
33916    /// RISC-V `fmin.q` instruction.
33917    ///
33918    /// # Forms
33919    /// Assembly: `fmin.q xd, xs1, xs2`
33920    /// Rust: `fmin_q(rd, rs1, rs2)`
33921    ///
33922    /// # Arguments
33923    /// - `rd` — Destination register.
33924    /// - `rs1` — Source register.
33925    /// - `rs2` — Source register.
33926    pub fn fmin_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
33927    where
33928        Self: FminQEmitter<T0, T1, T2>,
33929    {
33930        <Self as FminQEmitter<T0, T1, T2>>::fmin_q(self, rd, rs1, rs2);
33931    }
33932    /// RISC-V `fmin.s` instruction.
33933    ///
33934    /// # Forms
33935    /// Assembly: `fmin.s xd, xs1, xs2`
33936    /// Rust: `fmin_s(rd, rs1, rs2)`
33937    ///
33938    /// # Arguments
33939    /// - `rd` — Destination register.
33940    /// - `rs1` — Source register.
33941    /// - `rs2` — Source register.
33942    pub fn fmin_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
33943    where
33944        Self: FminSEmitter<T0, T1, T2>,
33945    {
33946        <Self as FminSEmitter<T0, T1, T2>>::fmin_s(self, rd, rs1, rs2);
33947    }
33948    /// RISC-V `fminm.d` instruction.
33949    ///
33950    /// # Forms
33951    /// Assembly: `fminm.d xd, xs1, xs2`
33952    /// Rust: `fminm_d(rd, rs1, rs2)`
33953    ///
33954    /// # Arguments
33955    /// - `rd` — Destination register.
33956    /// - `rs1` — Source register.
33957    /// - `rs2` — Source register.
33958    pub fn fminm_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
33959    where
33960        Self: FminmDEmitter<T0, T1, T2>,
33961    {
33962        <Self as FminmDEmitter<T0, T1, T2>>::fminm_d(self, rd, rs1, rs2);
33963    }
33964    /// RISC-V `fminm.h` instruction.
33965    ///
33966    /// # Forms
33967    /// Assembly: `fminm.h xd, xs1, xs2`
33968    /// Rust: `fminm_h(rd, rs1, rs2)`
33969    ///
33970    /// # Arguments
33971    /// - `rd` — Destination register.
33972    /// - `rs1` — Source register.
33973    /// - `rs2` — Source register.
33974    pub fn fminm_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
33975    where
33976        Self: FminmHEmitter<T0, T1, T2>,
33977    {
33978        <Self as FminmHEmitter<T0, T1, T2>>::fminm_h(self, rd, rs1, rs2);
33979    }
33980    /// RISC-V `fminm.q` instruction.
33981    ///
33982    /// # Forms
33983    /// Assembly: `fminm.q qd, qs1, qs2`
33984    /// Rust: `fminm_q(rd, rs1, rs2)`
33985    ///
33986    /// # Arguments
33987    /// - `rd` — Destination register.
33988    /// - `rs1` — Source register.
33989    /// - `rs2` — Source register.
33990    pub fn fminm_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
33991    where
33992        Self: FminmQEmitter<T0, T1, T2>,
33993    {
33994        <Self as FminmQEmitter<T0, T1, T2>>::fminm_q(self, rd, rs1, rs2);
33995    }
33996    /// RISC-V `fminm.s` instruction.
33997    ///
33998    /// # Forms
33999    /// Assembly: `fminm.s fd, fs1, fs2`
34000    /// Rust: `fminm_s(rd, rs1, rs2)`
34001    ///
34002    /// # Arguments
34003    /// - `rd` — Destination register.
34004    /// - `rs1` — Source register.
34005    /// - `rs2` — Source register.
34006    pub fn fminm_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
34007    where
34008        Self: FminmSEmitter<T0, T1, T2>,
34009    {
34010        <Self as FminmSEmitter<T0, T1, T2>>::fminm_s(self, rd, rs1, rs2);
34011    }
34012    /// RISC-V `fmsub.d` instruction.
34013    ///
34014    /// # Forms
34015    /// Assembly: `fmsub.d xd, xs1, xs2, xs3, rm`
34016    /// Rust: `fmsub_d(rd, rs1, rs2, rs3, rm)`
34017    ///
34018    /// # Arguments
34019    /// - `rd` — Destination register.
34020    /// - `rs1` — Source register.
34021    /// - `rs2` — Source register.
34022    /// - `rs3` — Source register.
34023    /// - `rm` — Rounding mode.
34024    pub fn fmsub_d<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, rs3: T3, rm: T4)
34025    where
34026        Self: FmsubDEmitter<T0, T1, T2, T3, T4>,
34027    {
34028        <Self as FmsubDEmitter<T0, T1, T2, T3, T4>>::fmsub_d(self, rd, rs1, rs2, rs3, rm);
34029    }
34030    /// RISC-V `fmsub.h` instruction.
34031    ///
34032    /// # Forms
34033    /// Assembly: `fmsub.h xd, xs1, xs2, xs3, rm`
34034    /// Rust: `fmsub_h(rd, rs1, rs2, rs3, rm)`
34035    ///
34036    /// # Arguments
34037    /// - `rd` — Destination register.
34038    /// - `rs1` — Source register.
34039    /// - `rs2` — Source register.
34040    /// - `rs3` — Source register.
34041    /// - `rm` — Rounding mode.
34042    pub fn fmsub_h<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, rs3: T3, rm: T4)
34043    where
34044        Self: FmsubHEmitter<T0, T1, T2, T3, T4>,
34045    {
34046        <Self as FmsubHEmitter<T0, T1, T2, T3, T4>>::fmsub_h(self, rd, rs1, rs2, rs3, rm);
34047    }
34048    /// RISC-V `fmsub.q` instruction.
34049    ///
34050    /// # Forms
34051    /// Assembly: `fmsub.q qd, qs1, qs2, qs3, rm`
34052    /// Rust: `fmsub_q(rd, rs1, rs2, rs3, rm)`
34053    ///
34054    /// # Arguments
34055    /// - `rd` — Destination register.
34056    /// - `rs1` — Source register.
34057    /// - `rs2` — Source register.
34058    /// - `rs3` — Source register.
34059    /// - `rm` — Rounding mode.
34060    pub fn fmsub_q<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, rs3: T3, rm: T4)
34061    where
34062        Self: FmsubQEmitter<T0, T1, T2, T3, T4>,
34063    {
34064        <Self as FmsubQEmitter<T0, T1, T2, T3, T4>>::fmsub_q(self, rd, rs1, rs2, rs3, rm);
34065    }
34066    /// RISC-V `fmsub.s` instruction.
34067    ///
34068    /// # Forms
34069    /// Assembly: `fmsub.s fd, fs1, fs2, fs3, rm`
34070    /// Rust: `fmsub_s(rd, rs1, rs2, rs3, rm)`
34071    ///
34072    /// # Arguments
34073    /// - `rd` — Destination register.
34074    /// - `rs1` — Source register.
34075    /// - `rs2` — Source register.
34076    /// - `rs3` — Source register.
34077    /// - `rm` — Rounding mode.
34078    pub fn fmsub_s<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, rs3: T3, rm: T4)
34079    where
34080        Self: FmsubSEmitter<T0, T1, T2, T3, T4>,
34081    {
34082        <Self as FmsubSEmitter<T0, T1, T2, T3, T4>>::fmsub_s(self, rd, rs1, rs2, rs3, rm);
34083    }
34084    /// RISC-V `fmul.d` instruction.
34085    ///
34086    /// # Forms
34087    /// Assembly: `fmul.d xd, xs1, xs2, rm`
34088    /// Rust: `fmul_d(rd, rs1, rs2, rm)`
34089    ///
34090    /// # Arguments
34091    /// - `rd` — Destination register.
34092    /// - `rs1` — Source register.
34093    /// - `rs2` — Source register.
34094    /// - `rm` — Rounding mode.
34095    pub fn fmul_d<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)
34096    where
34097        Self: FmulDEmitter<T0, T1, T2, T3>,
34098    {
34099        <Self as FmulDEmitter<T0, T1, T2, T3>>::fmul_d(self, rd, rs1, rs2, rm);
34100    }
34101    /// RISC-V `fmul.h` instruction.
34102    ///
34103    /// # Forms
34104    /// Assembly: `fmul.h xd, xs1, xs2, rm`
34105    /// Rust: `fmul_h(rd, rs1, rs2, rm)`
34106    ///
34107    /// # Arguments
34108    /// - `rd` — Destination register.
34109    /// - `rs1` — Source register.
34110    /// - `rs2` — Source register.
34111    /// - `rm` — Rounding mode.
34112    pub fn fmul_h<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)
34113    where
34114        Self: FmulHEmitter<T0, T1, T2, T3>,
34115    {
34116        <Self as FmulHEmitter<T0, T1, T2, T3>>::fmul_h(self, rd, rs1, rs2, rm);
34117    }
34118    /// RISC-V `fmul.q` instruction.
34119    ///
34120    /// # Forms
34121    /// Assembly: `fmul.q qd, qs1, qs2, rm`
34122    /// Rust: `fmul_q(rd, rs1, rs2, rm)`
34123    ///
34124    /// # Arguments
34125    /// - `rd` — Destination register.
34126    /// - `rs1` — Source register.
34127    /// - `rs2` — Source register.
34128    /// - `rm` — Rounding mode.
34129    pub fn fmul_q<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)
34130    where
34131        Self: FmulQEmitter<T0, T1, T2, T3>,
34132    {
34133        <Self as FmulQEmitter<T0, T1, T2, T3>>::fmul_q(self, rd, rs1, rs2, rm);
34134    }
34135    /// RISC-V `fmul.s` instruction.
34136    ///
34137    /// # Forms
34138    /// Assembly: `fmul.s fd, fs1, fs2, rm`
34139    /// Rust: `fmul_s(rd, rs1, rs2, rm)`
34140    ///
34141    /// # Arguments
34142    /// - `rd` — Destination register.
34143    /// - `rs1` — Source register.
34144    /// - `rs2` — Source register.
34145    /// - `rm` — Rounding mode.
34146    pub fn fmul_s<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)
34147    where
34148        Self: FmulSEmitter<T0, T1, T2, T3>,
34149    {
34150        <Self as FmulSEmitter<T0, T1, T2, T3>>::fmul_s(self, rd, rs1, rs2, rm);
34151    }
34152    /// RISC-V `fmv.d` instruction.
34153    ///
34154    /// # Forms
34155    /// Assembly: `fmv.d rd rs1 rs2_eq_rs1`
34156    /// Rust: `fmv_d(rd, rs1, rs2)`
34157    ///
34158    /// # Arguments
34159    /// - `rd` — Destination register.
34160    /// - `rs1` — Source register.
34161    /// - `rs2` — Source register.
34162    pub fn fmv_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
34163    where
34164        Self: FmvDEmitter<T0, T1, T2>,
34165    {
34166        <Self as FmvDEmitter<T0, T1, T2>>::fmv_d(self, rd, rs1, rs2);
34167    }
34168    /// RISC-V `fmv.d.x` instruction.
34169    ///
34170    /// # Forms
34171    /// Assembly: `fmv.d.x xd, xs1`
34172    /// Rust: `fmv_d_x(rd, rs1)`
34173    ///
34174    /// # Arguments
34175    /// - `rd` — Destination register.
34176    /// - `rs1` — Source register.
34177    pub fn fmv_d_x<T0, T1>(&mut self, rd: T0, rs1: T1)
34178    where
34179        Self: FmvDXEmitter<T0, T1>,
34180    {
34181        <Self as FmvDXEmitter<T0, T1>>::fmv_d_x(self, rd, rs1);
34182    }
34183    /// RISC-V `fmv.h` instruction.
34184    ///
34185    /// # Forms
34186    /// Assembly: `fmv.h rd rs1 rs2_eq_rs1`
34187    /// Rust: `fmv_h(rd, rs1, rs2)`
34188    ///
34189    /// # Arguments
34190    /// - `rd` — Destination register.
34191    /// - `rs1` — Source register.
34192    /// - `rs2` — Source register.
34193    pub fn fmv_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
34194    where
34195        Self: FmvHEmitter<T0, T1, T2>,
34196    {
34197        <Self as FmvHEmitter<T0, T1, T2>>::fmv_h(self, rd, rs1, rs2);
34198    }
34199    /// Half-precision floating-point move from integer
34200    ///
34201    /// Moves the half-precision value encoded in IEEE 754-2008 standard encoding
34202    /// from the lower 16 bits of integer register `rs1` to the floating-point
34203    /// register `fd`. The bits are not modified in the transfer, and in particular,
34204    /// the payloads of non-canonical NaNs are preserved.
34205    ///
34206    /// # Forms
34207    /// Assembly: `fmv.h.x fd, xs1`
34208    /// Rust: `fmv_h_x(rd, rs1)`
34209    ///
34210    /// # Arguments
34211    /// - `rd` — Destination register.
34212    /// - `rs1` — Source register.
34213    pub fn fmv_h_x<T0, T1>(&mut self, rd: T0, rs1: T1)
34214    where
34215        Self: FmvHXEmitter<T0, T1>,
34216    {
34217        <Self as FmvHXEmitter<T0, T1>>::fmv_h_x(self, rd, rs1);
34218    }
34219    /// RISC-V `fmv.q` instruction.
34220    ///
34221    /// # Forms
34222    /// Assembly: `fmv.q rd rs1 rs2_eq_rs1`
34223    /// Rust: `fmv_q(rd, rs1, rs2)`
34224    ///
34225    /// # Arguments
34226    /// - `rd` — Destination register.
34227    /// - `rs1` — Source register.
34228    /// - `rs2` — Source register.
34229    pub fn fmv_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
34230    where
34231        Self: FmvQEmitter<T0, T1, T2>,
34232    {
34233        <Self as FmvQEmitter<T0, T1, T2>>::fmv_q(self, rd, rs1, rs2);
34234    }
34235    /// RISC-V `fmv.s` instruction.
34236    ///
34237    /// # Forms
34238    /// Assembly: `fmv.s rd rs1 rs2_eq_rs1`
34239    /// Rust: `fmv_s(rd, rs1, rs2)`
34240    ///
34241    /// # Arguments
34242    /// - `rd` — Destination register.
34243    /// - `rs1` — Source register.
34244    /// - `rs2` — Source register.
34245    pub fn fmv_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
34246    where
34247        Self: FmvSEmitter<T0, T1, T2>,
34248    {
34249        <Self as FmvSEmitter<T0, T1, T2>>::fmv_s(self, rd, rs1, rs2);
34250    }
34251    /// RISC-V `fmv.s.x` instruction.
34252    ///
34253    /// # Forms
34254    /// Assembly: `fmv.s.x rd rs1`
34255    /// Rust: `fmv_s_x(rd, rs1)`
34256    ///
34257    /// # Arguments
34258    /// - `rd` — Destination register.
34259    /// - `rs1` — Source register.
34260    pub fn fmv_s_x<T0, T1>(&mut self, rd: T0, rs1: T1)
34261    where
34262        Self: FmvSXEmitter<T0, T1>,
34263    {
34264        <Self as FmvSXEmitter<T0, T1>>::fmv_s_x(self, rd, rs1);
34265    }
34266    /// Single-precision floating-point move from integer
34267    ///
34268    /// Moves the single-precision value encoded in IEEE 754-2008 standard encoding
34269    /// from the lower 32 bits of integer register `rs1` to the floating-point
34270    /// register `fd`. The bits are not modified in the transfer, and in particular,
34271    /// the payloads of non-canonical NaNs are preserved.
34272    ///
34273    /// # Forms
34274    /// Assembly: `fmv.w.x fd, xs1`
34275    /// Rust: `fmv_w_x(rd, rs1)`
34276    ///
34277    /// # Arguments
34278    /// - `rd` — Destination register.
34279    /// - `rs1` — Source register.
34280    pub fn fmv_w_x<T0, T1>(&mut self, rd: T0, rs1: T1)
34281    where
34282        Self: FmvWXEmitter<T0, T1>,
34283    {
34284        <Self as FmvWXEmitter<T0, T1>>::fmv_w_x(self, rd, rs1);
34285    }
34286    /// RISC-V `fmv.x.d` instruction.
34287    ///
34288    /// # Forms
34289    /// Assembly: `fmv.x.d xd, xs1`
34290    /// Rust: `fmv_x_d(rd, rs1)`
34291    ///
34292    /// # Arguments
34293    /// - `rd` — Destination register.
34294    /// - `rs1` — Source register.
34295    pub fn fmv_x_d<T0, T1>(&mut self, rd: T0, rs1: T1)
34296    where
34297        Self: FmvXDEmitter<T0, T1>,
34298    {
34299        <Self as FmvXDEmitter<T0, T1>>::fmv_x_d(self, rd, rs1);
34300    }
34301    /// Move half-precision value from floating-point to integer register
34302    ///
34303    /// Moves the half-precision value in floating-point register rs1 represented in IEEE 754-2008
34304    /// encoding to the lower 16 bits of integer register rd.
34305    ///
34306    /// The bits are not modified in the transfer, and in particular, the payloads of non-canonical
34307    /// NaNs are preserved.
34308    ///
34309    /// The highest XLEN-16 bits of the destination register are filled with copies of the
34310    /// floating-point number's sign bit.
34311    ///
34312    /// # Forms
34313    /// Assembly: `fmv.x.h rd, fs1`
34314    /// Rust: `fmv_x_h(rd, rs1)`
34315    ///
34316    /// # Arguments
34317    /// - `rd` — Destination register.
34318    /// - `rs1` — Source register.
34319    pub fn fmv_x_h<T0, T1>(&mut self, rd: T0, rs1: T1)
34320    where
34321        Self: FmvXHEmitter<T0, T1>,
34322    {
34323        <Self as FmvXHEmitter<T0, T1>>::fmv_x_h(self, rd, rs1);
34324    }
34325    /// RISC-V `fmv.x.s` instruction.
34326    ///
34327    /// # Forms
34328    /// Assembly: `fmv.x.s rd rs1`
34329    /// Rust: `fmv_x_s(rd, rs1)`
34330    ///
34331    /// # Arguments
34332    /// - `rd` — Destination register.
34333    /// - `rs1` — Source register.
34334    pub fn fmv_x_s<T0, T1>(&mut self, rd: T0, rs1: T1)
34335    where
34336        Self: FmvXSEmitter<T0, T1>,
34337    {
34338        <Self as FmvXSEmitter<T0, T1>>::fmv_x_s(self, rd, rs1);
34339    }
34340    /// Move single-precision value from floating-point to integer register
34341    ///
34342    /// Moves the single-precision value in floating-point register rs1 represented in IEEE 754-2008
34343    /// encoding to the lower 32 bits of integer register rd.
34344    /// The bits are not modified in the transfer, and in particular, the payloads of non-canonical
34345    /// NaNs are preserved.
34346    /// For RV64, the higher 32 bits of the destination register are filled with copies of the
34347    /// floating-point number's sign bit.
34348    ///
34349    /// # Forms
34350    /// Assembly: `fmv.x.w xd, fs1`
34351    /// Rust: `fmv_x_w(rd, rs1)`
34352    ///
34353    /// # Arguments
34354    /// - `rd` — Destination register.
34355    /// - `rs1` — Source register.
34356    pub fn fmv_x_w<T0, T1>(&mut self, rd: T0, rs1: T1)
34357    where
34358        Self: FmvXWEmitter<T0, T1>,
34359    {
34360        <Self as FmvXWEmitter<T0, T1>>::fmv_x_w(self, rd, rs1);
34361    }
34362    /// RISC-V `fmvh.x.d` instruction.
34363    ///
34364    /// # Forms
34365    /// Assembly: `fmvh.x.d xd, xs1`
34366    /// Rust: `fmvh_x_d(rd, rs1)`
34367    ///
34368    /// # Arguments
34369    /// - `rd` — Destination register.
34370    /// - `rs1` — Source register.
34371    pub fn fmvh_x_d<T0, T1>(&mut self, rd: T0, rs1: T1)
34372    where
34373        Self: FmvhXDEmitter<T0, T1>,
34374    {
34375        <Self as FmvhXDEmitter<T0, T1>>::fmvh_x_d(self, rd, rs1);
34376    }
34377    /// RISC-V `fmvh.x.q` instruction.
34378    ///
34379    /// # Forms
34380    /// Assembly: `fmvh.x.q xd, qs1`
34381    /// Rust: `fmvh_x_q(rd, rs1)`
34382    ///
34383    /// # Arguments
34384    /// - `rd` — Destination register.
34385    /// - `rs1` — Source register.
34386    pub fn fmvh_x_q<T0, T1>(&mut self, rd: T0, rs1: T1)
34387    where
34388        Self: FmvhXQEmitter<T0, T1>,
34389    {
34390        <Self as FmvhXQEmitter<T0, T1>>::fmvh_x_q(self, rd, rs1);
34391    }
34392    /// RISC-V `fmvp.d.x` instruction.
34393    ///
34394    /// # Forms
34395    /// Assembly: `fmvp.d.x xd, xs1, xs2`
34396    /// Rust: `fmvp_d_x(rd, rs1, rs2)`
34397    ///
34398    /// # Arguments
34399    /// - `rd` — Destination register.
34400    /// - `rs1` — Source register.
34401    /// - `rs2` — Source register.
34402    pub fn fmvp_d_x<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
34403    where
34404        Self: FmvpDXEmitter<T0, T1, T2>,
34405    {
34406        <Self as FmvpDXEmitter<T0, T1, T2>>::fmvp_d_x(self, rd, rs1, rs2);
34407    }
34408    /// RISC-V `fmvp.q.x` instruction.
34409    ///
34410    /// # Forms
34411    /// Assembly: `fmvp.q.x qd, xs1, xs2`
34412    /// Rust: `fmvp_q_x(rd, rs1, rs2)`
34413    ///
34414    /// # Arguments
34415    /// - `rd` — Destination register.
34416    /// - `rs1` — Source register.
34417    /// - `rs2` — Source register.
34418    pub fn fmvp_q_x<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
34419    where
34420        Self: FmvpQXEmitter<T0, T1, T2>,
34421    {
34422        <Self as FmvpQXEmitter<T0, T1, T2>>::fmvp_q_x(self, rd, rs1, rs2);
34423    }
34424    /// RISC-V `fneg.d` instruction.
34425    ///
34426    /// # Forms
34427    /// Assembly: `fneg.d rd rs1 rs2_eq_rs1`
34428    /// Rust: `fneg_d(rd, rs1, rs2)`
34429    ///
34430    /// # Arguments
34431    /// - `rd` — Destination register.
34432    /// - `rs1` — Source register.
34433    /// - `rs2` — Source register.
34434    pub fn fneg_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
34435    where
34436        Self: FnegDEmitter<T0, T1, T2>,
34437    {
34438        <Self as FnegDEmitter<T0, T1, T2>>::fneg_d(self, rd, rs1, rs2);
34439    }
34440    /// RISC-V `fneg.h` instruction.
34441    ///
34442    /// # Forms
34443    /// Assembly: `fneg.h rd rs1 rs2_eq_rs1`
34444    /// Rust: `fneg_h(rd, rs1, rs2)`
34445    ///
34446    /// # Arguments
34447    /// - `rd` — Destination register.
34448    /// - `rs1` — Source register.
34449    /// - `rs2` — Source register.
34450    pub fn fneg_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
34451    where
34452        Self: FnegHEmitter<T0, T1, T2>,
34453    {
34454        <Self as FnegHEmitter<T0, T1, T2>>::fneg_h(self, rd, rs1, rs2);
34455    }
34456    /// RISC-V `fneg.q` instruction.
34457    ///
34458    /// # Forms
34459    /// Assembly: `fneg.q rd rs1 rs2_eq_rs1`
34460    /// Rust: `fneg_q(rd, rs1, rs2)`
34461    ///
34462    /// # Arguments
34463    /// - `rd` — Destination register.
34464    /// - `rs1` — Source register.
34465    /// - `rs2` — Source register.
34466    pub fn fneg_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
34467    where
34468        Self: FnegQEmitter<T0, T1, T2>,
34469    {
34470        <Self as FnegQEmitter<T0, T1, T2>>::fneg_q(self, rd, rs1, rs2);
34471    }
34472    /// RISC-V `fneg.s` instruction.
34473    ///
34474    /// # Forms
34475    /// Assembly: `fneg.s rd rs1 rs2_eq_rs1`
34476    /// Rust: `fneg_s(rd, rs1, rs2)`
34477    ///
34478    /// # Arguments
34479    /// - `rd` — Destination register.
34480    /// - `rs1` — Source register.
34481    /// - `rs2` — Source register.
34482    pub fn fneg_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
34483    where
34484        Self: FnegSEmitter<T0, T1, T2>,
34485    {
34486        <Self as FnegSEmitter<T0, T1, T2>>::fneg_s(self, rd, rs1, rs2);
34487    }
34488    /// RISC-V `fnmadd.d` instruction.
34489    ///
34490    /// # Forms
34491    /// Assembly: `fnmadd.d xd, xs1, xs2, xs3, rm`
34492    /// Rust: `fnmadd_d(rd, rs1, rs2, rs3, rm)`
34493    ///
34494    /// # Arguments
34495    /// - `rd` — Destination register.
34496    /// - `rs1` — Source register.
34497    /// - `rs2` — Source register.
34498    /// - `rs3` — Source register.
34499    /// - `rm` — Rounding mode.
34500    pub fn fnmadd_d<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, rs3: T3, rm: T4)
34501    where
34502        Self: FnmaddDEmitter<T0, T1, T2, T3, T4>,
34503    {
34504        <Self as FnmaddDEmitter<T0, T1, T2, T3, T4>>::fnmadd_d(self, rd, rs1, rs2, rs3, rm);
34505    }
34506    /// RISC-V `fnmadd.h` instruction.
34507    ///
34508    /// # Forms
34509    /// Assembly: `fnmadd.h xd, xs1, xs2, xs3, rm`
34510    /// Rust: `fnmadd_h(rd, rs1, rs2, rs3, rm)`
34511    ///
34512    /// # Arguments
34513    /// - `rd` — Destination register.
34514    /// - `rs1` — Source register.
34515    /// - `rs2` — Source register.
34516    /// - `rs3` — Source register.
34517    /// - `rm` — Rounding mode.
34518    pub fn fnmadd_h<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, rs3: T3, rm: T4)
34519    where
34520        Self: FnmaddHEmitter<T0, T1, T2, T3, T4>,
34521    {
34522        <Self as FnmaddHEmitter<T0, T1, T2, T3, T4>>::fnmadd_h(self, rd, rs1, rs2, rs3, rm);
34523    }
34524    /// RISC-V `fnmadd.q` instruction.
34525    ///
34526    /// # Forms
34527    /// Assembly: `fnmadd.q qd, qs1, qs2, qs3, rm`
34528    /// Rust: `fnmadd_q(rd, rs1, rs2, rs3, rm)`
34529    ///
34530    /// # Arguments
34531    /// - `rd` — Destination register.
34532    /// - `rs1` — Source register.
34533    /// - `rs2` — Source register.
34534    /// - `rs3` — Source register.
34535    /// - `rm` — Rounding mode.
34536    pub fn fnmadd_q<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, rs3: T3, rm: T4)
34537    where
34538        Self: FnmaddQEmitter<T0, T1, T2, T3, T4>,
34539    {
34540        <Self as FnmaddQEmitter<T0, T1, T2, T3, T4>>::fnmadd_q(self, rd, rs1, rs2, rs3, rm);
34541    }
34542    /// RISC-V `fnmadd.s` instruction.
34543    ///
34544    /// # Forms
34545    /// Assembly: `fnmadd.s fd, fs1, fs2, fs3, rm`
34546    /// Rust: `fnmadd_s(rd, rs1, rs2, rs3, rm)`
34547    ///
34548    /// # Arguments
34549    /// - `rd` — Destination register.
34550    /// - `rs1` — Source register.
34551    /// - `rs2` — Source register.
34552    /// - `rs3` — Source register.
34553    /// - `rm` — Rounding mode.
34554    pub fn fnmadd_s<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, rs3: T3, rm: T4)
34555    where
34556        Self: FnmaddSEmitter<T0, T1, T2, T3, T4>,
34557    {
34558        <Self as FnmaddSEmitter<T0, T1, T2, T3, T4>>::fnmadd_s(self, rd, rs1, rs2, rs3, rm);
34559    }
34560    /// RISC-V `fnmsub.d` instruction.
34561    ///
34562    /// # Forms
34563    /// Assembly: `fnmsub.d xd, xs1, xs2, xs3, rm`
34564    /// Rust: `fnmsub_d(rd, rs1, rs2, rs3, rm)`
34565    ///
34566    /// # Arguments
34567    /// - `rd` — Destination register.
34568    /// - `rs1` — Source register.
34569    /// - `rs2` — Source register.
34570    /// - `rs3` — Source register.
34571    /// - `rm` — Rounding mode.
34572    pub fn fnmsub_d<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, rs3: T3, rm: T4)
34573    where
34574        Self: FnmsubDEmitter<T0, T1, T2, T3, T4>,
34575    {
34576        <Self as FnmsubDEmitter<T0, T1, T2, T3, T4>>::fnmsub_d(self, rd, rs1, rs2, rs3, rm);
34577    }
34578    /// RISC-V `fnmsub.h` instruction.
34579    ///
34580    /// # Forms
34581    /// Assembly: `fnmsub.h xd, xs1, xs2, xs3, rm`
34582    /// Rust: `fnmsub_h(rd, rs1, rs2, rs3, rm)`
34583    ///
34584    /// # Arguments
34585    /// - `rd` — Destination register.
34586    /// - `rs1` — Source register.
34587    /// - `rs2` — Source register.
34588    /// - `rs3` — Source register.
34589    /// - `rm` — Rounding mode.
34590    pub fn fnmsub_h<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, rs3: T3, rm: T4)
34591    where
34592        Self: FnmsubHEmitter<T0, T1, T2, T3, T4>,
34593    {
34594        <Self as FnmsubHEmitter<T0, T1, T2, T3, T4>>::fnmsub_h(self, rd, rs1, rs2, rs3, rm);
34595    }
34596    /// RISC-V `fnmsub.q` instruction.
34597    ///
34598    /// # Forms
34599    /// Assembly: `fnmsub.q qd, qs1, qs2, qs3, rm`
34600    /// Rust: `fnmsub_q(rd, rs1, rs2, rs3, rm)`
34601    ///
34602    /// # Arguments
34603    /// - `rd` — Destination register.
34604    /// - `rs1` — Source register.
34605    /// - `rs2` — Source register.
34606    /// - `rs3` — Source register.
34607    /// - `rm` — Rounding mode.
34608    pub fn fnmsub_q<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, rs3: T3, rm: T4)
34609    where
34610        Self: FnmsubQEmitter<T0, T1, T2, T3, T4>,
34611    {
34612        <Self as FnmsubQEmitter<T0, T1, T2, T3, T4>>::fnmsub_q(self, rd, rs1, rs2, rs3, rm);
34613    }
34614    /// RISC-V `fnmsub.s` instruction.
34615    ///
34616    /// # Forms
34617    /// Assembly: `fnmsub.s xd, xs1, xs2, xs3, rm`
34618    /// Rust: `fnmsub_s(rd, rs1, rs2, rs3, rm)`
34619    ///
34620    /// # Arguments
34621    /// - `rd` — Destination register.
34622    /// - `rs1` — Source register.
34623    /// - `rs2` — Source register.
34624    /// - `rs3` — Source register.
34625    /// - `rm` — Rounding mode.
34626    pub fn fnmsub_s<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, rs3: T3, rm: T4)
34627    where
34628        Self: FnmsubSEmitter<T0, T1, T2, T3, T4>,
34629    {
34630        <Self as FnmsubSEmitter<T0, T1, T2, T3, T4>>::fnmsub_s(self, rd, rs1, rs2, rs3, rm);
34631    }
34632    /// RISC-V `frcsr` instruction.
34633    ///
34634    /// # Forms
34635    /// Assembly: `frcsr rd`
34636    /// Rust: `frcsr(rd)`
34637    ///
34638    /// # Arguments
34639    /// - `rd` — Destination register.
34640    pub fn frcsr<T0>(&mut self, rd: T0)
34641    where
34642        Self: FrcsrEmitter<T0>,
34643    {
34644        <Self as FrcsrEmitter<T0>>::frcsr(self, rd);
34645    }
34646    /// RISC-V `frflags` instruction.
34647    ///
34648    /// # Forms
34649    /// Assembly: `frflags rd`
34650    /// Rust: `frflags(rd)`
34651    ///
34652    /// # Arguments
34653    /// - `rd` — Destination register.
34654    pub fn frflags<T0>(&mut self, rd: T0)
34655    where
34656        Self: FrflagsEmitter<T0>,
34657    {
34658        <Self as FrflagsEmitter<T0>>::frflags(self, rd);
34659    }
34660    /// RISC-V `fround.d` instruction.
34661    ///
34662    /// # Forms
34663    /// Assembly: `fround.d xd, xs1, rm`
34664    /// Rust: `fround_d(rd, rs1, rm)`
34665    ///
34666    /// # Arguments
34667    /// - `rd` — Destination register.
34668    /// - `rs1` — Source register.
34669    /// - `rm` — Rounding mode.
34670    pub fn fround_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
34671    where
34672        Self: FroundDEmitter<T0, T1, T2>,
34673    {
34674        <Self as FroundDEmitter<T0, T1, T2>>::fround_d(self, rd, rs1, rm);
34675    }
34676    /// RISC-V `fround.h` instruction.
34677    ///
34678    /// # Forms
34679    /// Assembly: `fround.h xd, xs1, rm`
34680    /// Rust: `fround_h(rd, rs1, rm)`
34681    ///
34682    /// # Arguments
34683    /// - `rd` — Destination register.
34684    /// - `rs1` — Source register.
34685    /// - `rm` — Rounding mode.
34686    pub fn fround_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
34687    where
34688        Self: FroundHEmitter<T0, T1, T2>,
34689    {
34690        <Self as FroundHEmitter<T0, T1, T2>>::fround_h(self, rd, rs1, rm);
34691    }
34692    /// RISC-V `fround.q` instruction.
34693    ///
34694    /// # Forms
34695    /// Assembly: `fround.q qd, qs1, rm`
34696    /// Rust: `fround_q(rd, rs1, rm)`
34697    ///
34698    /// # Arguments
34699    /// - `rd` — Destination register.
34700    /// - `rs1` — Source register.
34701    /// - `rm` — Rounding mode.
34702    pub fn fround_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
34703    where
34704        Self: FroundQEmitter<T0, T1, T2>,
34705    {
34706        <Self as FroundQEmitter<T0, T1, T2>>::fround_q(self, rd, rs1, rm);
34707    }
34708    /// RISC-V `fround.s` instruction.
34709    ///
34710    /// # Forms
34711    /// Assembly: `fround.s fd, xs1, rm`
34712    /// Rust: `fround_s(rd, rs1, rm)`
34713    ///
34714    /// # Arguments
34715    /// - `rd` — Destination register.
34716    /// - `rs1` — Source register.
34717    /// - `rm` — Rounding mode.
34718    pub fn fround_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
34719    where
34720        Self: FroundSEmitter<T0, T1, T2>,
34721    {
34722        <Self as FroundSEmitter<T0, T1, T2>>::fround_s(self, rd, rs1, rm);
34723    }
34724    /// RISC-V `froundnx.d` instruction.
34725    ///
34726    /// # Forms
34727    /// Assembly: `froundnx.d xd, xs1, rm`
34728    /// Rust: `froundnx_d(rd, rs1, rm)`
34729    ///
34730    /// # Arguments
34731    /// - `rd` — Destination register.
34732    /// - `rs1` — Source register.
34733    /// - `rm` — Rounding mode.
34734    pub fn froundnx_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
34735    where
34736        Self: FroundnxDEmitter<T0, T1, T2>,
34737    {
34738        <Self as FroundnxDEmitter<T0, T1, T2>>::froundnx_d(self, rd, rs1, rm);
34739    }
34740    /// RISC-V `froundnx.h` instruction.
34741    ///
34742    /// # Forms
34743    /// Assembly: `froundnx.h xd, xs1, rm`
34744    /// Rust: `froundnx_h(rd, rs1, rm)`
34745    ///
34746    /// # Arguments
34747    /// - `rd` — Destination register.
34748    /// - `rs1` — Source register.
34749    /// - `rm` — Rounding mode.
34750    pub fn froundnx_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
34751    where
34752        Self: FroundnxHEmitter<T0, T1, T2>,
34753    {
34754        <Self as FroundnxHEmitter<T0, T1, T2>>::froundnx_h(self, rd, rs1, rm);
34755    }
34756    /// RISC-V `froundnx.q` instruction.
34757    ///
34758    /// # Forms
34759    /// Assembly: `froundnx.q qd, qs1, rm`
34760    /// Rust: `froundnx_q(rd, rs1, rm)`
34761    ///
34762    /// # Arguments
34763    /// - `rd` — Destination register.
34764    /// - `rs1` — Source register.
34765    /// - `rm` — Rounding mode.
34766    pub fn froundnx_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
34767    where
34768        Self: FroundnxQEmitter<T0, T1, T2>,
34769    {
34770        <Self as FroundnxQEmitter<T0, T1, T2>>::froundnx_q(self, rd, rs1, rm);
34771    }
34772    /// RISC-V `froundnx.s` instruction.
34773    ///
34774    /// # Forms
34775    /// Assembly: `froundnx.s fd, rs1, rm`
34776    /// Rust: `froundnx_s(rd, rs1, rm)`
34777    ///
34778    /// # Arguments
34779    /// - `rd` — Destination register.
34780    /// - `rs1` — Source register.
34781    /// - `rm` — Rounding mode.
34782    pub fn froundnx_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
34783    where
34784        Self: FroundnxSEmitter<T0, T1, T2>,
34785    {
34786        <Self as FroundnxSEmitter<T0, T1, T2>>::froundnx_s(self, rd, rs1, rm);
34787    }
34788    /// RISC-V `frrm` instruction.
34789    ///
34790    /// # Forms
34791    /// Assembly: `frrm rd`
34792    /// Rust: `frrm(rd)`
34793    ///
34794    /// # Arguments
34795    /// - `rd` — Destination register.
34796    pub fn frrm<T0>(&mut self, rd: T0)
34797    where
34798        Self: FrrmEmitter<T0>,
34799    {
34800        <Self as FrrmEmitter<T0>>::frrm(self, rd);
34801    }
34802    /// RISC-V `fscsr` instruction.
34803    ///
34804    /// # Forms
34805    /// Assembly: `fscsr rd rs1`
34806    /// Rust: `fscsr(rd, rs1)`
34807    ///
34808    /// # Arguments
34809    /// - `rd` — Destination register.
34810    /// - `rs1` — Source register.
34811    pub fn fscsr<T0, T1>(&mut self, rd: T0, rs1: T1)
34812    where
34813        Self: FscsrEmitter<T0, T1>,
34814    {
34815        <Self as FscsrEmitter<T0, T1>>::fscsr(self, rd, rs1);
34816    }
34817    /// RISC-V `fsd` instruction.
34818    ///
34819    /// # Forms
34820    /// Assembly: `fsd xs1, xs2, imm`
34821    /// Rust: `fsd(rs1, rs2, imm)`
34822    ///
34823    /// # Arguments
34824    /// - `rs1` — Memory base register.
34825    /// - `rs2` — Source register.
34826    /// - `imm` — Immediate encoding value.
34827    pub fn fsd<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)
34828    where
34829        Self: FsdEmitter<T0, T1, T2>,
34830    {
34831        <Self as FsdEmitter<T0, T1, T2>>::fsd(self, rs1, rs2, imm);
34832    }
34833    /// RISC-V `fsflags` instruction.
34834    ///
34835    /// # Forms
34836    /// Assembly: `fsflags rd rs1`
34837    /// Rust: `fsflags(rd, rs1)`
34838    ///
34839    /// # Arguments
34840    /// - `rd` — Destination register.
34841    /// - `rs1` — Source register.
34842    pub fn fsflags<T0, T1>(&mut self, rd: T0, rs1: T1)
34843    where
34844        Self: FsflagsEmitter<T0, T1>,
34845    {
34846        <Self as FsflagsEmitter<T0, T1>>::fsflags(self, rd, rs1);
34847    }
34848    /// RISC-V `fsflagsi` instruction.
34849    ///
34850    /// # Forms
34851    /// Assembly: `fsflagsi rd zimm5`
34852    /// Rust: `fsflagsi(rd, zimm5)`
34853    ///
34854    /// # Arguments
34855    /// - `rd` — Destination register.
34856    /// - `zimm5` — Immediate encoding value.
34857    pub fn fsflagsi<T0, T1>(&mut self, rd: T0, zimm5: T1)
34858    where
34859        Self: FsflagsiEmitter<T0, T1>,
34860    {
34861        <Self as FsflagsiEmitter<T0, T1>>::fsflagsi(self, rd, zimm5);
34862    }
34863    /// RISC-V `fsgnj.d` instruction.
34864    ///
34865    /// # Forms
34866    /// Assembly: `fsgnj.d xd, xs1, xs2`
34867    /// Rust: `fsgnj_d(rd, rs1, rs2)`
34868    ///
34869    /// # Arguments
34870    /// - `rd` — Destination register.
34871    /// - `rs1` — Source register.
34872    /// - `rs2` — Source register.
34873    pub fn fsgnj_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
34874    where
34875        Self: FsgnjDEmitter<T0, T1, T2>,
34876    {
34877        <Self as FsgnjDEmitter<T0, T1, T2>>::fsgnj_d(self, rd, rs1, rs2);
34878    }
34879    /// RISC-V `fsgnj.h` instruction.
34880    ///
34881    /// # Forms
34882    /// Assembly: `fsgnj.h xd, xs1, xs2`
34883    /// Rust: `fsgnj_h(rd, rs1, rs2)`
34884    ///
34885    /// # Arguments
34886    /// - `rd` — Destination register.
34887    /// - `rs1` — Source register.
34888    /// - `rs2` — Source register.
34889    pub fn fsgnj_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
34890    where
34891        Self: FsgnjHEmitter<T0, T1, T2>,
34892    {
34893        <Self as FsgnjHEmitter<T0, T1, T2>>::fsgnj_h(self, rd, rs1, rs2);
34894    }
34895    /// RISC-V `fsgnj.q` instruction.
34896    ///
34897    /// # Forms
34898    /// Assembly: `fsgnj.q qd, qs1, qs2`
34899    /// Rust: `fsgnj_q(rd, rs1, rs2)`
34900    ///
34901    /// # Arguments
34902    /// - `rd` — Destination register.
34903    /// - `rs1` — Source register.
34904    /// - `rs2` — Source register.
34905    pub fn fsgnj_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
34906    where
34907        Self: FsgnjQEmitter<T0, T1, T2>,
34908    {
34909        <Self as FsgnjQEmitter<T0, T1, T2>>::fsgnj_q(self, rd, rs1, rs2);
34910    }
34911    /// Single-precision sign inject
34912    ///
34913    /// Writes _fd_ with sign bit of _fs2_ and the exponent and mantissa of _fs1_.
34914    ///
34915    /// Sign-injection instructions do not set floating-point exception flags, nor do they canonicalize NaNs.
34916    ///
34917    /// # Forms
34918    /// Assembly: `fsgnj.s fd, fs1, fs2`
34919    /// Rust: `fsgnj_s(rd, rs1, rs2)`
34920    ///
34921    /// # Arguments
34922    /// - `rd` — Destination register.
34923    /// - `rs1` — Source register.
34924    /// - `rs2` — Source register.
34925    pub fn fsgnj_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
34926    where
34927        Self: FsgnjSEmitter<T0, T1, T2>,
34928    {
34929        <Self as FsgnjSEmitter<T0, T1, T2>>::fsgnj_s(self, rd, rs1, rs2);
34930    }
34931    /// RISC-V `fsgnjn.d` instruction.
34932    ///
34933    /// # Forms
34934    /// Assembly: `fsgnjn.d xd, xs1, xs2`
34935    /// Rust: `fsgnjn_d(rd, rs1, rs2)`
34936    ///
34937    /// # Arguments
34938    /// - `rd` — Destination register.
34939    /// - `rs1` — Source register.
34940    /// - `rs2` — Source register.
34941    pub fn fsgnjn_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
34942    where
34943        Self: FsgnjnDEmitter<T0, T1, T2>,
34944    {
34945        <Self as FsgnjnDEmitter<T0, T1, T2>>::fsgnjn_d(self, rd, rs1, rs2);
34946    }
34947    /// RISC-V `fsgnjn.h` instruction.
34948    ///
34949    /// # Forms
34950    /// Assembly: `fsgnjn.h xd, xs1, xs2`
34951    /// Rust: `fsgnjn_h(rd, rs1, rs2)`
34952    ///
34953    /// # Arguments
34954    /// - `rd` — Destination register.
34955    /// - `rs1` — Source register.
34956    /// - `rs2` — Source register.
34957    pub fn fsgnjn_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
34958    where
34959        Self: FsgnjnHEmitter<T0, T1, T2>,
34960    {
34961        <Self as FsgnjnHEmitter<T0, T1, T2>>::fsgnjn_h(self, rd, rs1, rs2);
34962    }
34963    /// RISC-V `fsgnjn.q` instruction.
34964    ///
34965    /// # Forms
34966    /// Assembly: `fsgnjn.q qd, qs1, qs2`
34967    /// Rust: `fsgnjn_q(rd, rs1, rs2)`
34968    ///
34969    /// # Arguments
34970    /// - `rd` — Destination register.
34971    /// - `rs1` — Source register.
34972    /// - `rs2` — Source register.
34973    pub fn fsgnjn_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
34974    where
34975        Self: FsgnjnQEmitter<T0, T1, T2>,
34976    {
34977        <Self as FsgnjnQEmitter<T0, T1, T2>>::fsgnjn_q(self, rd, rs1, rs2);
34978    }
34979    /// Single-precision sign inject negate
34980    ///
34981    /// Writes _fd_ with the opposite of the sign bit of _fs2_ and the exponent and mantissa of _fs1_.
34982    ///
34983    /// Sign-injection instructions do not set floating-point exception flags, nor do they canonicalize NaNs.
34984    ///
34985    /// # Forms
34986    /// Assembly: `fsgnjn.s fd, fs1, fs2`
34987    /// Rust: `fsgnjn_s(rd, rs1, rs2)`
34988    ///
34989    /// # Arguments
34990    /// - `rd` — Destination register.
34991    /// - `rs1` — Source register.
34992    /// - `rs2` — Source register.
34993    pub fn fsgnjn_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
34994    where
34995        Self: FsgnjnSEmitter<T0, T1, T2>,
34996    {
34997        <Self as FsgnjnSEmitter<T0, T1, T2>>::fsgnjn_s(self, rd, rs1, rs2);
34998    }
34999    /// RISC-V `fsgnjx.d` instruction.
35000    ///
35001    /// # Forms
35002    /// Assembly: `fsgnjx.d xd, xs1, xs2`
35003    /// Rust: `fsgnjx_d(rd, rs1, rs2)`
35004    ///
35005    /// # Arguments
35006    /// - `rd` — Destination register.
35007    /// - `rs1` — Source register.
35008    /// - `rs2` — Source register.
35009    pub fn fsgnjx_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
35010    where
35011        Self: FsgnjxDEmitter<T0, T1, T2>,
35012    {
35013        <Self as FsgnjxDEmitter<T0, T1, T2>>::fsgnjx_d(self, rd, rs1, rs2);
35014    }
35015    /// RISC-V `fsgnjx.h` instruction.
35016    ///
35017    /// # Forms
35018    /// Assembly: `fsgnjx.h xd, xs1, xs2`
35019    /// Rust: `fsgnjx_h(rd, rs1, rs2)`
35020    ///
35021    /// # Arguments
35022    /// - `rd` — Destination register.
35023    /// - `rs1` — Source register.
35024    /// - `rs2` — Source register.
35025    pub fn fsgnjx_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
35026    where
35027        Self: FsgnjxHEmitter<T0, T1, T2>,
35028    {
35029        <Self as FsgnjxHEmitter<T0, T1, T2>>::fsgnjx_h(self, rd, rs1, rs2);
35030    }
35031    /// RISC-V `fsgnjx.q` instruction.
35032    ///
35033    /// # Forms
35034    /// Assembly: `fsgnjx.q qd, qs1, qs2`
35035    /// Rust: `fsgnjx_q(rd, rs1, rs2)`
35036    ///
35037    /// # Arguments
35038    /// - `rd` — Destination register.
35039    /// - `rs1` — Source register.
35040    /// - `rs2` — Source register.
35041    pub fn fsgnjx_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
35042    where
35043        Self: FsgnjxQEmitter<T0, T1, T2>,
35044    {
35045        <Self as FsgnjxQEmitter<T0, T1, T2>>::fsgnjx_q(self, rd, rs1, rs2);
35046    }
35047    /// Single-precision sign inject exclusive or
35048    ///
35049    /// Writes _fd_ with the xor of the sign bits of _fs2_ and _fs1_ and the exponent and mantissa of _fs1_.
35050    ///
35051    /// Sign-injection instructions do not set floating-point exception flags, nor do they canonicalize NaNs.
35052    ///
35053    /// # Forms
35054    /// Assembly: `fsgnjx.s fd, fs1, fs2`
35055    /// Rust: `fsgnjx_s(rd, rs1, rs2)`
35056    ///
35057    /// # Arguments
35058    /// - `rd` — Destination register.
35059    /// - `rs1` — Source register.
35060    /// - `rs2` — Source register.
35061    pub fn fsgnjx_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
35062    where
35063        Self: FsgnjxSEmitter<T0, T1, T2>,
35064    {
35065        <Self as FsgnjxSEmitter<T0, T1, T2>>::fsgnjx_s(self, rd, rs1, rs2);
35066    }
35067    /// Half-precision floating-point store
35068    ///
35069    /// The `fsh` instruction stores a half-precision floating-point value
35070    /// from register _rd_ to memory at address _rs1_ + _imm_.
35071    ///
35072    /// `fsh` does not modify the bits being transferred; in particular, the payloads of non-canonical NaNs are preserved.
35073    ///
35074    /// `fsh` ignores all but the lower 16 bits in _rs2_.
35075    ///
35076    /// `fsh` is only guaranteed to execute atomically if the effective address is naturally aligned.
35077    ///
35078    /// # Forms
35079    /// Assembly: `fsh fs2, imm(xs1)`
35080    /// Rust: `fsh(rs1, rs2, imm)`
35081    ///
35082    /// # Arguments
35083    /// - `rs1` — Memory base register.
35084    /// - `rs2` — Source register.
35085    /// - `imm` — Immediate encoding value.
35086    pub fn fsh<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)
35087    where
35088        Self: FshEmitter<T0, T1, T2>,
35089    {
35090        <Self as FshEmitter<T0, T1, T2>>::fsh(self, rs1, rs2, imm);
35091    }
35092    /// RISC-V `fsq` instruction.
35093    ///
35094    /// # Forms
35095    /// Assembly: `fsq xs1, qs2, imm`
35096    /// Rust: `fsq(rs1, rs2, imm)`
35097    ///
35098    /// # Arguments
35099    /// - `rs1` — Memory base register.
35100    /// - `rs2` — Source register.
35101    /// - `imm` — Immediate encoding value.
35102    pub fn fsq<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)
35103    where
35104        Self: FsqEmitter<T0, T1, T2>,
35105    {
35106        <Self as FsqEmitter<T0, T1, T2>>::fsq(self, rs1, rs2, imm);
35107    }
35108    /// RISC-V `fsqrt.d` instruction.
35109    ///
35110    /// # Forms
35111    /// Assembly: `fsqrt.d xd, xs1, rm`
35112    /// Rust: `fsqrt_d(rd, rs1, rm)`
35113    ///
35114    /// # Arguments
35115    /// - `rd` — Destination register.
35116    /// - `rs1` — Source register.
35117    /// - `rm` — Rounding mode.
35118    pub fn fsqrt_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
35119    where
35120        Self: FsqrtDEmitter<T0, T1, T2>,
35121    {
35122        <Self as FsqrtDEmitter<T0, T1, T2>>::fsqrt_d(self, rd, rs1, rm);
35123    }
35124    /// RISC-V `fsqrt.h` instruction.
35125    ///
35126    /// # Forms
35127    /// Assembly: `fsqrt.h xd, xs1, rm`
35128    /// Rust: `fsqrt_h(rd, rs1, rm)`
35129    ///
35130    /// # Arguments
35131    /// - `rd` — Destination register.
35132    /// - `rs1` — Source register.
35133    /// - `rm` — Rounding mode.
35134    pub fn fsqrt_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
35135    where
35136        Self: FsqrtHEmitter<T0, T1, T2>,
35137    {
35138        <Self as FsqrtHEmitter<T0, T1, T2>>::fsqrt_h(self, rd, rs1, rm);
35139    }
35140    /// RISC-V `fsqrt.q` instruction.
35141    ///
35142    /// # Forms
35143    /// Assembly: `fsqrt.q qd, qs1, rm`
35144    /// Rust: `fsqrt_q(rd, rs1, rm)`
35145    ///
35146    /// # Arguments
35147    /// - `rd` — Destination register.
35148    /// - `rs1` — Source register.
35149    /// - `rm` — Rounding mode.
35150    pub fn fsqrt_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
35151    where
35152        Self: FsqrtQEmitter<T0, T1, T2>,
35153    {
35154        <Self as FsqrtQEmitter<T0, T1, T2>>::fsqrt_q(self, rd, rs1, rm);
35155    }
35156    /// RISC-V `fsqrt.s` instruction.
35157    ///
35158    /// # Forms
35159    /// Assembly: `fsqrt.s fd, fs1, rm`
35160    /// Rust: `fsqrt_s(rd, rs1, rm)`
35161    ///
35162    /// # Arguments
35163    /// - `rd` — Destination register.
35164    /// - `rs1` — Source register.
35165    /// - `rm` — Rounding mode.
35166    pub fn fsqrt_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)
35167    where
35168        Self: FsqrtSEmitter<T0, T1, T2>,
35169    {
35170        <Self as FsqrtSEmitter<T0, T1, T2>>::fsqrt_s(self, rd, rs1, rm);
35171    }
35172    /// RISC-V `fsrm` instruction.
35173    ///
35174    /// # Forms
35175    /// Assembly: `fsrm rd rs1`
35176    /// Rust: `fsrm(rd, rs1)`
35177    ///
35178    /// # Arguments
35179    /// - `rd` — Destination register.
35180    /// - `rs1` — Source register.
35181    pub fn fsrm<T0, T1>(&mut self, rd: T0, rs1: T1)
35182    where
35183        Self: FsrmEmitter<T0, T1>,
35184    {
35185        <Self as FsrmEmitter<T0, T1>>::fsrm(self, rd, rs1);
35186    }
35187    /// RISC-V `fsrmi` instruction.
35188    ///
35189    /// # Forms
35190    /// Assembly: `fsrmi rd zimm5`
35191    /// Rust: `fsrmi(rd, zimm5)`
35192    ///
35193    /// # Arguments
35194    /// - `rd` — Destination register.
35195    /// - `zimm5` — Immediate encoding value.
35196    pub fn fsrmi<T0, T1>(&mut self, rd: T0, zimm5: T1)
35197    where
35198        Self: FsrmiEmitter<T0, T1>,
35199    {
35200        <Self as FsrmiEmitter<T0, T1>>::fsrmi(self, rd, zimm5);
35201    }
35202    /// RISC-V `fsub.d` instruction.
35203    ///
35204    /// # Forms
35205    /// Assembly: `fsub.d xd, xs1, xs2, rm`
35206    /// Rust: `fsub_d(rd, rs1, rs2, rm)`
35207    ///
35208    /// # Arguments
35209    /// - `rd` — Destination register.
35210    /// - `rs1` — Source register.
35211    /// - `rs2` — Source register.
35212    /// - `rm` — Rounding mode.
35213    pub fn fsub_d<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)
35214    where
35215        Self: FsubDEmitter<T0, T1, T2, T3>,
35216    {
35217        <Self as FsubDEmitter<T0, T1, T2, T3>>::fsub_d(self, rd, rs1, rs2, rm);
35218    }
35219    /// RISC-V `fsub.h` instruction.
35220    ///
35221    /// # Forms
35222    /// Assembly: `fsub.h xd, xs1, xs2, rm`
35223    /// Rust: `fsub_h(rd, rs1, rs2, rm)`
35224    ///
35225    /// # Arguments
35226    /// - `rd` — Destination register.
35227    /// - `rs1` — Source register.
35228    /// - `rs2` — Source register.
35229    /// - `rm` — Rounding mode.
35230    pub fn fsub_h<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)
35231    where
35232        Self: FsubHEmitter<T0, T1, T2, T3>,
35233    {
35234        <Self as FsubHEmitter<T0, T1, T2, T3>>::fsub_h(self, rd, rs1, rs2, rm);
35235    }
35236    /// RISC-V `fsub.q` instruction.
35237    ///
35238    /// # Forms
35239    /// Assembly: `fsub.q qd, qs1, qs2, rm`
35240    /// Rust: `fsub_q(rd, rs1, rs2, rm)`
35241    ///
35242    /// # Arguments
35243    /// - `rd` — Destination register.
35244    /// - `rs1` — Source register.
35245    /// - `rs2` — Source register.
35246    /// - `rm` — Rounding mode.
35247    pub fn fsub_q<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)
35248    where
35249        Self: FsubQEmitter<T0, T1, T2, T3>,
35250    {
35251        <Self as FsubQEmitter<T0, T1, T2, T3>>::fsub_q(self, rd, rs1, rs2, rm);
35252    }
35253    /// Single-precision floating-point subtraction
35254    ///
35255    /// Do the single-precision floating-point subtraction of fs2 from fs1 and store the result in fd.
35256    /// rm is the dynamic Rounding Mode.
35257    ///
35258    /// # Forms
35259    /// Assembly: `fsub.s fd, fs1, fs2, rm`
35260    /// Rust: `fsub_s(rd, rs1, rs2, rm)`
35261    ///
35262    /// # Arguments
35263    /// - `rd` — Destination register.
35264    /// - `rs1` — Source register.
35265    /// - `rs2` — Source register.
35266    /// - `rm` — Rounding mode.
35267    pub fn fsub_s<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)
35268    where
35269        Self: FsubSEmitter<T0, T1, T2, T3>,
35270    {
35271        <Self as FsubSEmitter<T0, T1, T2, T3>>::fsub_s(self, rd, rs1, rs2, rm);
35272    }
35273    /// Single-precision floating-point store
35274    ///
35275    /// The `fsw` instruction stores a single-precision floating-point value in _fs2_ to memory at address _rs1_ + _imm_.
35276    ///
35277    /// `fsw` does not modify the bits being transferred; in particular, the payloads of non-canonical NaNs are preserved.
35278    ///
35279    /// # Forms
35280    /// Assembly: `fsw fs2, xs1, imm`
35281    /// Rust: `fsw(rs1, rs2, imm)`
35282    ///
35283    /// # Arguments
35284    /// - `rs1` — Memory base register.
35285    /// - `rs2` — Source register.
35286    /// - `imm` — Immediate encoding value.
35287    pub fn fsw<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)
35288    where
35289        Self: FswEmitter<T0, T1, T2>,
35290    {
35291        <Self as FswEmitter<T0, T1, T2>>::fsw(self, rs1, rs2, imm);
35292    }
35293    /// RISC-V `hfence.gvma` instruction.
35294    ///
35295    /// # Forms
35296    /// Assembly: `hfence.gvma xs1, xs2`
35297    /// Rust: `hfence_gvma(rs1, rs2)`
35298    ///
35299    /// # Arguments
35300    /// - `rs1` — Source register.
35301    /// - `rs2` — Source register.
35302    pub fn hfence_gvma<T0, T1>(&mut self, rs1: T0, rs2: T1)
35303    where
35304        Self: HfenceGvmaEmitter<T0, T1>,
35305    {
35306        <Self as HfenceGvmaEmitter<T0, T1>>::hfence_gvma(self, rs1, rs2);
35307    }
35308    /// RISC-V `hfence.vvma` instruction.
35309    ///
35310    /// # Forms
35311    /// Assembly: `hfence.vvma xs1, xs2`
35312    /// Rust: `hfence_vvma(rs1, rs2)`
35313    ///
35314    /// # Arguments
35315    /// - `rs1` — Source register.
35316    /// - `rs2` — Source register.
35317    pub fn hfence_vvma<T0, T1>(&mut self, rs1: T0, rs2: T1)
35318    where
35319        Self: HfenceVvmaEmitter<T0, T1>,
35320    {
35321        <Self as HfenceVvmaEmitter<T0, T1>>::hfence_vvma(self, rs1, rs2);
35322    }
35323    /// Invalidate cached address translations
35324    ///
35325    /// `hinval.gvma` has the same semantics as `sinval.vma` except that it combines with
35326    /// `sfence.w.inval` and `sfence.inval.ir` to replace `hfence.gvma` and uses VMID instead of ASID.
35327    ///
35328    /// # Forms
35329    /// Assembly: `hinval.gvma xs1, xs2`
35330    /// Rust: `hinval_gvma(rs1, rs2)`
35331    ///
35332    /// # Arguments
35333    /// - `rs1` — Source register.
35334    /// - `rs2` — Source register.
35335    pub fn hinval_gvma<T0, T1>(&mut self, rs1: T0, rs2: T1)
35336    where
35337        Self: HinvalGvmaEmitter<T0, T1>,
35338    {
35339        <Self as HinvalGvmaEmitter<T0, T1>>::hinval_gvma(self, rs1, rs2);
35340    }
35341    /// Invalidate cached address translations
35342    ///
35343    /// `hinval.vvma` has the same semantics as `sinval.vma` except that it combines with
35344    /// `sfence.w.inval` and `sfence.inval.ir` to replace `hfence.vvma`.
35345    ///
35346    /// # Forms
35347    /// Assembly: `hinval.vvma xs1, xs2`
35348    /// Rust: `hinval_vvma(rs1, rs2)`
35349    ///
35350    /// # Arguments
35351    /// - `rs1` — Source register.
35352    /// - `rs2` — Source register.
35353    pub fn hinval_vvma<T0, T1>(&mut self, rs1: T0, rs2: T1)
35354    where
35355        Self: HinvalVvmaEmitter<T0, T1>,
35356    {
35357        <Self as HinvalVvmaEmitter<T0, T1>>::hinval_vvma(self, rs1, rs2);
35358    }
35359    /// RISC-V `hlv.b` instruction.
35360    ///
35361    /// # Forms
35362    /// Assembly: `hlv.b xd, xs1`
35363    /// Rust: `hlv_b(rd, rs1)`
35364    ///
35365    /// # Arguments
35366    /// - `rd` — Destination register.
35367    /// - `rs1` — Source register.
35368    pub fn hlv_b<T0, T1>(&mut self, rd: T0, rs1: T1)
35369    where
35370        Self: HlvBEmitter<T0, T1>,
35371    {
35372        <Self as HlvBEmitter<T0, T1>>::hlv_b(self, rd, rs1);
35373    }
35374    /// RISC-V `hlv.bu` instruction.
35375    ///
35376    /// # Forms
35377    /// Assembly: `hlv.bu xd, xs1`
35378    /// Rust: `hlv_bu(rd, rs1)`
35379    ///
35380    /// # Arguments
35381    /// - `rd` — Destination register.
35382    /// - `rs1` — Source register.
35383    pub fn hlv_bu<T0, T1>(&mut self, rd: T0, rs1: T1)
35384    where
35385        Self: HlvBuEmitter<T0, T1>,
35386    {
35387        <Self as HlvBuEmitter<T0, T1>>::hlv_bu(self, rd, rs1);
35388    }
35389    /// RISC-V `hlv.d` instruction.
35390    ///
35391    /// # Forms
35392    /// Assembly: `hlv.d xd, xs1`
35393    /// Rust: `hlv_d(rd, rs1)`
35394    ///
35395    /// # Arguments
35396    /// - `rd` — Destination register.
35397    /// - `rs1` — Source register.
35398    pub fn hlv_d<T0, T1>(&mut self, rd: T0, rs1: T1)
35399    where
35400        Self: HlvDEmitter<T0, T1>,
35401    {
35402        <Self as HlvDEmitter<T0, T1>>::hlv_d(self, rd, rs1);
35403    }
35404    /// RISC-V `hlv.h` instruction.
35405    ///
35406    /// # Forms
35407    /// Assembly: `hlv.h xd, xs1`
35408    /// Rust: `hlv_h(rd, rs1)`
35409    ///
35410    /// # Arguments
35411    /// - `rd` — Destination register.
35412    /// - `rs1` — Source register.
35413    pub fn hlv_h<T0, T1>(&mut self, rd: T0, rs1: T1)
35414    where
35415        Self: HlvHEmitter<T0, T1>,
35416    {
35417        <Self as HlvHEmitter<T0, T1>>::hlv_h(self, rd, rs1);
35418    }
35419    /// RISC-V `hlv.hu` instruction.
35420    ///
35421    /// # Forms
35422    /// Assembly: `hlv.hu xd, xs1`
35423    /// Rust: `hlv_hu(rd, rs1)`
35424    ///
35425    /// # Arguments
35426    /// - `rd` — Destination register.
35427    /// - `rs1` — Source register.
35428    pub fn hlv_hu<T0, T1>(&mut self, rd: T0, rs1: T1)
35429    where
35430        Self: HlvHuEmitter<T0, T1>,
35431    {
35432        <Self as HlvHuEmitter<T0, T1>>::hlv_hu(self, rd, rs1);
35433    }
35434    /// RISC-V `hlv.w` instruction.
35435    ///
35436    /// # Forms
35437    /// Assembly: `hlv.w xd, xs1`
35438    /// Rust: `hlv_w(rd, rs1)`
35439    ///
35440    /// # Arguments
35441    /// - `rd` — Destination register.
35442    /// - `rs1` — Source register.
35443    pub fn hlv_w<T0, T1>(&mut self, rd: T0, rs1: T1)
35444    where
35445        Self: HlvWEmitter<T0, T1>,
35446    {
35447        <Self as HlvWEmitter<T0, T1>>::hlv_w(self, rd, rs1);
35448    }
35449    /// RISC-V `hlv.wu` instruction.
35450    ///
35451    /// # Forms
35452    /// Assembly: `hlv.wu xd, xs1`
35453    /// Rust: `hlv_wu(rd, rs1)`
35454    ///
35455    /// # Arguments
35456    /// - `rd` — Destination register.
35457    /// - `rs1` — Source register.
35458    pub fn hlv_wu<T0, T1>(&mut self, rd: T0, rs1: T1)
35459    where
35460        Self: HlvWuEmitter<T0, T1>,
35461    {
35462        <Self as HlvWuEmitter<T0, T1>>::hlv_wu(self, rd, rs1);
35463    }
35464    /// RISC-V `hlvx.hu` instruction.
35465    ///
35466    /// # Forms
35467    /// Assembly: `hlvx.hu xd, xs1`
35468    /// Rust: `hlvx_hu(rd, rs1)`
35469    ///
35470    /// # Arguments
35471    /// - `rd` — Destination register.
35472    /// - `rs1` — Source register.
35473    pub fn hlvx_hu<T0, T1>(&mut self, rd: T0, rs1: T1)
35474    where
35475        Self: HlvxHuEmitter<T0, T1>,
35476    {
35477        <Self as HlvxHuEmitter<T0, T1>>::hlvx_hu(self, rd, rs1);
35478    }
35479    /// RISC-V `hlvx.wu` instruction.
35480    ///
35481    /// # Forms
35482    /// Assembly: `hlvx.wu xd, xs1`
35483    /// Rust: `hlvx_wu(rd, rs1)`
35484    ///
35485    /// # Arguments
35486    /// - `rd` — Destination register.
35487    /// - `rs1` — Source register.
35488    pub fn hlvx_wu<T0, T1>(&mut self, rd: T0, rs1: T1)
35489    where
35490        Self: HlvxWuEmitter<T0, T1>,
35491    {
35492        <Self as HlvxWuEmitter<T0, T1>>::hlvx_wu(self, rd, rs1);
35493    }
35494    /// RISC-V `hsv.b` instruction.
35495    ///
35496    /// # Forms
35497    /// Assembly: `hsv.b xs1, xs2`
35498    /// Rust: `hsv_b(rs1, rs2)`
35499    ///
35500    /// # Arguments
35501    /// - `rs1` — Source register.
35502    /// - `rs2` — Source register.
35503    pub fn hsv_b<T0, T1>(&mut self, rs1: T0, rs2: T1)
35504    where
35505        Self: HsvBEmitter<T0, T1>,
35506    {
35507        <Self as HsvBEmitter<T0, T1>>::hsv_b(self, rs1, rs2);
35508    }
35509    /// RISC-V `hsv.d` instruction.
35510    ///
35511    /// # Forms
35512    /// Assembly: `hsv.d xs1, xs2`
35513    /// Rust: `hsv_d(rs1, rs2)`
35514    ///
35515    /// # Arguments
35516    /// - `rs1` — Source register.
35517    /// - `rs2` — Source register.
35518    pub fn hsv_d<T0, T1>(&mut self, rs1: T0, rs2: T1)
35519    where
35520        Self: HsvDEmitter<T0, T1>,
35521    {
35522        <Self as HsvDEmitter<T0, T1>>::hsv_d(self, rs1, rs2);
35523    }
35524    /// RISC-V `hsv.h` instruction.
35525    ///
35526    /// # Forms
35527    /// Assembly: `hsv.h xs1, xs2`
35528    /// Rust: `hsv_h(rs1, rs2)`
35529    ///
35530    /// # Arguments
35531    /// - `rs1` — Source register.
35532    /// - `rs2` — Source register.
35533    pub fn hsv_h<T0, T1>(&mut self, rs1: T0, rs2: T1)
35534    where
35535        Self: HsvHEmitter<T0, T1>,
35536    {
35537        <Self as HsvHEmitter<T0, T1>>::hsv_h(self, rs1, rs2);
35538    }
35539    /// RISC-V `hsv.w` instruction.
35540    ///
35541    /// # Forms
35542    /// Assembly: `hsv.w xs1, xs2`
35543    /// Rust: `hsv_w(rs1, rs2)`
35544    ///
35545    /// # Arguments
35546    /// - `rs1` — Source register.
35547    /// - `rs2` — Source register.
35548    pub fn hsv_w<T0, T1>(&mut self, rs1: T0, rs2: T1)
35549    where
35550        Self: HsvWEmitter<T0, T1>,
35551    {
35552        <Self as HsvWEmitter<T0, T1>>::hsv_w(self, rs1, rs2);
35553    }
35554    /// RISC-V `j` instruction.
35555    ///
35556    /// # Forms
35557    /// Assembly: `j jimm20`
35558    /// Rust: `j(imm)`
35559    ///
35560    /// # Arguments
35561    /// - `imm` — Immediate encoding value.
35562    pub fn j<T0>(&mut self, imm: T0)
35563    where
35564        Self: JEmitter<T0>,
35565    {
35566        <Self as JEmitter<T0>>::j(self, imm);
35567    }
35568    /// Jump and link
35569    ///
35570    /// Jump to a PC-relative offset and store the return
35571    /// address in rd.
35572    ///
35573    /// # Forms
35574    /// Assembly: `jal xd, imm`
35575    /// Rust: `jal(rd, imm)`
35576    ///
35577    /// # Arguments
35578    /// - `rd` — Destination register.
35579    /// - `imm` — Immediate encoding value.
35580    pub fn jal<T0, T1>(&mut self, rd: T0, imm: T1)
35581    where
35582        Self: JalEmitter<T0, T1>,
35583    {
35584        <Self as JalEmitter<T0, T1>>::jal(self, rd, imm);
35585    }
35586    /// RISC-V `jal.pseudo` instruction.
35587    ///
35588    /// # Forms
35589    /// Assembly: `jal.pseudo jimm20`
35590    /// Rust: `jal_pseudo(imm)`
35591    ///
35592    /// # Arguments
35593    /// - `imm` — Immediate encoding value.
35594    pub fn jal_pseudo<T0>(&mut self, imm: T0)
35595    where
35596        Self: JalPseudoEmitter<T0>,
35597    {
35598        <Self as JalPseudoEmitter<T0>>::jal_pseudo(self, imm);
35599    }
35600    /// Jump and link register
35601    ///
35602    /// Jump to an address formed by adding rs1
35603    /// to a signed offset then clearing the least
35604    /// significant bit, and store the return address
35605    /// in rd.
35606    ///
35607    /// # Forms
35608    /// Assembly: `jalr xd, imm(rs1)`
35609    /// Rust: `jalr(rd, rs1, imm)`
35610    ///
35611    /// # Arguments
35612    /// - `rd` — Destination register.
35613    /// - `rs1` — Source register.
35614    /// - `imm` — Immediate encoding value.
35615    pub fn jalr<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)
35616    where
35617        Self: JalrEmitter<T0, T1, T2>,
35618    {
35619        <Self as JalrEmitter<T0, T1, T2>>::jalr(self, rd, rs1, imm);
35620    }
35621    /// RISC-V `jalr.pseudo` instruction.
35622    ///
35623    /// # Forms
35624    /// Assembly: `jalr.pseudo rs1`
35625    /// Rust: `jalr_pseudo(rs1)`
35626    ///
35627    /// # Arguments
35628    /// - `rs1` — Source register.
35629    pub fn jalr_pseudo<T0>(&mut self, rs1: T0)
35630    where
35631        Self: JalrPseudoEmitter<T0>,
35632    {
35633        <Self as JalrPseudoEmitter<T0>>::jalr_pseudo(self, rs1);
35634    }
35635    /// RISC-V `jr` instruction.
35636    ///
35637    /// # Forms
35638    /// Assembly: `jr rs1`
35639    /// Rust: `jr(rs1)`
35640    ///
35641    /// # Arguments
35642    /// - `rs1` — Source register.
35643    pub fn jr<T0>(&mut self, rs1: T0)
35644    where
35645        Self: JrEmitter<T0>,
35646    {
35647        <Self as JrEmitter<T0>>::jr(self, rs1);
35648    }
35649    /// Load byte
35650    ///
35651    /// Load 8 bits of data into register `rd` from an
35652    /// address formed by adding `rs1` to a signed offset.
35653    /// Sign extend the result.
35654    ///
35655    /// # Forms
35656    /// Assembly: `lb xd, imm(rs1)`
35657    /// Rust: `lb(rd, rs1, imm)`
35658    ///
35659    /// # Arguments
35660    /// - `rd` — Destination register.
35661    /// - `rs1` — Memory base register.
35662    /// - `imm` — Immediate encoding value.
35663    pub fn lb<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)
35664    where
35665        Self: LbEmitter<T0, T1, T2>,
35666    {
35667        <Self as LbEmitter<T0, T1, T2>>::lb(self, rd, rs1, imm);
35668    }
35669    /// Load byte unsigned
35670    ///
35671    /// Load 8 bits of data into register `rd` from an
35672    /// address formed by adding `rs1` to a signed offset.
35673    /// Zero extend the result.
35674    ///
35675    /// # Forms
35676    /// Assembly: `lbu xd, imm(rs1)`
35677    /// Rust: `lbu(rd, rs1, imm)`
35678    ///
35679    /// # Arguments
35680    /// - `rd` — Destination register.
35681    /// - `rs1` — Memory base register.
35682    /// - `imm` — Immediate encoding value.
35683    pub fn lbu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)
35684    where
35685        Self: LbuEmitter<T0, T1, T2>,
35686    {
35687        <Self as LbuEmitter<T0, T1, T2>>::lbu(self, rd, rs1, imm);
35688    }
35689    /// Load doubleword
35690    ///
35691    /// Load 64 bits of data into register `rd` from an
35692    /// address formed by adding `rs1` to a signed offset.
35693    ///
35694    /// # Forms
35695    /// Assembly: `ld xd, imm(rs1)`
35696    /// Rust: `ld(rd, rs1, imm)`
35697    ///
35698    /// # Arguments
35699    /// - `rd` — Destination register.
35700    /// - `rs1` — Memory base register.
35701    /// - `imm` — Immediate encoding value.
35702    pub fn ld<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)
35703    where
35704        Self: LdEmitter<T0, T1, T2>,
35705    {
35706        <Self as LdEmitter<T0, T1, T2>>::ld(self, rd, rs1, imm);
35707    }
35708    /// Load halfword
35709    ///
35710    /// Load 16 bits of data into register `rd` from an
35711    /// address formed by adding `rs1` to a signed offset.
35712    /// Sign extend the result.
35713    ///
35714    /// # Forms
35715    /// Assembly: `lh xd, imm(rs1)`
35716    /// Rust: `lh(rd, rs1, imm)`
35717    ///
35718    /// # Arguments
35719    /// - `rd` — Destination register.
35720    /// - `rs1` — Memory base register.
35721    /// - `imm` — Immediate encoding value.
35722    pub fn lh<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)
35723    where
35724        Self: LhEmitter<T0, T1, T2>,
35725    {
35726        <Self as LhEmitter<T0, T1, T2>>::lh(self, rd, rs1, imm);
35727    }
35728    /// Load halfword unsigned
35729    ///
35730    /// Load 16 bits of data into register `rd` from an
35731    /// address formed by adding `rs1` to a signed offset.
35732    /// Zero extend the result.
35733    ///
35734    /// # Forms
35735    /// Assembly: `lhu xd, imm(rs1)`
35736    /// Rust: `lhu(rd, rs1, imm)`
35737    ///
35738    /// # Arguments
35739    /// - `rd` — Destination register.
35740    /// - `rs1` — Memory base register.
35741    /// - `imm` — Immediate encoding value.
35742    pub fn lhu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)
35743    where
35744        Self: LhuEmitter<T0, T1, T2>,
35745    {
35746        <Self as LhuEmitter<T0, T1, T2>>::lhu(self, rd, rs1, imm);
35747    }
35748    /// RISC-V `lpad` instruction.
35749    ///
35750    /// # Forms
35751    /// Assembly: `lpad imm`
35752    /// Rust: `lpad(imm)`
35753    ///
35754    /// # Arguments
35755    /// - `imm` — Immediate encoding value.
35756    pub fn lpad<T0>(&mut self, imm: T0)
35757    where
35758        Self: LpadEmitter<T0>,
35759    {
35760        <Self as LpadEmitter<T0>>::lpad(self, imm);
35761    }
35762    /// Load reserved doubleword
35763    ///
35764    /// Loads a word from the address in rs1, places the value in rd,
35765    /// and registers a _reservation set_  -- a set of bytes that subsumes the bytes in the
35766    /// addressed word.
35767    ///
35768    /// The address in rs1 must be 8-byte aligned.
35769    ///
35770    /// If the address is not naturally aligned, a `LoadAddressMisaligned` exception or an
35771    /// `LoadAccessFault` exception will be generated. The access-fault exception can be generated
35772    /// for a memory access that would otherwise be able to complete except for the misalignment,
35773    /// if the misaligned access should not be emulated.
35774    ///
35775    /// An implementation can register an arbitrarily large reservation set on each LR, provided the
35776    /// reservation set includes all bytes of the addressed data word or doubleword.
35777    /// An SC can only pair with the most recent LR in program order.
35778    /// An SC may succeed only if no store from another hart to the reservation set can be
35779    /// observed to have occurred between the LR and the SC, and if there is no other SC between the
35780    /// LR and itself in program order.
35781    /// An SC may succeed only if no write from a device other than a hart to the bytes accessed by
35782    /// the LR instruction can be observed to have occurred between the LR and SC. Note this LR
35783    /// might have had a different effective address and data size, but reserved the SC's
35784    /// address as part of the reservation set.
35785    ///
35786    /// \[NOTE\]
35787    /// ----
35788    /// Following this model, in systems with memory translation, an SC is allowed to succeed if the
35789    /// earlier LR reserved the same location using an alias with a different virtual address, but is
35790    /// also allowed to fail if the virtual address is different.
35791    ///
35792    /// To accommodate legacy devices and buses, writes from devices other than RISC-V harts are only
35793    /// required to invalidate reservations when they overlap the bytes accessed by the LR.
35794    /// These writes are not required to invalidate the reservation when they access other bytes in
35795    /// the reservation set.
35796    /// ----
35797    ///
35798    /// Software should not set the _rl_ bit on an LR instruction unless the _aq_ bit is also set.
35799    /// LR.rl and SC.aq instructions are not guaranteed to provide any stronger ordering than those
35800    /// with both bits clear, but may result in lower performance.
35801    ///
35802    /// # Forms
35803    /// Assembly: `lr.d xd, xs1`
35804    /// Rust: `lr_d(rd, rs1, aq, rl)`
35805    ///
35806    /// # Arguments
35807    /// - `rd` — Destination register.
35808    /// - `rs1` — Memory base register.
35809    /// - `aq` — Acquire-order bit.
35810    /// - `rl` — Release-order bit; retained for the existing emitter API.
35811    pub fn lr_d<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, aq: T2, rl: T3)
35812    where
35813        Self: LrDEmitter<T0, T1, T2, T3>,
35814    {
35815        <Self as LrDEmitter<T0, T1, T2, T3>>::lr_d(self, rd, rs1, aq, rl);
35816    }
35817    /// Load reserved word
35818    ///
35819    /// Loads a word from the address in rs1, places the sign-extended value in rd,
35820    /// and registers a _reservation set_  -- a set of bytes that subsumes the bytes in the
35821    /// addressed word.
35822    ///
35823    /// &lt;%- if XLEN == 64 -%&gt;
35824    /// The 32-bit load result is sign-extended to 64-bits.
35825    /// &lt;%- end -%&gt;
35826    ///
35827    /// The address in rs1 must be naturally aligned to the size of the operand
35828    /// (_i.e._, eight-byte aligned for doublewords and four-byte aligned for words).
35829    ///
35830    /// If the address is not naturally aligned, a `LoadAddressMisaligned` exception or an
35831    /// `LoadAccessFault` exception will be generated. The access-fault exception can be generated
35832    /// for a memory access that would otherwise be able to complete except for the misalignment,
35833    /// if the misaligned access should not be emulated.
35834    ///
35835    /// An implementation can register an arbitrarily large reservation set on each LR, provided the
35836    /// reservation set includes all bytes of the addressed data word or doubleword.
35837    /// An SC can only pair with the most recent LR in program order.
35838    /// An SC may succeed only if no store from another hart to the reservation set can be
35839    /// observed to have occurred between the LR and the SC, and if there is no other SC between the
35840    /// LR and itself in program order.
35841    /// An SC may succeed only if no write from a device other than a hart to the bytes accessed by
35842    /// the LR instruction can be observed to have occurred between the LR and SC. Note this LR
35843    /// might have had a different effective address and data size, but reserved the SC's
35844    /// address as part of the reservation set.
35845    ///
35846    /// \[NOTE\]
35847    /// ----
35848    /// Following this model, in systems with memory translation, an SC is allowed to succeed if the
35849    /// earlier LR reserved the same location using an alias with a different virtual address, but is
35850    /// also allowed to fail if the virtual address is different.
35851    ///
35852    /// To accommodate legacy devices and buses, writes from devices other than RISC-V harts are only
35853    /// required to invalidate reservations when they overlap the bytes accessed by the LR.
35854    /// These writes are not required to invalidate the reservation when they access other bytes in
35855    /// the reservation set.
35856    /// ----
35857    ///
35858    /// Software should not set the _rl_ bit on an LR instruction unless the _aq_ bit is also set.
35859    /// LR.rl and SC.aq instructions are not guaranteed to provide any stronger ordering than those
35860    /// with both bits clear, but may result in lower performance.
35861    ///
35862    /// # Forms
35863    /// Assembly: `lr.w xd, xs1`
35864    /// Rust: `lr_w(rd, rs1, aq, rl)`
35865    ///
35866    /// # Arguments
35867    /// - `rd` — Destination register.
35868    /// - `rs1` — Memory base register.
35869    /// - `aq` — Acquire-order bit.
35870    /// - `rl` — Release-order bit; retained for the existing emitter API.
35871    pub fn lr_w<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, aq: T2, rl: T3)
35872    where
35873        Self: LrWEmitter<T0, T1, T2, T3>,
35874    {
35875        <Self as LrWEmitter<T0, T1, T2, T3>>::lr_w(self, rd, rs1, aq, rl);
35876    }
35877    /// Load upper immediate
35878    ///
35879    /// Load the zero-extended imm into rd.
35880    ///
35881    /// # Forms
35882    /// Assembly: `lui xd, imm`
35883    /// Rust: `lui(rd, imm)`
35884    ///
35885    /// # Arguments
35886    /// - `rd` — Destination register.
35887    /// - `imm` — Immediate encoding value.
35888    pub fn lui<T0, T1>(&mut self, rd: T0, imm: T1)
35889    where
35890        Self: LuiEmitter<T0, T1>,
35891    {
35892        <Self as LuiEmitter<T0, T1>>::lui(self, rd, imm);
35893    }
35894    /// Load word
35895    ///
35896    /// Load 32 bits of data into register `rd` from an
35897    /// address formed by adding `rs1` to a signed offset.
35898    /// Sign extend the result.
35899    ///
35900    /// # Forms
35901    /// Assembly: `lw xd, imm(rs1)`
35902    /// Rust: `lw(rd, rs1, imm)`
35903    ///
35904    /// # Arguments
35905    /// - `rd` — Destination register.
35906    /// - `rs1` — Memory base register.
35907    /// - `imm` — Immediate encoding value.
35908    pub fn lw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)
35909    where
35910        Self: LwEmitter<T0, T1, T2>,
35911    {
35912        <Self as LwEmitter<T0, T1, T2>>::lw(self, rd, rs1, imm);
35913    }
35914    /// Load word unsigned
35915    ///
35916    /// Load 64 bits of data into register `rd` from an
35917    /// address formed by adding `rs1` to a signed offset.
35918    /// Zero extend the result.
35919    ///
35920    /// # Forms
35921    /// Assembly: `lwu xd, imm(rs1)`
35922    /// Rust: `lwu(rd, rs1, imm)`
35923    ///
35924    /// # Arguments
35925    /// - `rd` — Destination register.
35926    /// - `rs1` — Memory base register.
35927    /// - `imm` — Immediate encoding value.
35928    pub fn lwu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)
35929    where
35930        Self: LwuEmitter<T0, T1, T2>,
35931    {
35932        <Self as LwuEmitter<T0, T1, T2>>::lwu(self, rd, rs1, imm);
35933    }
35934    /// Maximum
35935    ///
35936    /// This instruction returns the larger of two signed integers.
35937    ///
35938    /// .Software Hint
35939    /// \[NOTE\]
35940    /// Calculating the absolute value of a signed integer can be performed using the
35941    /// following sequence: `neg rD,rS` followed by `max rD,rS,rD. When using this
35942    /// common sequence, it is suggested that they are scheduled with no intervening
35943    /// instructions so that implementations that are so optimized can fuse them
35944    /// together.
35945    ///
35946    /// # Forms
35947    /// Assembly: `max xd, xs1, xs2`
35948    /// Rust: `max(rd, rs1, rs2)`
35949    ///
35950    /// # Arguments
35951    /// - `rd` — Destination register.
35952    /// - `rs1` — Source register.
35953    /// - `rs2` — Source register.
35954    pub fn max<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
35955    where
35956        Self: MaxEmitter<T0, T1, T2>,
35957    {
35958        <Self as MaxEmitter<T0, T1, T2>>::max(self, rd, rs1, rs2);
35959    }
35960    /// Unsigned maximum
35961    ///
35962    /// This instruction returns the larger of two unsigned integers.
35963    ///
35964    /// # Forms
35965    /// Assembly: `maxu xd, xs1, xs2`
35966    /// Rust: `maxu(rd, rs1, rs2)`
35967    ///
35968    /// # Arguments
35969    /// - `rd` — Destination register.
35970    /// - `rs1` — Source register.
35971    /// - `rs2` — Source register.
35972    pub fn maxu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
35973    where
35974        Self: MaxuEmitter<T0, T1, T2>,
35975    {
35976        <Self as MaxuEmitter<T0, T1, T2>>::maxu(self, rd, rs1, rs2);
35977    }
35978    /// Minimum
35979    ///
35980    /// This instruction returns the smaller of two signed integers.
35981    ///
35982    /// # Forms
35983    /// Assembly: `min xd, xs1, xs2`
35984    /// Rust: `min(rd, rs1, rs2)`
35985    ///
35986    /// # Arguments
35987    /// - `rd` — Destination register.
35988    /// - `rs1` — Source register.
35989    /// - `rs2` — Source register.
35990    pub fn min<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
35991    where
35992        Self: MinEmitter<T0, T1, T2>,
35993    {
35994        <Self as MinEmitter<T0, T1, T2>>::min(self, rd, rs1, rs2);
35995    }
35996    /// Unsigned minimum
35997    ///
35998    /// This instruction returns the smaller of two unsigned integers.
35999    ///
36000    /// # Forms
36001    /// Assembly: `minu xd, xs1, xs2`
36002    /// Rust: `minu(rd, rs1, rs2)`
36003    ///
36004    /// # Arguments
36005    /// - `rd` — Destination register.
36006    /// - `rs1` — Source register.
36007    /// - `rs2` — Source register.
36008    pub fn minu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
36009    where
36010        Self: MinuEmitter<T0, T1, T2>,
36011    {
36012        <Self as MinuEmitter<T0, T1, T2>>::minu(self, rd, rs1, rs2);
36013    }
36014    /// RISC-V `mnret` instruction.
36015    ///
36016    /// # Forms
36017    /// Assembly: `mnret mnret`
36018    /// Rust: `mnret()`
36019    ///
36020    /// # Arguments
36021    pub fn mnret(&mut self)
36022    where
36023        Self: MnretEmitter,
36024    {
36025        <Self as MnretEmitter>::mnret(self);
36026    }
36027    /// RISC-V `mop.r.0` instruction.
36028    ///
36029    /// # Forms
36030    /// Assembly: `mop.r.0 rd rs1`
36031    /// Rust: `mop_r_0(rd, rs1)`
36032    ///
36033    /// # Arguments
36034    /// - `rd` — Destination register.
36035    /// - `rs1` — Source register.
36036    pub fn mop_r_0<T0, T1>(&mut self, rd: T0, rs1: T1)
36037    where
36038        Self: MopR0Emitter<T0, T1>,
36039    {
36040        <Self as MopR0Emitter<T0, T1>>::mop_r_0(self, rd, rs1);
36041    }
36042    /// RISC-V `mop.r.1` instruction.
36043    ///
36044    /// # Forms
36045    /// Assembly: `mop.r.1 rd rs1`
36046    /// Rust: `mop_r_1(rd, rs1)`
36047    ///
36048    /// # Arguments
36049    /// - `rd` — Destination register.
36050    /// - `rs1` — Source register.
36051    pub fn mop_r_1<T0, T1>(&mut self, rd: T0, rs1: T1)
36052    where
36053        Self: MopR1Emitter<T0, T1>,
36054    {
36055        <Self as MopR1Emitter<T0, T1>>::mop_r_1(self, rd, rs1);
36056    }
36057    /// RISC-V `mop.r.10` instruction.
36058    ///
36059    /// # Forms
36060    /// Assembly: `mop.r.10 rd rs1`
36061    /// Rust: `mop_r_10(rd, rs1)`
36062    ///
36063    /// # Arguments
36064    /// - `rd` — Destination register.
36065    /// - `rs1` — Source register.
36066    pub fn mop_r_10<T0, T1>(&mut self, rd: T0, rs1: T1)
36067    where
36068        Self: MopR10Emitter<T0, T1>,
36069    {
36070        <Self as MopR10Emitter<T0, T1>>::mop_r_10(self, rd, rs1);
36071    }
36072    /// RISC-V `mop.r.11` instruction.
36073    ///
36074    /// # Forms
36075    /// Assembly: `mop.r.11 rd rs1`
36076    /// Rust: `mop_r_11(rd, rs1)`
36077    ///
36078    /// # Arguments
36079    /// - `rd` — Destination register.
36080    /// - `rs1` — Source register.
36081    pub fn mop_r_11<T0, T1>(&mut self, rd: T0, rs1: T1)
36082    where
36083        Self: MopR11Emitter<T0, T1>,
36084    {
36085        <Self as MopR11Emitter<T0, T1>>::mop_r_11(self, rd, rs1);
36086    }
36087    /// RISC-V `mop.r.12` instruction.
36088    ///
36089    /// # Forms
36090    /// Assembly: `mop.r.12 rd rs1`
36091    /// Rust: `mop_r_12(rd, rs1)`
36092    ///
36093    /// # Arguments
36094    /// - `rd` — Destination register.
36095    /// - `rs1` — Source register.
36096    pub fn mop_r_12<T0, T1>(&mut self, rd: T0, rs1: T1)
36097    where
36098        Self: MopR12Emitter<T0, T1>,
36099    {
36100        <Self as MopR12Emitter<T0, T1>>::mop_r_12(self, rd, rs1);
36101    }
36102    /// RISC-V `mop.r.13` instruction.
36103    ///
36104    /// # Forms
36105    /// Assembly: `mop.r.13 rd rs1`
36106    /// Rust: `mop_r_13(rd, rs1)`
36107    ///
36108    /// # Arguments
36109    /// - `rd` — Destination register.
36110    /// - `rs1` — Source register.
36111    pub fn mop_r_13<T0, T1>(&mut self, rd: T0, rs1: T1)
36112    where
36113        Self: MopR13Emitter<T0, T1>,
36114    {
36115        <Self as MopR13Emitter<T0, T1>>::mop_r_13(self, rd, rs1);
36116    }
36117    /// RISC-V `mop.r.14` instruction.
36118    ///
36119    /// # Forms
36120    /// Assembly: `mop.r.14 rd rs1`
36121    /// Rust: `mop_r_14(rd, rs1)`
36122    ///
36123    /// # Arguments
36124    /// - `rd` — Destination register.
36125    /// - `rs1` — Source register.
36126    pub fn mop_r_14<T0, T1>(&mut self, rd: T0, rs1: T1)
36127    where
36128        Self: MopR14Emitter<T0, T1>,
36129    {
36130        <Self as MopR14Emitter<T0, T1>>::mop_r_14(self, rd, rs1);
36131    }
36132    /// RISC-V `mop.r.15` instruction.
36133    ///
36134    /// # Forms
36135    /// Assembly: `mop.r.15 rd rs1`
36136    /// Rust: `mop_r_15(rd, rs1)`
36137    ///
36138    /// # Arguments
36139    /// - `rd` — Destination register.
36140    /// - `rs1` — Source register.
36141    pub fn mop_r_15<T0, T1>(&mut self, rd: T0, rs1: T1)
36142    where
36143        Self: MopR15Emitter<T0, T1>,
36144    {
36145        <Self as MopR15Emitter<T0, T1>>::mop_r_15(self, rd, rs1);
36146    }
36147    /// RISC-V `mop.r.16` instruction.
36148    ///
36149    /// # Forms
36150    /// Assembly: `mop.r.16 rd rs1`
36151    /// Rust: `mop_r_16(rd, rs1)`
36152    ///
36153    /// # Arguments
36154    /// - `rd` — Destination register.
36155    /// - `rs1` — Source register.
36156    pub fn mop_r_16<T0, T1>(&mut self, rd: T0, rs1: T1)
36157    where
36158        Self: MopR16Emitter<T0, T1>,
36159    {
36160        <Self as MopR16Emitter<T0, T1>>::mop_r_16(self, rd, rs1);
36161    }
36162    /// RISC-V `mop.r.17` instruction.
36163    ///
36164    /// # Forms
36165    /// Assembly: `mop.r.17 rd rs1`
36166    /// Rust: `mop_r_17(rd, rs1)`
36167    ///
36168    /// # Arguments
36169    /// - `rd` — Destination register.
36170    /// - `rs1` — Source register.
36171    pub fn mop_r_17<T0, T1>(&mut self, rd: T0, rs1: T1)
36172    where
36173        Self: MopR17Emitter<T0, T1>,
36174    {
36175        <Self as MopR17Emitter<T0, T1>>::mop_r_17(self, rd, rs1);
36176    }
36177    /// RISC-V `mop.r.18` instruction.
36178    ///
36179    /// # Forms
36180    /// Assembly: `mop.r.18 rd rs1`
36181    /// Rust: `mop_r_18(rd, rs1)`
36182    ///
36183    /// # Arguments
36184    /// - `rd` — Destination register.
36185    /// - `rs1` — Source register.
36186    pub fn mop_r_18<T0, T1>(&mut self, rd: T0, rs1: T1)
36187    where
36188        Self: MopR18Emitter<T0, T1>,
36189    {
36190        <Self as MopR18Emitter<T0, T1>>::mop_r_18(self, rd, rs1);
36191    }
36192    /// RISC-V `mop.r.19` instruction.
36193    ///
36194    /// # Forms
36195    /// Assembly: `mop.r.19 rd rs1`
36196    /// Rust: `mop_r_19(rd, rs1)`
36197    ///
36198    /// # Arguments
36199    /// - `rd` — Destination register.
36200    /// - `rs1` — Source register.
36201    pub fn mop_r_19<T0, T1>(&mut self, rd: T0, rs1: T1)
36202    where
36203        Self: MopR19Emitter<T0, T1>,
36204    {
36205        <Self as MopR19Emitter<T0, T1>>::mop_r_19(self, rd, rs1);
36206    }
36207    /// RISC-V `mop.r.2` instruction.
36208    ///
36209    /// # Forms
36210    /// Assembly: `mop.r.2 rd rs1`
36211    /// Rust: `mop_r_2(rd, rs1)`
36212    ///
36213    /// # Arguments
36214    /// - `rd` — Destination register.
36215    /// - `rs1` — Source register.
36216    pub fn mop_r_2<T0, T1>(&mut self, rd: T0, rs1: T1)
36217    where
36218        Self: MopR2Emitter<T0, T1>,
36219    {
36220        <Self as MopR2Emitter<T0, T1>>::mop_r_2(self, rd, rs1);
36221    }
36222    /// RISC-V `mop.r.20` instruction.
36223    ///
36224    /// # Forms
36225    /// Assembly: `mop.r.20 rd rs1`
36226    /// Rust: `mop_r_20(rd, rs1)`
36227    ///
36228    /// # Arguments
36229    /// - `rd` — Destination register.
36230    /// - `rs1` — Source register.
36231    pub fn mop_r_20<T0, T1>(&mut self, rd: T0, rs1: T1)
36232    where
36233        Self: MopR20Emitter<T0, T1>,
36234    {
36235        <Self as MopR20Emitter<T0, T1>>::mop_r_20(self, rd, rs1);
36236    }
36237    /// RISC-V `mop.r.21` instruction.
36238    ///
36239    /// # Forms
36240    /// Assembly: `mop.r.21 rd rs1`
36241    /// Rust: `mop_r_21(rd, rs1)`
36242    ///
36243    /// # Arguments
36244    /// - `rd` — Destination register.
36245    /// - `rs1` — Source register.
36246    pub fn mop_r_21<T0, T1>(&mut self, rd: T0, rs1: T1)
36247    where
36248        Self: MopR21Emitter<T0, T1>,
36249    {
36250        <Self as MopR21Emitter<T0, T1>>::mop_r_21(self, rd, rs1);
36251    }
36252    /// RISC-V `mop.r.22` instruction.
36253    ///
36254    /// # Forms
36255    /// Assembly: `mop.r.22 rd rs1`
36256    /// Rust: `mop_r_22(rd, rs1)`
36257    ///
36258    /// # Arguments
36259    /// - `rd` — Destination register.
36260    /// - `rs1` — Source register.
36261    pub fn mop_r_22<T0, T1>(&mut self, rd: T0, rs1: T1)
36262    where
36263        Self: MopR22Emitter<T0, T1>,
36264    {
36265        <Self as MopR22Emitter<T0, T1>>::mop_r_22(self, rd, rs1);
36266    }
36267    /// RISC-V `mop.r.23` instruction.
36268    ///
36269    /// # Forms
36270    /// Assembly: `mop.r.23 rd rs1`
36271    /// Rust: `mop_r_23(rd, rs1)`
36272    ///
36273    /// # Arguments
36274    /// - `rd` — Destination register.
36275    /// - `rs1` — Source register.
36276    pub fn mop_r_23<T0, T1>(&mut self, rd: T0, rs1: T1)
36277    where
36278        Self: MopR23Emitter<T0, T1>,
36279    {
36280        <Self as MopR23Emitter<T0, T1>>::mop_r_23(self, rd, rs1);
36281    }
36282    /// RISC-V `mop.r.24` instruction.
36283    ///
36284    /// # Forms
36285    /// Assembly: `mop.r.24 rd rs1`
36286    /// Rust: `mop_r_24(rd, rs1)`
36287    ///
36288    /// # Arguments
36289    /// - `rd` — Destination register.
36290    /// - `rs1` — Source register.
36291    pub fn mop_r_24<T0, T1>(&mut self, rd: T0, rs1: T1)
36292    where
36293        Self: MopR24Emitter<T0, T1>,
36294    {
36295        <Self as MopR24Emitter<T0, T1>>::mop_r_24(self, rd, rs1);
36296    }
36297    /// RISC-V `mop.r.25` instruction.
36298    ///
36299    /// # Forms
36300    /// Assembly: `mop.r.25 rd rs1`
36301    /// Rust: `mop_r_25(rd, rs1)`
36302    ///
36303    /// # Arguments
36304    /// - `rd` — Destination register.
36305    /// - `rs1` — Source register.
36306    pub fn mop_r_25<T0, T1>(&mut self, rd: T0, rs1: T1)
36307    where
36308        Self: MopR25Emitter<T0, T1>,
36309    {
36310        <Self as MopR25Emitter<T0, T1>>::mop_r_25(self, rd, rs1);
36311    }
36312    /// RISC-V `mop.r.26` instruction.
36313    ///
36314    /// # Forms
36315    /// Assembly: `mop.r.26 rd rs1`
36316    /// Rust: `mop_r_26(rd, rs1)`
36317    ///
36318    /// # Arguments
36319    /// - `rd` — Destination register.
36320    /// - `rs1` — Source register.
36321    pub fn mop_r_26<T0, T1>(&mut self, rd: T0, rs1: T1)
36322    where
36323        Self: MopR26Emitter<T0, T1>,
36324    {
36325        <Self as MopR26Emitter<T0, T1>>::mop_r_26(self, rd, rs1);
36326    }
36327    /// RISC-V `mop.r.27` instruction.
36328    ///
36329    /// # Forms
36330    /// Assembly: `mop.r.27 rd rs1`
36331    /// Rust: `mop_r_27(rd, rs1)`
36332    ///
36333    /// # Arguments
36334    /// - `rd` — Destination register.
36335    /// - `rs1` — Source register.
36336    pub fn mop_r_27<T0, T1>(&mut self, rd: T0, rs1: T1)
36337    where
36338        Self: MopR27Emitter<T0, T1>,
36339    {
36340        <Self as MopR27Emitter<T0, T1>>::mop_r_27(self, rd, rs1);
36341    }
36342    /// RISC-V `mop.r.28` instruction.
36343    ///
36344    /// # Forms
36345    /// Assembly: `mop.r.28 rd rs1`
36346    /// Rust: `mop_r_28(rd, rs1)`
36347    ///
36348    /// # Arguments
36349    /// - `rd` — Destination register.
36350    /// - `rs1` — Source register.
36351    pub fn mop_r_28<T0, T1>(&mut self, rd: T0, rs1: T1)
36352    where
36353        Self: MopR28Emitter<T0, T1>,
36354    {
36355        <Self as MopR28Emitter<T0, T1>>::mop_r_28(self, rd, rs1);
36356    }
36357    /// RISC-V `mop.r.29` instruction.
36358    ///
36359    /// # Forms
36360    /// Assembly: `mop.r.29 rd rs1`
36361    /// Rust: `mop_r_29(rd, rs1)`
36362    ///
36363    /// # Arguments
36364    /// - `rd` — Destination register.
36365    /// - `rs1` — Source register.
36366    pub fn mop_r_29<T0, T1>(&mut self, rd: T0, rs1: T1)
36367    where
36368        Self: MopR29Emitter<T0, T1>,
36369    {
36370        <Self as MopR29Emitter<T0, T1>>::mop_r_29(self, rd, rs1);
36371    }
36372    /// RISC-V `mop.r.3` instruction.
36373    ///
36374    /// # Forms
36375    /// Assembly: `mop.r.3 rd rs1`
36376    /// Rust: `mop_r_3(rd, rs1)`
36377    ///
36378    /// # Arguments
36379    /// - `rd` — Destination register.
36380    /// - `rs1` — Source register.
36381    pub fn mop_r_3<T0, T1>(&mut self, rd: T0, rs1: T1)
36382    where
36383        Self: MopR3Emitter<T0, T1>,
36384    {
36385        <Self as MopR3Emitter<T0, T1>>::mop_r_3(self, rd, rs1);
36386    }
36387    /// RISC-V `mop.r.30` instruction.
36388    ///
36389    /// # Forms
36390    /// Assembly: `mop.r.30 rd rs1`
36391    /// Rust: `mop_r_30(rd, rs1)`
36392    ///
36393    /// # Arguments
36394    /// - `rd` — Destination register.
36395    /// - `rs1` — Source register.
36396    pub fn mop_r_30<T0, T1>(&mut self, rd: T0, rs1: T1)
36397    where
36398        Self: MopR30Emitter<T0, T1>,
36399    {
36400        <Self as MopR30Emitter<T0, T1>>::mop_r_30(self, rd, rs1);
36401    }
36402    /// RISC-V `mop.r.31` instruction.
36403    ///
36404    /// # Forms
36405    /// Assembly: `mop.r.31 rd rs1`
36406    /// Rust: `mop_r_31(rd, rs1)`
36407    ///
36408    /// # Arguments
36409    /// - `rd` — Destination register.
36410    /// - `rs1` — Source register.
36411    pub fn mop_r_31<T0, T1>(&mut self, rd: T0, rs1: T1)
36412    where
36413        Self: MopR31Emitter<T0, T1>,
36414    {
36415        <Self as MopR31Emitter<T0, T1>>::mop_r_31(self, rd, rs1);
36416    }
36417    /// RISC-V `mop.r.4` instruction.
36418    ///
36419    /// # Forms
36420    /// Assembly: `mop.r.4 rd rs1`
36421    /// Rust: `mop_r_4(rd, rs1)`
36422    ///
36423    /// # Arguments
36424    /// - `rd` — Destination register.
36425    /// - `rs1` — Source register.
36426    pub fn mop_r_4<T0, T1>(&mut self, rd: T0, rs1: T1)
36427    where
36428        Self: MopR4Emitter<T0, T1>,
36429    {
36430        <Self as MopR4Emitter<T0, T1>>::mop_r_4(self, rd, rs1);
36431    }
36432    /// RISC-V `mop.r.5` instruction.
36433    ///
36434    /// # Forms
36435    /// Assembly: `mop.r.5 rd rs1`
36436    /// Rust: `mop_r_5(rd, rs1)`
36437    ///
36438    /// # Arguments
36439    /// - `rd` — Destination register.
36440    /// - `rs1` — Source register.
36441    pub fn mop_r_5<T0, T1>(&mut self, rd: T0, rs1: T1)
36442    where
36443        Self: MopR5Emitter<T0, T1>,
36444    {
36445        <Self as MopR5Emitter<T0, T1>>::mop_r_5(self, rd, rs1);
36446    }
36447    /// RISC-V `mop.r.6` instruction.
36448    ///
36449    /// # Forms
36450    /// Assembly: `mop.r.6 rd rs1`
36451    /// Rust: `mop_r_6(rd, rs1)`
36452    ///
36453    /// # Arguments
36454    /// - `rd` — Destination register.
36455    /// - `rs1` — Source register.
36456    pub fn mop_r_6<T0, T1>(&mut self, rd: T0, rs1: T1)
36457    where
36458        Self: MopR6Emitter<T0, T1>,
36459    {
36460        <Self as MopR6Emitter<T0, T1>>::mop_r_6(self, rd, rs1);
36461    }
36462    /// RISC-V `mop.r.7` instruction.
36463    ///
36464    /// # Forms
36465    /// Assembly: `mop.r.7 rd rs1`
36466    /// Rust: `mop_r_7(rd, rs1)`
36467    ///
36468    /// # Arguments
36469    /// - `rd` — Destination register.
36470    /// - `rs1` — Source register.
36471    pub fn mop_r_7<T0, T1>(&mut self, rd: T0, rs1: T1)
36472    where
36473        Self: MopR7Emitter<T0, T1>,
36474    {
36475        <Self as MopR7Emitter<T0, T1>>::mop_r_7(self, rd, rs1);
36476    }
36477    /// RISC-V `mop.r.8` instruction.
36478    ///
36479    /// # Forms
36480    /// Assembly: `mop.r.8 rd rs1`
36481    /// Rust: `mop_r_8(rd, rs1)`
36482    ///
36483    /// # Arguments
36484    /// - `rd` — Destination register.
36485    /// - `rs1` — Source register.
36486    pub fn mop_r_8<T0, T1>(&mut self, rd: T0, rs1: T1)
36487    where
36488        Self: MopR8Emitter<T0, T1>,
36489    {
36490        <Self as MopR8Emitter<T0, T1>>::mop_r_8(self, rd, rs1);
36491    }
36492    /// RISC-V `mop.r.9` instruction.
36493    ///
36494    /// # Forms
36495    /// Assembly: `mop.r.9 rd rs1`
36496    /// Rust: `mop_r_9(rd, rs1)`
36497    ///
36498    /// # Arguments
36499    /// - `rd` — Destination register.
36500    /// - `rs1` — Source register.
36501    pub fn mop_r_9<T0, T1>(&mut self, rd: T0, rs1: T1)
36502    where
36503        Self: MopR9Emitter<T0, T1>,
36504    {
36505        <Self as MopR9Emitter<T0, T1>>::mop_r_9(self, rd, rs1);
36506    }
36507    /// RISC-V `mop.rr.0` instruction.
36508    ///
36509    /// # Forms
36510    /// Assembly: `mop.rr.0 rd rs1 rs2`
36511    /// Rust: `mop_rr_0(rd, rs1, rs2)`
36512    ///
36513    /// # Arguments
36514    /// - `rd` — Destination register.
36515    /// - `rs1` — Source register.
36516    /// - `rs2` — Source register.
36517    pub fn mop_rr_0<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
36518    where
36519        Self: MopRr0Emitter<T0, T1, T2>,
36520    {
36521        <Self as MopRr0Emitter<T0, T1, T2>>::mop_rr_0(self, rd, rs1, rs2);
36522    }
36523    /// RISC-V `mop.rr.1` instruction.
36524    ///
36525    /// # Forms
36526    /// Assembly: `mop.rr.1 rd rs1 rs2`
36527    /// Rust: `mop_rr_1(rd, rs1, rs2)`
36528    ///
36529    /// # Arguments
36530    /// - `rd` — Destination register.
36531    /// - `rs1` — Source register.
36532    /// - `rs2` — Source register.
36533    pub fn mop_rr_1<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
36534    where
36535        Self: MopRr1Emitter<T0, T1, T2>,
36536    {
36537        <Self as MopRr1Emitter<T0, T1, T2>>::mop_rr_1(self, rd, rs1, rs2);
36538    }
36539    /// RISC-V `mop.rr.2` instruction.
36540    ///
36541    /// # Forms
36542    /// Assembly: `mop.rr.2 rd rs1 rs2`
36543    /// Rust: `mop_rr_2(rd, rs1, rs2)`
36544    ///
36545    /// # Arguments
36546    /// - `rd` — Destination register.
36547    /// - `rs1` — Source register.
36548    /// - `rs2` — Source register.
36549    pub fn mop_rr_2<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
36550    where
36551        Self: MopRr2Emitter<T0, T1, T2>,
36552    {
36553        <Self as MopRr2Emitter<T0, T1, T2>>::mop_rr_2(self, rd, rs1, rs2);
36554    }
36555    /// RISC-V `mop.rr.3` instruction.
36556    ///
36557    /// # Forms
36558    /// Assembly: `mop.rr.3 rd rs1 rs2`
36559    /// Rust: `mop_rr_3(rd, rs1, rs2)`
36560    ///
36561    /// # Arguments
36562    /// - `rd` — Destination register.
36563    /// - `rs1` — Source register.
36564    /// - `rs2` — Source register.
36565    pub fn mop_rr_3<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
36566    where
36567        Self: MopRr3Emitter<T0, T1, T2>,
36568    {
36569        <Self as MopRr3Emitter<T0, T1, T2>>::mop_rr_3(self, rd, rs1, rs2);
36570    }
36571    /// RISC-V `mop.rr.4` instruction.
36572    ///
36573    /// # Forms
36574    /// Assembly: `mop.rr.4 rd rs1 rs2`
36575    /// Rust: `mop_rr_4(rd, rs1, rs2)`
36576    ///
36577    /// # Arguments
36578    /// - `rd` — Destination register.
36579    /// - `rs1` — Source register.
36580    /// - `rs2` — Source register.
36581    pub fn mop_rr_4<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
36582    where
36583        Self: MopRr4Emitter<T0, T1, T2>,
36584    {
36585        <Self as MopRr4Emitter<T0, T1, T2>>::mop_rr_4(self, rd, rs1, rs2);
36586    }
36587    /// RISC-V `mop.rr.5` instruction.
36588    ///
36589    /// # Forms
36590    /// Assembly: `mop.rr.5 rd rs1 rs2`
36591    /// Rust: `mop_rr_5(rd, rs1, rs2)`
36592    ///
36593    /// # Arguments
36594    /// - `rd` — Destination register.
36595    /// - `rs1` — Source register.
36596    /// - `rs2` — Source register.
36597    pub fn mop_rr_5<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
36598    where
36599        Self: MopRr5Emitter<T0, T1, T2>,
36600    {
36601        <Self as MopRr5Emitter<T0, T1, T2>>::mop_rr_5(self, rd, rs1, rs2);
36602    }
36603    /// RISC-V `mop.rr.6` instruction.
36604    ///
36605    /// # Forms
36606    /// Assembly: `mop.rr.6 rd rs1 rs2`
36607    /// Rust: `mop_rr_6(rd, rs1, rs2)`
36608    ///
36609    /// # Arguments
36610    /// - `rd` — Destination register.
36611    /// - `rs1` — Source register.
36612    /// - `rs2` — Source register.
36613    pub fn mop_rr_6<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
36614    where
36615        Self: MopRr6Emitter<T0, T1, T2>,
36616    {
36617        <Self as MopRr6Emitter<T0, T1, T2>>::mop_rr_6(self, rd, rs1, rs2);
36618    }
36619    /// RISC-V `mop.rr.7` instruction.
36620    ///
36621    /// # Forms
36622    /// Assembly: `mop.rr.7 rd rs1 rs2`
36623    /// Rust: `mop_rr_7(rd, rs1, rs2)`
36624    ///
36625    /// # Arguments
36626    /// - `rd` — Destination register.
36627    /// - `rs1` — Source register.
36628    /// - `rs2` — Source register.
36629    pub fn mop_rr_7<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
36630    where
36631        Self: MopRr7Emitter<T0, T1, T2>,
36632    {
36633        <Self as MopRr7Emitter<T0, T1, T2>>::mop_rr_7(self, rd, rs1, rs2);
36634    }
36635    /// Machine Exception Return
36636    ///
36637    /// Returns from an exception in M-mode.
36638    ///
36639    /// # Forms
36640    /// Assembly: `mret ""`
36641    /// Rust: `mret()`
36642    ///
36643    /// # Arguments
36644    pub fn mret(&mut self)
36645    where
36646        Self: MretEmitter,
36647    {
36648        <Self as MretEmitter>::mret(self);
36649    }
36650    /// Signed multiply
36651    ///
36652    /// MUL performs an XLEN-bitxXLEN-bit multiplication of `rs1` by `rs2` and places the lower
36653    /// XLEN bits in the destination register.
36654    /// Any overflow is thrown away.
36655    ///
36656    /// \[NOTE\]
36657    /// If both the high and low bits of the same product are required, then the recommended code
36658    /// sequence is:
36659    /// MULH\[\[S\]U\] rdh, rs1, rs2; MUL rdl, rs1, rs2
36660    /// (source register specifiers must be in same order and rdh cannot be the same as rs1 or rs2).
36661    /// Microarchitectures can then fuse these into a single multiply operation instead of
36662    /// performing two separate multiplies.
36663    ///
36664    /// # Forms
36665    /// Assembly: `mul xd, xs1, xs2`
36666    /// Rust: `mul(rd, rs1, rs2)`
36667    ///
36668    /// # Arguments
36669    /// - `rd` — Destination register.
36670    /// - `rs1` — Source register.
36671    /// - `rs2` — Source register.
36672    pub fn mul<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
36673    where
36674        Self: MulEmitter<T0, T1, T2>,
36675    {
36676        <Self as MulEmitter<T0, T1, T2>>::mul(self, rd, rs1, rs2);
36677    }
36678    /// Signed multiply high
36679    ///
36680    /// Multiply the signed values in rs1 to rs2, and store the upper half of the result in rd.
36681    /// The lower half is thrown away.
36682    ///
36683    /// If both the upper and lower halves are needed, it suggested to use the sequence:
36684    ///
36685    /// ---
36686    ///   mulh rdh, rs1, rs2
36687    ///   mul  rdl, rs1, rs2
36688    /// ---
36689    ///
36690    /// Microarchitectures may look for that sequence and fuse the operations.
36691    ///
36692    /// # Forms
36693    /// Assembly: `mulh xd, xs1, xs2`
36694    /// Rust: `mulh(rd, rs1, rs2)`
36695    ///
36696    /// # Arguments
36697    /// - `rd` — Destination register.
36698    /// - `rs1` — Source register.
36699    /// - `rs2` — Source register.
36700    pub fn mulh<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
36701    where
36702        Self: MulhEmitter<T0, T1, T2>,
36703    {
36704        <Self as MulhEmitter<T0, T1, T2>>::mulh(self, rd, rs1, rs2);
36705    }
36706    /// Signed/unsigned multiply high
36707    ///
36708    /// Multiply the signed value in rs1 by the unsigned value in rs2, and store the upper half of the result in rd.
36709    /// The lower half is thrown away.
36710    ///
36711    /// If both the upper and lower halves are needed, it suggested to use the sequence:
36712    ///
36713    /// ---
36714    ///   mulhsu rdh, rs1, rs2
36715    ///   mul    rdl, rs1, rs2
36716    /// ---
36717    ///
36718    /// Microarchitectures may look for that sequence and fuse the operations.
36719    ///
36720    /// # Forms
36721    /// Assembly: `mulhsu xd, xs1, xs2`
36722    /// Rust: `mulhsu(rd, rs1, rs2)`
36723    ///
36724    /// # Arguments
36725    /// - `rd` — Destination register.
36726    /// - `rs1` — Source register.
36727    /// - `rs2` — Source register.
36728    pub fn mulhsu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
36729    where
36730        Self: MulhsuEmitter<T0, T1, T2>,
36731    {
36732        <Self as MulhsuEmitter<T0, T1, T2>>::mulhsu(self, rd, rs1, rs2);
36733    }
36734    /// Unsigned multiply high
36735    ///
36736    /// Multiply the unsigned values in rs1 to rs2, and store the upper half of the result in rd.
36737    /// The lower half is thrown away.
36738    ///
36739    /// If both the upper and lower halves are needed, it suggested to use the sequence:
36740    ///
36741    /// ---
36742    ///   mulhu rdh, rs1, rs2
36743    ///   mul   rdl, rs1, rs2
36744    /// ---
36745    ///
36746    /// Microarchitectures may look for that sequence and fuse the operations.
36747    ///
36748    /// # Forms
36749    /// Assembly: `mulhu xd, xs1, xs2`
36750    /// Rust: `mulhu(rd, rs1, rs2)`
36751    ///
36752    /// # Arguments
36753    /// - `rd` — Destination register.
36754    /// - `rs1` — Source register.
36755    /// - `rs2` — Source register.
36756    pub fn mulhu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
36757    where
36758        Self: MulhuEmitter<T0, T1, T2>,
36759    {
36760        <Self as MulhuEmitter<T0, T1, T2>>::mulhu(self, rd, rs1, rs2);
36761    }
36762    /// Signed 32-bit multiply
36763    ///
36764    /// Multiplies the lower 32 bits of the source registers, placing the sign-extension of the
36765    /// lower 32 bits of the result into the destination register.
36766    ///
36767    /// Any overflow is thrown away.
36768    ///
36769    /// \[NOTE\]
36770    /// In RV64, MUL can be used to obtain the upper 32 bits of the 64-bit product,
36771    /// but signed arguments must be proper 32-bit signed values, whereas unsigned arguments
36772    /// must have their upper 32 bits clear. If the arguments are not known to be sign- or zero-extended,
36773    /// an alternative is to shift both arguments left by 32 bits, then use MULH\[\[S\]U\].
36774    ///
36775    /// # Forms
36776    /// Assembly: `mulw xd, xs1, xs2`
36777    /// Rust: `mulw(rd, rs1, rs2)`
36778    ///
36779    /// # Arguments
36780    /// - `rd` — Destination register.
36781    /// - `rs1` — Source register.
36782    /// - `rs2` — Source register.
36783    pub fn mulw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
36784    where
36785        Self: MulwEmitter<T0, T1, T2>,
36786    {
36787        <Self as MulwEmitter<T0, T1, T2>>::mulw(self, rd, rs1, rs2);
36788    }
36789    /// RISC-V `mv` instruction.
36790    ///
36791    /// # Forms
36792    /// Assembly: `mv rd rs1`
36793    /// Rust: `mv(rd, rs1)`
36794    ///
36795    /// # Arguments
36796    /// - `rd` — Destination register.
36797    /// - `rs1` — Source register.
36798    pub fn mv<T0, T1>(&mut self, rd: T0, rs1: T1)
36799    where
36800        Self: MvEmitter<T0, T1>,
36801    {
36802        <Self as MvEmitter<T0, T1>>::mv(self, rd, rs1);
36803    }
36804    /// RISC-V `neg` instruction.
36805    ///
36806    /// # Forms
36807    /// Assembly: `neg rd rs1`
36808    /// Rust: `neg(rd, rs1)`
36809    ///
36810    /// # Arguments
36811    /// - `rd` — Destination register.
36812    /// - `rs1` — Source register.
36813    pub fn neg<T0, T1>(&mut self, rd: T0, rs1: T1)
36814    where
36815        Self: NegEmitter<T0, T1>,
36816    {
36817        <Self as NegEmitter<T0, T1>>::neg(self, rd, rs1);
36818    }
36819    /// RISC-V `nop` instruction.
36820    ///
36821    /// # Forms
36822    /// Assembly: `nop`
36823    /// Rust: `nop()`
36824    ///
36825    /// # Arguments
36826    pub fn nop(&mut self)
36827    where
36828        Self: NopEmitter,
36829    {
36830        <Self as NopEmitter>::nop(self);
36831    }
36832    /// RISC-V `ntl.all` instruction.
36833    ///
36834    /// # Forms
36835    /// Assembly: `ntl.all`
36836    /// Rust: `ntl_all()`
36837    ///
36838    /// # Arguments
36839    pub fn ntl_all(&mut self)
36840    where
36841        Self: NtlAllEmitter,
36842    {
36843        <Self as NtlAllEmitter>::ntl_all(self);
36844    }
36845    /// RISC-V `ntl.p1` instruction.
36846    ///
36847    /// # Forms
36848    /// Assembly: `ntl.p1`
36849    /// Rust: `ntl_p1()`
36850    ///
36851    /// # Arguments
36852    pub fn ntl_p1(&mut self)
36853    where
36854        Self: NtlP1Emitter,
36855    {
36856        <Self as NtlP1Emitter>::ntl_p1(self);
36857    }
36858    /// RISC-V `ntl.pall` instruction.
36859    ///
36860    /// # Forms
36861    /// Assembly: `ntl.pall`
36862    /// Rust: `ntl_pall()`
36863    ///
36864    /// # Arguments
36865    pub fn ntl_pall(&mut self)
36866    where
36867        Self: NtlPallEmitter,
36868    {
36869        <Self as NtlPallEmitter>::ntl_pall(self);
36870    }
36871    /// RISC-V `ntl.s1` instruction.
36872    ///
36873    /// # Forms
36874    /// Assembly: `ntl.s1`
36875    /// Rust: `ntl_s1()`
36876    ///
36877    /// # Arguments
36878    pub fn ntl_s1(&mut self)
36879    where
36880        Self: NtlS1Emitter,
36881    {
36882        <Self as NtlS1Emitter>::ntl_s1(self);
36883    }
36884    /// Or
36885    ///
36886    /// Or rs1 with rs2, and store the result in rd
36887    ///
36888    /// # Forms
36889    /// Assembly: `or xd, xs1, xs2`
36890    /// Rust: `or(rd, rs1, rs2)`
36891    ///
36892    /// # Arguments
36893    /// - `rd` — Destination register.
36894    /// - `rs1` — Source register.
36895    /// - `rs2` — Source register.
36896    pub fn or<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
36897    where
36898        Self: OrEmitter<T0, T1, T2>,
36899    {
36900        <Self as OrEmitter<T0, T1, T2>>::or(self, rd, rs1, rs2);
36901    }
36902    /// Bitware OR-combine, byte granule
36903    ///
36904    /// Combines the bits within each byte using bitwise logical OR. This sets the bits
36905    /// of each byte in the result rd to all zeros if no bit within the respective byte
36906    /// of rs is set, or to all ones if any bit within the respective byte of rs is set.
36907    ///
36908    /// # Forms
36909    /// Assembly: `orc.b xd, xs1, xs2`
36910    /// Rust: `orc_b(rd, rs1)`
36911    ///
36912    /// # Arguments
36913    /// - `rd` — Destination register.
36914    /// - `rs1` — Source register.
36915    pub fn orc_b<T0, T1>(&mut self, rd: T0, rs1: T1)
36916    where
36917        Self: OrcBEmitter<T0, T1>,
36918    {
36919        <Self as OrcBEmitter<T0, T1>>::orc_b(self, rd, rs1);
36920    }
36921    /// Or immediate
36922    ///
36923    /// Or an immediate to the value in rs1, and store the result in rd
36924    ///
36925    /// # Forms
36926    /// Assembly: `ori xd, xs1, imm`
36927    /// Rust: `ori(rd, rs1, imm)`
36928    ///
36929    /// # Arguments
36930    /// - `rd` — Destination register.
36931    /// - `rs1` — Source register.
36932    /// - `imm` — Immediate encoding value.
36933    pub fn ori<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)
36934    where
36935        Self: OriEmitter<T0, T1, T2>,
36936    {
36937        <Self as OriEmitter<T0, T1, T2>>::ori(self, rd, rs1, imm);
36938    }
36939    /// OR with inverted operand
36940    ///
36941    /// This instruction performs the bitwise logical OR operation between rs1 and the bitwise inversion of rs2.
36942    ///
36943    /// # Forms
36944    /// Assembly: `orn xd, xs1, xs2`
36945    /// Rust: `orn(rd, rs1, rs2)`
36946    ///
36947    /// # Arguments
36948    /// - `rd` — Destination register.
36949    /// - `rs1` — Source register.
36950    /// - `rs2` — Source register.
36951    pub fn orn<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
36952    where
36953        Self: OrnEmitter<T0, T1, T2>,
36954    {
36955        <Self as OrnEmitter<T0, T1, T2>>::orn(self, rd, rs1, rs2);
36956    }
36957    /// RISC-V `pack` instruction.
36958    ///
36959    /// # Forms
36960    /// Assembly: `pack xd, xs1, xs2`
36961    /// Rust: `pack(rd, rs1, rs2)`
36962    ///
36963    /// # Arguments
36964    /// - `rd` — Destination register.
36965    /// - `rs1` — Source register.
36966    /// - `rs2` — Source register.
36967    pub fn pack<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
36968    where
36969        Self: PackEmitter<T0, T1, T2>,
36970    {
36971        <Self as PackEmitter<T0, T1, T2>>::pack(self, rd, rs1, rs2);
36972    }
36973    /// RISC-V `packh` instruction.
36974    ///
36975    /// # Forms
36976    /// Assembly: `packh xd, xs1, xs2`
36977    /// Rust: `packh(rd, rs1, rs2)`
36978    ///
36979    /// # Arguments
36980    /// - `rd` — Destination register.
36981    /// - `rs1` — Source register.
36982    /// - `rs2` — Source register.
36983    pub fn packh<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
36984    where
36985        Self: PackhEmitter<T0, T1, T2>,
36986    {
36987        <Self as PackhEmitter<T0, T1, T2>>::packh(self, rd, rs1, rs2);
36988    }
36989    /// RISC-V `packw` instruction.
36990    ///
36991    /// # Forms
36992    /// Assembly: `packw xd, xs1, xs2`
36993    /// Rust: `packw(rd, rs1, rs2)`
36994    ///
36995    /// # Arguments
36996    /// - `rd` — Destination register.
36997    /// - `rs1` — Source register.
36998    /// - `rs2` — Source register.
36999    pub fn packw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
37000    where
37001        Self: PackwEmitter<T0, T1, T2>,
37002    {
37003        <Self as PackwEmitter<T0, T1, T2>>::packw(self, rd, rs1, rs2);
37004    }
37005    /// RISC-V `pause` instruction.
37006    ///
37007    /// # Forms
37008    /// Assembly: `pause`
37009    /// Rust: `pause()`
37010    ///
37011    /// # Arguments
37012    pub fn pause(&mut self)
37013    where
37014        Self: PauseEmitter,
37015    {
37016        <Self as PauseEmitter>::pause(self);
37017    }
37018    /// RISC-V `prefetch.i` instruction.
37019    ///
37020    /// # Forms
37021    /// Assembly: `prefetch.i rs1 imm12lohi`
37022    /// Rust: `prefetch_i(rs1, imm)`
37023    ///
37024    /// # Arguments
37025    /// - `rs1` — Source register.
37026    /// - `imm` — Immediate encoding value.
37027    pub fn prefetch_i<T0, T1>(&mut self, rs1: T0, imm: T1)
37028    where
37029        Self: PrefetchIEmitter<T0, T1>,
37030    {
37031        <Self as PrefetchIEmitter<T0, T1>>::prefetch_i(self, rs1, imm);
37032    }
37033    /// RISC-V `prefetch.r` instruction.
37034    ///
37035    /// # Forms
37036    /// Assembly: `prefetch.r rs1 imm12lohi`
37037    /// Rust: `prefetch_r(rs1, imm)`
37038    ///
37039    /// # Arguments
37040    /// - `rs1` — Source register.
37041    /// - `imm` — Immediate encoding value.
37042    pub fn prefetch_r<T0, T1>(&mut self, rs1: T0, imm: T1)
37043    where
37044        Self: PrefetchREmitter<T0, T1>,
37045    {
37046        <Self as PrefetchREmitter<T0, T1>>::prefetch_r(self, rs1, imm);
37047    }
37048    /// RISC-V `prefetch.w` instruction.
37049    ///
37050    /// # Forms
37051    /// Assembly: `prefetch.w rs1 imm12lohi`
37052    /// Rust: `prefetch_w(rs1, imm)`
37053    ///
37054    /// # Arguments
37055    /// - `rs1` — Source register.
37056    /// - `imm` — Immediate encoding value.
37057    pub fn prefetch_w<T0, T1>(&mut self, rs1: T0, imm: T1)
37058    where
37059        Self: PrefetchWEmitter<T0, T1>,
37060    {
37061        <Self as PrefetchWEmitter<T0, T1>>::prefetch_w(self, rs1, imm);
37062    }
37063    /// RISC-V `rdcycle` instruction.
37064    ///
37065    /// # Forms
37066    /// Assembly: `rdcycle rd`
37067    /// Rust: `rdcycle(rd)`
37068    ///
37069    /// # Arguments
37070    /// - `rd` — Destination register.
37071    pub fn rdcycle<T0>(&mut self, rd: T0)
37072    where
37073        Self: RdcycleEmitter<T0>,
37074    {
37075        <Self as RdcycleEmitter<T0>>::rdcycle(self, rd);
37076    }
37077    /// RISC-V `rdcycleh` instruction.
37078    ///
37079    /// # Forms
37080    /// Assembly: `rdcycleh rd`
37081    /// Rust: `rdcycleh(rd)`
37082    ///
37083    /// # Arguments
37084    /// - `rd` — Destination register.
37085    pub fn rdcycleh<T0>(&mut self, rd: T0)
37086    where
37087        Self: RdcyclehEmitter<T0>,
37088    {
37089        <Self as RdcyclehEmitter<T0>>::rdcycleh(self, rd);
37090    }
37091    /// RISC-V `rdinstret` instruction.
37092    ///
37093    /// # Forms
37094    /// Assembly: `rdinstret rd`
37095    /// Rust: `rdinstret(rd)`
37096    ///
37097    /// # Arguments
37098    /// - `rd` — Destination register.
37099    pub fn rdinstret<T0>(&mut self, rd: T0)
37100    where
37101        Self: RdinstretEmitter<T0>,
37102    {
37103        <Self as RdinstretEmitter<T0>>::rdinstret(self, rd);
37104    }
37105    /// RISC-V `rdinstreth` instruction.
37106    ///
37107    /// # Forms
37108    /// Assembly: `rdinstreth rd`
37109    /// Rust: `rdinstreth(rd)`
37110    ///
37111    /// # Arguments
37112    /// - `rd` — Destination register.
37113    pub fn rdinstreth<T0>(&mut self, rd: T0)
37114    where
37115        Self: RdinstrethEmitter<T0>,
37116    {
37117        <Self as RdinstrethEmitter<T0>>::rdinstreth(self, rd);
37118    }
37119    /// RISC-V `rdtime` instruction.
37120    ///
37121    /// # Forms
37122    /// Assembly: `rdtime rd`
37123    /// Rust: `rdtime(rd)`
37124    ///
37125    /// # Arguments
37126    /// - `rd` — Destination register.
37127    pub fn rdtime<T0>(&mut self, rd: T0)
37128    where
37129        Self: RdtimeEmitter<T0>,
37130    {
37131        <Self as RdtimeEmitter<T0>>::rdtime(self, rd);
37132    }
37133    /// RISC-V `rdtimeh` instruction.
37134    ///
37135    /// # Forms
37136    /// Assembly: `rdtimeh rd`
37137    /// Rust: `rdtimeh(rd)`
37138    ///
37139    /// # Arguments
37140    /// - `rd` — Destination register.
37141    pub fn rdtimeh<T0>(&mut self, rd: T0)
37142    where
37143        Self: RdtimehEmitter<T0>,
37144    {
37145        <Self as RdtimehEmitter<T0>>::rdtimeh(self, rd);
37146    }
37147    /// Signed remainder
37148    ///
37149    /// Calculate the remainder of signed division of rs1 by rs2, and store the result in rd.
37150    ///
37151    /// If the value in register rs2 is zero, write the value in rs1 into rd;
37152    ///
37153    /// If the result of the division overflows, write zero into rd;
37154    ///
37155    /// # Forms
37156    /// Assembly: `rem xd, xs1, xs2`
37157    /// Rust: `rem(rd, rs1, rs2)`
37158    ///
37159    /// # Arguments
37160    /// - `rd` — Destination register.
37161    /// - `rs1` — Source register.
37162    /// - `rs2` — Source register.
37163    pub fn rem<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
37164    where
37165        Self: RemEmitter<T0, T1, T2>,
37166    {
37167        <Self as RemEmitter<T0, T1, T2>>::rem(self, rd, rs1, rs2);
37168    }
37169    /// Unsigned remainder
37170    ///
37171    /// Calculate the remainder of unsigned division of rs1 by rs2, and store the result in rd.
37172    ///
37173    /// # Forms
37174    /// Assembly: `remu xd, xs1, xs2`
37175    /// Rust: `remu(rd, rs1, rs2)`
37176    ///
37177    /// # Arguments
37178    /// - `rd` — Destination register.
37179    /// - `rs1` — Source register.
37180    /// - `rs2` — Source register.
37181    pub fn remu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
37182    where
37183        Self: RemuEmitter<T0, T1, T2>,
37184    {
37185        <Self as RemuEmitter<T0, T1, T2>>::remu(self, rd, rs1, rs2);
37186    }
37187    /// Unsigned 32-bit remainder
37188    ///
37189    /// Calculate the remainder of unsigned division of the 32-bit values in rs1 by rs2,
37190    /// and store the sign-extended result in rd.
37191    ///
37192    /// If the value in rs2 is zero, rd gets the sign-extended value in rs1.
37193    ///
37194    /// # Forms
37195    /// Assembly: `remuw xd, xs1, xs2`
37196    /// Rust: `remuw(rd, rs1, rs2)`
37197    ///
37198    /// # Arguments
37199    /// - `rd` — Destination register.
37200    /// - `rs1` — Source register.
37201    /// - `rs2` — Source register.
37202    pub fn remuw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
37203    where
37204        Self: RemuwEmitter<T0, T1, T2>,
37205    {
37206        <Self as RemuwEmitter<T0, T1, T2>>::remuw(self, rd, rs1, rs2);
37207    }
37208    /// Signed 32-bit remainder
37209    ///
37210    /// Calculate the remainder of signed division of the 32-bit values rs1 by rs2,
37211    /// and store the sign-extended result in rd.
37212    ///
37213    /// If the value in register rs2 is zero, write the sign-extended 32-bit value in rs1 into rd;
37214    ///
37215    /// If the result of the division overflows, write zero into rd;
37216    ///
37217    /// # Forms
37218    /// Assembly: `remw xd, xs1, xs2`
37219    /// Rust: `remw(rd, rs1, rs2)`
37220    ///
37221    /// # Arguments
37222    /// - `rd` — Destination register.
37223    /// - `rs1` — Source register.
37224    /// - `rs2` — Source register.
37225    pub fn remw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
37226    where
37227        Self: RemwEmitter<T0, T1, T2>,
37228    {
37229        <Self as RemwEmitter<T0, T1, T2>>::remw(self, rd, rs1, rs2);
37230    }
37231    /// RISC-V `ret` instruction.
37232    ///
37233    /// # Forms
37234    /// Assembly: `ret`
37235    /// Rust: `ret()`
37236    ///
37237    /// # Arguments
37238    pub fn ret(&mut self)
37239    where
37240        Self: RetEmitter,
37241    {
37242        <Self as RetEmitter>::ret(self);
37243    }
37244    /// Byte-reverse register (RV64 encoding)
37245    ///
37246    /// This instruction reverses the order of the bytes in rs1.
37247    ///
37248    /// \[NOTE\]
37249    /// The rev8 mnemonic corresponds to different instruction encodings in RV32 and RV64.
37250    ///
37251    /// \[NOTE\]
37252    /// The byte-reverse operation is only available for the full register width. To emulate word-sized
37253    /// and halfword-sized byte-reversal, perform a `rev8 rd,rs` followed by a `srai rd,rd,K`, where K
37254    /// is XLEN-32 and XLEN-16, respectively.
37255    ///
37256    /// # Forms
37257    /// Assembly: `rev8 xd, xs1`
37258    /// Rust: `rev8(rd, rs1)`
37259    ///
37260    /// # Arguments
37261    /// - `rd` — Destination register.
37262    /// - `rs1` — Source register.
37263    pub fn rev8<T0, T1>(&mut self, rd: T0, rs1: T1)
37264    where
37265        Self: Rev8Emitter<T0, T1>,
37266    {
37267        <Self as Rev8Emitter<T0, T1>>::rev8(self, rd, rs1);
37268    }
37269    /// Byte-reverse register (RV64 encoding)
37270    ///
37271    /// This instruction reverses the order of the bytes in rs1.
37272    ///
37273    /// \[NOTE\]
37274    /// The rev8 mnemonic corresponds to different instruction encodings in RV32 and RV64.
37275    ///
37276    /// \[NOTE\]
37277    /// The byte-reverse operation is only available for the full register width. To emulate word-sized
37278    /// and halfword-sized byte-reversal, perform a `rev8 rd,rs` followed by a `srai rd,rd,K`, where K
37279    /// is XLEN-32 and XLEN-16, respectively.
37280    ///
37281    /// # Forms
37282    /// Assembly: `rev8.rv32 xd, xs1`
37283    /// Rust: `rev8_rv32(rd, rs1)`
37284    ///
37285    /// # Arguments
37286    /// - `rd` — Destination register.
37287    /// - `rs1` — Source register.
37288    pub fn rev8_rv32<T0, T1>(&mut self, rd: T0, rs1: T1)
37289    where
37290        Self: Rev8Rv32Emitter<T0, T1>,
37291    {
37292        <Self as Rev8Rv32Emitter<T0, T1>>::rev8_rv32(self, rd, rs1);
37293    }
37294    /// Rotate left (Register)
37295    ///
37296    /// This instruction performs a rotate left of rs1 by the amount in least-significant `log2(XLEN)` bits of rs2.
37297    ///
37298    /// # Forms
37299    /// Assembly: `rol xd, xs1, xs2`
37300    /// Rust: `rol(rd, rs1, rs2)`
37301    ///
37302    /// # Arguments
37303    /// - `rd` — Destination register.
37304    /// - `rs1` — Source register.
37305    /// - `rs2` — Source register.
37306    pub fn rol<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
37307    where
37308        Self: RolEmitter<T0, T1, T2>,
37309    {
37310        <Self as RolEmitter<T0, T1, T2>>::rol(self, rd, rs1, rs2);
37311    }
37312    /// Rotate left word (Register)
37313    ///
37314    /// This instruction performs a rotate left of the least-significant word of rs1 by the amount in least-significant 5 bits of rs2.
37315    /// The resulting word value is sign-extended by copying bit 31 to all of the more-significant bits.
37316    ///
37317    /// # Forms
37318    /// Assembly: `rolw xd, xs1, xs2`
37319    /// Rust: `rolw(rd, rs1, rs2)`
37320    ///
37321    /// # Arguments
37322    /// - `rd` — Destination register.
37323    /// - `rs1` — Source register.
37324    /// - `rs2` — Source register.
37325    pub fn rolw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
37326    where
37327        Self: RolwEmitter<T0, T1, T2>,
37328    {
37329        <Self as RolwEmitter<T0, T1, T2>>::rolw(self, rd, rs1, rs2);
37330    }
37331    /// Rotate right (Register)
37332    ///
37333    /// This instruction performs a rotate right of rs1 by the amount in least-significant `log2(XLEN)` bits of rs2.
37334    ///
37335    /// # Forms
37336    /// Assembly: `ror xd, xs1, xs2`
37337    /// Rust: `ror(rd, rs1, rs2)`
37338    ///
37339    /// # Arguments
37340    /// - `rd` — Destination register.
37341    /// - `rs1` — Source register.
37342    /// - `rs2` — Source register.
37343    pub fn ror<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
37344    where
37345        Self: RorEmitter<T0, T1, T2>,
37346    {
37347        <Self as RorEmitter<T0, T1, T2>>::ror(self, rd, rs1, rs2);
37348    }
37349    /// Rotate right (Immediate)
37350    ///
37351    /// This instruction performs a rotate right of rs1 by the amount in the least-significant log2(XLEN) bits of shamt.
37352    /// For RV32, the encodings corresponding to shamt\[5\]=1 are reserved.
37353    ///
37354    /// # Forms
37355    /// Assembly: `rori xd, xs1, shamt`
37356    /// Rust: `rori(rd, rs1, shamtd)`
37357    ///
37358    /// # Arguments
37359    /// - `rd` — Destination register.
37360    /// - `rs1` — Source register.
37361    /// - `shamtd` — Immediate encoding value.
37362    pub fn rori<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtd: T2)
37363    where
37364        Self: RoriEmitter<T0, T1, T2>,
37365    {
37366        <Self as RoriEmitter<T0, T1, T2>>::rori(self, rd, rs1, shamtd);
37367    }
37368    /// Rotate right (Immediate)
37369    ///
37370    /// This instruction performs a rotate right of rs1 by the amount in the least-significant log2(XLEN) bits of shamt.
37371    /// For RV32, the encodings corresponding to shamt\[5\]=1 are reserved.
37372    ///
37373    /// # Forms
37374    /// Assembly: `rori.rv32 xd, xs1, shamt`
37375    /// Rust: `rori_rv32(rd, rs1, shamtw)`
37376    ///
37377    /// # Arguments
37378    /// - `rd` — Destination register.
37379    /// - `rs1` — Source register.
37380    /// - `shamtw` — Immediate encoding value.
37381    pub fn rori_rv32<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtw: T2)
37382    where
37383        Self: RoriRv32Emitter<T0, T1, T2>,
37384    {
37385        <Self as RoriRv32Emitter<T0, T1, T2>>::rori_rv32(self, rd, rs1, shamtw);
37386    }
37387    /// Rotate right word (Immediate)
37388    ///
37389    /// This instruction performs a rotate right on the least-significant word of rs1 by the amount in
37390    /// the least-significant log2(XLEN) bits of shamt. The resulting word value is sign-extended by
37391    /// copying bit 31 to all of the more-significant bits.
37392    ///
37393    /// # Forms
37394    /// Assembly: `roriw xd, xs1, shamt`
37395    /// Rust: `roriw(rd, rs1, shamtw)`
37396    ///
37397    /// # Arguments
37398    /// - `rd` — Destination register.
37399    /// - `rs1` — Source register.
37400    /// - `shamtw` — Immediate encoding value.
37401    pub fn roriw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtw: T2)
37402    where
37403        Self: RoriwEmitter<T0, T1, T2>,
37404    {
37405        <Self as RoriwEmitter<T0, T1, T2>>::roriw(self, rd, rs1, shamtw);
37406    }
37407    /// Rotate right word (Register)
37408    ///
37409    /// This instruction performs a rotate right on the least-significant word of rs1 by the amount in
37410    /// least-significant 5 bits of rs2. The resultant word is sign-extended by copying bit 31 to all
37411    /// of the more-significant bits.
37412    ///
37413    /// # Forms
37414    /// Assembly: `rorw xd, xs1, xs2`
37415    /// Rust: `rorw(rd, rs1, rs2)`
37416    ///
37417    /// # Arguments
37418    /// - `rd` — Destination register.
37419    /// - `rs1` — Source register.
37420    /// - `rs2` — Source register.
37421    pub fn rorw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
37422    where
37423        Self: RorwEmitter<T0, T1, T2>,
37424    {
37425        <Self as RorwEmitter<T0, T1, T2>>::rorw(self, rd, rs1, rs2);
37426    }
37427    /// Store byte
37428    ///
37429    /// Store 8 bits of data from register `rs2` to an
37430    /// address formed by adding `rs1` to a signed offset.
37431    ///
37432    /// # Forms
37433    /// Assembly: `sb xs2, imm(xs1)`
37434    /// Rust: `sb(rs1, rs2, imm)`
37435    ///
37436    /// # Arguments
37437    /// - `rs1` — Memory base register.
37438    /// - `rs2` — Source register.
37439    /// - `imm` — Immediate encoding value.
37440    pub fn sb<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)
37441    where
37442        Self: SbEmitter<T0, T1, T2>,
37443    {
37444        <Self as SbEmitter<T0, T1, T2>>::sb(self, rs1, rs2, imm);
37445    }
37446    /// RISC-V `sbreak` instruction.
37447    ///
37448    /// # Forms
37449    /// Assembly: `sbreak`
37450    /// Rust: `sbreak()`
37451    ///
37452    /// # Arguments
37453    pub fn sbreak(&mut self)
37454    where
37455        Self: SbreakEmitter,
37456    {
37457        <Self as SbreakEmitter>::sbreak(self);
37458    }
37459    /// Store conditional doubleword
37460    ///
37461    /// `sc.d` conditionally writes a doubleword in _rs2_ to the address in _rs1_:
37462    /// the `sc.d` succeeds only if the reservation is still valid and the
37463    /// reservation set contains the bytes being written. If the `sc.d` succeeds,
37464    /// the instruction writes the doubleword in _rs2_ to memory, and it writes zero to _rd_.
37465    /// If the `sc.d` fails, the instruction does not write to memory, and it writes a
37466    /// nonzero value to _rd_. For the purposes of memory protection, a failed `sc.d`
37467    /// may be treated like a store. Regardless of success or failure, executing an
37468    /// `sc.d` instruction invalidates any reservation held by this hart.
37469    ///
37470    /// The failure code with value 1 encodes an unspecified failure.
37471    /// Other failure codes are reserved at this time.
37472    /// Portable software should only assume the failure code will be non-zero.
37473    ///
37474    /// The address held in _rs1_ must be naturally aligned to the size of the operand
37475    /// (_i.e._, eight-byte aligned).
37476    /// If the address is not naturally aligned, an address-misaligned exception or an
37477    /// access-fault exception will be generated.
37478    /// The access-fault exception can be generated for a memory access that would otherwise
37479    /// be able to complete except for the misalignment,
37480    /// if the misaligned access should not be emulated.
37481    ///
37482    /// \[NOTE\]
37483    /// --
37484    /// Emulating misaligned LR/SC sequences is impractical in most systems.
37485    ///
37486    /// Misaligned LR/SC sequences also raise the possibility of accessing multiple
37487    /// reservation sets at once, which present definitions do not provide for.
37488    /// --
37489    ///
37490    /// An implementation can register an arbitrarily large reservation set on each LR,
37491    /// provided the reservation set includes all bytes of the addressed data word or
37492    /// doubleword.
37493    /// An SC can only pair with the most recent LR in program order.
37494    /// An SC may succeed only if no store from another hart to the reservation set
37495    /// can be observed to have occurred between the LR and the SC,
37496    /// and if there is no other SC between the LR and itself in program order.
37497    /// An SC may succeed only if no write from a device other than a hart to the bytes
37498    /// accessed by the LR instruction can be observed to have occurred between the LR
37499    /// and SC.
37500    /// Note this LR might have had a different effective address and data size,
37501    /// but reserved the SC's address as part of the reservation set.
37502    ///
37503    /// \[NOTE\]
37504    /// ----
37505    /// Following this model, in systems with memory translation, an SC is allowed to succeed if the
37506    /// earlier LR reserved the same location using an alias with a different virtual address, but is
37507    /// also allowed to fail if the virtual address is different.
37508    ///
37509    /// To accommodate legacy devices and buses, writes from devices other than RISC-V harts are only
37510    /// required to invalidate reservations when they overlap the bytes accessed by the LR.
37511    /// These writes are not required to invalidate the reservation when they access other bytes in
37512    /// the reservation set.
37513    /// ----
37514    ///
37515    /// The SC must fail if the address is not within the reservation set of the most
37516    /// recent LR in program order.
37517    /// The SC must fail if a store to the reservation set from another hart can be
37518    /// observed to occur between the LR and SC.
37519    /// The SC must fail if a write from some other device to the bytes accessed by the
37520    /// LR can be observed to occur between the LR and SC.
37521    /// (If such a device writes the reservation set but does not write the bytes accessed
37522    /// by the LR, the SC may or may not fail.)
37523    /// An SC must fail if there is another SC (to any address) between the LR and the SC
37524    /// in program order.
37525    /// The precise statement of the atomicity requirements for successful LR/SC sequences
37526    /// is defined by the Atomicity Axiom of the memory model.
37527    ///
37528    /// \[NOTE\]
37529    /// --
37530    /// The platform should provide a means to determine the size and shape of the reservation set.
37531    ///
37532    /// A platform specification may constrain the size and shape of the reservation set.
37533    ///
37534    /// A store-conditional instruction to a scratch word of memory should be used to forcibly invalidate any existing load reservation:
37535    ///
37536    ///   * during a preemptive context switch, and
37537    ///   * if necessary when changing virtual to physical address mappings, such as when migrating pages that might contain an active reservation.
37538    ///
37539    /// The invalidation of a hart's reservation when it executes an LR or SC imply that a hart can only hold one reservation at a time, and that an SC can only pair with the most recent LR, and LR with the next following SC, in program order. This is a restriction to the Atomicity Axiom in Section 18.1 that ensures software runs correctly on expected common implementations that operate in this manner.
37540    /// --
37541    ///
37542    /// An SC instruction can never be observed by another RISC-V hart before the LR instruction that established the reservation.
37543    ///
37544    /// \[NOTE\]
37545    /// --
37546    /// The LR/SC sequence can be given acquire semantics by setting the aq bit on the LR instruction. The LR/SC sequence can be given release semantics by by setting the rl bit on the SC instruction. Assuming suitable mappings for other atomic operations, setting the aq bit on the LR instruction, and setting the rl bit on the SC instruction makes the LR/SC sequence sequentially consistent in the C++ memory_order_seq_cst sense. Such a sequence does not act as a fence for ordering ordinary load and store instructions before and after the sequence. Specific instruction mappings for other C++ atomic operations, or stronger notions of "sequential consistency", may require both bits to be set on either or both of the LR or SC instruction.
37547    ///
37548    /// If neither bit is set on either LR or SC, the LR/SC sequence can be observed to occur before or after surrounding memory operations from the same RISC-V hart. This can be appropriate when the LR/SC sequence is used to implement a parallel reduction operation.
37549    /// --
37550    ///
37551    /// Software should not set the _rl_ bit on an LR instruction unless the _aq_ bit is also set.
37552    /// LR.rl and SC.aq instructions are not guaranteed to provide any stronger ordering than those
37553    /// with both bits clear, but may result in lower performance.
37554    ///
37555    /// # Forms
37556    /// Assembly: `sc.d xd, xs2, xs1`
37557    /// Rust: `sc_d(rd, rs1, rs2, aq, rl)`
37558    ///
37559    /// # Arguments
37560    /// - `rd` — Destination register.
37561    /// - `rs1` — Memory base register.
37562    /// - `rs2` — Source register.
37563    /// - `aq` — Acquire-order bit.
37564    /// - `rl` — Release-order bit; retained for the existing emitter API.
37565    pub fn sc_d<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
37566    where
37567        Self: ScDEmitter<T0, T1, T2, T3, T4>,
37568    {
37569        <Self as ScDEmitter<T0, T1, T2, T3, T4>>::sc_d(self, rd, rs1, rs2, aq, rl);
37570    }
37571    /// Store conditional word
37572    ///
37573    /// `sc.w` conditionally writes a word in _rs2_ to the address in _rs1_:
37574    /// the `sc.w` succeeds only if the reservation is still valid and the
37575    /// reservation set contains the bytes being written. If the `sc.w` succeeds,
37576    /// the instruction writes the word in _rs2_ to memory, and it writes zero to _rd_.
37577    /// If the `sc.w` fails, the instruction does not write to memory, and it writes a
37578    /// nonzero value to _rd_. For the purposes of memory protection, a failed `sc.w`
37579    /// may be treated like a store. Regardless of success or failure, executing an
37580    /// `sc.w` instruction invalidates any reservation held by this hart.
37581    ///
37582    /// &lt;%- if XLEN == 64 -%&gt;
37583    /// \[NOTE\]
37584    /// If a value other than 0 or 1 is defined as a result for `sc.w`, the value will before
37585    /// sign-extended into _rd_.
37586    /// &lt;%- end -%&gt;
37587    ///
37588    /// The failure code with value 1 encodes an unspecified failure.
37589    /// Other failure codes are reserved at this time.
37590    /// Portable software should only assume the failure code will be non-zero.
37591    ///
37592    /// The address held in _rs1_ must be naturally aligned to the size of the operand
37593    /// (_i.e._, eight-byte aligned for doublewords and four-byte aligned for words).
37594    /// If the address is not naturally aligned, an address-misaligned exception or an
37595    /// access-fault exception will be generated.
37596    /// The access-fault exception can be generated for a memory access that would otherwise
37597    /// be able to complete except for the misalignment,
37598    /// if the misaligned access should not be emulated.
37599    ///
37600    /// \[NOTE\]
37601    /// --
37602    /// Emulating misaligned LR/SC sequences is impractical in most systems.
37603    ///
37604    /// Misaligned LR/SC sequences also raise the possibility of accessing multiple
37605    /// reservation sets at once, which present definitions do not provide for.
37606    /// --
37607    ///
37608    /// An implementation can register an arbitrarily large reservation set on each LR,
37609    /// provided the reservation set includes all bytes of the addressed data word or
37610    /// doubleword.
37611    /// An SC can only pair with the most recent LR in program order.
37612    /// An SC may succeed only if no store from another hart to the reservation set
37613    /// can be observed to have occurred between the LR and the SC,
37614    /// and if there is no other SC between the LR and itself in program order.
37615    /// An SC may succeed only if no write from a device other than a hart to the bytes
37616    /// accessed by the LR instruction can be observed to have occurred between the LR
37617    /// and SC.
37618    /// Note this LR might have had a different effective address and data size,
37619    /// but reserved the SC's address as part of the reservation set.
37620    ///
37621    /// \[NOTE\]
37622    /// ----
37623    /// Following this model, in systems with memory translation, an SC is allowed to succeed if the
37624    /// earlier LR reserved the same location using an alias with a different virtual address, but is
37625    /// also allowed to fail if the virtual address is different.
37626    ///
37627    /// To accommodate legacy devices and buses, writes from devices other than RISC-V harts are only
37628    /// required to invalidate reservations when they overlap the bytes accessed by the LR.
37629    /// These writes are not required to invalidate the reservation when they access other bytes in
37630    /// the reservation set.
37631    /// ----
37632    ///
37633    /// The SC must fail if the address is not within the reservation set of the most
37634    /// recent LR in program order.
37635    /// The SC must fail if a store to the reservation set from another hart can be
37636    /// observed to occur between the LR and SC.
37637    /// The SC must fail if a write from some other device to the bytes accessed by the
37638    /// LR can be observed to occur between the LR and SC.
37639    /// (If such a device writes the reservation set but does not write the bytes accessed
37640    /// by the LR, the SC may or may not fail.)
37641    /// An SC must fail if there is another SC (to any address) between the LR and the SC
37642    /// in program order.
37643    /// The precise statement of the atomicity requirements for successful LR/SC sequences
37644    /// is defined by the Atomicity Axiom of the memory model.
37645    ///
37646    /// \[NOTE\]
37647    /// --
37648    /// The platform should provide a means to determine the size and shape of the reservation set.
37649    ///
37650    /// A platform specification may constrain the size and shape of the reservation set.
37651    ///
37652    /// A store-conditional instruction to a scratch word of memory should be used to forcibly invalidate any existing load reservation:
37653    ///
37654    ///   * during a preemptive context switch, and
37655    ///   * if necessary when changing virtual to physical address mappings, such as when migrating pages that might contain an active reservation.
37656    ///
37657    /// The invalidation of a hart's reservation when it executes an LR or SC imply that a hart can only hold one reservation at a time, and that an SC can only pair with the most recent LR, and LR with the next following SC, in program order. This is a restriction to the Atomicity Axiom in Section 18.1 that ensures software runs correctly on expected common implementations that operate in this manner.
37658    /// --
37659    ///
37660    /// An SC instruction can never be observed by another RISC-V hart before the LR instruction that established the reservation.
37661    ///
37662    /// \[NOTE\]
37663    /// --
37664    /// The LR/SC sequence can be given acquire semantics by setting the aq bit on the LR instruction. The LR/SC sequence can be given release semantics by by setting the rl bit on the SC instruction. Assuming suitable mappings for other atomic operations, setting the aq bit on the LR instruction, and setting the rl bit on the SC instruction makes the LR/SC sequence sequentially consistent in the C++ memory_order_seq_cst sense. Such a sequence does not act as a fence for ordering ordinary load and store instructions before and after the sequence. Specific instruction mappings for other C++ atomic operations, or stronger notions of "sequential consistency", may require both bits to be set on either or both of the LR or SC instruction.
37665    ///
37666    /// If neither bit is set on either LR or SC, the LR/SC sequence can be observed to occur before or after surrounding memory operations from the same RISC-V hart. This can be appropriate when the LR/SC sequence is used to implement a parallel reduction operation.
37667    /// --
37668    ///
37669    /// Software should not set the _rl_ bit on an LR instruction unless the _aq_ bit is also set.
37670    /// LR.rl and SC.aq instructions are not guaranteed to provide any stronger ordering than those
37671    /// with both bits clear, but may result in lower performance.
37672    ///
37673    /// # Forms
37674    /// Assembly: `sc.w xd, xs2, xs1`
37675    /// Rust: `sc_w(rd, rs1, rs2, aq, rl)`
37676    ///
37677    /// # Arguments
37678    /// - `rd` — Destination register.
37679    /// - `rs1` — Memory base register.
37680    /// - `rs2` — Source register.
37681    /// - `aq` — Acquire-order bit.
37682    /// - `rl` — Release-order bit; retained for the existing emitter API.
37683    pub fn sc_w<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
37684    where
37685        Self: ScWEmitter<T0, T1, T2, T3, T4>,
37686    {
37687        <Self as ScWEmitter<T0, T1, T2, T3, T4>>::sc_w(self, rd, rs1, rs2, aq, rl);
37688    }
37689    /// RISC-V `scall` instruction.
37690    ///
37691    /// # Forms
37692    /// Assembly: `scall`
37693    /// Rust: `scall()`
37694    ///
37695    /// # Arguments
37696    pub fn scall(&mut self)
37697    where
37698        Self: ScallEmitter,
37699    {
37700        <Self as ScallEmitter>::scall(self);
37701    }
37702    /// RISC-V `sctrclr` instruction.
37703    ///
37704    /// # Forms
37705    /// Assembly: `sctrclr sctrclr`
37706    /// Rust: `sctrclr()`
37707    ///
37708    /// # Arguments
37709    pub fn sctrclr(&mut self)
37710    where
37711        Self: SctrclrEmitter,
37712    {
37713        <Self as SctrclrEmitter>::sctrclr(self);
37714    }
37715    /// Store doubleword
37716    ///
37717    /// Store 64 bits of data from register `rs2` to an
37718    /// address formed by adding `rs1` to a signed offset.
37719    ///
37720    /// # Forms
37721    /// Assembly: `sd xs2, imm(xs1)`
37722    /// Rust: `sd(rs1, rs2, imm)`
37723    ///
37724    /// # Arguments
37725    /// - `rs1` — Memory base register.
37726    /// - `rs2` — Source register.
37727    /// - `imm` — Immediate encoding value.
37728    pub fn sd<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)
37729    where
37730        Self: SdEmitter<T0, T1, T2>,
37731    {
37732        <Self as SdEmitter<T0, T1, T2>>::sd(self, rs1, rs2, imm);
37733    }
37734    /// RISC-V `seqz` instruction.
37735    ///
37736    /// # Forms
37737    /// Assembly: `seqz rd rs1`
37738    /// Rust: `seqz(rd, rs1)`
37739    ///
37740    /// # Arguments
37741    /// - `rd` — Destination register.
37742    /// - `rs1` — Source register.
37743    pub fn seqz<T0, T1>(&mut self, rd: T0, rs1: T1)
37744    where
37745        Self: SeqzEmitter<T0, T1>,
37746    {
37747        <Self as SeqzEmitter<T0, T1>>::seqz(self, rd, rs1);
37748    }
37749    /// Sign-extend byte
37750    ///
37751    /// This instruction sign-extends the least-significant byte in the source to XLEN by copying the
37752    /// most-significant bit in the byte (i.e., bit 7) to all of the more-significant bits.
37753    ///
37754    /// # Forms
37755    /// Assembly: `sext.b xd, xs1`
37756    /// Rust: `sext_b(rd, rs1)`
37757    ///
37758    /// # Arguments
37759    /// - `rd` — Destination register.
37760    /// - `rs1` — Source register.
37761    pub fn sext_b<T0, T1>(&mut self, rd: T0, rs1: T1)
37762    where
37763        Self: SextBEmitter<T0, T1>,
37764    {
37765        <Self as SextBEmitter<T0, T1>>::sext_b(self, rd, rs1);
37766    }
37767    /// Sign-extend halfword
37768    ///
37769    /// This instruction sign-extends the least-significant halfword in the source to XLEN by copying the
37770    /// most-significant bit in the halfword (i.e., bit 15) to all of the more-significant bits.
37771    ///
37772    /// # Forms
37773    /// Assembly: `sext.h xd, xs1`
37774    /// Rust: `sext_h(rd, rs1)`
37775    ///
37776    /// # Arguments
37777    /// - `rd` — Destination register.
37778    /// - `rs1` — Source register.
37779    pub fn sext_h<T0, T1>(&mut self, rd: T0, rs1: T1)
37780    where
37781        Self: SextHEmitter<T0, T1>,
37782    {
37783        <Self as SextHEmitter<T0, T1>>::sext_h(self, rd, rs1);
37784    }
37785    /// RISC-V `sext.w` instruction.
37786    ///
37787    /// # Forms
37788    /// Assembly: `sext.w rd rs1`
37789    /// Rust: `sext_w(rd, rs1)`
37790    ///
37791    /// # Arguments
37792    /// - `rd` — Destination register.
37793    /// - `rs1` — Source register.
37794    pub fn sext_w<T0, T1>(&mut self, rd: T0, rs1: T1)
37795    where
37796        Self: SextWEmitter<T0, T1>,
37797    {
37798        <Self as SextWEmitter<T0, T1>>::sext_w(self, rd, rs1);
37799    }
37800    /// Order implicit page table reads after invalidation
37801    ///
37802    /// The `sfence.inval.ir` instruction guarantees that any previous `sinval.vma`
37803    /// instructions executed by the current hart are ordered before subsequent implicit references by
37804    /// that hart to the memory-management data structures.
37805    ///
37806    /// # Forms
37807    /// Assembly: `sfence.inval.ir ""`
37808    /// Rust: `sfence_inval_ir()`
37809    ///
37810    /// # Arguments
37811    pub fn sfence_inval_ir(&mut self)
37812    where
37813        Self: SfenceInvalIrEmitter,
37814    {
37815        <Self as SfenceInvalIrEmitter>::sfence_inval_ir(self);
37816    }
37817    /// Supervisor memory-management fence
37818    ///
37819    /// The supervisor memory-management fence instruction `SFENCE.VMA` is used to
37820    /// synchronize updates to in-memory memory-management data structures with
37821    /// current execution. Instruction execution causes implicit reads and
37822    /// writes to these data structures; however, these implicit references are
37823    /// ordinarily not ordered with respect to explicit loads and stores.
37824    /// Executing an SFENCE.VMA instruction guarantees that any previous stores
37825    /// already visible to the current RISC-V hart are ordered before certain
37826    /// implicit references by subsequent instructions in that hart to the
37827    /// memory-management data structures. The specific set of operations
37828    /// ordered by SFENCE.VMA is determined by _rs1_ and _rs2_, as described
37829    /// below. SFENCE.VMA is also used to invalidate entries in the
37830    /// address-translation cache associated with a hart (see &lt;&lt;sv32algorithm&gt;&gt;). Further details on the behavior of this instruction are described in &lt;&lt;virt-control&gt;&gt; and &lt;&lt;pmp-vmem&gt;&gt;.
37831    ///
37832    /// \[NOTE\]
37833    /// ====
37834    /// The SFENCE.VMA is used to flush any local hardware caches related to
37835    /// address translation. It is specified as a fence rather than a TLB flush
37836    /// to provide cleaner semantics with respect to which instructions are
37837    /// affected by the flush operation and to support a wider variety of
37838    /// dynamic caching structures and memory-management schemes. SFENCE.VMA is
37839    /// also used by higher privilege levels to synchronize page table writes
37840    /// and the address translation hardware.
37841    /// ====
37842    ///
37843    /// SFENCE.VMA orders only the local hart's implicit references to the
37844    /// memory-management data structures.
37845    ///
37846    /// \[NOTE\]
37847    /// ====
37848    /// Consequently, other harts must be notified separately when the
37849    /// memory-management data structures have been modified. One approach is to
37850    /// use 1) a local data fence to ensure local writes are visible globally,
37851    /// then 2) an interprocessor interrupt to the other thread, then 3) a local
37852    /// SFENCE.VMA in the interrupt handler of the remote thread, and finally 4)
37853    /// signal back to originating thread that operation is complete. This is,
37854    /// of course, the RISC-V analog to a TLB shootdown.
37855    /// ====
37856    ///
37857    /// For the common case that the translation data structures have only been
37858    /// modified for a single address mapping (i.e., one page or superpage),
37859    /// _rs1_ can specify a virtual address within that mapping to effect a
37860    /// translation fence for that mapping only. Furthermore, for the common
37861    /// case that the translation data structures have only been modified for a
37862    /// single address-space identifier, _rs2_ can specify the address space.
37863    /// The behavior of SFENCE.VMA depends on _rs1_ and _rs2_ as follows:
37864    ///
37865    /// * If __rs1__=`x0` and __rs2__=`x0`, the fence orders all reads and writes
37866    /// made to any level of the page tables, for all address spaces. The fence
37867    /// also invalidates all address-translation cache entries, for all address
37868    /// spaces.
37869    /// * If __rs1__=`x0` and __rs2__&#8800;``x0``, the fence orders all
37870    /// reads and writes made to any level of the page tables, but only for the
37871    /// address space identified by integer register _rs2_. Accesses to _global_
37872    /// mappings (see &lt;&lt;translation&gt;&gt;) are not ordered. The
37873    /// fence also invalidates all address-translation cache entries matching
37874    /// the address space identified by integer register _rs2_, except for
37875    /// entries containing global mappings.
37876    /// * If __rs1__&#8800;``x0`` and __rs2__=`x0`, the fence orders only
37877    /// reads and writes made to leaf page table entries corresponding to the
37878    /// virtual address in __rs1__, for all address spaces. The fence also
37879    /// invalidates all address-translation cache entries that contain leaf page
37880    /// table entries corresponding to the virtual address in _rs1_, for all
37881    /// address spaces.
37882    /// * If __rs1__&#8800;``x0`` and __rs2__&#8800;``x0``, the
37883    /// fence orders only reads and writes made to leaf page table entries
37884    /// corresponding to the virtual address in _rs1_, for the address space
37885    /// identified by integer register _rs2_. Accesses to global mappings are
37886    /// not ordered. The fence also invalidates all address-translation cache
37887    /// entries that contain leaf page table entries corresponding to the
37888    /// virtual address in _rs1_ and that match the address space identified by
37889    /// integer register _rs2_, except for entries containing global mappings.
37890    ///
37891    /// If the value held in _rs1_ is not a valid virtual address, then the
37892    /// SFENCE.VMA instruction has no effect. No exception is raised in this
37893    /// case.
37894    ///
37895    /// When __rs2__&#8800;``x0``, bits SXLEN-1:ASIDMAX of the value held
37896    /// in _rs2_ are reserved for future standard use. Until their use is
37897    /// defined by a standard extension, they should be zeroed by software and
37898    /// ignored by current implementations. Furthermore, if
37899    /// ASIDLEN&lt;ASIDMAX, the implementation shall ignore bits
37900    /// ASIDMAX-1:ASIDLEN of the value held in _rs2_.
37901    ///
37902    /// \[NOTE\]
37903    /// ====
37904    /// It is always legal to over-fence, e.g., by fencing only based on a
37905    /// subset of the bits in _rs1_ and/or _rs2_, and/or by simply treating all
37906    /// SFENCE.VMA instructions as having _rs1_=`x0` and/or _rs2_=`x0`. For
37907    /// example, simpler implementations can ignore the virtual address in _rs1_
37908    /// and the ASID value in _rs2_ and always perform a global fence. The
37909    /// choice not to raise an exception when an invalid virtual address is held
37910    /// in _rs1_ facilitates this type of simplification.
37911    /// ====
37912    ///
37913    /// An implicit read of the memory-management data structures may return any
37914    /// translation for an address that was valid at any time since the most
37915    /// recent SFENCE.VMA that subsumes that address. The ordering implied by
37916    /// SFENCE.VMA does not place implicit reads and writes to the
37917    /// memory-management data structures into the global memory order in a way
37918    /// that interacts cleanly with the standard RVWMO ordering rules. In
37919    /// particular, even though an SFENCE.VMA orders prior explicit accesses
37920    /// before subsequent implicit accesses, and those implicit accesses are
37921    /// ordered before their associated explicit accesses, SFENCE.VMA does not
37922    /// necessarily place prior explicit accesses before subsequent explicit
37923    /// accesses in the global memory order. These implicit loads also need not
37924    /// otherwise obey normal program order semantics with respect to prior
37925    /// loads or stores to the same address.
37926    ///
37927    /// \[NOTE\]
37928    /// ====
37929    /// A consequence of this specification is that an implementation may use
37930    /// any translation for an address that was valid at any time since the most
37931    /// recent SFENCE.VMA that subsumes that address. In particular, if a leaf
37932    /// PTE is modified but a subsuming SFENCE.VMA is not executed, either the
37933    /// old translation or the new translation will be used, but the choice is
37934    /// unpredictable. The behavior is otherwise well-defined.
37935    ///
37936    /// In a conventional TLB design, it is possible for multiple entries to
37937    /// match a single address if, for example, a page is upgraded to a
37938    /// superpage without first clearing the original non-leaf PTE's valid bit
37939    /// and executing an SFENCE.VMA with __rs1__=`x0`. In this case, a similar
37940    /// remark applies: it is unpredictable whether the old non-leaf PTE or the
37941    /// new leaf PTE is used, but the behavior is otherwise well defined.
37942    ///
37943    /// Another consequence of this specification is that it is generally unsafe
37944    /// to update a PTE using a set of stores of a width less than the width of
37945    /// the PTE, as it is legal for the implementation to read the PTE at any
37946    /// time, including when only some of the partial stores have taken effect.
37947    ///
37948    /// ***
37949    ///
37950    /// This specification permits the caching of PTEs whose V (Valid) bit is
37951    /// clear. Operating systems must be written to cope with this possibility,
37952    /// but implementers are reminded that eagerly caching invalid PTEs will
37953    /// reduce performance by causing additional page faults.
37954    /// ====
37955    ///
37956    /// Implementations must only perform implicit reads of the translation data
37957    /// structures pointed to by the current contents of the `satp` register or
37958    /// a subsequent valid (V=1) translation data structure entry, and must only
37959    /// raise exceptions for implicit accesses that are generated as a result of
37960    /// instruction execution, not those that are performed speculatively.
37961    ///
37962    /// Changes to the `sstatus` fields SUM and MXR take effect immediately,
37963    /// without the need to execute an SFENCE.VMA instruction. Changing
37964    /// `satp`.MODE from Bare to other modes and vice versa also takes effect
37965    /// immediately, without the need to execute an SFENCE.VMA instruction.
37966    /// Likewise, changes to `satp`.ASID take effect immediately.
37967    ///
37968    /// \[TIP\]
37969    /// ====
37970    /// The following common situations typically require executing an
37971    /// SFENCE.VMA instruction:
37972    ///
37973    /// * When software recycles an ASID (i.e., reassociates it with a different
37974    /// page table), it should _first_ change `satp` to point to the new page
37975    /// table using the recycled ASID, _then_ execute SFENCE.VMA with __rs1__=`x0`
37976    /// and _rs2_ set to the recycled ASID. Alternatively, software can execute
37977    /// the same SFENCE.VMA instruction while a different ASID is loaded into
37978    /// `satp`, provided the next time `satp` is loaded with the recycled ASID,
37979    /// it is simultaneously loaded with the new page table.
37980    /// * If the implementation does not provide ASIDs, or software chooses to
37981    /// always use ASID 0, then after every `satp` write, software should
37982    /// execute SFENCE.VMA with __rs1__=`x0`. In the common case that no global
37983    /// translations have been modified, _rs2_ should be set to a register other
37984    /// than `x0` but which contains the value zero, so that global translations
37985    /// are not flushed.
37986    /// * If software modifies a non-leaf PTE, it should execute SFENCE.VMA with
37987    /// __rs1__=`x0`. If any PTE along the traversal path had its G bit set, _rs2_
37988    /// must be `x0`; otherwise, _rs2_ should be set to the ASID for which the
37989    /// translation is being modified.
37990    /// * If software modifies a leaf PTE, it should execute SFENCE.VMA with
37991    /// _rs1_ set to a virtual address within the page. If any PTE along the
37992    /// traversal path had its G bit set, _rs2_ must be `x0`; otherwise, _rs2_
37993    /// should be set to the ASID for which the translation is being modified.
37994    /// * For the special cases of increasing the permissions on a leaf PTE and
37995    /// changing an invalid PTE to a valid leaf, software may choose to execute
37996    /// the SFENCE.VMA lazily. After modifying the PTE but before executing
37997    /// SFENCE.VMA, either the new or old permissions will be used. In the
37998    /// latter case, a page-fault exception might occur, at which point software
37999    /// should execute SFENCE.VMA in accordance with the previous bullet point.
38000    /// ====
38001    ///
38002    /// If a hart employs an address-translation cache, that cache must appear
38003    /// to be private to that hart. In particular, the meaning of an ASID is
38004    /// local to a hart; software may choose to use the same ASID to refer to
38005    /// different address spaces on different harts.
38006    ///
38007    /// \[NOTE\]
38008    /// ====
38009    /// A future extension could redefine ASIDs to be global across the SEE,
38010    /// enabling such options as shared translation caches and hardware support
38011    /// for broadcast TLB shootdown. However, as OSes have evolved to
38012    /// significantly reduce the scope of TLB shootdowns using novel
38013    /// ASID-management techniques, we expect the local-ASID scheme to remain
38014    /// attractive for its simplicity and possibly better scalability.
38015    /// ====
38016    ///
38017    /// For implementations that make `satp`.MODE read-only zero (always Bare),
38018    /// attempts to execute an SFENCE.VMA instruction might raise an
38019    /// illegal-instruction exception.
38020    ///
38021    /// # Forms
38022    /// Assembly: `sfence.vma xs1, xs2`
38023    /// Rust: `sfence_vma(rs1, rs2)`
38024    ///
38025    /// # Arguments
38026    /// - `rs1` — Source register.
38027    /// - `rs2` — Source register.
38028    pub fn sfence_vma<T0, T1>(&mut self, rs1: T0, rs2: T1)
38029    where
38030        Self: SfenceVmaEmitter<T0, T1>,
38031    {
38032        <Self as SfenceVmaEmitter<T0, T1>>::sfence_vma(self, rs1, rs2);
38033    }
38034    /// Order writes before sfence
38035    ///
38036    /// The `sfence.w.inval` instruction guarantees that any previous stores already visible to the
38037    /// current RISC-V hart are ordered before subsequent `sinval.vma` instructions executed by the
38038    /// same hart.
38039    ///
38040    /// # Forms
38041    /// Assembly: `sfence.w.inval ""`
38042    /// Rust: `sfence_w_inval()`
38043    ///
38044    /// # Arguments
38045    pub fn sfence_w_inval(&mut self)
38046    where
38047        Self: SfenceWInvalEmitter,
38048    {
38049        <Self as SfenceWInvalEmitter>::sfence_w_inval(self);
38050    }
38051    /// RISC-V `sgtz` instruction.
38052    ///
38053    /// # Forms
38054    /// Assembly: `sgtz rd rs2`
38055    /// Rust: `sgtz(rd, rs2)`
38056    ///
38057    /// # Arguments
38058    /// - `rd` — Destination register.
38059    /// - `rs2` — Source register.
38060    pub fn sgtz<T0, T1>(&mut self, rd: T0, rs2: T1)
38061    where
38062        Self: SgtzEmitter<T0, T1>,
38063    {
38064        <Self as SgtzEmitter<T0, T1>>::sgtz(self, rd, rs2);
38065    }
38066    /// Store halfword
38067    ///
38068    /// Store 16 bits of data from register `rs2` to an
38069    /// address formed by adding `rs1` to a signed offset.
38070    ///
38071    /// # Forms
38072    /// Assembly: `sh xs2, imm(xs1)`
38073    /// Rust: `sh(rs1, rs2, imm)`
38074    ///
38075    /// # Arguments
38076    /// - `rs1` — Memory base register.
38077    /// - `rs2` — Source register.
38078    /// - `imm` — Immediate encoding value.
38079    pub fn sh<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)
38080    where
38081        Self: ShEmitter<T0, T1, T2>,
38082    {
38083        <Self as ShEmitter<T0, T1, T2>>::sh(self, rs1, rs2, imm);
38084    }
38085    /// Shift left by 1 and add
38086    ///
38087    /// This instruction shifts `rs1` to the left by 1 bit and adds it to `rs2`.
38088    ///
38089    /// # Forms
38090    /// Assembly: `sh1add xd, xs1, xs2`
38091    /// Rust: `sh1add(rd, rs1, rs2)`
38092    ///
38093    /// # Arguments
38094    /// - `rd` — Destination register.
38095    /// - `rs1` — Source register.
38096    /// - `rs2` — Source register.
38097    pub fn sh1add<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
38098    where
38099        Self: Sh1AddEmitter<T0, T1, T2>,
38100    {
38101        <Self as Sh1AddEmitter<T0, T1, T2>>::sh1add(self, rd, rs1, rs2);
38102    }
38103    /// Shift unsigned word left by 1 and add
38104    ///
38105    /// This instruction performs an XLEN-wide addition of two addends. The first addend is rs2.
38106    /// The second addend is the unsigned value formed by extracting the least-significant word of rs1
38107    /// and shifting it left by 1 place.
38108    ///
38109    /// # Forms
38110    /// Assembly: `sh1add.uw xd, xs1, xs2`
38111    /// Rust: `sh1add_uw(rd, rs1, rs2)`
38112    ///
38113    /// # Arguments
38114    /// - `rd` — Destination register.
38115    /// - `rs1` — Source register.
38116    /// - `rs2` — Source register.
38117    pub fn sh1add_uw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
38118    where
38119        Self: Sh1AddUwEmitter<T0, T1, T2>,
38120    {
38121        <Self as Sh1AddUwEmitter<T0, T1, T2>>::sh1add_uw(self, rd, rs1, rs2);
38122    }
38123    /// Shift left by 2 and add
38124    ///
38125    /// This instruction shifts `rs1` to the left by 2 places and adds it to `rs2`.
38126    ///
38127    /// # Forms
38128    /// Assembly: `sh2add xd, xs1, xs2`
38129    /// Rust: `sh2add(rd, rs1, rs2)`
38130    ///
38131    /// # Arguments
38132    /// - `rd` — Destination register.
38133    /// - `rs1` — Source register.
38134    /// - `rs2` — Source register.
38135    pub fn sh2add<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
38136    where
38137        Self: Sh2AddEmitter<T0, T1, T2>,
38138    {
38139        <Self as Sh2AddEmitter<T0, T1, T2>>::sh2add(self, rd, rs1, rs2);
38140    }
38141    /// Shift unsigned word left by 2 and add
38142    ///
38143    /// This instruction performs an XLEN-wide addition of two addends. The first addend is rs2.
38144    /// The second addend is the unsigned value formed by extracting the least-significant word of rs1
38145    /// and shifting it left by 2 places.
38146    ///
38147    /// # Forms
38148    /// Assembly: `sh2add.uw xd, xs1, xs2`
38149    /// Rust: `sh2add_uw(rd, rs1, rs2)`
38150    ///
38151    /// # Arguments
38152    /// - `rd` — Destination register.
38153    /// - `rs1` — Source register.
38154    /// - `rs2` — Source register.
38155    pub fn sh2add_uw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
38156    where
38157        Self: Sh2AddUwEmitter<T0, T1, T2>,
38158    {
38159        <Self as Sh2AddUwEmitter<T0, T1, T2>>::sh2add_uw(self, rd, rs1, rs2);
38160    }
38161    /// Shift left by 3 and add
38162    ///
38163    /// This instruction shifts `rs1` to the left by 3 places and adds it to `rs2`.
38164    ///
38165    /// # Forms
38166    /// Assembly: `sh3add xd, xs1, xs2`
38167    /// Rust: `sh3add(rd, rs1, rs2)`
38168    ///
38169    /// # Arguments
38170    /// - `rd` — Destination register.
38171    /// - `rs1` — Source register.
38172    /// - `rs2` — Source register.
38173    pub fn sh3add<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
38174    where
38175        Self: Sh3AddEmitter<T0, T1, T2>,
38176    {
38177        <Self as Sh3AddEmitter<T0, T1, T2>>::sh3add(self, rd, rs1, rs2);
38178    }
38179    /// Shift unsigned word left by 3 and add
38180    ///
38181    /// This instruction performs an XLEN-wide addition of two addends. The first addend is rs2.
38182    /// The second addend is the unsigned value formed by extracting the least-significant word of rs1
38183    /// and shifting it left by 3 places.
38184    ///
38185    /// # Forms
38186    /// Assembly: `sh3add.uw xd, xs1, xs2`
38187    /// Rust: `sh3add_uw(rd, rs1, rs2)`
38188    ///
38189    /// # Arguments
38190    /// - `rd` — Destination register.
38191    /// - `rs1` — Source register.
38192    /// - `rs2` — Source register.
38193    pub fn sh3add_uw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
38194    where
38195        Self: Sh3AddUwEmitter<T0, T1, T2>,
38196    {
38197        <Self as Sh3AddUwEmitter<T0, T1, T2>>::sh3add_uw(self, rd, rs1, rs2);
38198    }
38199    /// RISC-V `sha256sig0` instruction.
38200    ///
38201    /// # Forms
38202    /// Assembly: `sha256sig0 xd, xs1`
38203    /// Rust: `sha256sig0(rd, rs1)`
38204    ///
38205    /// # Arguments
38206    /// - `rd` — Destination register.
38207    /// - `rs1` — Source register.
38208    pub fn sha256sig0<T0, T1>(&mut self, rd: T0, rs1: T1)
38209    where
38210        Self: Sha256Sig0Emitter<T0, T1>,
38211    {
38212        <Self as Sha256Sig0Emitter<T0, T1>>::sha256sig0(self, rd, rs1);
38213    }
38214    /// RISC-V `sha256sig1` instruction.
38215    ///
38216    /// # Forms
38217    /// Assembly: `sha256sig1 xd, xs1`
38218    /// Rust: `sha256sig1(rd, rs1)`
38219    ///
38220    /// # Arguments
38221    /// - `rd` — Destination register.
38222    /// - `rs1` — Source register.
38223    pub fn sha256sig1<T0, T1>(&mut self, rd: T0, rs1: T1)
38224    where
38225        Self: Sha256Sig1Emitter<T0, T1>,
38226    {
38227        <Self as Sha256Sig1Emitter<T0, T1>>::sha256sig1(self, rd, rs1);
38228    }
38229    /// RISC-V `sha256sum0` instruction.
38230    ///
38231    /// # Forms
38232    /// Assembly: `sha256sum0 xd, xs1`
38233    /// Rust: `sha256sum0(rd, rs1)`
38234    ///
38235    /// # Arguments
38236    /// - `rd` — Destination register.
38237    /// - `rs1` — Source register.
38238    pub fn sha256sum0<T0, T1>(&mut self, rd: T0, rs1: T1)
38239    where
38240        Self: Sha256Sum0Emitter<T0, T1>,
38241    {
38242        <Self as Sha256Sum0Emitter<T0, T1>>::sha256sum0(self, rd, rs1);
38243    }
38244    /// RISC-V `sha256sum1` instruction.
38245    ///
38246    /// # Forms
38247    /// Assembly: `sha256sum1 xd, xs1`
38248    /// Rust: `sha256sum1(rd, rs1)`
38249    ///
38250    /// # Arguments
38251    /// - `rd` — Destination register.
38252    /// - `rs1` — Source register.
38253    pub fn sha256sum1<T0, T1>(&mut self, rd: T0, rs1: T1)
38254    where
38255        Self: Sha256Sum1Emitter<T0, T1>,
38256    {
38257        <Self as Sha256Sum1Emitter<T0, T1>>::sha256sum1(self, rd, rs1);
38258    }
38259    /// RISC-V `sha512sig0` instruction.
38260    ///
38261    /// # Forms
38262    /// Assembly: `sha512sig0 xd, xs1`
38263    /// Rust: `sha512sig0(rd, rs1)`
38264    ///
38265    /// # Arguments
38266    /// - `rd` — Destination register.
38267    /// - `rs1` — Source register.
38268    pub fn sha512sig0<T0, T1>(&mut self, rd: T0, rs1: T1)
38269    where
38270        Self: Sha512Sig0Emitter<T0, T1>,
38271    {
38272        <Self as Sha512Sig0Emitter<T0, T1>>::sha512sig0(self, rd, rs1);
38273    }
38274    /// RISC-V `sha512sig0h` instruction.
38275    ///
38276    /// # Forms
38277    /// Assembly: `sha512sig0h xd, xs1, xs2`
38278    /// Rust: `sha512sig0h(rd, rs1, rs2)`
38279    ///
38280    /// # Arguments
38281    /// - `rd` — Destination register.
38282    /// - `rs1` — Source register.
38283    /// - `rs2` — Source register.
38284    pub fn sha512sig0h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
38285    where
38286        Self: Sha512Sig0HEmitter<T0, T1, T2>,
38287    {
38288        <Self as Sha512Sig0HEmitter<T0, T1, T2>>::sha512sig0h(self, rd, rs1, rs2);
38289    }
38290    /// RISC-V `sha512sig0l` instruction.
38291    ///
38292    /// # Forms
38293    /// Assembly: `sha512sig0l xd, xs1, xs2`
38294    /// Rust: `sha512sig0l(rd, rs1, rs2)`
38295    ///
38296    /// # Arguments
38297    /// - `rd` — Destination register.
38298    /// - `rs1` — Source register.
38299    /// - `rs2` — Source register.
38300    pub fn sha512sig0l<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
38301    where
38302        Self: Sha512Sig0LEmitter<T0, T1, T2>,
38303    {
38304        <Self as Sha512Sig0LEmitter<T0, T1, T2>>::sha512sig0l(self, rd, rs1, rs2);
38305    }
38306    /// RISC-V `sha512sig1` instruction.
38307    ///
38308    /// # Forms
38309    /// Assembly: `sha512sig1 xd, xs1`
38310    /// Rust: `sha512sig1(rd, rs1)`
38311    ///
38312    /// # Arguments
38313    /// - `rd` — Destination register.
38314    /// - `rs1` — Source register.
38315    pub fn sha512sig1<T0, T1>(&mut self, rd: T0, rs1: T1)
38316    where
38317        Self: Sha512Sig1Emitter<T0, T1>,
38318    {
38319        <Self as Sha512Sig1Emitter<T0, T1>>::sha512sig1(self, rd, rs1);
38320    }
38321    /// RISC-V `sha512sig1h` instruction.
38322    ///
38323    /// # Forms
38324    /// Assembly: `sha512sig1h xd, xs1, xs2`
38325    /// Rust: `sha512sig1h(rd, rs1, rs2)`
38326    ///
38327    /// # Arguments
38328    /// - `rd` — Destination register.
38329    /// - `rs1` — Source register.
38330    /// - `rs2` — Source register.
38331    pub fn sha512sig1h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
38332    where
38333        Self: Sha512Sig1HEmitter<T0, T1, T2>,
38334    {
38335        <Self as Sha512Sig1HEmitter<T0, T1, T2>>::sha512sig1h(self, rd, rs1, rs2);
38336    }
38337    /// RISC-V `sha512sig1l` instruction.
38338    ///
38339    /// # Forms
38340    /// Assembly: `sha512sig1l xd, xs1, xs2`
38341    /// Rust: `sha512sig1l(rd, rs1, rs2)`
38342    ///
38343    /// # Arguments
38344    /// - `rd` — Destination register.
38345    /// - `rs1` — Source register.
38346    /// - `rs2` — Source register.
38347    pub fn sha512sig1l<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
38348    where
38349        Self: Sha512Sig1LEmitter<T0, T1, T2>,
38350    {
38351        <Self as Sha512Sig1LEmitter<T0, T1, T2>>::sha512sig1l(self, rd, rs1, rs2);
38352    }
38353    /// RISC-V `sha512sum0` instruction.
38354    ///
38355    /// # Forms
38356    /// Assembly: `sha512sum0 xd, xs1`
38357    /// Rust: `sha512sum0(rd, rs1)`
38358    ///
38359    /// # Arguments
38360    /// - `rd` — Destination register.
38361    /// - `rs1` — Source register.
38362    pub fn sha512sum0<T0, T1>(&mut self, rd: T0, rs1: T1)
38363    where
38364        Self: Sha512Sum0Emitter<T0, T1>,
38365    {
38366        <Self as Sha512Sum0Emitter<T0, T1>>::sha512sum0(self, rd, rs1);
38367    }
38368    /// RISC-V `sha512sum0r` instruction.
38369    ///
38370    /// # Forms
38371    /// Assembly: `sha512sum0r xd, xs1, xs2`
38372    /// Rust: `sha512sum0r(rd, rs1, rs2)`
38373    ///
38374    /// # Arguments
38375    /// - `rd` — Destination register.
38376    /// - `rs1` — Source register.
38377    /// - `rs2` — Source register.
38378    pub fn sha512sum0r<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
38379    where
38380        Self: Sha512Sum0REmitter<T0, T1, T2>,
38381    {
38382        <Self as Sha512Sum0REmitter<T0, T1, T2>>::sha512sum0r(self, rd, rs1, rs2);
38383    }
38384    /// RISC-V `sha512sum1` instruction.
38385    ///
38386    /// # Forms
38387    /// Assembly: `sha512sum1 xd, xs1`
38388    /// Rust: `sha512sum1(rd, rs1)`
38389    ///
38390    /// # Arguments
38391    /// - `rd` — Destination register.
38392    /// - `rs1` — Source register.
38393    pub fn sha512sum1<T0, T1>(&mut self, rd: T0, rs1: T1)
38394    where
38395        Self: Sha512Sum1Emitter<T0, T1>,
38396    {
38397        <Self as Sha512Sum1Emitter<T0, T1>>::sha512sum1(self, rd, rs1);
38398    }
38399    /// RISC-V `sha512sum1r` instruction.
38400    ///
38401    /// # Forms
38402    /// Assembly: `sha512sum1r xd, xs1, xs2`
38403    /// Rust: `sha512sum1r(rd, rs1, rs2)`
38404    ///
38405    /// # Arguments
38406    /// - `rd` — Destination register.
38407    /// - `rs1` — Source register.
38408    /// - `rs2` — Source register.
38409    pub fn sha512sum1r<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
38410    where
38411        Self: Sha512Sum1REmitter<T0, T1, T2>,
38412    {
38413        <Self as Sha512Sum1REmitter<T0, T1, T2>>::sha512sum1r(self, rd, rs1, rs2);
38414    }
38415    /// Invalidate cached address translations
38416    ///
38417    /// # Forms
38418    /// Assembly: `sinval.vma xs1, xs2`
38419    /// Rust: `sinval_vma(rs1, rs2)`
38420    ///
38421    /// # Arguments
38422    /// - `rs1` — Source register.
38423    /// - `rs2` — Source register.
38424    pub fn sinval_vma<T0, T1>(&mut self, rs1: T0, rs2: T1)
38425    where
38426        Self: SinvalVmaEmitter<T0, T1>,
38427    {
38428        <Self as SinvalVmaEmitter<T0, T1>>::sinval_vma(self, rs1, rs2);
38429    }
38430    /// Shift left logical
38431    ///
38432    /// Shift the value in `rs1` left by the value in the lower 6 bits of `rs2`, and store the result in `rd`.
38433    ///
38434    /// # Forms
38435    /// Assembly: `sll xd, xs1, xs2`
38436    /// Rust: `sll(rd, rs1, rs2)`
38437    ///
38438    /// # Arguments
38439    /// - `rd` — Destination register.
38440    /// - `rs1` — Source register.
38441    /// - `rs2` — Source register.
38442    pub fn sll<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
38443    where
38444        Self: SllEmitter<T0, T1, T2>,
38445    {
38446        <Self as SllEmitter<T0, T1, T2>>::sll(self, rd, rs1, rs2);
38447    }
38448    /// Shift left logical immediate
38449    ///
38450    /// Shift the value in rs1 left by shamt, and store the result in rd
38451    ///
38452    /// # Forms
38453    /// Assembly: `slli xd, xs1, shamt`
38454    /// Rust: `slli(rd, rs1, shamtd)`
38455    ///
38456    /// # Arguments
38457    /// - `rd` — Destination register.
38458    /// - `rs1` — Source register.
38459    /// - `shamtd` — Immediate encoding value.
38460    pub fn slli<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtd: T2)
38461    where
38462        Self: SlliEmitter<T0, T1, T2>,
38463    {
38464        <Self as SlliEmitter<T0, T1, T2>>::slli(self, rd, rs1, shamtd);
38465    }
38466    /// Shift left logical immediate
38467    ///
38468    /// Shift the value in rs1 left by shamt, and store the result in rd
38469    ///
38470    /// # Forms
38471    /// Assembly: `slli.rv32 xd, xs1, shamt`
38472    /// Rust: `slli_rv32(rd, rs1, shamtw)`
38473    ///
38474    /// # Arguments
38475    /// - `rd` — Destination register.
38476    /// - `rs1` — Source register.
38477    /// - `shamtw` — Immediate encoding value.
38478    pub fn slli_rv32<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtw: T2)
38479    where
38480        Self: SlliRv32Emitter<T0, T1, T2>,
38481    {
38482        <Self as SlliRv32Emitter<T0, T1, T2>>::slli_rv32(self, rd, rs1, shamtw);
38483    }
38484    /// Shift left unsigned word (Immediate)
38485    ///
38486    /// This instruction takes the least-significant word of rs1, zero-extends it, and shifts it
38487    /// left by the immediate.
38488    ///
38489    /// \[NOTE\]
38490    /// This instruction is the same as `slli` with `zext.w` performed on rs1 before shifting.
38491    ///
38492    /// # Forms
38493    /// Assembly: `slli.uw xd, xs1, shamt`
38494    /// Rust: `slli_uw(rd, rs1, shamtd)`
38495    ///
38496    /// # Arguments
38497    /// - `rd` — Destination register.
38498    /// - `rs1` — Source register.
38499    /// - `shamtd` — Immediate encoding value.
38500    pub fn slli_uw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtd: T2)
38501    where
38502        Self: SlliUwEmitter<T0, T1, T2>,
38503    {
38504        <Self as SlliUwEmitter<T0, T1, T2>>::slli_uw(self, rd, rs1, shamtd);
38505    }
38506    /// Shift left logical immediate word
38507    ///
38508    /// Shift the 32-bit value in rs1 left by shamt, and store the sign-extended result in rd
38509    ///
38510    /// # Forms
38511    /// Assembly: `slliw xd, xs1, shamt`
38512    /// Rust: `slliw(rd, rs1, shamtw)`
38513    ///
38514    /// # Arguments
38515    /// - `rd` — Destination register.
38516    /// - `rs1` — Source register.
38517    /// - `shamtw` — Immediate encoding value.
38518    pub fn slliw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtw: T2)
38519    where
38520        Self: SlliwEmitter<T0, T1, T2>,
38521    {
38522        <Self as SlliwEmitter<T0, T1, T2>>::slliw(self, rd, rs1, shamtw);
38523    }
38524    /// Shift left logical word
38525    ///
38526    /// Shift the 32-bit value in `rs1` left by the value in the lower 5 bits of `rs2`, and store the sign-extended result in `rd`.
38527    ///
38528    /// # Forms
38529    /// Assembly: `sllw xd, xs1, xs2`
38530    /// Rust: `sllw(rd, rs1, rs2)`
38531    ///
38532    /// # Arguments
38533    /// - `rd` — Destination register.
38534    /// - `rs1` — Source register.
38535    /// - `rs2` — Source register.
38536    pub fn sllw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
38537    where
38538        Self: SllwEmitter<T0, T1, T2>,
38539    {
38540        <Self as SllwEmitter<T0, T1, T2>>::sllw(self, rd, rs1, rs2);
38541    }
38542    /// Set on less than
38543    ///
38544    /// Places the value 1 in register `rd` if register `rs1` is less than the value in register `rs2`, where
38545    /// both sources are treated as signed numbers, else 0 is written to `rd`.
38546    ///
38547    /// # Forms
38548    /// Assembly: `slt xd, xs1, rs2`
38549    /// Rust: `slt(rd, rs1, rs2)`
38550    ///
38551    /// # Arguments
38552    /// - `rd` — Destination register.
38553    /// - `rs1` — Source register.
38554    /// - `rs2` — Source register.
38555    pub fn slt<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
38556    where
38557        Self: SltEmitter<T0, T1, T2>,
38558    {
38559        <Self as SltEmitter<T0, T1, T2>>::slt(self, rd, rs1, rs2);
38560    }
38561    /// Set on less than immediate
38562    ///
38563    /// Places the value 1 in register `rd` if register `rs1` is less than the sign-extended immediate
38564    /// when both are treated as signed numbers, else 0 is written to `rd`.
38565    ///
38566    /// # Forms
38567    /// Assembly: `slti xd, xs1, imm`
38568    /// Rust: `slti(rd, rs1, imm)`
38569    ///
38570    /// # Arguments
38571    /// - `rd` — Destination register.
38572    /// - `rs1` — Source register.
38573    /// - `imm` — Immediate encoding value.
38574    pub fn slti<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)
38575    where
38576        Self: SltiEmitter<T0, T1, T2>,
38577    {
38578        <Self as SltiEmitter<T0, T1, T2>>::slti(self, rd, rs1, imm);
38579    }
38580    /// Set on less than immediate unsigned
38581    ///
38582    /// Places the value 1 in register `rd` if register `rs1` is less than the sign-extended immediate
38583    /// when both are treated as unsigned numbers (_i.e._, the immediate is first sign-extended to
38584    /// XLEN bits then treated as an unsigned number), else 0 is written to `rd`.
38585    ///
38586    /// NOTE: `sltiu rd, rs1, 1` sets `rd` to 1 if `rs1` equals zero, otherwise sets `rd` to 0
38587    /// (assembler pseudoinstruction `SEQZ rd, rs`).
38588    ///
38589    /// # Forms
38590    /// Assembly: `sltiu xd, xs1, imm`
38591    /// Rust: `sltiu(rd, rs1, imm)`
38592    ///
38593    /// # Arguments
38594    /// - `rd` — Destination register.
38595    /// - `rs1` — Source register.
38596    /// - `imm` — Immediate encoding value.
38597    pub fn sltiu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)
38598    where
38599        Self: SltiuEmitter<T0, T1, T2>,
38600    {
38601        <Self as SltiuEmitter<T0, T1, T2>>::sltiu(self, rd, rs1, imm);
38602    }
38603    /// Set on less than unsigned
38604    ///
38605    /// Places the value 1 in register `rd` if register `rs1` is less than the value in register `rs2`, where
38606    /// both sources are treated as unsigned numbers, else 0 is written to `rd`.
38607    ///
38608    /// # Forms
38609    /// Assembly: `sltu xd, xs1, xs2`
38610    /// Rust: `sltu(rd, rs1, rs2)`
38611    ///
38612    /// # Arguments
38613    /// - `rd` — Destination register.
38614    /// - `rs1` — Source register.
38615    /// - `rs2` — Source register.
38616    pub fn sltu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
38617    where
38618        Self: SltuEmitter<T0, T1, T2>,
38619    {
38620        <Self as SltuEmitter<T0, T1, T2>>::sltu(self, rd, rs1, rs2);
38621    }
38622    /// RISC-V `sltz` instruction.
38623    ///
38624    /// # Forms
38625    /// Assembly: `sltz rd rs1`
38626    /// Rust: `sltz(rd, rs1)`
38627    ///
38628    /// # Arguments
38629    /// - `rd` — Destination register.
38630    /// - `rs1` — Source register.
38631    pub fn sltz<T0, T1>(&mut self, rd: T0, rs1: T1)
38632    where
38633        Self: SltzEmitter<T0, T1>,
38634    {
38635        <Self as SltzEmitter<T0, T1>>::sltz(self, rd, rs1);
38636    }
38637    /// RISC-V `sm3p0` instruction.
38638    ///
38639    /// # Forms
38640    /// Assembly: `sm3p0 xd, xs1`
38641    /// Rust: `sm3p0(rd, rs1)`
38642    ///
38643    /// # Arguments
38644    /// - `rd` — Destination register.
38645    /// - `rs1` — Source register.
38646    pub fn sm3p0<T0, T1>(&mut self, rd: T0, rs1: T1)
38647    where
38648        Self: Sm3P0Emitter<T0, T1>,
38649    {
38650        <Self as Sm3P0Emitter<T0, T1>>::sm3p0(self, rd, rs1);
38651    }
38652    /// RISC-V `sm3p1` instruction.
38653    ///
38654    /// # Forms
38655    /// Assembly: `sm3p1 xd, xs1`
38656    /// Rust: `sm3p1(rd, rs1)`
38657    ///
38658    /// # Arguments
38659    /// - `rd` — Destination register.
38660    /// - `rs1` — Source register.
38661    pub fn sm3p1<T0, T1>(&mut self, rd: T0, rs1: T1)
38662    where
38663        Self: Sm3P1Emitter<T0, T1>,
38664    {
38665        <Self as Sm3P1Emitter<T0, T1>>::sm3p1(self, rd, rs1);
38666    }
38667    /// RISC-V `sm4ed` instruction.
38668    ///
38669    /// # Forms
38670    /// Assembly: `sm4ed xd, xs1, xs2, bs`
38671    /// Rust: `sm4ed(rd, rs1, rs2, bs)`
38672    ///
38673    /// # Arguments
38674    /// - `rd` — Destination register.
38675    /// - `rs1` — Source register.
38676    /// - `rs2` — Source register.
38677    /// - `bs` — Immediate encoding value.
38678    pub fn sm4ed<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, bs: T3)
38679    where
38680        Self: Sm4EdEmitter<T0, T1, T2, T3>,
38681    {
38682        <Self as Sm4EdEmitter<T0, T1, T2, T3>>::sm4ed(self, rd, rs1, rs2, bs);
38683    }
38684    /// RISC-V `sm4ks` instruction.
38685    ///
38686    /// # Forms
38687    /// Assembly: `sm4ks xd, xs1, xs2, bs`
38688    /// Rust: `sm4ks(rd, rs1, rs2, bs)`
38689    ///
38690    /// # Arguments
38691    /// - `rd` — Destination register.
38692    /// - `rs1` — Source register.
38693    /// - `rs2` — Source register.
38694    /// - `bs` — Immediate encoding value.
38695    pub fn sm4ks<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, bs: T3)
38696    where
38697        Self: Sm4KsEmitter<T0, T1, T2, T3>,
38698    {
38699        <Self as Sm4KsEmitter<T0, T1, T2, T3>>::sm4ks(self, rd, rs1, rs2, bs);
38700    }
38701    /// RISC-V `snez` instruction.
38702    ///
38703    /// # Forms
38704    /// Assembly: `snez rd rs2`
38705    /// Rust: `snez(rd, rs2)`
38706    ///
38707    /// # Arguments
38708    /// - `rd` — Destination register.
38709    /// - `rs2` — Source register.
38710    pub fn snez<T0, T1>(&mut self, rd: T0, rs2: T1)
38711    where
38712        Self: SnezEmitter<T0, T1>,
38713    {
38714        <Self as SnezEmitter<T0, T1>>::snez(self, rd, rs2);
38715    }
38716    /// Shift right arithmetic
38717    ///
38718    /// Arithmetic shift the value in `rs1` right by the value in the lower 5 bits of `rs2`, and store the result in `rd`.
38719    ///
38720    /// # Forms
38721    /// Assembly: `sra xd, xs1, xs2`
38722    /// Rust: `sra(rd, rs1, rs2)`
38723    ///
38724    /// # Arguments
38725    /// - `rd` — Destination register.
38726    /// - `rs1` — Source register.
38727    /// - `rs2` — Source register.
38728    pub fn sra<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
38729    where
38730        Self: SraEmitter<T0, T1, T2>,
38731    {
38732        <Self as SraEmitter<T0, T1, T2>>::sra(self, rd, rs1, rs2);
38733    }
38734    /// Shift right arithmetic immediate
38735    ///
38736    /// Arithmetic shift (the original sign bit is copied into the vacated upper bits) the
38737    /// value in rs1 right by shamt, and store the result in rd.
38738    ///
38739    /// # Forms
38740    /// Assembly: `srai xd, xs1, shamt`
38741    /// Rust: `srai(rd, rs1, shamtd)`
38742    ///
38743    /// # Arguments
38744    /// - `rd` — Destination register.
38745    /// - `rs1` — Source register.
38746    /// - `shamtd` — Immediate encoding value.
38747    pub fn srai<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtd: T2)
38748    where
38749        Self: SraiEmitter<T0, T1, T2>,
38750    {
38751        <Self as SraiEmitter<T0, T1, T2>>::srai(self, rd, rs1, shamtd);
38752    }
38753    /// Shift right arithmetic immediate
38754    ///
38755    /// Arithmetic shift (the original sign bit is copied into the vacated upper bits) the
38756    /// value in rs1 right by shamt, and store the result in rd.
38757    ///
38758    /// # Forms
38759    /// Assembly: `srai.rv32 xd, xs1, shamt`
38760    /// Rust: `srai_rv32(rd, rs1, shamtw)`
38761    ///
38762    /// # Arguments
38763    /// - `rd` — Destination register.
38764    /// - `rs1` — Source register.
38765    /// - `shamtw` — Immediate encoding value.
38766    pub fn srai_rv32<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtw: T2)
38767    where
38768        Self: SraiRv32Emitter<T0, T1, T2>,
38769    {
38770        <Self as SraiRv32Emitter<T0, T1, T2>>::srai_rv32(self, rd, rs1, shamtw);
38771    }
38772    /// Shift right arithmetic immediate word
38773    ///
38774    /// Arithmetic shift (the original sign bit is copied into the vacated upper bits) the
38775    /// 32-bit value in rs1 right by shamt, and store the sign-extended result in rd.
38776    ///
38777    /// # Forms
38778    /// Assembly: `sraiw xd, xs1, shamt`
38779    /// Rust: `sraiw(rd, rs1, shamtw)`
38780    ///
38781    /// # Arguments
38782    /// - `rd` — Destination register.
38783    /// - `rs1` — Source register.
38784    /// - `shamtw` — Immediate encoding value.
38785    pub fn sraiw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtw: T2)
38786    where
38787        Self: SraiwEmitter<T0, T1, T2>,
38788    {
38789        <Self as SraiwEmitter<T0, T1, T2>>::sraiw(self, rd, rs1, shamtw);
38790    }
38791    /// Shift right arithmetic word
38792    ///
38793    /// Arithmetic shift the 32-bit value in `rs1` right by the value in the lower 5 bits of `rs2`, and store the sign-extended result in `rd`.
38794    ///
38795    /// # Forms
38796    /// Assembly: `sraw xd, xs1, xs2`
38797    /// Rust: `sraw(rd, rs1, rs2)`
38798    ///
38799    /// # Arguments
38800    /// - `rd` — Destination register.
38801    /// - `rs1` — Source register.
38802    /// - `rs2` — Source register.
38803    pub fn sraw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
38804    where
38805        Self: SrawEmitter<T0, T1, T2>,
38806    {
38807        <Self as SrawEmitter<T0, T1, T2>>::sraw(self, rd, rs1, rs2);
38808    }
38809    /// Supervisor Exception Return
38810    ///
38811    /// Returns from an exception.
38812    ///
38813    /// When `sret` is allowed to execute, its behavior depends on whether or not the current privilege
38814    /// mode is virtualized.
38815    ///
38816    /// *When the current privilege mode is (H)S-mode or M-mode*
38817    ///
38818    /// `sret` sets  `hstatus.HPV` = 0, `mstatus.SPP` = 0,
38819    /// `mstatus.SIE` = `mstatus.SPIE`, and `mstatus.SPIE` = 1,
38820    /// changes the privilege mode according to the table below,
38821    /// and then jumps to the address in `sepc`.
38822    ///
38823    /// .Next privilege mode following an `sret` in (H)S-mode or M-mode
38824    /// \[%autowidth\]
38825    /// |===
38826    /// | \[.rotate\]#`mstatus.SPP`# | \[.rotate\]#`hstatus.SPV`# .&gt;| Mode after `sret`
38827    ///
38828    /// | 0 | 0 | U-mode
38829    /// | 0 | 1 | VU-mode
38830    /// | 1 | 0 | (H)S-mode
38831    /// | 1 | 1 | VS-mode
38832    /// |===
38833    ///
38834    /// *When the current privilege mode is VS-mode*
38835    ///
38836    /// `sret` sets
38837    /// `vsstatus.SPP` = 0, `vsstatus.SIE` = `vstatus.SPIE`, and `vsstatus.SPIE` = 1,
38838    /// changes the privilege mode according to the table below,
38839    /// and then jumps to the address in `vsepc`.
38840    ///
38841    /// .Next privilege mode following an `sret` in (H)S-mode or M-mode
38842    /// \[%autowidth\]
38843    /// |===
38844    /// | \[.rotate\]#`vsstatus.SPP`# .&gt;| Mode after `sret`
38845    ///
38846    /// | 0 | VU-mode
38847    /// | 1 | VS-mode
38848    /// |===
38849    ///
38850    /// # Forms
38851    /// Assembly: `sret ""`
38852    /// Rust: `sret()`
38853    ///
38854    /// # Arguments
38855    pub fn sret(&mut self)
38856    where
38857        Self: SretEmitter,
38858    {
38859        <Self as SretEmitter>::sret(self);
38860    }
38861    /// Shift right logical
38862    ///
38863    /// Logical shift the value in `rs1` right by the value in the lower bits of `rs2`, and store the result in `rd`.
38864    ///
38865    /// # Forms
38866    /// Assembly: `srl xd, xs1, xs2`
38867    /// Rust: `srl(rd, rs1, rs2)`
38868    ///
38869    /// # Arguments
38870    /// - `rd` — Destination register.
38871    /// - `rs1` — Source register.
38872    /// - `rs2` — Source register.
38873    pub fn srl<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
38874    where
38875        Self: SrlEmitter<T0, T1, T2>,
38876    {
38877        <Self as SrlEmitter<T0, T1, T2>>::srl(self, rd, rs1, rs2);
38878    }
38879    /// Shift right logical immediate
38880    ///
38881    /// Shift the value in rs1 right by shamt, and store the result in rd
38882    ///
38883    /// # Forms
38884    /// Assembly: `srli xd, xs1, shamt`
38885    /// Rust: `srli(rd, rs1, shamtd)`
38886    ///
38887    /// # Arguments
38888    /// - `rd` — Destination register.
38889    /// - `rs1` — Source register.
38890    /// - `shamtd` — Immediate encoding value.
38891    pub fn srli<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtd: T2)
38892    where
38893        Self: SrliEmitter<T0, T1, T2>,
38894    {
38895        <Self as SrliEmitter<T0, T1, T2>>::srli(self, rd, rs1, shamtd);
38896    }
38897    /// Shift right logical immediate
38898    ///
38899    /// Shift the value in rs1 right by shamt, and store the result in rd
38900    ///
38901    /// # Forms
38902    /// Assembly: `srli.rv32 xd, xs1, shamt`
38903    /// Rust: `srli_rv32(rd, rs1, shamtw)`
38904    ///
38905    /// # Arguments
38906    /// - `rd` — Destination register.
38907    /// - `rs1` — Source register.
38908    /// - `shamtw` — Immediate encoding value.
38909    pub fn srli_rv32<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtw: T2)
38910    where
38911        Self: SrliRv32Emitter<T0, T1, T2>,
38912    {
38913        <Self as SrliRv32Emitter<T0, T1, T2>>::srli_rv32(self, rd, rs1, shamtw);
38914    }
38915    /// Shift right logical immediate word
38916    ///
38917    /// Shift the 32-bit value in rs1 right by shamt, and store the sign-extended result in rd
38918    ///
38919    /// # Forms
38920    /// Assembly: `srliw xd, xs1, shamt`
38921    /// Rust: `srliw(rd, rs1, shamtw)`
38922    ///
38923    /// # Arguments
38924    /// - `rd` — Destination register.
38925    /// - `rs1` — Source register.
38926    /// - `shamtw` — Immediate encoding value.
38927    pub fn srliw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtw: T2)
38928    where
38929        Self: SrliwEmitter<T0, T1, T2>,
38930    {
38931        <Self as SrliwEmitter<T0, T1, T2>>::srliw(self, rd, rs1, shamtw);
38932    }
38933    /// Shift right logical word
38934    ///
38935    /// Logical shift the 32-bit value in `rs1` right by the value in the lower 5 bits of `rs2`, and store the sign-extended result in `rd`.
38936    ///
38937    /// # Forms
38938    /// Assembly: `srlw xd, xs1, xs2`
38939    /// Rust: `srlw(rd, rs1, rs2)`
38940    ///
38941    /// # Arguments
38942    /// - `rd` — Destination register.
38943    /// - `rs1` — Source register.
38944    /// - `rs2` — Source register.
38945    pub fn srlw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
38946    where
38947        Self: SrlwEmitter<T0, T1, T2>,
38948    {
38949        <Self as SrlwEmitter<T0, T1, T2>>::srlw(self, rd, rs1, rs2);
38950    }
38951    /// RISC-V `ssamoswap.d` instruction.
38952    ///
38953    /// # Forms
38954    /// Assembly: `ssamoswap.d xd, xs1, xs2, aq, rl`
38955    /// Rust: `ssamoswap_d(rd, rs1, rs2, aq, rl)`
38956    ///
38957    /// # Arguments
38958    /// - `rd` — Destination register.
38959    /// - `rs1` — Memory base register.
38960    /// - `rs2` — Source register.
38961    /// - `aq` — Acquire-order bit.
38962    /// - `rl` — Release-order bit; retained for the existing emitter API.
38963    pub fn ssamoswap_d<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
38964    where
38965        Self: SsamoswapDEmitter<T0, T1, T2, T3, T4>,
38966    {
38967        <Self as SsamoswapDEmitter<T0, T1, T2, T3, T4>>::ssamoswap_d(self, rd, rs1, rs2, aq, rl);
38968    }
38969    /// RISC-V `ssamoswap.w` instruction.
38970    ///
38971    /// # Forms
38972    /// Assembly: `ssamoswap.w xd, xs1, xs2, aq, rl`
38973    /// Rust: `ssamoswap_w(rd, rs1, rs2, aq, rl)`
38974    ///
38975    /// # Arguments
38976    /// - `rd` — Destination register.
38977    /// - `rs1` — Memory base register.
38978    /// - `rs2` — Source register.
38979    /// - `aq` — Acquire-order bit.
38980    /// - `rl` — Release-order bit; retained for the existing emitter API.
38981    pub fn ssamoswap_w<T0, T1, T2, T3, T4>(&mut self, rd: T0, rs1: T1, rs2: T2, aq: T3, rl: T4)
38982    where
38983        Self: SsamoswapWEmitter<T0, T1, T2, T3, T4>,
38984    {
38985        <Self as SsamoswapWEmitter<T0, T1, T2, T3, T4>>::ssamoswap_w(self, rd, rs1, rs2, aq, rl);
38986    }
38987    /// RISC-V `sspopchk.x1` instruction.
38988    ///
38989    /// # Forms
38990    /// Assembly: `sspopchk.x1 sspopchk_x1`
38991    /// Rust: `sspopchk_x1()`
38992    ///
38993    /// # Arguments
38994    pub fn sspopchk_x1(&mut self)
38995    where
38996        Self: SspopchkX1Emitter,
38997    {
38998        <Self as SspopchkX1Emitter>::sspopchk_x1(self);
38999    }
39000    /// RISC-V `sspopchk.x5` instruction.
39001    ///
39002    /// # Forms
39003    /// Assembly: `sspopchk.x5 sspopchk_x5`
39004    /// Rust: `sspopchk_x5()`
39005    ///
39006    /// # Arguments
39007    pub fn sspopchk_x5(&mut self)
39008    where
39009        Self: SspopchkX5Emitter,
39010    {
39011        <Self as SspopchkX5Emitter>::sspopchk_x5(self);
39012    }
39013    /// RISC-V `sspush.x1` instruction.
39014    ///
39015    /// # Forms
39016    /// Assembly: `sspush.x1 sspush_x1`
39017    /// Rust: `sspush_x1()`
39018    ///
39019    /// # Arguments
39020    pub fn sspush_x1(&mut self)
39021    where
39022        Self: SspushX1Emitter,
39023    {
39024        <Self as SspushX1Emitter>::sspush_x1(self);
39025    }
39026    /// RISC-V `sspush.x5` instruction.
39027    ///
39028    /// # Forms
39029    /// Assembly: `sspush.x5 sspush_x5`
39030    /// Rust: `sspush_x5()`
39031    ///
39032    /// # Arguments
39033    pub fn sspush_x5(&mut self)
39034    where
39035        Self: SspushX5Emitter,
39036    {
39037        <Self as SspushX5Emitter>::sspush_x5(self);
39038    }
39039    /// RISC-V `ssrdp` instruction.
39040    ///
39041    /// # Forms
39042    /// Assembly: `ssrdp xd`
39043    /// Rust: `ssrdp(rd)`
39044    ///
39045    /// # Arguments
39046    /// - `rd` — Destination register.
39047    pub fn ssrdp<T0>(&mut self, rd: T0)
39048    where
39049        Self: SsrdpEmitter<T0>,
39050    {
39051        <Self as SsrdpEmitter<T0>>::ssrdp(self, rd);
39052    }
39053    /// Subtract
39054    ///
39055    /// Subtract the value in rs2 from rs1, and store the result in rd
39056    ///
39057    /// # Forms
39058    /// Assembly: `sub xd, xs1, xs2`
39059    /// Rust: `sub(rd, rs1, rs2)`
39060    ///
39061    /// # Arguments
39062    /// - `rd` — Destination register.
39063    /// - `rs1` — Source register.
39064    /// - `rs2` — Source register.
39065    pub fn sub<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
39066    where
39067        Self: SubEmitter<T0, T1, T2>,
39068    {
39069        <Self as SubEmitter<T0, T1, T2>>::sub(self, rd, rs1, rs2);
39070    }
39071    /// Subtract word
39072    ///
39073    /// Subtract the 32-bit values in rs2 from rs1, and store the sign-extended result in rd
39074    ///
39075    /// # Forms
39076    /// Assembly: `subw xd, xs1, xs2`
39077    /// Rust: `subw(rd, rs1, rs2)`
39078    ///
39079    /// # Arguments
39080    /// - `rd` — Destination register.
39081    /// - `rs1` — Source register.
39082    /// - `rs2` — Source register.
39083    pub fn subw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
39084    where
39085        Self: SubwEmitter<T0, T1, T2>,
39086    {
39087        <Self as SubwEmitter<T0, T1, T2>>::subw(self, rd, rs1, rs2);
39088    }
39089    /// Store word
39090    ///
39091    /// Store 32 bits of data from register `rs2` to an
39092    /// address formed by adding `rs1` to a signed offset.
39093    ///
39094    /// # Forms
39095    /// Assembly: `sw xs2, imm(xs1)`
39096    /// Rust: `sw(rs1, rs2, imm)`
39097    ///
39098    /// # Arguments
39099    /// - `rs1` — Memory base register.
39100    /// - `rs2` — Source register.
39101    /// - `imm` — Immediate encoding value.
39102    pub fn sw<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)
39103    where
39104        Self: SwEmitter<T0, T1, T2>,
39105    {
39106        <Self as SwEmitter<T0, T1, T2>>::sw(self, rs1, rs2, imm);
39107    }
39108    /// Bit deinterleave
39109    ///
39110    /// This instruction gathers bits from the high and low halves of the source word into odd/even bit
39111    /// positions in the destination word. It is the inverse of the zip instruction. This instruction is
39112    /// available only on RV32.
39113    ///
39114    /// # Forms
39115    /// Assembly: `unzip xd, xs1`
39116    /// Rust: `unzip(rd, rs1)`
39117    ///
39118    /// # Arguments
39119    /// - `rd` — Destination register.
39120    /// - `rs1` — Source register.
39121    pub fn unzip<T0, T1>(&mut self, rd: T0, rs1: T1)
39122    where
39123        Self: UnzipEmitter<T0, T1>,
39124    {
39125        <Self as UnzipEmitter<T0, T1>>::unzip(self, rd, rs1);
39126    }
39127    /// RISC-V `vaadd.vv` instruction.
39128    ///
39129    /// # Forms
39130    /// Assembly: `vaadd.vv vm, vs2, vs1, vd`
39131    /// Rust: `vaadd_vv(vd, vs1, vs2, vm)`
39132    ///
39133    /// # Arguments
39134    /// - `vd` — Vector register operand.
39135    /// - `vs1` — Vector register operand.
39136    /// - `vs2` — Vector register operand.
39137    /// - `vm` — Vector mask control.
39138    pub fn vaadd_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
39139    where
39140        Self: VaaddVvEmitter<T0, T1, T2, T3>,
39141    {
39142        <Self as VaaddVvEmitter<T0, T1, T2, T3>>::vaadd_vv(self, vd, vs1, vs2, vm);
39143    }
39144    /// RISC-V `vaadd.vx` instruction.
39145    ///
39146    /// # Forms
39147    /// Assembly: `vaadd.vx vm, vs2, xs1, vd`
39148    /// Rust: `vaadd_vx(vd, vs2, rs1, vm)`
39149    ///
39150    /// # Arguments
39151    /// - `vd` — Vector register operand.
39152    /// - `vs2` — Vector register operand.
39153    /// - `rs1` — Source register.
39154    /// - `vm` — Vector mask control.
39155    pub fn vaadd_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
39156    where
39157        Self: VaaddVxEmitter<T0, T1, T2, T3>,
39158    {
39159        <Self as VaaddVxEmitter<T0, T1, T2, T3>>::vaadd_vx(self, vd, vs2, rs1, vm);
39160    }
39161    /// RISC-V `vaaddu.vv` instruction.
39162    ///
39163    /// # Forms
39164    /// Assembly: `vaaddu.vv vm, vs2, vs1, vd`
39165    /// Rust: `vaaddu_vv(vd, vs1, vs2, vm)`
39166    ///
39167    /// # Arguments
39168    /// - `vd` — Vector register operand.
39169    /// - `vs1` — Vector register operand.
39170    /// - `vs2` — Vector register operand.
39171    /// - `vm` — Vector mask control.
39172    pub fn vaaddu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
39173    where
39174        Self: VaadduVvEmitter<T0, T1, T2, T3>,
39175    {
39176        <Self as VaadduVvEmitter<T0, T1, T2, T3>>::vaaddu_vv(self, vd, vs1, vs2, vm);
39177    }
39178    /// RISC-V `vaaddu.vx` instruction.
39179    ///
39180    /// # Forms
39181    /// Assembly: `vaaddu.vx vm, vs2, xs1, vd`
39182    /// Rust: `vaaddu_vx(vd, vs2, rs1, vm)`
39183    ///
39184    /// # Arguments
39185    /// - `vd` — Vector register operand.
39186    /// - `vs2` — Vector register operand.
39187    /// - `rs1` — Source register.
39188    /// - `vm` — Vector mask control.
39189    pub fn vaaddu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
39190    where
39191        Self: VaadduVxEmitter<T0, T1, T2, T3>,
39192    {
39193        <Self as VaadduVxEmitter<T0, T1, T2, T3>>::vaaddu_vx(self, vd, vs2, rs1, vm);
39194    }
39195    /// RISC-V `vadc.vim` instruction.
39196    ///
39197    /// # Forms
39198    /// Assembly: `vadc.vim vs2, vd, imm`
39199    /// Rust: `vadc_vim(vd, vs2, simm5)`
39200    ///
39201    /// # Arguments
39202    /// - `vd` — Vector register operand.
39203    /// - `vs2` — Vector register operand.
39204    /// - `simm5` — Immediate encoding value.
39205    pub fn vadc_vim<T0, T1, T2>(&mut self, vd: T0, vs2: T1, simm5: T2)
39206    where
39207        Self: VadcVimEmitter<T0, T1, T2>,
39208    {
39209        <Self as VadcVimEmitter<T0, T1, T2>>::vadc_vim(self, vd, vs2, simm5);
39210    }
39211    /// RISC-V `vadc.vvm` instruction.
39212    ///
39213    /// # Forms
39214    /// Assembly: `vadc.vvm vs2, vs1, vd`
39215    /// Rust: `vadc_vvm(vd, vs1, vs2)`
39216    ///
39217    /// # Arguments
39218    /// - `vd` — Vector register operand.
39219    /// - `vs1` — Vector register operand.
39220    /// - `vs2` — Vector register operand.
39221    pub fn vadc_vvm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)
39222    where
39223        Self: VadcVvmEmitter<T0, T1, T2>,
39224    {
39225        <Self as VadcVvmEmitter<T0, T1, T2>>::vadc_vvm(self, vd, vs1, vs2);
39226    }
39227    /// RISC-V `vadc.vxm` instruction.
39228    ///
39229    /// # Forms
39230    /// Assembly: `vadc.vxm vs2, xs1, vd`
39231    /// Rust: `vadc_vxm(vd, rs1, vs2)`
39232    ///
39233    /// # Arguments
39234    /// - `vd` — Vector register operand.
39235    /// - `rs1` — Source register.
39236    /// - `vs2` — Vector register operand.
39237    pub fn vadc_vxm<T0, T1, T2>(&mut self, vd: T0, rs1: T1, vs2: T2)
39238    where
39239        Self: VadcVxmEmitter<T0, T1, T2>,
39240    {
39241        <Self as VadcVxmEmitter<T0, T1, T2>>::vadc_vxm(self, vd, rs1, vs2);
39242    }
39243    /// RISC-V `vadd.vi` instruction.
39244    ///
39245    /// # Forms
39246    /// Assembly: `vadd.vi vm, vs2, vd, imm`
39247    /// Rust: `vadd_vi(vd, vs2, simm5, vm)`
39248    ///
39249    /// # Arguments
39250    /// - `vd` — Vector register operand.
39251    /// - `vs2` — Vector register operand.
39252    /// - `simm5` — Immediate encoding value.
39253    /// - `vm` — Vector mask control.
39254    pub fn vadd_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)
39255    where
39256        Self: VaddViEmitter<T0, T1, T2, T3>,
39257    {
39258        <Self as VaddViEmitter<T0, T1, T2, T3>>::vadd_vi(self, vd, vs2, simm5, vm);
39259    }
39260    /// RISC-V `vadd.vv` instruction.
39261    ///
39262    /// # Forms
39263    /// Assembly: `vadd.vv vm, vs2, vs1, vd`
39264    /// Rust: `vadd_vv(vd, vs1, vs2, vm)`
39265    ///
39266    /// # Arguments
39267    /// - `vd` — Vector register operand.
39268    /// - `vs1` — Vector register operand.
39269    /// - `vs2` — Vector register operand.
39270    /// - `vm` — Vector mask control.
39271    pub fn vadd_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
39272    where
39273        Self: VaddVvEmitter<T0, T1, T2, T3>,
39274    {
39275        <Self as VaddVvEmitter<T0, T1, T2, T3>>::vadd_vv(self, vd, vs1, vs2, vm);
39276    }
39277    /// RISC-V `vadd.vx` instruction.
39278    ///
39279    /// # Forms
39280    /// Assembly: `vadd.vx vm, vs2, xs1, vd`
39281    /// Rust: `vadd_vx(vd, vs2, rs1, vm)`
39282    ///
39283    /// # Arguments
39284    /// - `vd` — Vector register operand.
39285    /// - `vs2` — Vector register operand.
39286    /// - `rs1` — Source register.
39287    /// - `vm` — Vector mask control.
39288    pub fn vadd_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
39289    where
39290        Self: VaddVxEmitter<T0, T1, T2, T3>,
39291    {
39292        <Self as VaddVxEmitter<T0, T1, T2, T3>>::vadd_vx(self, vd, vs2, rs1, vm);
39293    }
39294    /// RISC-V `vaesdf.vs` instruction.
39295    ///
39296    /// # Forms
39297    /// Assembly: `vaesdf.vs vs2, vd`
39298    /// Rust: `vaesdf_vs(vd, vs2)`
39299    ///
39300    /// # Arguments
39301    /// - `vd` — Vector register operand.
39302    /// - `vs2` — Vector register operand.
39303    pub fn vaesdf_vs<T0, T1>(&mut self, vd: T0, vs2: T1)
39304    where
39305        Self: VaesdfVsEmitter<T0, T1>,
39306    {
39307        <Self as VaesdfVsEmitter<T0, T1>>::vaesdf_vs(self, vd, vs2);
39308    }
39309    /// RISC-V `vaesdf.vv` instruction.
39310    ///
39311    /// # Forms
39312    /// Assembly: `vaesdf.vv vs2, vd`
39313    /// Rust: `vaesdf_vv(vd, vs2)`
39314    ///
39315    /// # Arguments
39316    /// - `vd` — Vector register operand.
39317    /// - `vs2` — Vector register operand.
39318    pub fn vaesdf_vv<T0, T1>(&mut self, vd: T0, vs2: T1)
39319    where
39320        Self: VaesdfVvEmitter<T0, T1>,
39321    {
39322        <Self as VaesdfVvEmitter<T0, T1>>::vaesdf_vv(self, vd, vs2);
39323    }
39324    /// RISC-V `vaesdm.vs` instruction.
39325    ///
39326    /// # Forms
39327    /// Assembly: `vaesdm.vs vs2, vd`
39328    /// Rust: `vaesdm_vs(vd, vs2)`
39329    ///
39330    /// # Arguments
39331    /// - `vd` — Vector register operand.
39332    /// - `vs2` — Vector register operand.
39333    pub fn vaesdm_vs<T0, T1>(&mut self, vd: T0, vs2: T1)
39334    where
39335        Self: VaesdmVsEmitter<T0, T1>,
39336    {
39337        <Self as VaesdmVsEmitter<T0, T1>>::vaesdm_vs(self, vd, vs2);
39338    }
39339    /// RISC-V `vaesdm.vv` instruction.
39340    ///
39341    /// # Forms
39342    /// Assembly: `vaesdm.vv vs2, vd`
39343    /// Rust: `vaesdm_vv(vd, vs2)`
39344    ///
39345    /// # Arguments
39346    /// - `vd` — Vector register operand.
39347    /// - `vs2` — Vector register operand.
39348    pub fn vaesdm_vv<T0, T1>(&mut self, vd: T0, vs2: T1)
39349    where
39350        Self: VaesdmVvEmitter<T0, T1>,
39351    {
39352        <Self as VaesdmVvEmitter<T0, T1>>::vaesdm_vv(self, vd, vs2);
39353    }
39354    /// RISC-V `vaesef.vs` instruction.
39355    ///
39356    /// # Forms
39357    /// Assembly: `vaesef.vs vs2, vd`
39358    /// Rust: `vaesef_vs(vd, vs2)`
39359    ///
39360    /// # Arguments
39361    /// - `vd` — Vector register operand.
39362    /// - `vs2` — Vector register operand.
39363    pub fn vaesef_vs<T0, T1>(&mut self, vd: T0, vs2: T1)
39364    where
39365        Self: VaesefVsEmitter<T0, T1>,
39366    {
39367        <Self as VaesefVsEmitter<T0, T1>>::vaesef_vs(self, vd, vs2);
39368    }
39369    /// RISC-V `vaesef.vv` instruction.
39370    ///
39371    /// # Forms
39372    /// Assembly: `vaesef.vv vs2, vd`
39373    /// Rust: `vaesef_vv(vd, vs2)`
39374    ///
39375    /// # Arguments
39376    /// - `vd` — Vector register operand.
39377    /// - `vs2` — Vector register operand.
39378    pub fn vaesef_vv<T0, T1>(&mut self, vd: T0, vs2: T1)
39379    where
39380        Self: VaesefVvEmitter<T0, T1>,
39381    {
39382        <Self as VaesefVvEmitter<T0, T1>>::vaesef_vv(self, vd, vs2);
39383    }
39384    /// RISC-V `vaesem.vs` instruction.
39385    ///
39386    /// # Forms
39387    /// Assembly: `vaesem.vs vs2, vd`
39388    /// Rust: `vaesem_vs(vd, vs2)`
39389    ///
39390    /// # Arguments
39391    /// - `vd` — Vector register operand.
39392    /// - `vs2` — Vector register operand.
39393    pub fn vaesem_vs<T0, T1>(&mut self, vd: T0, vs2: T1)
39394    where
39395        Self: VaesemVsEmitter<T0, T1>,
39396    {
39397        <Self as VaesemVsEmitter<T0, T1>>::vaesem_vs(self, vd, vs2);
39398    }
39399    /// RISC-V `vaesem.vv` instruction.
39400    ///
39401    /// # Forms
39402    /// Assembly: `vaesem.vv vs2, vd`
39403    /// Rust: `vaesem_vv(vd, vs2)`
39404    ///
39405    /// # Arguments
39406    /// - `vd` — Vector register operand.
39407    /// - `vs2` — Vector register operand.
39408    pub fn vaesem_vv<T0, T1>(&mut self, vd: T0, vs2: T1)
39409    where
39410        Self: VaesemVvEmitter<T0, T1>,
39411    {
39412        <Self as VaesemVvEmitter<T0, T1>>::vaesem_vv(self, vd, vs2);
39413    }
39414    /// RISC-V `vaeskf1.vi` instruction.
39415    ///
39416    /// # Forms
39417    /// Assembly: `vaeskf1.vi vs2, vd, imm`
39418    /// Rust: `vaeskf1_vi(vd, vs2, zimm5)`
39419    ///
39420    /// # Arguments
39421    /// - `vd` — Vector register operand.
39422    /// - `vs2` — Vector register operand.
39423    /// - `zimm5` — Immediate encoding value.
39424    pub fn vaeskf1_vi<T0, T1, T2>(&mut self, vd: T0, vs2: T1, zimm5: T2)
39425    where
39426        Self: Vaeskf1ViEmitter<T0, T1, T2>,
39427    {
39428        <Self as Vaeskf1ViEmitter<T0, T1, T2>>::vaeskf1_vi(self, vd, vs2, zimm5);
39429    }
39430    /// RISC-V `vaeskf2.vi` instruction.
39431    ///
39432    /// # Forms
39433    /// Assembly: `vaeskf2.vi vs2, vd, imm`
39434    /// Rust: `vaeskf2_vi(vd, vs2, zimm5)`
39435    ///
39436    /// # Arguments
39437    /// - `vd` — Vector register operand.
39438    /// - `vs2` — Vector register operand.
39439    /// - `zimm5` — Immediate encoding value.
39440    pub fn vaeskf2_vi<T0, T1, T2>(&mut self, vd: T0, vs2: T1, zimm5: T2)
39441    where
39442        Self: Vaeskf2ViEmitter<T0, T1, T2>,
39443    {
39444        <Self as Vaeskf2ViEmitter<T0, T1, T2>>::vaeskf2_vi(self, vd, vs2, zimm5);
39445    }
39446    /// Vector AES round zero
39447    ///
39448    /// # Forms
39449    /// Assembly: `vaesz.vs vs2, vd`
39450    /// Rust: `vaesz_vs(vd, vs2)`
39451    ///
39452    /// # Arguments
39453    /// - `vd` — Vector register operand.
39454    /// - `vs2` — Vector register operand.
39455    pub fn vaesz_vs<T0, T1>(&mut self, vd: T0, vs2: T1)
39456    where
39457        Self: VaeszVsEmitter<T0, T1>,
39458    {
39459        <Self as VaeszVsEmitter<T0, T1>>::vaesz_vs(self, vd, vs2);
39460    }
39461    /// RISC-V `vand.vi` instruction.
39462    ///
39463    /// # Forms
39464    /// Assembly: `vand.vi vm, vs2, vd, imm`
39465    /// Rust: `vand_vi(vd, vs2, simm5, vm)`
39466    ///
39467    /// # Arguments
39468    /// - `vd` — Vector register operand.
39469    /// - `vs2` — Vector register operand.
39470    /// - `simm5` — Immediate encoding value.
39471    /// - `vm` — Vector mask control.
39472    pub fn vand_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)
39473    where
39474        Self: VandViEmitter<T0, T1, T2, T3>,
39475    {
39476        <Self as VandViEmitter<T0, T1, T2, T3>>::vand_vi(self, vd, vs2, simm5, vm);
39477    }
39478    /// RISC-V `vand.vv` instruction.
39479    ///
39480    /// # Forms
39481    /// Assembly: `vand.vv vm, vs2, vs1, vd`
39482    /// Rust: `vand_vv(vd, vs1, vs2, vm)`
39483    ///
39484    /// # Arguments
39485    /// - `vd` — Vector register operand.
39486    /// - `vs1` — Vector register operand.
39487    /// - `vs2` — Vector register operand.
39488    /// - `vm` — Vector mask control.
39489    pub fn vand_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
39490    where
39491        Self: VandVvEmitter<T0, T1, T2, T3>,
39492    {
39493        <Self as VandVvEmitter<T0, T1, T2, T3>>::vand_vv(self, vd, vs1, vs2, vm);
39494    }
39495    /// RISC-V `vand.vx` instruction.
39496    ///
39497    /// # Forms
39498    /// Assembly: `vand.vx vm, vs2, xs1, vd`
39499    /// Rust: `vand_vx(vd, vs2, rs1, vm)`
39500    ///
39501    /// # Arguments
39502    /// - `vd` — Vector register operand.
39503    /// - `vs2` — Vector register operand.
39504    /// - `rs1` — Source register.
39505    /// - `vm` — Vector mask control.
39506    pub fn vand_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
39507    where
39508        Self: VandVxEmitter<T0, T1, T2, T3>,
39509    {
39510        <Self as VandVxEmitter<T0, T1, T2, T3>>::vand_vx(self, vd, vs2, rs1, vm);
39511    }
39512    /// RISC-V `vandn.vv` instruction.
39513    ///
39514    /// # Forms
39515    /// Assembly: `vandn.vv vm, vs2, vs1, vd`
39516    /// Rust: `vandn_vv(vd, vs1, vs2, vm)`
39517    ///
39518    /// # Arguments
39519    /// - `vd` — Vector register operand.
39520    /// - `vs1` — Vector register operand.
39521    /// - `vs2` — Vector register operand.
39522    /// - `vm` — Vector mask control.
39523    pub fn vandn_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
39524    where
39525        Self: VandnVvEmitter<T0, T1, T2, T3>,
39526    {
39527        <Self as VandnVvEmitter<T0, T1, T2, T3>>::vandn_vv(self, vd, vs1, vs2, vm);
39528    }
39529    /// RISC-V `vandn.vx` instruction.
39530    ///
39531    /// # Forms
39532    /// Assembly: `vandn.vx vm, vs2, xs1, vd`
39533    /// Rust: `vandn_vx(vd, vs2, rs1, vm)`
39534    ///
39535    /// # Arguments
39536    /// - `vd` — Vector register operand.
39537    /// - `vs2` — Vector register operand.
39538    /// - `rs1` — Source register.
39539    /// - `vm` — Vector mask control.
39540    pub fn vandn_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
39541    where
39542        Self: VandnVxEmitter<T0, T1, T2, T3>,
39543    {
39544        <Self as VandnVxEmitter<T0, T1, T2, T3>>::vandn_vx(self, vd, vs2, rs1, vm);
39545    }
39546    /// RISC-V `vasub.vv` instruction.
39547    ///
39548    /// # Forms
39549    /// Assembly: `vasub.vv vm, vs2, vs1, vd`
39550    /// Rust: `vasub_vv(vd, vs1, vs2, vm)`
39551    ///
39552    /// # Arguments
39553    /// - `vd` — Vector register operand.
39554    /// - `vs1` — Vector register operand.
39555    /// - `vs2` — Vector register operand.
39556    /// - `vm` — Vector mask control.
39557    pub fn vasub_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
39558    where
39559        Self: VasubVvEmitter<T0, T1, T2, T3>,
39560    {
39561        <Self as VasubVvEmitter<T0, T1, T2, T3>>::vasub_vv(self, vd, vs1, vs2, vm);
39562    }
39563    /// RISC-V `vasub.vx` instruction.
39564    ///
39565    /// # Forms
39566    /// Assembly: `vasub.vx vm, vs2, xs1, vd`
39567    /// Rust: `vasub_vx(vd, vs2, rs1, vm)`
39568    ///
39569    /// # Arguments
39570    /// - `vd` — Vector register operand.
39571    /// - `vs2` — Vector register operand.
39572    /// - `rs1` — Source register.
39573    /// - `vm` — Vector mask control.
39574    pub fn vasub_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
39575    where
39576        Self: VasubVxEmitter<T0, T1, T2, T3>,
39577    {
39578        <Self as VasubVxEmitter<T0, T1, T2, T3>>::vasub_vx(self, vd, vs2, rs1, vm);
39579    }
39580    /// RISC-V `vasubu.vv` instruction.
39581    ///
39582    /// # Forms
39583    /// Assembly: `vasubu.vv vm, vs2, vs1, vd`
39584    /// Rust: `vasubu_vv(vd, vs1, vs2, vm)`
39585    ///
39586    /// # Arguments
39587    /// - `vd` — Vector register operand.
39588    /// - `vs1` — Vector register operand.
39589    /// - `vs2` — Vector register operand.
39590    /// - `vm` — Vector mask control.
39591    pub fn vasubu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
39592    where
39593        Self: VasubuVvEmitter<T0, T1, T2, T3>,
39594    {
39595        <Self as VasubuVvEmitter<T0, T1, T2, T3>>::vasubu_vv(self, vd, vs1, vs2, vm);
39596    }
39597    /// RISC-V `vasubu.vx` instruction.
39598    ///
39599    /// # Forms
39600    /// Assembly: `vasubu.vx vm, vs2, xs1, vd`
39601    /// Rust: `vasubu_vx(vd, vs2, rs1, vm)`
39602    ///
39603    /// # Arguments
39604    /// - `vd` — Vector register operand.
39605    /// - `vs2` — Vector register operand.
39606    /// - `rs1` — Source register.
39607    /// - `vm` — Vector mask control.
39608    pub fn vasubu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
39609    where
39610        Self: VasubuVxEmitter<T0, T1, T2, T3>,
39611    {
39612        <Self as VasubuVxEmitter<T0, T1, T2, T3>>::vasubu_vx(self, vd, vs2, rs1, vm);
39613    }
39614    /// RISC-V `vbrev8.v` instruction.
39615    ///
39616    /// # Forms
39617    /// Assembly: `vbrev8.v vm, vs2, vd`
39618    /// Rust: `vbrev8_v(vd, vs2, vm)`
39619    ///
39620    /// # Arguments
39621    /// - `vd` — Vector register operand.
39622    /// - `vs2` — Vector register operand.
39623    /// - `vm` — Vector mask control.
39624    pub fn vbrev8_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
39625    where
39626        Self: Vbrev8VEmitter<T0, T1, T2>,
39627    {
39628        <Self as Vbrev8VEmitter<T0, T1, T2>>::vbrev8_v(self, vd, vs2, vm);
39629    }
39630    /// RISC-V `vbrev.v` instruction.
39631    ///
39632    /// # Forms
39633    /// Assembly: `vbrev.v vm, vs2, vd`
39634    /// Rust: `vbrev_v(vd, vs2, vm)`
39635    ///
39636    /// # Arguments
39637    /// - `vd` — Vector register operand.
39638    /// - `vs2` — Vector register operand.
39639    /// - `vm` — Vector mask control.
39640    pub fn vbrev_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
39641    where
39642        Self: VbrevVEmitter<T0, T1, T2>,
39643    {
39644        <Self as VbrevVEmitter<T0, T1, T2>>::vbrev_v(self, vd, vs2, vm);
39645    }
39646    /// RISC-V `vclmul.vv` instruction.
39647    ///
39648    /// # Forms
39649    /// Assembly: `vclmul.vv vm, vs2, vs1, vd`
39650    /// Rust: `vclmul_vv(vd, vs1, vs2, vm)`
39651    ///
39652    /// # Arguments
39653    /// - `vd` — Vector register operand.
39654    /// - `vs1` — Vector register operand.
39655    /// - `vs2` — Vector register operand.
39656    /// - `vm` — Vector mask control.
39657    pub fn vclmul_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
39658    where
39659        Self: VclmulVvEmitter<T0, T1, T2, T3>,
39660    {
39661        <Self as VclmulVvEmitter<T0, T1, T2, T3>>::vclmul_vv(self, vd, vs1, vs2, vm);
39662    }
39663    /// RISC-V `vclmul.vx` instruction.
39664    ///
39665    /// # Forms
39666    /// Assembly: `vclmul.vx vm, vs2, xs1, vd`
39667    /// Rust: `vclmul_vx(vd, vs2, rs1, vm)`
39668    ///
39669    /// # Arguments
39670    /// - `vd` — Vector register operand.
39671    /// - `vs2` — Vector register operand.
39672    /// - `rs1` — Source register.
39673    /// - `vm` — Vector mask control.
39674    pub fn vclmul_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
39675    where
39676        Self: VclmulVxEmitter<T0, T1, T2, T3>,
39677    {
39678        <Self as VclmulVxEmitter<T0, T1, T2, T3>>::vclmul_vx(self, vd, vs2, rs1, vm);
39679    }
39680    /// RISC-V `vclmulh.vv` instruction.
39681    ///
39682    /// # Forms
39683    /// Assembly: `vclmulh.vv vm, vs2, vs1, vd`
39684    /// Rust: `vclmulh_vv(vd, vs1, vs2, vm)`
39685    ///
39686    /// # Arguments
39687    /// - `vd` — Vector register operand.
39688    /// - `vs1` — Vector register operand.
39689    /// - `vs2` — Vector register operand.
39690    /// - `vm` — Vector mask control.
39691    pub fn vclmulh_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
39692    where
39693        Self: VclmulhVvEmitter<T0, T1, T2, T3>,
39694    {
39695        <Self as VclmulhVvEmitter<T0, T1, T2, T3>>::vclmulh_vv(self, vd, vs1, vs2, vm);
39696    }
39697    /// RISC-V `vclmulh.vx` instruction.
39698    ///
39699    /// # Forms
39700    /// Assembly: `vclmulh.vx vm, vs2, xs1, vd`
39701    /// Rust: `vclmulh_vx(vd, vs2, rs1, vm)`
39702    ///
39703    /// # Arguments
39704    /// - `vd` — Vector register operand.
39705    /// - `vs2` — Vector register operand.
39706    /// - `rs1` — Source register.
39707    /// - `vm` — Vector mask control.
39708    pub fn vclmulh_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
39709    where
39710        Self: VclmulhVxEmitter<T0, T1, T2, T3>,
39711    {
39712        <Self as VclmulhVxEmitter<T0, T1, T2, T3>>::vclmulh_vx(self, vd, vs2, rs1, vm);
39713    }
39714    /// RISC-V `vclz.v` instruction.
39715    ///
39716    /// # Forms
39717    /// Assembly: `vclz.v vm, vs2, vd`
39718    /// Rust: `vclz_v(vd, vs2, vm)`
39719    ///
39720    /// # Arguments
39721    /// - `vd` — Vector register operand.
39722    /// - `vs2` — Vector register operand.
39723    /// - `vm` — Vector mask control.
39724    pub fn vclz_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
39725    where
39726        Self: VclzVEmitter<T0, T1, T2>,
39727    {
39728        <Self as VclzVEmitter<T0, T1, T2>>::vclz_v(self, vd, vs2, vm);
39729    }
39730    /// RISC-V `vcompress.vm` instruction.
39731    ///
39732    /// # Forms
39733    /// Assembly: `vcompress.vm vs2, vs1, vd`
39734    /// Rust: `vcompress_vm(vd, vs1, vs2)`
39735    ///
39736    /// # Arguments
39737    /// - `vd` — Vector register operand.
39738    /// - `vs1` — Vector register operand.
39739    /// - `vs2` — Vector register operand.
39740    pub fn vcompress_vm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)
39741    where
39742        Self: VcompressVmEmitter<T0, T1, T2>,
39743    {
39744        <Self as VcompressVmEmitter<T0, T1, T2>>::vcompress_vm(self, vd, vs1, vs2);
39745    }
39746    /// RISC-V `vcpop.m` instruction.
39747    ///
39748    /// # Forms
39749    /// Assembly: `vcpop.m vm, vs2, xd`
39750    /// Rust: `vcpop_m(rd, vs2, vm)`
39751    ///
39752    /// # Arguments
39753    /// - `rd` — Destination register.
39754    /// - `vs2` — Vector register operand.
39755    /// - `vm` — Vector mask control.
39756    pub fn vcpop_m<T0, T1, T2>(&mut self, rd: T0, vs2: T1, vm: T2)
39757    where
39758        Self: VcpopMEmitter<T0, T1, T2>,
39759    {
39760        <Self as VcpopMEmitter<T0, T1, T2>>::vcpop_m(self, rd, vs2, vm);
39761    }
39762    /// RISC-V `vcpop.v` instruction.
39763    ///
39764    /// # Forms
39765    /// Assembly: `vcpop.v vm, vs2, vd`
39766    /// Rust: `vcpop_v(vd, vs2, vm)`
39767    ///
39768    /// # Arguments
39769    /// - `vd` — Vector register operand.
39770    /// - `vs2` — Vector register operand.
39771    /// - `vm` — Vector mask control.
39772    pub fn vcpop_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
39773    where
39774        Self: VcpopVEmitter<T0, T1, T2>,
39775    {
39776        <Self as VcpopVEmitter<T0, T1, T2>>::vcpop_v(self, vd, vs2, vm);
39777    }
39778    /// RISC-V `vctz.v` instruction.
39779    ///
39780    /// # Forms
39781    /// Assembly: `vctz.v vm, vs2, vd`
39782    /// Rust: `vctz_v(vd, vs2, vm)`
39783    ///
39784    /// # Arguments
39785    /// - `vd` — Vector register operand.
39786    /// - `vs2` — Vector register operand.
39787    /// - `vm` — Vector mask control.
39788    pub fn vctz_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
39789    where
39790        Self: VctzVEmitter<T0, T1, T2>,
39791    {
39792        <Self as VctzVEmitter<T0, T1, T2>>::vctz_v(self, vd, vs2, vm);
39793    }
39794    /// RISC-V `vdiv.vv` instruction.
39795    ///
39796    /// # Forms
39797    /// Assembly: `vdiv.vv vm, vs2, vs1, vd`
39798    /// Rust: `vdiv_vv(vd, vs1, vs2, vm)`
39799    ///
39800    /// # Arguments
39801    /// - `vd` — Vector register operand.
39802    /// - `vs1` — Vector register operand.
39803    /// - `vs2` — Vector register operand.
39804    /// - `vm` — Vector mask control.
39805    pub fn vdiv_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
39806    where
39807        Self: VdivVvEmitter<T0, T1, T2, T3>,
39808    {
39809        <Self as VdivVvEmitter<T0, T1, T2, T3>>::vdiv_vv(self, vd, vs1, vs2, vm);
39810    }
39811    /// RISC-V `vdiv.vx` instruction.
39812    ///
39813    /// # Forms
39814    /// Assembly: `vdiv.vx vm, vs2, xs1, vd`
39815    /// Rust: `vdiv_vx(vd, vs2, rs1, vm)`
39816    ///
39817    /// # Arguments
39818    /// - `vd` — Vector register operand.
39819    /// - `vs2` — Vector register operand.
39820    /// - `rs1` — Source register.
39821    /// - `vm` — Vector mask control.
39822    pub fn vdiv_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
39823    where
39824        Self: VdivVxEmitter<T0, T1, T2, T3>,
39825    {
39826        <Self as VdivVxEmitter<T0, T1, T2, T3>>::vdiv_vx(self, vd, vs2, rs1, vm);
39827    }
39828    /// RISC-V `vdivu.vv` instruction.
39829    ///
39830    /// # Forms
39831    /// Assembly: `vdivu.vv vm, vs2, vs1, vd`
39832    /// Rust: `vdivu_vv(vd, vs1, vs2, vm)`
39833    ///
39834    /// # Arguments
39835    /// - `vd` — Vector register operand.
39836    /// - `vs1` — Vector register operand.
39837    /// - `vs2` — Vector register operand.
39838    /// - `vm` — Vector mask control.
39839    pub fn vdivu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
39840    where
39841        Self: VdivuVvEmitter<T0, T1, T2, T3>,
39842    {
39843        <Self as VdivuVvEmitter<T0, T1, T2, T3>>::vdivu_vv(self, vd, vs1, vs2, vm);
39844    }
39845    /// RISC-V `vdivu.vx` instruction.
39846    ///
39847    /// # Forms
39848    /// Assembly: `vdivu.vx vm, vs2, xs1, vd`
39849    /// Rust: `vdivu_vx(vd, vs2, rs1, vm)`
39850    ///
39851    /// # Arguments
39852    /// - `vd` — Vector register operand.
39853    /// - `vs2` — Vector register operand.
39854    /// - `rs1` — Source register.
39855    /// - `vm` — Vector mask control.
39856    pub fn vdivu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
39857    where
39858        Self: VdivuVxEmitter<T0, T1, T2, T3>,
39859    {
39860        <Self as VdivuVxEmitter<T0, T1, T2, T3>>::vdivu_vx(self, vd, vs2, rs1, vm);
39861    }
39862    /// RISC-V `vfadd.vf` instruction.
39863    ///
39864    /// # Forms
39865    /// Assembly: `vfadd.vf vm, vs2, xs1, vd`
39866    /// Rust: `vfadd_vf(vd, vs2, rs1, vm)`
39867    ///
39868    /// # Arguments
39869    /// - `vd` — Vector register operand.
39870    /// - `vs2` — Vector register operand.
39871    /// - `rs1` — Source register.
39872    /// - `vm` — Vector mask control.
39873    pub fn vfadd_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
39874    where
39875        Self: VfaddVfEmitter<T0, T1, T2, T3>,
39876    {
39877        <Self as VfaddVfEmitter<T0, T1, T2, T3>>::vfadd_vf(self, vd, vs2, rs1, vm);
39878    }
39879    /// RISC-V `vfadd.vv` instruction.
39880    ///
39881    /// # Forms
39882    /// Assembly: `vfadd.vv vm, vs2, vs1, vd`
39883    /// Rust: `vfadd_vv(vd, vs1, vs2, vm)`
39884    ///
39885    /// # Arguments
39886    /// - `vd` — Vector register operand.
39887    /// - `vs1` — Vector register operand.
39888    /// - `vs2` — Vector register operand.
39889    /// - `vm` — Vector mask control.
39890    pub fn vfadd_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
39891    where
39892        Self: VfaddVvEmitter<T0, T1, T2, T3>,
39893    {
39894        <Self as VfaddVvEmitter<T0, T1, T2, T3>>::vfadd_vv(self, vd, vs1, vs2, vm);
39895    }
39896    /// RISC-V `vfclass.v` instruction.
39897    ///
39898    /// # Forms
39899    /// Assembly: `vfclass.v vm, vs2, vd`
39900    /// Rust: `vfclass_v(vd, vs2, vm)`
39901    ///
39902    /// # Arguments
39903    /// - `vd` — Vector register operand.
39904    /// - `vs2` — Vector register operand.
39905    /// - `vm` — Vector mask control.
39906    pub fn vfclass_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
39907    where
39908        Self: VfclassVEmitter<T0, T1, T2>,
39909    {
39910        <Self as VfclassVEmitter<T0, T1, T2>>::vfclass_v(self, vd, vs2, vm);
39911    }
39912    /// RISC-V `vfcvt.f.x.v` instruction.
39913    ///
39914    /// # Forms
39915    /// Assembly: `vfcvt.f.x.v vm, vs2, vd`
39916    /// Rust: `vfcvt_f_x_v(vd, vs2, vm)`
39917    ///
39918    /// # Arguments
39919    /// - `vd` — Vector register operand.
39920    /// - `vs2` — Vector register operand.
39921    /// - `vm` — Vector mask control.
39922    pub fn vfcvt_f_x_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
39923    where
39924        Self: VfcvtFXVEmitter<T0, T1, T2>,
39925    {
39926        <Self as VfcvtFXVEmitter<T0, T1, T2>>::vfcvt_f_x_v(self, vd, vs2, vm);
39927    }
39928    /// RISC-V `vfcvt.f.xu.v` instruction.
39929    ///
39930    /// # Forms
39931    /// Assembly: `vfcvt.f.xu.v vm, vs2, vd`
39932    /// Rust: `vfcvt_f_xu_v(vd, vs2, vm)`
39933    ///
39934    /// # Arguments
39935    /// - `vd` — Vector register operand.
39936    /// - `vs2` — Vector register operand.
39937    /// - `vm` — Vector mask control.
39938    pub fn vfcvt_f_xu_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
39939    where
39940        Self: VfcvtFXuVEmitter<T0, T1, T2>,
39941    {
39942        <Self as VfcvtFXuVEmitter<T0, T1, T2>>::vfcvt_f_xu_v(self, vd, vs2, vm);
39943    }
39944    /// RISC-V `vfcvt.rtz.x.f.v` instruction.
39945    ///
39946    /// # Forms
39947    /// Assembly: `vfcvt.rtz.x.f.v vm, vs2, vd`
39948    /// Rust: `vfcvt_rtz_x_f_v(vd, vs2, vm)`
39949    ///
39950    /// # Arguments
39951    /// - `vd` — Vector register operand.
39952    /// - `vs2` — Vector register operand.
39953    /// - `vm` — Vector mask control.
39954    pub fn vfcvt_rtz_x_f_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
39955    where
39956        Self: VfcvtRtzXFVEmitter<T0, T1, T2>,
39957    {
39958        <Self as VfcvtRtzXFVEmitter<T0, T1, T2>>::vfcvt_rtz_x_f_v(self, vd, vs2, vm);
39959    }
39960    /// RISC-V `vfcvt.rtz.xu.f.v` instruction.
39961    ///
39962    /// # Forms
39963    /// Assembly: `vfcvt.rtz.xu.f.v vm, vs2, vd`
39964    /// Rust: `vfcvt_rtz_xu_f_v(vd, vs2, vm)`
39965    ///
39966    /// # Arguments
39967    /// - `vd` — Vector register operand.
39968    /// - `vs2` — Vector register operand.
39969    /// - `vm` — Vector mask control.
39970    pub fn vfcvt_rtz_xu_f_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
39971    where
39972        Self: VfcvtRtzXuFVEmitter<T0, T1, T2>,
39973    {
39974        <Self as VfcvtRtzXuFVEmitter<T0, T1, T2>>::vfcvt_rtz_xu_f_v(self, vd, vs2, vm);
39975    }
39976    /// RISC-V `vfcvt.x.f.v` instruction.
39977    ///
39978    /// # Forms
39979    /// Assembly: `vfcvt.x.f.v vm, vs2, vd`
39980    /// Rust: `vfcvt_x_f_v(vd, vs2, vm)`
39981    ///
39982    /// # Arguments
39983    /// - `vd` — Vector register operand.
39984    /// - `vs2` — Vector register operand.
39985    /// - `vm` — Vector mask control.
39986    pub fn vfcvt_x_f_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
39987    where
39988        Self: VfcvtXFVEmitter<T0, T1, T2>,
39989    {
39990        <Self as VfcvtXFVEmitter<T0, T1, T2>>::vfcvt_x_f_v(self, vd, vs2, vm);
39991    }
39992    /// RISC-V `vfcvt.xu.f.v` instruction.
39993    ///
39994    /// # Forms
39995    /// Assembly: `vfcvt.xu.f.v vm, vs2, vd`
39996    /// Rust: `vfcvt_xu_f_v(vd, vs2, vm)`
39997    ///
39998    /// # Arguments
39999    /// - `vd` — Vector register operand.
40000    /// - `vs2` — Vector register operand.
40001    /// - `vm` — Vector mask control.
40002    pub fn vfcvt_xu_f_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
40003    where
40004        Self: VfcvtXuFVEmitter<T0, T1, T2>,
40005    {
40006        <Self as VfcvtXuFVEmitter<T0, T1, T2>>::vfcvt_xu_f_v(self, vd, vs2, vm);
40007    }
40008    /// RISC-V `vfdiv.vf` instruction.
40009    ///
40010    /// # Forms
40011    /// Assembly: `vfdiv.vf vm, vs2, xs1, vd`
40012    /// Rust: `vfdiv_vf(vd, vs2, rs1, vm)`
40013    ///
40014    /// # Arguments
40015    /// - `vd` — Vector register operand.
40016    /// - `vs2` — Vector register operand.
40017    /// - `rs1` — Source register.
40018    /// - `vm` — Vector mask control.
40019    pub fn vfdiv_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
40020    where
40021        Self: VfdivVfEmitter<T0, T1, T2, T3>,
40022    {
40023        <Self as VfdivVfEmitter<T0, T1, T2, T3>>::vfdiv_vf(self, vd, vs2, rs1, vm);
40024    }
40025    /// RISC-V `vfdiv.vv` instruction.
40026    ///
40027    /// # Forms
40028    /// Assembly: `vfdiv.vv vm, vs2, vs1, vd`
40029    /// Rust: `vfdiv_vv(vd, vs1, vs2, vm)`
40030    ///
40031    /// # Arguments
40032    /// - `vd` — Vector register operand.
40033    /// - `vs1` — Vector register operand.
40034    /// - `vs2` — Vector register operand.
40035    /// - `vm` — Vector mask control.
40036    pub fn vfdiv_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
40037    where
40038        Self: VfdivVvEmitter<T0, T1, T2, T3>,
40039    {
40040        <Self as VfdivVvEmitter<T0, T1, T2, T3>>::vfdiv_vv(self, vd, vs1, vs2, vm);
40041    }
40042    /// RISC-V `vfirst.m` instruction.
40043    ///
40044    /// # Forms
40045    /// Assembly: `vfirst.m vm, vs2, xd`
40046    /// Rust: `vfirst_m(rd, vs2, vm)`
40047    ///
40048    /// # Arguments
40049    /// - `rd` — Destination register.
40050    /// - `vs2` — Vector register operand.
40051    /// - `vm` — Vector mask control.
40052    pub fn vfirst_m<T0, T1, T2>(&mut self, rd: T0, vs2: T1, vm: T2)
40053    where
40054        Self: VfirstMEmitter<T0, T1, T2>,
40055    {
40056        <Self as VfirstMEmitter<T0, T1, T2>>::vfirst_m(self, rd, vs2, vm);
40057    }
40058    /// RISC-V `vfmacc.vf` instruction.
40059    ///
40060    /// # Forms
40061    /// Assembly: `vfmacc.vf vm, vs2, xs1, vd`
40062    /// Rust: `vfmacc_vf(vd, vs2, rs1, vm)`
40063    ///
40064    /// # Arguments
40065    /// - `vd` — Vector register operand.
40066    /// - `vs2` — Vector register operand.
40067    /// - `rs1` — Source register.
40068    /// - `vm` — Vector mask control.
40069    pub fn vfmacc_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
40070    where
40071        Self: VfmaccVfEmitter<T0, T1, T2, T3>,
40072    {
40073        <Self as VfmaccVfEmitter<T0, T1, T2, T3>>::vfmacc_vf(self, vd, vs2, rs1, vm);
40074    }
40075    /// RISC-V `vfmacc.vv` instruction.
40076    ///
40077    /// # Forms
40078    /// Assembly: `vfmacc.vv vm, vs2, vs1, vd`
40079    /// Rust: `vfmacc_vv(vd, vs1, vs2, vm)`
40080    ///
40081    /// # Arguments
40082    /// - `vd` — Vector register operand.
40083    /// - `vs1` — Vector register operand.
40084    /// - `vs2` — Vector register operand.
40085    /// - `vm` — Vector mask control.
40086    pub fn vfmacc_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
40087    where
40088        Self: VfmaccVvEmitter<T0, T1, T2, T3>,
40089    {
40090        <Self as VfmaccVvEmitter<T0, T1, T2, T3>>::vfmacc_vv(self, vd, vs1, vs2, vm);
40091    }
40092    /// RISC-V `vfmadd.vf` instruction.
40093    ///
40094    /// # Forms
40095    /// Assembly: `vfmadd.vf vm, vs2, xs1, vd`
40096    /// Rust: `vfmadd_vf(vd, vs2, rs1, vm)`
40097    ///
40098    /// # Arguments
40099    /// - `vd` — Vector register operand.
40100    /// - `vs2` — Vector register operand.
40101    /// - `rs1` — Source register.
40102    /// - `vm` — Vector mask control.
40103    pub fn vfmadd_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
40104    where
40105        Self: VfmaddVfEmitter<T0, T1, T2, T3>,
40106    {
40107        <Self as VfmaddVfEmitter<T0, T1, T2, T3>>::vfmadd_vf(self, vd, vs2, rs1, vm);
40108    }
40109    /// RISC-V `vfmadd.vv` instruction.
40110    ///
40111    /// # Forms
40112    /// Assembly: `vfmadd.vv vm, vs2, vs1, vd`
40113    /// Rust: `vfmadd_vv(vd, vs1, vs2, vm)`
40114    ///
40115    /// # Arguments
40116    /// - `vd` — Vector register operand.
40117    /// - `vs1` — Vector register operand.
40118    /// - `vs2` — Vector register operand.
40119    /// - `vm` — Vector mask control.
40120    pub fn vfmadd_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
40121    where
40122        Self: VfmaddVvEmitter<T0, T1, T2, T3>,
40123    {
40124        <Self as VfmaddVvEmitter<T0, T1, T2, T3>>::vfmadd_vv(self, vd, vs1, vs2, vm);
40125    }
40126    /// RISC-V `vfmax.vf` instruction.
40127    ///
40128    /// # Forms
40129    /// Assembly: `vfmax.vf vm, vs2, xs1, vd`
40130    /// Rust: `vfmax_vf(vd, vs2, rs1, vm)`
40131    ///
40132    /// # Arguments
40133    /// - `vd` — Vector register operand.
40134    /// - `vs2` — Vector register operand.
40135    /// - `rs1` — Source register.
40136    /// - `vm` — Vector mask control.
40137    pub fn vfmax_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
40138    where
40139        Self: VfmaxVfEmitter<T0, T1, T2, T3>,
40140    {
40141        <Self as VfmaxVfEmitter<T0, T1, T2, T3>>::vfmax_vf(self, vd, vs2, rs1, vm);
40142    }
40143    /// RISC-V `vfmax.vv` instruction.
40144    ///
40145    /// # Forms
40146    /// Assembly: `vfmax.vv vm, vs2, vs1, vd`
40147    /// Rust: `vfmax_vv(vd, vs1, vs2, vm)`
40148    ///
40149    /// # Arguments
40150    /// - `vd` — Vector register operand.
40151    /// - `vs1` — Vector register operand.
40152    /// - `vs2` — Vector register operand.
40153    /// - `vm` — Vector mask control.
40154    pub fn vfmax_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
40155    where
40156        Self: VfmaxVvEmitter<T0, T1, T2, T3>,
40157    {
40158        <Self as VfmaxVvEmitter<T0, T1, T2, T3>>::vfmax_vv(self, vd, vs1, vs2, vm);
40159    }
40160    /// RISC-V `vfmerge.vfm` instruction.
40161    ///
40162    /// # Forms
40163    /// Assembly: `vfmerge.vfm vs2, xs1, vd`
40164    /// Rust: `vfmerge_vfm(vd, rs1, vs2)`
40165    ///
40166    /// # Arguments
40167    /// - `vd` — Vector register operand.
40168    /// - `rs1` — Source register.
40169    /// - `vs2` — Vector register operand.
40170    pub fn vfmerge_vfm<T0, T1, T2>(&mut self, vd: T0, rs1: T1, vs2: T2)
40171    where
40172        Self: VfmergeVfmEmitter<T0, T1, T2>,
40173    {
40174        <Self as VfmergeVfmEmitter<T0, T1, T2>>::vfmerge_vfm(self, vd, rs1, vs2);
40175    }
40176    /// RISC-V `vfmin.vf` instruction.
40177    ///
40178    /// # Forms
40179    /// Assembly: `vfmin.vf vm, vs2, xs1, vd`
40180    /// Rust: `vfmin_vf(vd, vs2, rs1, vm)`
40181    ///
40182    /// # Arguments
40183    /// - `vd` — Vector register operand.
40184    /// - `vs2` — Vector register operand.
40185    /// - `rs1` — Source register.
40186    /// - `vm` — Vector mask control.
40187    pub fn vfmin_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
40188    where
40189        Self: VfminVfEmitter<T0, T1, T2, T3>,
40190    {
40191        <Self as VfminVfEmitter<T0, T1, T2, T3>>::vfmin_vf(self, vd, vs2, rs1, vm);
40192    }
40193    /// RISC-V `vfmin.vv` instruction.
40194    ///
40195    /// # Forms
40196    /// Assembly: `vfmin.vv vm, vs2, vs1, vd`
40197    /// Rust: `vfmin_vv(vd, vs1, vs2, vm)`
40198    ///
40199    /// # Arguments
40200    /// - `vd` — Vector register operand.
40201    /// - `vs1` — Vector register operand.
40202    /// - `vs2` — Vector register operand.
40203    /// - `vm` — Vector mask control.
40204    pub fn vfmin_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
40205    where
40206        Self: VfminVvEmitter<T0, T1, T2, T3>,
40207    {
40208        <Self as VfminVvEmitter<T0, T1, T2, T3>>::vfmin_vv(self, vd, vs1, vs2, vm);
40209    }
40210    /// RISC-V `vfmsac.vf` instruction.
40211    ///
40212    /// # Forms
40213    /// Assembly: `vfmsac.vf vm, vs2, xs1, vd`
40214    /// Rust: `vfmsac_vf(vd, vs2, rs1, vm)`
40215    ///
40216    /// # Arguments
40217    /// - `vd` — Vector register operand.
40218    /// - `vs2` — Vector register operand.
40219    /// - `rs1` — Source register.
40220    /// - `vm` — Vector mask control.
40221    pub fn vfmsac_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
40222    where
40223        Self: VfmsacVfEmitter<T0, T1, T2, T3>,
40224    {
40225        <Self as VfmsacVfEmitter<T0, T1, T2, T3>>::vfmsac_vf(self, vd, vs2, rs1, vm);
40226    }
40227    /// RISC-V `vfmsac.vv` instruction.
40228    ///
40229    /// # Forms
40230    /// Assembly: `vfmsac.vv vm, vs2, vs1, vd`
40231    /// Rust: `vfmsac_vv(vd, vs1, vs2, vm)`
40232    ///
40233    /// # Arguments
40234    /// - `vd` — Vector register operand.
40235    /// - `vs1` — Vector register operand.
40236    /// - `vs2` — Vector register operand.
40237    /// - `vm` — Vector mask control.
40238    pub fn vfmsac_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
40239    where
40240        Self: VfmsacVvEmitter<T0, T1, T2, T3>,
40241    {
40242        <Self as VfmsacVvEmitter<T0, T1, T2, T3>>::vfmsac_vv(self, vd, vs1, vs2, vm);
40243    }
40244    /// RISC-V `vfmsub.vf` instruction.
40245    ///
40246    /// # Forms
40247    /// Assembly: `vfmsub.vf vm, vs2, xs1, vd`
40248    /// Rust: `vfmsub_vf(vd, vs2, rs1, vm)`
40249    ///
40250    /// # Arguments
40251    /// - `vd` — Vector register operand.
40252    /// - `vs2` — Vector register operand.
40253    /// - `rs1` — Source register.
40254    /// - `vm` — Vector mask control.
40255    pub fn vfmsub_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
40256    where
40257        Self: VfmsubVfEmitter<T0, T1, T2, T3>,
40258    {
40259        <Self as VfmsubVfEmitter<T0, T1, T2, T3>>::vfmsub_vf(self, vd, vs2, rs1, vm);
40260    }
40261    /// RISC-V `vfmsub.vv` instruction.
40262    ///
40263    /// # Forms
40264    /// Assembly: `vfmsub.vv vm, vs2, vs1, vd`
40265    /// Rust: `vfmsub_vv(vd, vs1, vs2, vm)`
40266    ///
40267    /// # Arguments
40268    /// - `vd` — Vector register operand.
40269    /// - `vs1` — Vector register operand.
40270    /// - `vs2` — Vector register operand.
40271    /// - `vm` — Vector mask control.
40272    pub fn vfmsub_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
40273    where
40274        Self: VfmsubVvEmitter<T0, T1, T2, T3>,
40275    {
40276        <Self as VfmsubVvEmitter<T0, T1, T2, T3>>::vfmsub_vv(self, vd, vs1, vs2, vm);
40277    }
40278    /// RISC-V `vfmul.vf` instruction.
40279    ///
40280    /// # Forms
40281    /// Assembly: `vfmul.vf vm, vs2, xs1, vd`
40282    /// Rust: `vfmul_vf(vd, vs2, rs1, vm)`
40283    ///
40284    /// # Arguments
40285    /// - `vd` — Vector register operand.
40286    /// - `vs2` — Vector register operand.
40287    /// - `rs1` — Source register.
40288    /// - `vm` — Vector mask control.
40289    pub fn vfmul_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
40290    where
40291        Self: VfmulVfEmitter<T0, T1, T2, T3>,
40292    {
40293        <Self as VfmulVfEmitter<T0, T1, T2, T3>>::vfmul_vf(self, vd, vs2, rs1, vm);
40294    }
40295    /// RISC-V `vfmul.vv` instruction.
40296    ///
40297    /// # Forms
40298    /// Assembly: `vfmul.vv vm, vs2, vs1, vd`
40299    /// Rust: `vfmul_vv(vd, vs1, vs2, vm)`
40300    ///
40301    /// # Arguments
40302    /// - `vd` — Vector register operand.
40303    /// - `vs1` — Vector register operand.
40304    /// - `vs2` — Vector register operand.
40305    /// - `vm` — Vector mask control.
40306    pub fn vfmul_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
40307    where
40308        Self: VfmulVvEmitter<T0, T1, T2, T3>,
40309    {
40310        <Self as VfmulVvEmitter<T0, T1, T2, T3>>::vfmul_vv(self, vd, vs1, vs2, vm);
40311    }
40312    /// RISC-V `vfmv.f.s` instruction.
40313    ///
40314    /// # Forms
40315    /// Assembly: `vfmv.f.s vs2, xd`
40316    /// Rust: `vfmv_f_s(rd, vs2)`
40317    ///
40318    /// # Arguments
40319    /// - `rd` — Destination register.
40320    /// - `vs2` — Vector register operand.
40321    pub fn vfmv_f_s<T0, T1>(&mut self, rd: T0, vs2: T1)
40322    where
40323        Self: VfmvFSEmitter<T0, T1>,
40324    {
40325        <Self as VfmvFSEmitter<T0, T1>>::vfmv_f_s(self, rd, vs2);
40326    }
40327    /// RISC-V `vfmv.s.f` instruction.
40328    ///
40329    /// # Forms
40330    /// Assembly: `vfmv.s.f xs1, vd`
40331    /// Rust: `vfmv_s_f(vd, rs1)`
40332    ///
40333    /// # Arguments
40334    /// - `vd` — Vector register operand.
40335    /// - `rs1` — Source register.
40336    pub fn vfmv_s_f<T0, T1>(&mut self, vd: T0, rs1: T1)
40337    where
40338        Self: VfmvSFEmitter<T0, T1>,
40339    {
40340        <Self as VfmvSFEmitter<T0, T1>>::vfmv_s_f(self, vd, rs1);
40341    }
40342    /// RISC-V `vfmv.v.f` instruction.
40343    ///
40344    /// # Forms
40345    /// Assembly: `vfmv.v.f xs1, vd`
40346    /// Rust: `vfmv_v_f(vd, rs1)`
40347    ///
40348    /// # Arguments
40349    /// - `vd` — Vector register operand.
40350    /// - `rs1` — Source register.
40351    pub fn vfmv_v_f<T0, T1>(&mut self, vd: T0, rs1: T1)
40352    where
40353        Self: VfmvVFEmitter<T0, T1>,
40354    {
40355        <Self as VfmvVFEmitter<T0, T1>>::vfmv_v_f(self, vd, rs1);
40356    }
40357    /// RISC-V `vfncvt.f.f.w` instruction.
40358    ///
40359    /// # Forms
40360    /// Assembly: `vfncvt.f.f.w vm, vs2, vd`
40361    /// Rust: `vfncvt_f_f_w(vd, vs2, vm)`
40362    ///
40363    /// # Arguments
40364    /// - `vd` — Vector register operand.
40365    /// - `vs2` — Vector register operand.
40366    /// - `vm` — Vector mask control.
40367    pub fn vfncvt_f_f_w<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
40368    where
40369        Self: VfncvtFFWEmitter<T0, T1, T2>,
40370    {
40371        <Self as VfncvtFFWEmitter<T0, T1, T2>>::vfncvt_f_f_w(self, vd, vs2, vm);
40372    }
40373    /// RISC-V `vfncvt.f.x.w` instruction.
40374    ///
40375    /// # Forms
40376    /// Assembly: `vfncvt.f.x.w vm, vs2, vd`
40377    /// Rust: `vfncvt_f_x_w(vd, vs2, vm)`
40378    ///
40379    /// # Arguments
40380    /// - `vd` — Vector register operand.
40381    /// - `vs2` — Vector register operand.
40382    /// - `vm` — Vector mask control.
40383    pub fn vfncvt_f_x_w<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
40384    where
40385        Self: VfncvtFXWEmitter<T0, T1, T2>,
40386    {
40387        <Self as VfncvtFXWEmitter<T0, T1, T2>>::vfncvt_f_x_w(self, vd, vs2, vm);
40388    }
40389    /// RISC-V `vfncvt.f.xu.w` instruction.
40390    ///
40391    /// # Forms
40392    /// Assembly: `vfncvt.f.xu.w vm, vs2, vd`
40393    /// Rust: `vfncvt_f_xu_w(vd, vs2, vm)`
40394    ///
40395    /// # Arguments
40396    /// - `vd` — Vector register operand.
40397    /// - `vs2` — Vector register operand.
40398    /// - `vm` — Vector mask control.
40399    pub fn vfncvt_f_xu_w<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
40400    where
40401        Self: VfncvtFXuWEmitter<T0, T1, T2>,
40402    {
40403        <Self as VfncvtFXuWEmitter<T0, T1, T2>>::vfncvt_f_xu_w(self, vd, vs2, vm);
40404    }
40405    /// RISC-V `vfncvt.rod.f.f.w` instruction.
40406    ///
40407    /// # Forms
40408    /// Assembly: `vfncvt.rod.f.f.w vm, vs2, vd`
40409    /// Rust: `vfncvt_rod_f_f_w(vd, vs2, vm)`
40410    ///
40411    /// # Arguments
40412    /// - `vd` — Vector register operand.
40413    /// - `vs2` — Vector register operand.
40414    /// - `vm` — Vector mask control.
40415    pub fn vfncvt_rod_f_f_w<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
40416    where
40417        Self: VfncvtRodFFWEmitter<T0, T1, T2>,
40418    {
40419        <Self as VfncvtRodFFWEmitter<T0, T1, T2>>::vfncvt_rod_f_f_w(self, vd, vs2, vm);
40420    }
40421    /// RISC-V `vfncvt.rtz.x.f.w` instruction.
40422    ///
40423    /// # Forms
40424    /// Assembly: `vfncvt.rtz.x.f.w vm, vs2, vd`
40425    /// Rust: `vfncvt_rtz_x_f_w(vd, vs2, vm)`
40426    ///
40427    /// # Arguments
40428    /// - `vd` — Vector register operand.
40429    /// - `vs2` — Vector register operand.
40430    /// - `vm` — Vector mask control.
40431    pub fn vfncvt_rtz_x_f_w<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
40432    where
40433        Self: VfncvtRtzXFWEmitter<T0, T1, T2>,
40434    {
40435        <Self as VfncvtRtzXFWEmitter<T0, T1, T2>>::vfncvt_rtz_x_f_w(self, vd, vs2, vm);
40436    }
40437    /// RISC-V `vfncvt.rtz.xu.f.w` instruction.
40438    ///
40439    /// # Forms
40440    /// Assembly: `vfncvt.rtz.xu.f.w vm, vs2, vd`
40441    /// Rust: `vfncvt_rtz_xu_f_w(vd, vs2, vm)`
40442    ///
40443    /// # Arguments
40444    /// - `vd` — Vector register operand.
40445    /// - `vs2` — Vector register operand.
40446    /// - `vm` — Vector mask control.
40447    pub fn vfncvt_rtz_xu_f_w<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
40448    where
40449        Self: VfncvtRtzXuFWEmitter<T0, T1, T2>,
40450    {
40451        <Self as VfncvtRtzXuFWEmitter<T0, T1, T2>>::vfncvt_rtz_xu_f_w(self, vd, vs2, vm);
40452    }
40453    /// RISC-V `vfncvt.x.f.w` instruction.
40454    ///
40455    /// # Forms
40456    /// Assembly: `vfncvt.x.f.w vm, vs2, vd`
40457    /// Rust: `vfncvt_x_f_w(vd, vs2, vm)`
40458    ///
40459    /// # Arguments
40460    /// - `vd` — Vector register operand.
40461    /// - `vs2` — Vector register operand.
40462    /// - `vm` — Vector mask control.
40463    pub fn vfncvt_x_f_w<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
40464    where
40465        Self: VfncvtXFWEmitter<T0, T1, T2>,
40466    {
40467        <Self as VfncvtXFWEmitter<T0, T1, T2>>::vfncvt_x_f_w(self, vd, vs2, vm);
40468    }
40469    /// RISC-V `vfncvt.xu.f.w` instruction.
40470    ///
40471    /// # Forms
40472    /// Assembly: `vfncvt.xu.f.w vm, vs2, vd`
40473    /// Rust: `vfncvt_xu_f_w(vd, vs2, vm)`
40474    ///
40475    /// # Arguments
40476    /// - `vd` — Vector register operand.
40477    /// - `vs2` — Vector register operand.
40478    /// - `vm` — Vector mask control.
40479    pub fn vfncvt_xu_f_w<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
40480    where
40481        Self: VfncvtXuFWEmitter<T0, T1, T2>,
40482    {
40483        <Self as VfncvtXuFWEmitter<T0, T1, T2>>::vfncvt_xu_f_w(self, vd, vs2, vm);
40484    }
40485    /// RISC-V `vfncvtbf16.f.f.w` instruction.
40486    ///
40487    /// # Forms
40488    /// Assembly: `vfncvtbf16.f.f.w vm, vs2, vd`
40489    /// Rust: `vfncvtbf16_f_f_w(vd, vs2, vm)`
40490    ///
40491    /// # Arguments
40492    /// - `vd` — Vector register operand.
40493    /// - `vs2` — Vector register operand.
40494    /// - `vm` — Vector mask control.
40495    pub fn vfncvtbf16_f_f_w<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
40496    where
40497        Self: Vfncvtbf16FFWEmitter<T0, T1, T2>,
40498    {
40499        <Self as Vfncvtbf16FFWEmitter<T0, T1, T2>>::vfncvtbf16_f_f_w(self, vd, vs2, vm);
40500    }
40501    /// RISC-V `vfnmacc.vf` instruction.
40502    ///
40503    /// # Forms
40504    /// Assembly: `vfnmacc.vf vm, vs2, xs1, vd`
40505    /// Rust: `vfnmacc_vf(vd, vs2, rs1, vm)`
40506    ///
40507    /// # Arguments
40508    /// - `vd` — Vector register operand.
40509    /// - `vs2` — Vector register operand.
40510    /// - `rs1` — Source register.
40511    /// - `vm` — Vector mask control.
40512    pub fn vfnmacc_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
40513    where
40514        Self: VfnmaccVfEmitter<T0, T1, T2, T3>,
40515    {
40516        <Self as VfnmaccVfEmitter<T0, T1, T2, T3>>::vfnmacc_vf(self, vd, vs2, rs1, vm);
40517    }
40518    /// RISC-V `vfnmacc.vv` instruction.
40519    ///
40520    /// # Forms
40521    /// Assembly: `vfnmacc.vv vm, vs2, vs1, vd`
40522    /// Rust: `vfnmacc_vv(vd, vs1, vs2, vm)`
40523    ///
40524    /// # Arguments
40525    /// - `vd` — Vector register operand.
40526    /// - `vs1` — Vector register operand.
40527    /// - `vs2` — Vector register operand.
40528    /// - `vm` — Vector mask control.
40529    pub fn vfnmacc_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
40530    where
40531        Self: VfnmaccVvEmitter<T0, T1, T2, T3>,
40532    {
40533        <Self as VfnmaccVvEmitter<T0, T1, T2, T3>>::vfnmacc_vv(self, vd, vs1, vs2, vm);
40534    }
40535    /// RISC-V `vfnmadd.vf` instruction.
40536    ///
40537    /// # Forms
40538    /// Assembly: `vfnmadd.vf vm, vs2, xs1, vd`
40539    /// Rust: `vfnmadd_vf(vd, vs2, rs1, vm)`
40540    ///
40541    /// # Arguments
40542    /// - `vd` — Vector register operand.
40543    /// - `vs2` — Vector register operand.
40544    /// - `rs1` — Source register.
40545    /// - `vm` — Vector mask control.
40546    pub fn vfnmadd_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
40547    where
40548        Self: VfnmaddVfEmitter<T0, T1, T2, T3>,
40549    {
40550        <Self as VfnmaddVfEmitter<T0, T1, T2, T3>>::vfnmadd_vf(self, vd, vs2, rs1, vm);
40551    }
40552    /// RISC-V `vfnmadd.vv` instruction.
40553    ///
40554    /// # Forms
40555    /// Assembly: `vfnmadd.vv vm, vs2, vs1, vd`
40556    /// Rust: `vfnmadd_vv(vd, vs1, vs2, vm)`
40557    ///
40558    /// # Arguments
40559    /// - `vd` — Vector register operand.
40560    /// - `vs1` — Vector register operand.
40561    /// - `vs2` — Vector register operand.
40562    /// - `vm` — Vector mask control.
40563    pub fn vfnmadd_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
40564    where
40565        Self: VfnmaddVvEmitter<T0, T1, T2, T3>,
40566    {
40567        <Self as VfnmaddVvEmitter<T0, T1, T2, T3>>::vfnmadd_vv(self, vd, vs1, vs2, vm);
40568    }
40569    /// RISC-V `vfnmsac.vf` instruction.
40570    ///
40571    /// # Forms
40572    /// Assembly: `vfnmsac.vf vm, vs2, xs1, vd`
40573    /// Rust: `vfnmsac_vf(vd, vs2, rs1, vm)`
40574    ///
40575    /// # Arguments
40576    /// - `vd` — Vector register operand.
40577    /// - `vs2` — Vector register operand.
40578    /// - `rs1` — Source register.
40579    /// - `vm` — Vector mask control.
40580    pub fn vfnmsac_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
40581    where
40582        Self: VfnmsacVfEmitter<T0, T1, T2, T3>,
40583    {
40584        <Self as VfnmsacVfEmitter<T0, T1, T2, T3>>::vfnmsac_vf(self, vd, vs2, rs1, vm);
40585    }
40586    /// RISC-V `vfnmsac.vv` instruction.
40587    ///
40588    /// # Forms
40589    /// Assembly: `vfnmsac.vv vm, vs2, vs1, vd`
40590    /// Rust: `vfnmsac_vv(vd, vs1, vs2, vm)`
40591    ///
40592    /// # Arguments
40593    /// - `vd` — Vector register operand.
40594    /// - `vs1` — Vector register operand.
40595    /// - `vs2` — Vector register operand.
40596    /// - `vm` — Vector mask control.
40597    pub fn vfnmsac_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
40598    where
40599        Self: VfnmsacVvEmitter<T0, T1, T2, T3>,
40600    {
40601        <Self as VfnmsacVvEmitter<T0, T1, T2, T3>>::vfnmsac_vv(self, vd, vs1, vs2, vm);
40602    }
40603    /// RISC-V `vfnmsub.vf` instruction.
40604    ///
40605    /// # Forms
40606    /// Assembly: `vfnmsub.vf vm, vs2, xs1, vd`
40607    /// Rust: `vfnmsub_vf(vd, vs2, rs1, vm)`
40608    ///
40609    /// # Arguments
40610    /// - `vd` — Vector register operand.
40611    /// - `vs2` — Vector register operand.
40612    /// - `rs1` — Source register.
40613    /// - `vm` — Vector mask control.
40614    pub fn vfnmsub_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
40615    where
40616        Self: VfnmsubVfEmitter<T0, T1, T2, T3>,
40617    {
40618        <Self as VfnmsubVfEmitter<T0, T1, T2, T3>>::vfnmsub_vf(self, vd, vs2, rs1, vm);
40619    }
40620    /// RISC-V `vfnmsub.vv` instruction.
40621    ///
40622    /// # Forms
40623    /// Assembly: `vfnmsub.vv vm, vs2, vs1, vd`
40624    /// Rust: `vfnmsub_vv(vd, vs1, vs2, vm)`
40625    ///
40626    /// # Arguments
40627    /// - `vd` — Vector register operand.
40628    /// - `vs1` — Vector register operand.
40629    /// - `vs2` — Vector register operand.
40630    /// - `vm` — Vector mask control.
40631    pub fn vfnmsub_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
40632    where
40633        Self: VfnmsubVvEmitter<T0, T1, T2, T3>,
40634    {
40635        <Self as VfnmsubVvEmitter<T0, T1, T2, T3>>::vfnmsub_vv(self, vd, vs1, vs2, vm);
40636    }
40637    /// RISC-V `vfrdiv.vf` instruction.
40638    ///
40639    /// # Forms
40640    /// Assembly: `vfrdiv.vf vm, vs2, xs1, vd`
40641    /// Rust: `vfrdiv_vf(vd, vs2, rs1, vm)`
40642    ///
40643    /// # Arguments
40644    /// - `vd` — Vector register operand.
40645    /// - `vs2` — Vector register operand.
40646    /// - `rs1` — Source register.
40647    /// - `vm` — Vector mask control.
40648    pub fn vfrdiv_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
40649    where
40650        Self: VfrdivVfEmitter<T0, T1, T2, T3>,
40651    {
40652        <Self as VfrdivVfEmitter<T0, T1, T2, T3>>::vfrdiv_vf(self, vd, vs2, rs1, vm);
40653    }
40654    /// RISC-V `vfrec7.v` instruction.
40655    ///
40656    /// # Forms
40657    /// Assembly: `vfrec7.v vm, vs2, vd`
40658    /// Rust: `vfrec7_v(vd, vs2, vm)`
40659    ///
40660    /// # Arguments
40661    /// - `vd` — Vector register operand.
40662    /// - `vs2` — Vector register operand.
40663    /// - `vm` — Vector mask control.
40664    pub fn vfrec7_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
40665    where
40666        Self: Vfrec7VEmitter<T0, T1, T2>,
40667    {
40668        <Self as Vfrec7VEmitter<T0, T1, T2>>::vfrec7_v(self, vd, vs2, vm);
40669    }
40670    /// RISC-V `vfredmax.vs` instruction.
40671    ///
40672    /// # Forms
40673    /// Assembly: `vfredmax.vs vm, vs2, vs1, vd`
40674    /// Rust: `vfredmax_vs(vd, vs1, vs2, vm)`
40675    ///
40676    /// # Arguments
40677    /// - `vd` — Vector register operand.
40678    /// - `vs1` — Vector register operand.
40679    /// - `vs2` — Vector register operand.
40680    /// - `vm` — Vector mask control.
40681    pub fn vfredmax_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
40682    where
40683        Self: VfredmaxVsEmitter<T0, T1, T2, T3>,
40684    {
40685        <Self as VfredmaxVsEmitter<T0, T1, T2, T3>>::vfredmax_vs(self, vd, vs1, vs2, vm);
40686    }
40687    /// RISC-V `vfredmin.vs` instruction.
40688    ///
40689    /// # Forms
40690    /// Assembly: `vfredmin.vs vm, vs2, vs1, vd`
40691    /// Rust: `vfredmin_vs(vd, vs1, vs2, vm)`
40692    ///
40693    /// # Arguments
40694    /// - `vd` — Vector register operand.
40695    /// - `vs1` — Vector register operand.
40696    /// - `vs2` — Vector register operand.
40697    /// - `vm` — Vector mask control.
40698    pub fn vfredmin_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
40699    where
40700        Self: VfredminVsEmitter<T0, T1, T2, T3>,
40701    {
40702        <Self as VfredminVsEmitter<T0, T1, T2, T3>>::vfredmin_vs(self, vd, vs1, vs2, vm);
40703    }
40704    /// RISC-V `vfredosum.vs` instruction.
40705    ///
40706    /// # Forms
40707    /// Assembly: `vfredosum.vs vm, vs2, vs1, vd`
40708    /// Rust: `vfredosum_vs(vd, vs1, vs2, vm)`
40709    ///
40710    /// # Arguments
40711    /// - `vd` — Vector register operand.
40712    /// - `vs1` — Vector register operand.
40713    /// - `vs2` — Vector register operand.
40714    /// - `vm` — Vector mask control.
40715    pub fn vfredosum_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
40716    where
40717        Self: VfredosumVsEmitter<T0, T1, T2, T3>,
40718    {
40719        <Self as VfredosumVsEmitter<T0, T1, T2, T3>>::vfredosum_vs(self, vd, vs1, vs2, vm);
40720    }
40721    /// RISC-V `vfredsum.vs` instruction.
40722    ///
40723    /// # Forms
40724    /// Assembly: `vfredsum.vs vd vs1 vs2 vm`
40725    /// Rust: `vfredsum_vs(vd, vs1, vs2, vm)`
40726    ///
40727    /// # Arguments
40728    /// - `vd` — Vector register operand.
40729    /// - `vs1` — Vector register operand.
40730    /// - `vs2` — Vector register operand.
40731    /// - `vm` — Vector mask control.
40732    pub fn vfredsum_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
40733    where
40734        Self: VfredsumVsEmitter<T0, T1, T2, T3>,
40735    {
40736        <Self as VfredsumVsEmitter<T0, T1, T2, T3>>::vfredsum_vs(self, vd, vs1, vs2, vm);
40737    }
40738    /// RISC-V `vfredusum.vs` instruction.
40739    ///
40740    /// # Forms
40741    /// Assembly: `vfredusum.vs vm, vs2, vs1, vd`
40742    /// Rust: `vfredusum_vs(vd, vs1, vs2, vm)`
40743    ///
40744    /// # Arguments
40745    /// - `vd` — Vector register operand.
40746    /// - `vs1` — Vector register operand.
40747    /// - `vs2` — Vector register operand.
40748    /// - `vm` — Vector mask control.
40749    pub fn vfredusum_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
40750    where
40751        Self: VfredusumVsEmitter<T0, T1, T2, T3>,
40752    {
40753        <Self as VfredusumVsEmitter<T0, T1, T2, T3>>::vfredusum_vs(self, vd, vs1, vs2, vm);
40754    }
40755    /// RISC-V `vfrsqrt7.v` instruction.
40756    ///
40757    /// # Forms
40758    /// Assembly: `vfrsqrt7.v vm, vs2, vd`
40759    /// Rust: `vfrsqrt7_v(vd, vs2, vm)`
40760    ///
40761    /// # Arguments
40762    /// - `vd` — Vector register operand.
40763    /// - `vs2` — Vector register operand.
40764    /// - `vm` — Vector mask control.
40765    pub fn vfrsqrt7_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
40766    where
40767        Self: Vfrsqrt7VEmitter<T0, T1, T2>,
40768    {
40769        <Self as Vfrsqrt7VEmitter<T0, T1, T2>>::vfrsqrt7_v(self, vd, vs2, vm);
40770    }
40771    /// RISC-V `vfrsub.vf` instruction.
40772    ///
40773    /// # Forms
40774    /// Assembly: `vfrsub.vf vm, vs2, xs1, vd`
40775    /// Rust: `vfrsub_vf(vd, vs2, rs1, vm)`
40776    ///
40777    /// # Arguments
40778    /// - `vd` — Vector register operand.
40779    /// - `vs2` — Vector register operand.
40780    /// - `rs1` — Source register.
40781    /// - `vm` — Vector mask control.
40782    pub fn vfrsub_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
40783    where
40784        Self: VfrsubVfEmitter<T0, T1, T2, T3>,
40785    {
40786        <Self as VfrsubVfEmitter<T0, T1, T2, T3>>::vfrsub_vf(self, vd, vs2, rs1, vm);
40787    }
40788    /// RISC-V `vfsgnj.vf` instruction.
40789    ///
40790    /// # Forms
40791    /// Assembly: `vfsgnj.vf vm, vs2, xs1, vd`
40792    /// Rust: `vfsgnj_vf(vd, vs2, rs1, vm)`
40793    ///
40794    /// # Arguments
40795    /// - `vd` — Vector register operand.
40796    /// - `vs2` — Vector register operand.
40797    /// - `rs1` — Source register.
40798    /// - `vm` — Vector mask control.
40799    pub fn vfsgnj_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
40800    where
40801        Self: VfsgnjVfEmitter<T0, T1, T2, T3>,
40802    {
40803        <Self as VfsgnjVfEmitter<T0, T1, T2, T3>>::vfsgnj_vf(self, vd, vs2, rs1, vm);
40804    }
40805    /// RISC-V `vfsgnj.vv` instruction.
40806    ///
40807    /// # Forms
40808    /// Assembly: `vfsgnj.vv vm, vs2, vs1, vd`
40809    /// Rust: `vfsgnj_vv(vd, vs1, vs2, vm)`
40810    ///
40811    /// # Arguments
40812    /// - `vd` — Vector register operand.
40813    /// - `vs1` — Vector register operand.
40814    /// - `vs2` — Vector register operand.
40815    /// - `vm` — Vector mask control.
40816    pub fn vfsgnj_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
40817    where
40818        Self: VfsgnjVvEmitter<T0, T1, T2, T3>,
40819    {
40820        <Self as VfsgnjVvEmitter<T0, T1, T2, T3>>::vfsgnj_vv(self, vd, vs1, vs2, vm);
40821    }
40822    /// RISC-V `vfsgnjn.vf` instruction.
40823    ///
40824    /// # Forms
40825    /// Assembly: `vfsgnjn.vf vm, vs2, xs1, vd`
40826    /// Rust: `vfsgnjn_vf(vd, vs2, rs1, vm)`
40827    ///
40828    /// # Arguments
40829    /// - `vd` — Vector register operand.
40830    /// - `vs2` — Vector register operand.
40831    /// - `rs1` — Source register.
40832    /// - `vm` — Vector mask control.
40833    pub fn vfsgnjn_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
40834    where
40835        Self: VfsgnjnVfEmitter<T0, T1, T2, T3>,
40836    {
40837        <Self as VfsgnjnVfEmitter<T0, T1, T2, T3>>::vfsgnjn_vf(self, vd, vs2, rs1, vm);
40838    }
40839    /// RISC-V `vfsgnjn.vv` instruction.
40840    ///
40841    /// # Forms
40842    /// Assembly: `vfsgnjn.vv vm, vs2, vs1, vd`
40843    /// Rust: `vfsgnjn_vv(vd, vs1, vs2, vm)`
40844    ///
40845    /// # Arguments
40846    /// - `vd` — Vector register operand.
40847    /// - `vs1` — Vector register operand.
40848    /// - `vs2` — Vector register operand.
40849    /// - `vm` — Vector mask control.
40850    pub fn vfsgnjn_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
40851    where
40852        Self: VfsgnjnVvEmitter<T0, T1, T2, T3>,
40853    {
40854        <Self as VfsgnjnVvEmitter<T0, T1, T2, T3>>::vfsgnjn_vv(self, vd, vs1, vs2, vm);
40855    }
40856    /// RISC-V `vfsgnjx.vf` instruction.
40857    ///
40858    /// # Forms
40859    /// Assembly: `vfsgnjx.vf vm, vs2, xs1, vd`
40860    /// Rust: `vfsgnjx_vf(vd, vs2, rs1, vm)`
40861    ///
40862    /// # Arguments
40863    /// - `vd` — Vector register operand.
40864    /// - `vs2` — Vector register operand.
40865    /// - `rs1` — Source register.
40866    /// - `vm` — Vector mask control.
40867    pub fn vfsgnjx_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
40868    where
40869        Self: VfsgnjxVfEmitter<T0, T1, T2, T3>,
40870    {
40871        <Self as VfsgnjxVfEmitter<T0, T1, T2, T3>>::vfsgnjx_vf(self, vd, vs2, rs1, vm);
40872    }
40873    /// RISC-V `vfsgnjx.vv` instruction.
40874    ///
40875    /// # Forms
40876    /// Assembly: `vfsgnjx.vv vm, vs2, vs1, vd`
40877    /// Rust: `vfsgnjx_vv(vd, vs1, vs2, vm)`
40878    ///
40879    /// # Arguments
40880    /// - `vd` — Vector register operand.
40881    /// - `vs1` — Vector register operand.
40882    /// - `vs2` — Vector register operand.
40883    /// - `vm` — Vector mask control.
40884    pub fn vfsgnjx_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
40885    where
40886        Self: VfsgnjxVvEmitter<T0, T1, T2, T3>,
40887    {
40888        <Self as VfsgnjxVvEmitter<T0, T1, T2, T3>>::vfsgnjx_vv(self, vd, vs1, vs2, vm);
40889    }
40890    /// RISC-V `vfslide1down.vf` instruction.
40891    ///
40892    /// # Forms
40893    /// Assembly: `vfslide1down.vf vm, vs2, xs1, vd`
40894    /// Rust: `vfslide1down_vf(vd, vs2, rs1, vm)`
40895    ///
40896    /// # Arguments
40897    /// - `vd` — Vector register operand.
40898    /// - `vs2` — Vector register operand.
40899    /// - `rs1` — Source register.
40900    /// - `vm` — Vector mask control.
40901    pub fn vfslide1down_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
40902    where
40903        Self: Vfslide1DownVfEmitter<T0, T1, T2, T3>,
40904    {
40905        <Self as Vfslide1DownVfEmitter<T0, T1, T2, T3>>::vfslide1down_vf(self, vd, vs2, rs1, vm);
40906    }
40907    /// RISC-V `vfslide1up.vf` instruction.
40908    ///
40909    /// # Forms
40910    /// Assembly: `vfslide1up.vf vm, vs2, xs1, vd`
40911    /// Rust: `vfslide1up_vf(vd, vs2, rs1, vm)`
40912    ///
40913    /// # Arguments
40914    /// - `vd` — Vector register operand.
40915    /// - `vs2` — Vector register operand.
40916    /// - `rs1` — Source register.
40917    /// - `vm` — Vector mask control.
40918    pub fn vfslide1up_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
40919    where
40920        Self: Vfslide1UpVfEmitter<T0, T1, T2, T3>,
40921    {
40922        <Self as Vfslide1UpVfEmitter<T0, T1, T2, T3>>::vfslide1up_vf(self, vd, vs2, rs1, vm);
40923    }
40924    /// RISC-V `vfsqrt.v` instruction.
40925    ///
40926    /// # Forms
40927    /// Assembly: `vfsqrt.v vm, vs2, vd`
40928    /// Rust: `vfsqrt_v(vd, vs2, vm)`
40929    ///
40930    /// # Arguments
40931    /// - `vd` — Vector register operand.
40932    /// - `vs2` — Vector register operand.
40933    /// - `vm` — Vector mask control.
40934    pub fn vfsqrt_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
40935    where
40936        Self: VfsqrtVEmitter<T0, T1, T2>,
40937    {
40938        <Self as VfsqrtVEmitter<T0, T1, T2>>::vfsqrt_v(self, vd, vs2, vm);
40939    }
40940    /// RISC-V `vfsub.vf` instruction.
40941    ///
40942    /// # Forms
40943    /// Assembly: `vfsub.vf vm, vs2, xs1, vd`
40944    /// Rust: `vfsub_vf(vd, vs2, rs1, vm)`
40945    ///
40946    /// # Arguments
40947    /// - `vd` — Vector register operand.
40948    /// - `vs2` — Vector register operand.
40949    /// - `rs1` — Source register.
40950    /// - `vm` — Vector mask control.
40951    pub fn vfsub_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
40952    where
40953        Self: VfsubVfEmitter<T0, T1, T2, T3>,
40954    {
40955        <Self as VfsubVfEmitter<T0, T1, T2, T3>>::vfsub_vf(self, vd, vs2, rs1, vm);
40956    }
40957    /// RISC-V `vfsub.vv` instruction.
40958    ///
40959    /// # Forms
40960    /// Assembly: `vfsub.vv vm, vs2, vs1, vd`
40961    /// Rust: `vfsub_vv(vd, vs1, vs2, vm)`
40962    ///
40963    /// # Arguments
40964    /// - `vd` — Vector register operand.
40965    /// - `vs1` — Vector register operand.
40966    /// - `vs2` — Vector register operand.
40967    /// - `vm` — Vector mask control.
40968    pub fn vfsub_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
40969    where
40970        Self: VfsubVvEmitter<T0, T1, T2, T3>,
40971    {
40972        <Self as VfsubVvEmitter<T0, T1, T2, T3>>::vfsub_vv(self, vd, vs1, vs2, vm);
40973    }
40974    /// RISC-V `vfwadd.vf` instruction.
40975    ///
40976    /// # Forms
40977    /// Assembly: `vfwadd.vf vm, vs2, xs1, vd`
40978    /// Rust: `vfwadd_vf(vd, vs2, rs1, vm)`
40979    ///
40980    /// # Arguments
40981    /// - `vd` — Vector register operand.
40982    /// - `vs2` — Vector register operand.
40983    /// - `rs1` — Source register.
40984    /// - `vm` — Vector mask control.
40985    pub fn vfwadd_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
40986    where
40987        Self: VfwaddVfEmitter<T0, T1, T2, T3>,
40988    {
40989        <Self as VfwaddVfEmitter<T0, T1, T2, T3>>::vfwadd_vf(self, vd, vs2, rs1, vm);
40990    }
40991    /// RISC-V `vfwadd.vv` instruction.
40992    ///
40993    /// # Forms
40994    /// Assembly: `vfwadd.vv vm, vs2, vs1, vd`
40995    /// Rust: `vfwadd_vv(vd, vs1, vs2, vm)`
40996    ///
40997    /// # Arguments
40998    /// - `vd` — Vector register operand.
40999    /// - `vs1` — Vector register operand.
41000    /// - `vs2` — Vector register operand.
41001    /// - `vm` — Vector mask control.
41002    pub fn vfwadd_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
41003    where
41004        Self: VfwaddVvEmitter<T0, T1, T2, T3>,
41005    {
41006        <Self as VfwaddVvEmitter<T0, T1, T2, T3>>::vfwadd_vv(self, vd, vs1, vs2, vm);
41007    }
41008    /// RISC-V `vfwadd.wf` instruction.
41009    ///
41010    /// # Forms
41011    /// Assembly: `vfwadd.wf vm, vs2, xs1, vd`
41012    /// Rust: `vfwadd_wf(vd, vs2, rs1, vm)`
41013    ///
41014    /// # Arguments
41015    /// - `vd` — Vector register operand.
41016    /// - `vs2` — Vector register operand.
41017    /// - `rs1` — Source register.
41018    /// - `vm` — Vector mask control.
41019    pub fn vfwadd_wf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
41020    where
41021        Self: VfwaddWfEmitter<T0, T1, T2, T3>,
41022    {
41023        <Self as VfwaddWfEmitter<T0, T1, T2, T3>>::vfwadd_wf(self, vd, vs2, rs1, vm);
41024    }
41025    /// RISC-V `vfwadd.wv` instruction.
41026    ///
41027    /// # Forms
41028    /// Assembly: `vfwadd.wv vm, vs2, vs1, vd`
41029    /// Rust: `vfwadd_wv(vd, vs1, vs2, vm)`
41030    ///
41031    /// # Arguments
41032    /// - `vd` — Vector register operand.
41033    /// - `vs1` — Vector register operand.
41034    /// - `vs2` — Vector register operand.
41035    /// - `vm` — Vector mask control.
41036    pub fn vfwadd_wv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
41037    where
41038        Self: VfwaddWvEmitter<T0, T1, T2, T3>,
41039    {
41040        <Self as VfwaddWvEmitter<T0, T1, T2, T3>>::vfwadd_wv(self, vd, vs1, vs2, vm);
41041    }
41042    /// RISC-V `vfwcvt.f.f.v` instruction.
41043    ///
41044    /// # Forms
41045    /// Assembly: `vfwcvt.f.f.v vm, vs2, vd`
41046    /// Rust: `vfwcvt_f_f_v(vd, vs2, vm)`
41047    ///
41048    /// # Arguments
41049    /// - `vd` — Vector register operand.
41050    /// - `vs2` — Vector register operand.
41051    /// - `vm` — Vector mask control.
41052    pub fn vfwcvt_f_f_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
41053    where
41054        Self: VfwcvtFFVEmitter<T0, T1, T2>,
41055    {
41056        <Self as VfwcvtFFVEmitter<T0, T1, T2>>::vfwcvt_f_f_v(self, vd, vs2, vm);
41057    }
41058    /// RISC-V `vfwcvt.f.x.v` instruction.
41059    ///
41060    /// # Forms
41061    /// Assembly: `vfwcvt.f.x.v vm, vs2, vd`
41062    /// Rust: `vfwcvt_f_x_v(vd, vs2, vm)`
41063    ///
41064    /// # Arguments
41065    /// - `vd` — Vector register operand.
41066    /// - `vs2` — Vector register operand.
41067    /// - `vm` — Vector mask control.
41068    pub fn vfwcvt_f_x_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
41069    where
41070        Self: VfwcvtFXVEmitter<T0, T1, T2>,
41071    {
41072        <Self as VfwcvtFXVEmitter<T0, T1, T2>>::vfwcvt_f_x_v(self, vd, vs2, vm);
41073    }
41074    /// RISC-V `vfwcvt.f.xu.v` instruction.
41075    ///
41076    /// # Forms
41077    /// Assembly: `vfwcvt.f.xu.v vm, vs2, vd`
41078    /// Rust: `vfwcvt_f_xu_v(vd, vs2, vm)`
41079    ///
41080    /// # Arguments
41081    /// - `vd` — Vector register operand.
41082    /// - `vs2` — Vector register operand.
41083    /// - `vm` — Vector mask control.
41084    pub fn vfwcvt_f_xu_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
41085    where
41086        Self: VfwcvtFXuVEmitter<T0, T1, T2>,
41087    {
41088        <Self as VfwcvtFXuVEmitter<T0, T1, T2>>::vfwcvt_f_xu_v(self, vd, vs2, vm);
41089    }
41090    /// RISC-V `vfwcvt.rtz.x.f.v` instruction.
41091    ///
41092    /// # Forms
41093    /// Assembly: `vfwcvt.rtz.x.f.v vm, vs2, vd`
41094    /// Rust: `vfwcvt_rtz_x_f_v(vd, vs2, vm)`
41095    ///
41096    /// # Arguments
41097    /// - `vd` — Vector register operand.
41098    /// - `vs2` — Vector register operand.
41099    /// - `vm` — Vector mask control.
41100    pub fn vfwcvt_rtz_x_f_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
41101    where
41102        Self: VfwcvtRtzXFVEmitter<T0, T1, T2>,
41103    {
41104        <Self as VfwcvtRtzXFVEmitter<T0, T1, T2>>::vfwcvt_rtz_x_f_v(self, vd, vs2, vm);
41105    }
41106    /// RISC-V `vfwcvt.rtz.xu.f.v` instruction.
41107    ///
41108    /// # Forms
41109    /// Assembly: `vfwcvt.rtz.xu.f.v vm, vs2, vd`
41110    /// Rust: `vfwcvt_rtz_xu_f_v(vd, vs2, vm)`
41111    ///
41112    /// # Arguments
41113    /// - `vd` — Vector register operand.
41114    /// - `vs2` — Vector register operand.
41115    /// - `vm` — Vector mask control.
41116    pub fn vfwcvt_rtz_xu_f_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
41117    where
41118        Self: VfwcvtRtzXuFVEmitter<T0, T1, T2>,
41119    {
41120        <Self as VfwcvtRtzXuFVEmitter<T0, T1, T2>>::vfwcvt_rtz_xu_f_v(self, vd, vs2, vm);
41121    }
41122    /// RISC-V `vfwcvt.x.f.v` instruction.
41123    ///
41124    /// # Forms
41125    /// Assembly: `vfwcvt.x.f.v vm, vs2, vd`
41126    /// Rust: `vfwcvt_x_f_v(vd, vs2, vm)`
41127    ///
41128    /// # Arguments
41129    /// - `vd` — Vector register operand.
41130    /// - `vs2` — Vector register operand.
41131    /// - `vm` — Vector mask control.
41132    pub fn vfwcvt_x_f_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
41133    where
41134        Self: VfwcvtXFVEmitter<T0, T1, T2>,
41135    {
41136        <Self as VfwcvtXFVEmitter<T0, T1, T2>>::vfwcvt_x_f_v(self, vd, vs2, vm);
41137    }
41138    /// RISC-V `vfwcvt.xu.f.v` instruction.
41139    ///
41140    /// # Forms
41141    /// Assembly: `vfwcvt.xu.f.v vm, vs2, vd`
41142    /// Rust: `vfwcvt_xu_f_v(vd, vs2, vm)`
41143    ///
41144    /// # Arguments
41145    /// - `vd` — Vector register operand.
41146    /// - `vs2` — Vector register operand.
41147    /// - `vm` — Vector mask control.
41148    pub fn vfwcvt_xu_f_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
41149    where
41150        Self: VfwcvtXuFVEmitter<T0, T1, T2>,
41151    {
41152        <Self as VfwcvtXuFVEmitter<T0, T1, T2>>::vfwcvt_xu_f_v(self, vd, vs2, vm);
41153    }
41154    /// RISC-V `vfwcvtbf16.f.f.v` instruction.
41155    ///
41156    /// # Forms
41157    /// Assembly: `vfwcvtbf16.f.f.v vm, vs2, vd`
41158    /// Rust: `vfwcvtbf16_f_f_v(vd, vs2, vm)`
41159    ///
41160    /// # Arguments
41161    /// - `vd` — Vector register operand.
41162    /// - `vs2` — Vector register operand.
41163    /// - `vm` — Vector mask control.
41164    pub fn vfwcvtbf16_f_f_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
41165    where
41166        Self: Vfwcvtbf16FFVEmitter<T0, T1, T2>,
41167    {
41168        <Self as Vfwcvtbf16FFVEmitter<T0, T1, T2>>::vfwcvtbf16_f_f_v(self, vd, vs2, vm);
41169    }
41170    /// RISC-V `vfwmacc.vf` instruction.
41171    ///
41172    /// # Forms
41173    /// Assembly: `vfwmacc.vf vm, vs2, xs1, vd`
41174    /// Rust: `vfwmacc_vf(vd, vs2, rs1, vm)`
41175    ///
41176    /// # Arguments
41177    /// - `vd` — Vector register operand.
41178    /// - `vs2` — Vector register operand.
41179    /// - `rs1` — Source register.
41180    /// - `vm` — Vector mask control.
41181    pub fn vfwmacc_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
41182    where
41183        Self: VfwmaccVfEmitter<T0, T1, T2, T3>,
41184    {
41185        <Self as VfwmaccVfEmitter<T0, T1, T2, T3>>::vfwmacc_vf(self, vd, vs2, rs1, vm);
41186    }
41187    /// RISC-V `vfwmacc.vv` instruction.
41188    ///
41189    /// # Forms
41190    /// Assembly: `vfwmacc.vv vm, vs2, vs1, vd`
41191    /// Rust: `vfwmacc_vv(vd, vs1, vs2, vm)`
41192    ///
41193    /// # Arguments
41194    /// - `vd` — Vector register operand.
41195    /// - `vs1` — Vector register operand.
41196    /// - `vs2` — Vector register operand.
41197    /// - `vm` — Vector mask control.
41198    pub fn vfwmacc_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
41199    where
41200        Self: VfwmaccVvEmitter<T0, T1, T2, T3>,
41201    {
41202        <Self as VfwmaccVvEmitter<T0, T1, T2, T3>>::vfwmacc_vv(self, vd, vs1, vs2, vm);
41203    }
41204    /// RISC-V `vfwmaccbf16.vf` instruction.
41205    ///
41206    /// # Forms
41207    /// Assembly: `vfwmaccbf16.vf vm, vs2, xs1, vd`
41208    /// Rust: `vfwmaccbf16_vf(vd, vs2, rs1, vm)`
41209    ///
41210    /// # Arguments
41211    /// - `vd` — Vector register operand.
41212    /// - `vs2` — Vector register operand.
41213    /// - `rs1` — Source register.
41214    /// - `vm` — Vector mask control.
41215    pub fn vfwmaccbf16_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
41216    where
41217        Self: Vfwmaccbf16VfEmitter<T0, T1, T2, T3>,
41218    {
41219        <Self as Vfwmaccbf16VfEmitter<T0, T1, T2, T3>>::vfwmaccbf16_vf(self, vd, vs2, rs1, vm);
41220    }
41221    /// RISC-V `vfwmaccbf16.vv` instruction.
41222    ///
41223    /// # Forms
41224    /// Assembly: `vfwmaccbf16.vv vm, vs2, vs1, vd`
41225    /// Rust: `vfwmaccbf16_vv(vd, vs1, vs2, vm)`
41226    ///
41227    /// # Arguments
41228    /// - `vd` — Vector register operand.
41229    /// - `vs1` — Vector register operand.
41230    /// - `vs2` — Vector register operand.
41231    /// - `vm` — Vector mask control.
41232    pub fn vfwmaccbf16_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
41233    where
41234        Self: Vfwmaccbf16VvEmitter<T0, T1, T2, T3>,
41235    {
41236        <Self as Vfwmaccbf16VvEmitter<T0, T1, T2, T3>>::vfwmaccbf16_vv(self, vd, vs1, vs2, vm);
41237    }
41238    /// RISC-V `vfwmsac.vf` instruction.
41239    ///
41240    /// # Forms
41241    /// Assembly: `vfwmsac.vf vm, vs2, xs1, vd`
41242    /// Rust: `vfwmsac_vf(vd, vs2, rs1, vm)`
41243    ///
41244    /// # Arguments
41245    /// - `vd` — Vector register operand.
41246    /// - `vs2` — Vector register operand.
41247    /// - `rs1` — Source register.
41248    /// - `vm` — Vector mask control.
41249    pub fn vfwmsac_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
41250    where
41251        Self: VfwmsacVfEmitter<T0, T1, T2, T3>,
41252    {
41253        <Self as VfwmsacVfEmitter<T0, T1, T2, T3>>::vfwmsac_vf(self, vd, vs2, rs1, vm);
41254    }
41255    /// RISC-V `vfwmsac.vv` instruction.
41256    ///
41257    /// # Forms
41258    /// Assembly: `vfwmsac.vv vm, vs2, vs1, vd`
41259    /// Rust: `vfwmsac_vv(vd, vs1, vs2, vm)`
41260    ///
41261    /// # Arguments
41262    /// - `vd` — Vector register operand.
41263    /// - `vs1` — Vector register operand.
41264    /// - `vs2` — Vector register operand.
41265    /// - `vm` — Vector mask control.
41266    pub fn vfwmsac_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
41267    where
41268        Self: VfwmsacVvEmitter<T0, T1, T2, T3>,
41269    {
41270        <Self as VfwmsacVvEmitter<T0, T1, T2, T3>>::vfwmsac_vv(self, vd, vs1, vs2, vm);
41271    }
41272    /// RISC-V `vfwmul.vf` instruction.
41273    ///
41274    /// # Forms
41275    /// Assembly: `vfwmul.vf vm, vs2, xs1, vd`
41276    /// Rust: `vfwmul_vf(vd, vs2, rs1, vm)`
41277    ///
41278    /// # Arguments
41279    /// - `vd` — Vector register operand.
41280    /// - `vs2` — Vector register operand.
41281    /// - `rs1` — Source register.
41282    /// - `vm` — Vector mask control.
41283    pub fn vfwmul_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
41284    where
41285        Self: VfwmulVfEmitter<T0, T1, T2, T3>,
41286    {
41287        <Self as VfwmulVfEmitter<T0, T1, T2, T3>>::vfwmul_vf(self, vd, vs2, rs1, vm);
41288    }
41289    /// RISC-V `vfwmul.vv` instruction.
41290    ///
41291    /// # Forms
41292    /// Assembly: `vfwmul.vv vm, vs2, vs1, vd`
41293    /// Rust: `vfwmul_vv(vd, vs1, vs2, vm)`
41294    ///
41295    /// # Arguments
41296    /// - `vd` — Vector register operand.
41297    /// - `vs1` — Vector register operand.
41298    /// - `vs2` — Vector register operand.
41299    /// - `vm` — Vector mask control.
41300    pub fn vfwmul_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
41301    where
41302        Self: VfwmulVvEmitter<T0, T1, T2, T3>,
41303    {
41304        <Self as VfwmulVvEmitter<T0, T1, T2, T3>>::vfwmul_vv(self, vd, vs1, vs2, vm);
41305    }
41306    /// RISC-V `vfwnmacc.vf` instruction.
41307    ///
41308    /// # Forms
41309    /// Assembly: `vfwnmacc.vf vm, vs2, xs1, vd`
41310    /// Rust: `vfwnmacc_vf(vd, vs2, rs1, vm)`
41311    ///
41312    /// # Arguments
41313    /// - `vd` — Vector register operand.
41314    /// - `vs2` — Vector register operand.
41315    /// - `rs1` — Source register.
41316    /// - `vm` — Vector mask control.
41317    pub fn vfwnmacc_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
41318    where
41319        Self: VfwnmaccVfEmitter<T0, T1, T2, T3>,
41320    {
41321        <Self as VfwnmaccVfEmitter<T0, T1, T2, T3>>::vfwnmacc_vf(self, vd, vs2, rs1, vm);
41322    }
41323    /// RISC-V `vfwnmacc.vv` instruction.
41324    ///
41325    /// # Forms
41326    /// Assembly: `vfwnmacc.vv vm, vs2, vs1, vd`
41327    /// Rust: `vfwnmacc_vv(vd, vs1, vs2, vm)`
41328    ///
41329    /// # Arguments
41330    /// - `vd` — Vector register operand.
41331    /// - `vs1` — Vector register operand.
41332    /// - `vs2` — Vector register operand.
41333    /// - `vm` — Vector mask control.
41334    pub fn vfwnmacc_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
41335    where
41336        Self: VfwnmaccVvEmitter<T0, T1, T2, T3>,
41337    {
41338        <Self as VfwnmaccVvEmitter<T0, T1, T2, T3>>::vfwnmacc_vv(self, vd, vs1, vs2, vm);
41339    }
41340    /// RISC-V `vfwnmsac.vf` instruction.
41341    ///
41342    /// # Forms
41343    /// Assembly: `vfwnmsac.vf vm, vs2, xs1, vd`
41344    /// Rust: `vfwnmsac_vf(vd, vs2, rs1, vm)`
41345    ///
41346    /// # Arguments
41347    /// - `vd` — Vector register operand.
41348    /// - `vs2` — Vector register operand.
41349    /// - `rs1` — Source register.
41350    /// - `vm` — Vector mask control.
41351    pub fn vfwnmsac_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
41352    where
41353        Self: VfwnmsacVfEmitter<T0, T1, T2, T3>,
41354    {
41355        <Self as VfwnmsacVfEmitter<T0, T1, T2, T3>>::vfwnmsac_vf(self, vd, vs2, rs1, vm);
41356    }
41357    /// RISC-V `vfwnmsac.vv` instruction.
41358    ///
41359    /// # Forms
41360    /// Assembly: `vfwnmsac.vv vm, vs2, vs1, vd`
41361    /// Rust: `vfwnmsac_vv(vd, vs1, vs2, vm)`
41362    ///
41363    /// # Arguments
41364    /// - `vd` — Vector register operand.
41365    /// - `vs1` — Vector register operand.
41366    /// - `vs2` — Vector register operand.
41367    /// - `vm` — Vector mask control.
41368    pub fn vfwnmsac_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
41369    where
41370        Self: VfwnmsacVvEmitter<T0, T1, T2, T3>,
41371    {
41372        <Self as VfwnmsacVvEmitter<T0, T1, T2, T3>>::vfwnmsac_vv(self, vd, vs1, vs2, vm);
41373    }
41374    /// RISC-V `vfwredosum.vs` instruction.
41375    ///
41376    /// # Forms
41377    /// Assembly: `vfwredosum.vs vm, vs2, vs1, vd`
41378    /// Rust: `vfwredosum_vs(vd, vs1, vs2, vm)`
41379    ///
41380    /// # Arguments
41381    /// - `vd` — Vector register operand.
41382    /// - `vs1` — Vector register operand.
41383    /// - `vs2` — Vector register operand.
41384    /// - `vm` — Vector mask control.
41385    pub fn vfwredosum_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
41386    where
41387        Self: VfwredosumVsEmitter<T0, T1, T2, T3>,
41388    {
41389        <Self as VfwredosumVsEmitter<T0, T1, T2, T3>>::vfwredosum_vs(self, vd, vs1, vs2, vm);
41390    }
41391    /// RISC-V `vfwredsum.vs` instruction.
41392    ///
41393    /// # Forms
41394    /// Assembly: `vfwredsum.vs vd vs1 vs2 vm`
41395    /// Rust: `vfwredsum_vs(vd, vs1, vs2, vm)`
41396    ///
41397    /// # Arguments
41398    /// - `vd` — Vector register operand.
41399    /// - `vs1` — Vector register operand.
41400    /// - `vs2` — Vector register operand.
41401    /// - `vm` — Vector mask control.
41402    pub fn vfwredsum_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
41403    where
41404        Self: VfwredsumVsEmitter<T0, T1, T2, T3>,
41405    {
41406        <Self as VfwredsumVsEmitter<T0, T1, T2, T3>>::vfwredsum_vs(self, vd, vs1, vs2, vm);
41407    }
41408    /// RISC-V `vfwredusum.vs` instruction.
41409    ///
41410    /// # Forms
41411    /// Assembly: `vfwredusum.vs vm, vs2, vs1, vd`
41412    /// Rust: `vfwredusum_vs(vd, vs1, vs2, vm)`
41413    ///
41414    /// # Arguments
41415    /// - `vd` — Vector register operand.
41416    /// - `vs1` — Vector register operand.
41417    /// - `vs2` — Vector register operand.
41418    /// - `vm` — Vector mask control.
41419    pub fn vfwredusum_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
41420    where
41421        Self: VfwredusumVsEmitter<T0, T1, T2, T3>,
41422    {
41423        <Self as VfwredusumVsEmitter<T0, T1, T2, T3>>::vfwredusum_vs(self, vd, vs1, vs2, vm);
41424    }
41425    /// RISC-V `vfwsub.vf` instruction.
41426    ///
41427    /// # Forms
41428    /// Assembly: `vfwsub.vf vm, vs2, xs1, vd`
41429    /// Rust: `vfwsub_vf(vd, vs2, rs1, vm)`
41430    ///
41431    /// # Arguments
41432    /// - `vd` — Vector register operand.
41433    /// - `vs2` — Vector register operand.
41434    /// - `rs1` — Source register.
41435    /// - `vm` — Vector mask control.
41436    pub fn vfwsub_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
41437    where
41438        Self: VfwsubVfEmitter<T0, T1, T2, T3>,
41439    {
41440        <Self as VfwsubVfEmitter<T0, T1, T2, T3>>::vfwsub_vf(self, vd, vs2, rs1, vm);
41441    }
41442    /// RISC-V `vfwsub.vv` instruction.
41443    ///
41444    /// # Forms
41445    /// Assembly: `vfwsub.vv vm, vs2, vs1, vd`
41446    /// Rust: `vfwsub_vv(vd, vs1, vs2, vm)`
41447    ///
41448    /// # Arguments
41449    /// - `vd` — Vector register operand.
41450    /// - `vs1` — Vector register operand.
41451    /// - `vs2` — Vector register operand.
41452    /// - `vm` — Vector mask control.
41453    pub fn vfwsub_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
41454    where
41455        Self: VfwsubVvEmitter<T0, T1, T2, T3>,
41456    {
41457        <Self as VfwsubVvEmitter<T0, T1, T2, T3>>::vfwsub_vv(self, vd, vs1, vs2, vm);
41458    }
41459    /// RISC-V `vfwsub.wf` instruction.
41460    ///
41461    /// # Forms
41462    /// Assembly: `vfwsub.wf vm, vs2, xs1, vd`
41463    /// Rust: `vfwsub_wf(vd, vs2, rs1, vm)`
41464    ///
41465    /// # Arguments
41466    /// - `vd` — Vector register operand.
41467    /// - `vs2` — Vector register operand.
41468    /// - `rs1` — Source register.
41469    /// - `vm` — Vector mask control.
41470    pub fn vfwsub_wf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
41471    where
41472        Self: VfwsubWfEmitter<T0, T1, T2, T3>,
41473    {
41474        <Self as VfwsubWfEmitter<T0, T1, T2, T3>>::vfwsub_wf(self, vd, vs2, rs1, vm);
41475    }
41476    /// RISC-V `vfwsub.wv` instruction.
41477    ///
41478    /// # Forms
41479    /// Assembly: `vfwsub.wv vm, vs2, vs1, vd`
41480    /// Rust: `vfwsub_wv(vd, vs1, vs2, vm)`
41481    ///
41482    /// # Arguments
41483    /// - `vd` — Vector register operand.
41484    /// - `vs1` — Vector register operand.
41485    /// - `vs2` — Vector register operand.
41486    /// - `vm` — Vector mask control.
41487    pub fn vfwsub_wv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
41488    where
41489        Self: VfwsubWvEmitter<T0, T1, T2, T3>,
41490    {
41491        <Self as VfwsubWvEmitter<T0, T1, T2, T3>>::vfwsub_wv(self, vd, vs1, vs2, vm);
41492    }
41493    /// RISC-V `vghsh.vv` instruction.
41494    ///
41495    /// # Forms
41496    /// Assembly: `vghsh.vv vs2, vs1, vd`
41497    /// Rust: `vghsh_vv(vd, vs1, vs2)`
41498    ///
41499    /// # Arguments
41500    /// - `vd` — Vector register operand.
41501    /// - `vs1` — Vector register operand.
41502    /// - `vs2` — Vector register operand.
41503    pub fn vghsh_vv<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)
41504    where
41505        Self: VghshVvEmitter<T0, T1, T2>,
41506    {
41507        <Self as VghshVvEmitter<T0, T1, T2>>::vghsh_vv(self, vd, vs1, vs2);
41508    }
41509    /// RISC-V `vgmul.vv` instruction.
41510    ///
41511    /// # Forms
41512    /// Assembly: `vgmul.vv vs2, vd`
41513    /// Rust: `vgmul_vv(vd, vs2)`
41514    ///
41515    /// # Arguments
41516    /// - `vd` — Vector register operand.
41517    /// - `vs2` — Vector register operand.
41518    pub fn vgmul_vv<T0, T1>(&mut self, vd: T0, vs2: T1)
41519    where
41520        Self: VgmulVvEmitter<T0, T1>,
41521    {
41522        <Self as VgmulVvEmitter<T0, T1>>::vgmul_vv(self, vd, vs2);
41523    }
41524    /// RISC-V `vid.v` instruction.
41525    ///
41526    /// # Forms
41527    /// Assembly: `vid.v vm, vd`
41528    /// Rust: `vid_v(vd, vm)`
41529    ///
41530    /// # Arguments
41531    /// - `vd` — Vector register operand.
41532    /// - `vm` — Vector mask control.
41533    pub fn vid_v<T0, T1>(&mut self, vd: T0, vm: T1)
41534    where
41535        Self: VidVEmitter<T0, T1>,
41536    {
41537        <Self as VidVEmitter<T0, T1>>::vid_v(self, vd, vm);
41538    }
41539    /// RISC-V `viota.m` instruction.
41540    ///
41541    /// # Forms
41542    /// Assembly: `viota.m vm, vs2, vd`
41543    /// Rust: `viota_m(vd, vs2, vm)`
41544    ///
41545    /// # Arguments
41546    /// - `vd` — Vector register operand.
41547    /// - `vs2` — Vector register operand.
41548    /// - `vm` — Vector mask control.
41549    pub fn viota_m<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
41550    where
41551        Self: ViotaMEmitter<T0, T1, T2>,
41552    {
41553        <Self as ViotaMEmitter<T0, T1, T2>>::viota_m(self, vd, vs2, vm);
41554    }
41555    /// RISC-V `vl1r.v` instruction.
41556    ///
41557    /// # Forms
41558    /// Assembly: `vl1r.v vd rs1`
41559    /// Rust: `vl1r_v(vd, rs1)`
41560    ///
41561    /// # Arguments
41562    /// - `vd` — Vector register operand.
41563    /// - `rs1` — Memory base register.
41564    pub fn vl1r_v<T0, T1>(&mut self, vd: T0, rs1: T1)
41565    where
41566        Self: Vl1RVEmitter<T0, T1>,
41567    {
41568        <Self as Vl1RVEmitter<T0, T1>>::vl1r_v(self, vd, rs1);
41569    }
41570    /// RISC-V `vl1re16.v` instruction.
41571    ///
41572    /// # Forms
41573    /// Assembly: `vl1re16.v xs1, vd`
41574    /// Rust: `vl1re16_v(vd, rs1)`
41575    ///
41576    /// # Arguments
41577    /// - `vd` — Vector register operand.
41578    /// - `rs1` — Memory base register.
41579    pub fn vl1re16_v<T0, T1>(&mut self, vd: T0, rs1: T1)
41580    where
41581        Self: Vl1Re16VEmitter<T0, T1>,
41582    {
41583        <Self as Vl1Re16VEmitter<T0, T1>>::vl1re16_v(self, vd, rs1);
41584    }
41585    /// RISC-V `vl1re32.v` instruction.
41586    ///
41587    /// # Forms
41588    /// Assembly: `vl1re32.v xs1, vd`
41589    /// Rust: `vl1re32_v(vd, rs1)`
41590    ///
41591    /// # Arguments
41592    /// - `vd` — Vector register operand.
41593    /// - `rs1` — Memory base register.
41594    pub fn vl1re32_v<T0, T1>(&mut self, vd: T0, rs1: T1)
41595    where
41596        Self: Vl1Re32VEmitter<T0, T1>,
41597    {
41598        <Self as Vl1Re32VEmitter<T0, T1>>::vl1re32_v(self, vd, rs1);
41599    }
41600    /// RISC-V `vl1re64.v` instruction.
41601    ///
41602    /// # Forms
41603    /// Assembly: `vl1re64.v xs1, vd`
41604    /// Rust: `vl1re64_v(vd, rs1)`
41605    ///
41606    /// # Arguments
41607    /// - `vd` — Vector register operand.
41608    /// - `rs1` — Memory base register.
41609    pub fn vl1re64_v<T0, T1>(&mut self, vd: T0, rs1: T1)
41610    where
41611        Self: Vl1Re64VEmitter<T0, T1>,
41612    {
41613        <Self as Vl1Re64VEmitter<T0, T1>>::vl1re64_v(self, vd, rs1);
41614    }
41615    /// RISC-V `vl1re8.v` instruction.
41616    ///
41617    /// # Forms
41618    /// Assembly: `vl1re8.v xs1, vd`
41619    /// Rust: `vl1re8_v(vd, rs1)`
41620    ///
41621    /// # Arguments
41622    /// - `vd` — Vector register operand.
41623    /// - `rs1` — Memory base register.
41624    pub fn vl1re8_v<T0, T1>(&mut self, vd: T0, rs1: T1)
41625    where
41626        Self: Vl1Re8VEmitter<T0, T1>,
41627    {
41628        <Self as Vl1Re8VEmitter<T0, T1>>::vl1re8_v(self, vd, rs1);
41629    }
41630    /// RISC-V `vl2r.v` instruction.
41631    ///
41632    /// # Forms
41633    /// Assembly: `vl2r.v vd rs1`
41634    /// Rust: `vl2r_v(vd, rs1)`
41635    ///
41636    /// # Arguments
41637    /// - `vd` — Vector register operand.
41638    /// - `rs1` — Memory base register.
41639    pub fn vl2r_v<T0, T1>(&mut self, vd: T0, rs1: T1)
41640    where
41641        Self: Vl2RVEmitter<T0, T1>,
41642    {
41643        <Self as Vl2RVEmitter<T0, T1>>::vl2r_v(self, vd, rs1);
41644    }
41645    /// RISC-V `vl2re16.v` instruction.
41646    ///
41647    /// # Forms
41648    /// Assembly: `vl2re16.v xs1, vd`
41649    /// Rust: `vl2re16_v(vd, rs1)`
41650    ///
41651    /// # Arguments
41652    /// - `vd` — Vector register operand.
41653    /// - `rs1` — Memory base register.
41654    pub fn vl2re16_v<T0, T1>(&mut self, vd: T0, rs1: T1)
41655    where
41656        Self: Vl2Re16VEmitter<T0, T1>,
41657    {
41658        <Self as Vl2Re16VEmitter<T0, T1>>::vl2re16_v(self, vd, rs1);
41659    }
41660    /// RISC-V `vl2re32.v` instruction.
41661    ///
41662    /// # Forms
41663    /// Assembly: `vl2re32.v xs1, vd`
41664    /// Rust: `vl2re32_v(vd, rs1)`
41665    ///
41666    /// # Arguments
41667    /// - `vd` — Vector register operand.
41668    /// - `rs1` — Memory base register.
41669    pub fn vl2re32_v<T0, T1>(&mut self, vd: T0, rs1: T1)
41670    where
41671        Self: Vl2Re32VEmitter<T0, T1>,
41672    {
41673        <Self as Vl2Re32VEmitter<T0, T1>>::vl2re32_v(self, vd, rs1);
41674    }
41675    /// RISC-V `vl2re64.v` instruction.
41676    ///
41677    /// # Forms
41678    /// Assembly: `vl2re64.v xs1, vd`
41679    /// Rust: `vl2re64_v(vd, rs1)`
41680    ///
41681    /// # Arguments
41682    /// - `vd` — Vector register operand.
41683    /// - `rs1` — Memory base register.
41684    pub fn vl2re64_v<T0, T1>(&mut self, vd: T0, rs1: T1)
41685    where
41686        Self: Vl2Re64VEmitter<T0, T1>,
41687    {
41688        <Self as Vl2Re64VEmitter<T0, T1>>::vl2re64_v(self, vd, rs1);
41689    }
41690    /// RISC-V `vl2re8.v` instruction.
41691    ///
41692    /// # Forms
41693    /// Assembly: `vl2re8.v xs1, vd`
41694    /// Rust: `vl2re8_v(vd, rs1)`
41695    ///
41696    /// # Arguments
41697    /// - `vd` — Vector register operand.
41698    /// - `rs1` — Memory base register.
41699    pub fn vl2re8_v<T0, T1>(&mut self, vd: T0, rs1: T1)
41700    where
41701        Self: Vl2Re8VEmitter<T0, T1>,
41702    {
41703        <Self as Vl2Re8VEmitter<T0, T1>>::vl2re8_v(self, vd, rs1);
41704    }
41705    /// RISC-V `vl4r.v` instruction.
41706    ///
41707    /// # Forms
41708    /// Assembly: `vl4r.v vd rs1`
41709    /// Rust: `vl4r_v(vd, rs1)`
41710    ///
41711    /// # Arguments
41712    /// - `vd` — Vector register operand.
41713    /// - `rs1` — Memory base register.
41714    pub fn vl4r_v<T0, T1>(&mut self, vd: T0, rs1: T1)
41715    where
41716        Self: Vl4RVEmitter<T0, T1>,
41717    {
41718        <Self as Vl4RVEmitter<T0, T1>>::vl4r_v(self, vd, rs1);
41719    }
41720    /// RISC-V `vl4re16.v` instruction.
41721    ///
41722    /// # Forms
41723    /// Assembly: `vl4re16.v xs1, vd`
41724    /// Rust: `vl4re16_v(vd, rs1)`
41725    ///
41726    /// # Arguments
41727    /// - `vd` — Vector register operand.
41728    /// - `rs1` — Memory base register.
41729    pub fn vl4re16_v<T0, T1>(&mut self, vd: T0, rs1: T1)
41730    where
41731        Self: Vl4Re16VEmitter<T0, T1>,
41732    {
41733        <Self as Vl4Re16VEmitter<T0, T1>>::vl4re16_v(self, vd, rs1);
41734    }
41735    /// RISC-V `vl4re32.v` instruction.
41736    ///
41737    /// # Forms
41738    /// Assembly: `vl4re32.v xs1, vd`
41739    /// Rust: `vl4re32_v(vd, rs1)`
41740    ///
41741    /// # Arguments
41742    /// - `vd` — Vector register operand.
41743    /// - `rs1` — Memory base register.
41744    pub fn vl4re32_v<T0, T1>(&mut self, vd: T0, rs1: T1)
41745    where
41746        Self: Vl4Re32VEmitter<T0, T1>,
41747    {
41748        <Self as Vl4Re32VEmitter<T0, T1>>::vl4re32_v(self, vd, rs1);
41749    }
41750    /// RISC-V `vl4re64.v` instruction.
41751    ///
41752    /// # Forms
41753    /// Assembly: `vl4re64.v xs1, vd`
41754    /// Rust: `vl4re64_v(vd, rs1)`
41755    ///
41756    /// # Arguments
41757    /// - `vd` — Vector register operand.
41758    /// - `rs1` — Memory base register.
41759    pub fn vl4re64_v<T0, T1>(&mut self, vd: T0, rs1: T1)
41760    where
41761        Self: Vl4Re64VEmitter<T0, T1>,
41762    {
41763        <Self as Vl4Re64VEmitter<T0, T1>>::vl4re64_v(self, vd, rs1);
41764    }
41765    /// RISC-V `vl4re8.v` instruction.
41766    ///
41767    /// # Forms
41768    /// Assembly: `vl4re8.v xs1, vd`
41769    /// Rust: `vl4re8_v(vd, rs1)`
41770    ///
41771    /// # Arguments
41772    /// - `vd` — Vector register operand.
41773    /// - `rs1` — Memory base register.
41774    pub fn vl4re8_v<T0, T1>(&mut self, vd: T0, rs1: T1)
41775    where
41776        Self: Vl4Re8VEmitter<T0, T1>,
41777    {
41778        <Self as Vl4Re8VEmitter<T0, T1>>::vl4re8_v(self, vd, rs1);
41779    }
41780    /// RISC-V `vl8r.v` instruction.
41781    ///
41782    /// # Forms
41783    /// Assembly: `vl8r.v vd rs1`
41784    /// Rust: `vl8r_v(vd, rs1)`
41785    ///
41786    /// # Arguments
41787    /// - `vd` — Vector register operand.
41788    /// - `rs1` — Memory base register.
41789    pub fn vl8r_v<T0, T1>(&mut self, vd: T0, rs1: T1)
41790    where
41791        Self: Vl8RVEmitter<T0, T1>,
41792    {
41793        <Self as Vl8RVEmitter<T0, T1>>::vl8r_v(self, vd, rs1);
41794    }
41795    /// RISC-V `vl8re16.v` instruction.
41796    ///
41797    /// # Forms
41798    /// Assembly: `vl8re16.v xs1, vd`
41799    /// Rust: `vl8re16_v(vd, rs1)`
41800    ///
41801    /// # Arguments
41802    /// - `vd` — Vector register operand.
41803    /// - `rs1` — Memory base register.
41804    pub fn vl8re16_v<T0, T1>(&mut self, vd: T0, rs1: T1)
41805    where
41806        Self: Vl8Re16VEmitter<T0, T1>,
41807    {
41808        <Self as Vl8Re16VEmitter<T0, T1>>::vl8re16_v(self, vd, rs1);
41809    }
41810    /// RISC-V `vl8re32.v` instruction.
41811    ///
41812    /// # Forms
41813    /// Assembly: `vl8re32.v xs1, vd`
41814    /// Rust: `vl8re32_v(vd, rs1)`
41815    ///
41816    /// # Arguments
41817    /// - `vd` — Vector register operand.
41818    /// - `rs1` — Memory base register.
41819    pub fn vl8re32_v<T0, T1>(&mut self, vd: T0, rs1: T1)
41820    where
41821        Self: Vl8Re32VEmitter<T0, T1>,
41822    {
41823        <Self as Vl8Re32VEmitter<T0, T1>>::vl8re32_v(self, vd, rs1);
41824    }
41825    /// RISC-V `vl8re64.v` instruction.
41826    ///
41827    /// # Forms
41828    /// Assembly: `vl8re64.v xs1, vd`
41829    /// Rust: `vl8re64_v(vd, rs1)`
41830    ///
41831    /// # Arguments
41832    /// - `vd` — Vector register operand.
41833    /// - `rs1` — Memory base register.
41834    pub fn vl8re64_v<T0, T1>(&mut self, vd: T0, rs1: T1)
41835    where
41836        Self: Vl8Re64VEmitter<T0, T1>,
41837    {
41838        <Self as Vl8Re64VEmitter<T0, T1>>::vl8re64_v(self, vd, rs1);
41839    }
41840    /// RISC-V `vl8re8.v` instruction.
41841    ///
41842    /// # Forms
41843    /// Assembly: `vl8re8.v xs1, vd`
41844    /// Rust: `vl8re8_v(vd, rs1)`
41845    ///
41846    /// # Arguments
41847    /// - `vd` — Vector register operand.
41848    /// - `rs1` — Memory base register.
41849    pub fn vl8re8_v<T0, T1>(&mut self, vd: T0, rs1: T1)
41850    where
41851        Self: Vl8Re8VEmitter<T0, T1>,
41852    {
41853        <Self as Vl8Re8VEmitter<T0, T1>>::vl8re8_v(self, vd, rs1);
41854    }
41855    /// RISC-V `vle16.v` instruction.
41856    ///
41857    /// # Forms
41858    /// Assembly: `vle16.v vm, xs1, vd`
41859    /// Rust: `vle16_v(vd, rs1, vm, nf)`
41860    ///
41861    /// # Arguments
41862    /// - `vd` — Vector register operand.
41863    /// - `rs1` — Memory base register.
41864    /// - `vm` — Vector mask control.
41865    /// - `nf` — Vector segment field count.
41866    pub fn vle16_v<T0, T1, T2, T3>(&mut self, vd: T0, rs1: T1, vm: T2, nf: T3)
41867    where
41868        Self: Vle16VEmitter<T0, T1, T2, T3>,
41869    {
41870        <Self as Vle16VEmitter<T0, T1, T2, T3>>::vle16_v(self, vd, rs1, vm, nf);
41871    }
41872    /// RISC-V `vle16ff.v` instruction.
41873    ///
41874    /// # Forms
41875    /// Assembly: `vle16ff.v vm, xs1, vd`
41876    /// Rust: `vle16ff_v(vd, rs1, vm, nf)`
41877    ///
41878    /// # Arguments
41879    /// - `vd` — Vector register operand.
41880    /// - `rs1` — Memory base register.
41881    /// - `vm` — Vector mask control.
41882    /// - `nf` — Vector segment field count.
41883    pub fn vle16ff_v<T0, T1, T2, T3>(&mut self, vd: T0, rs1: T1, vm: T2, nf: T3)
41884    where
41885        Self: Vle16FfVEmitter<T0, T1, T2, T3>,
41886    {
41887        <Self as Vle16FfVEmitter<T0, T1, T2, T3>>::vle16ff_v(self, vd, rs1, vm, nf);
41888    }
41889    /// RISC-V `vle1.v` instruction.
41890    ///
41891    /// # Forms
41892    /// Assembly: `vle1.v vd rs1`
41893    /// Rust: `vle1_v(vd, rs1)`
41894    ///
41895    /// # Arguments
41896    /// - `vd` — Vector register operand.
41897    /// - `rs1` — Memory base register.
41898    pub fn vle1_v<T0, T1>(&mut self, vd: T0, rs1: T1)
41899    where
41900        Self: Vle1VEmitter<T0, T1>,
41901    {
41902        <Self as Vle1VEmitter<T0, T1>>::vle1_v(self, vd, rs1);
41903    }
41904    /// RISC-V `vle32.v` instruction.
41905    ///
41906    /// # Forms
41907    /// Assembly: `vle32.v vm, xs1, vd`
41908    /// Rust: `vle32_v(vd, rs1, vm, nf)`
41909    ///
41910    /// # Arguments
41911    /// - `vd` — Vector register operand.
41912    /// - `rs1` — Memory base register.
41913    /// - `vm` — Vector mask control.
41914    /// - `nf` — Vector segment field count.
41915    pub fn vle32_v<T0, T1, T2, T3>(&mut self, vd: T0, rs1: T1, vm: T2, nf: T3)
41916    where
41917        Self: Vle32VEmitter<T0, T1, T2, T3>,
41918    {
41919        <Self as Vle32VEmitter<T0, T1, T2, T3>>::vle32_v(self, vd, rs1, vm, nf);
41920    }
41921    /// RISC-V `vle32ff.v` instruction.
41922    ///
41923    /// # Forms
41924    /// Assembly: `vle32ff.v vm, xs1, vd`
41925    /// Rust: `vle32ff_v(vd, rs1, vm, nf)`
41926    ///
41927    /// # Arguments
41928    /// - `vd` — Vector register operand.
41929    /// - `rs1` — Memory base register.
41930    /// - `vm` — Vector mask control.
41931    /// - `nf` — Vector segment field count.
41932    pub fn vle32ff_v<T0, T1, T2, T3>(&mut self, vd: T0, rs1: T1, vm: T2, nf: T3)
41933    where
41934        Self: Vle32FfVEmitter<T0, T1, T2, T3>,
41935    {
41936        <Self as Vle32FfVEmitter<T0, T1, T2, T3>>::vle32ff_v(self, vd, rs1, vm, nf);
41937    }
41938    /// RISC-V `vle64.v` instruction.
41939    ///
41940    /// # Forms
41941    /// Assembly: `vle64.v vm, xs1, vd`
41942    /// Rust: `vle64_v(vd, rs1, vm, nf)`
41943    ///
41944    /// # Arguments
41945    /// - `vd` — Vector register operand.
41946    /// - `rs1` — Memory base register.
41947    /// - `vm` — Vector mask control.
41948    /// - `nf` — Vector segment field count.
41949    pub fn vle64_v<T0, T1, T2, T3>(&mut self, vd: T0, rs1: T1, vm: T2, nf: T3)
41950    where
41951        Self: Vle64VEmitter<T0, T1, T2, T3>,
41952    {
41953        <Self as Vle64VEmitter<T0, T1, T2, T3>>::vle64_v(self, vd, rs1, vm, nf);
41954    }
41955    /// RISC-V `vle64ff.v` instruction.
41956    ///
41957    /// # Forms
41958    /// Assembly: `vle64ff.v vm, xs1, vd`
41959    /// Rust: `vle64ff_v(vd, rs1, vm, nf)`
41960    ///
41961    /// # Arguments
41962    /// - `vd` — Vector register operand.
41963    /// - `rs1` — Memory base register.
41964    /// - `vm` — Vector mask control.
41965    /// - `nf` — Vector segment field count.
41966    pub fn vle64ff_v<T0, T1, T2, T3>(&mut self, vd: T0, rs1: T1, vm: T2, nf: T3)
41967    where
41968        Self: Vle64FfVEmitter<T0, T1, T2, T3>,
41969    {
41970        <Self as Vle64FfVEmitter<T0, T1, T2, T3>>::vle64ff_v(self, vd, rs1, vm, nf);
41971    }
41972    /// RISC-V `vle8.v` instruction.
41973    ///
41974    /// # Forms
41975    /// Assembly: `vle8.v vm, xs1, vd`
41976    /// Rust: `vle8_v(vd, rs1, vm, nf)`
41977    ///
41978    /// # Arguments
41979    /// - `vd` — Vector register operand.
41980    /// - `rs1` — Memory base register.
41981    /// - `vm` — Vector mask control.
41982    /// - `nf` — Vector segment field count.
41983    pub fn vle8_v<T0, T1, T2, T3>(&mut self, vd: T0, rs1: T1, vm: T2, nf: T3)
41984    where
41985        Self: Vle8VEmitter<T0, T1, T2, T3>,
41986    {
41987        <Self as Vle8VEmitter<T0, T1, T2, T3>>::vle8_v(self, vd, rs1, vm, nf);
41988    }
41989    /// RISC-V `vle8ff.v` instruction.
41990    ///
41991    /// # Forms
41992    /// Assembly: `vle8ff.v vm, xs1, vd`
41993    /// Rust: `vle8ff_v(vd, rs1, vm, nf)`
41994    ///
41995    /// # Arguments
41996    /// - `vd` — Vector register operand.
41997    /// - `rs1` — Memory base register.
41998    /// - `vm` — Vector mask control.
41999    /// - `nf` — Vector segment field count.
42000    pub fn vle8ff_v<T0, T1, T2, T3>(&mut self, vd: T0, rs1: T1, vm: T2, nf: T3)
42001    where
42002        Self: Vle8FfVEmitter<T0, T1, T2, T3>,
42003    {
42004        <Self as Vle8FfVEmitter<T0, T1, T2, T3>>::vle8ff_v(self, vd, rs1, vm, nf);
42005    }
42006    /// RISC-V `vlm.v` instruction.
42007    ///
42008    /// # Forms
42009    /// Assembly: `vlm.v xs1, vd`
42010    /// Rust: `vlm_v(vd, rs1)`
42011    ///
42012    /// # Arguments
42013    /// - `vd` — Vector register operand.
42014    /// - `rs1` — Memory base register.
42015    pub fn vlm_v<T0, T1>(&mut self, vd: T0, rs1: T1)
42016    where
42017        Self: VlmVEmitter<T0, T1>,
42018    {
42019        <Self as VlmVEmitter<T0, T1>>::vlm_v(self, vd, rs1);
42020    }
42021    /// RISC-V `vloxei16.v` instruction.
42022    ///
42023    /// # Forms
42024    /// Assembly: `vloxei16.v vm, vs2, xs1, vd`
42025    /// Rust: `vloxei16_v(vd, rs1, vs2, vm, nf)`
42026    ///
42027    /// # Arguments
42028    /// - `vd` — Vector register operand.
42029    /// - `rs1` — Memory base register.
42030    /// - `vs2` — Vector register operand.
42031    /// - `vm` — Vector mask control.
42032    /// - `nf` — Vector segment field count.
42033    pub fn vloxei16_v<T0, T1, T2, T3, T4>(&mut self, vd: T0, rs1: T1, vs2: T2, vm: T3, nf: T4)
42034    where
42035        Self: Vloxei16VEmitter<T0, T1, T2, T3, T4>,
42036    {
42037        <Self as Vloxei16VEmitter<T0, T1, T2, T3, T4>>::vloxei16_v(self, vd, rs1, vs2, vm, nf);
42038    }
42039    /// RISC-V `vloxei32.v` instruction.
42040    ///
42041    /// # Forms
42042    /// Assembly: `vloxei32.v vm, vs2, xs1, vd`
42043    /// Rust: `vloxei32_v(vd, rs1, vs2, vm, nf)`
42044    ///
42045    /// # Arguments
42046    /// - `vd` — Vector register operand.
42047    /// - `rs1` — Memory base register.
42048    /// - `vs2` — Vector register operand.
42049    /// - `vm` — Vector mask control.
42050    /// - `nf` — Vector segment field count.
42051    pub fn vloxei32_v<T0, T1, T2, T3, T4>(&mut self, vd: T0, rs1: T1, vs2: T2, vm: T3, nf: T4)
42052    where
42053        Self: Vloxei32VEmitter<T0, T1, T2, T3, T4>,
42054    {
42055        <Self as Vloxei32VEmitter<T0, T1, T2, T3, T4>>::vloxei32_v(self, vd, rs1, vs2, vm, nf);
42056    }
42057    /// RISC-V `vloxei64.v` instruction.
42058    ///
42059    /// # Forms
42060    /// Assembly: `vloxei64.v vm, vs2, xs1, vd`
42061    /// Rust: `vloxei64_v(vd, rs1, vs2, vm, nf)`
42062    ///
42063    /// # Arguments
42064    /// - `vd` — Vector register operand.
42065    /// - `rs1` — Memory base register.
42066    /// - `vs2` — Vector register operand.
42067    /// - `vm` — Vector mask control.
42068    /// - `nf` — Vector segment field count.
42069    pub fn vloxei64_v<T0, T1, T2, T3, T4>(&mut self, vd: T0, rs1: T1, vs2: T2, vm: T3, nf: T4)
42070    where
42071        Self: Vloxei64VEmitter<T0, T1, T2, T3, T4>,
42072    {
42073        <Self as Vloxei64VEmitter<T0, T1, T2, T3, T4>>::vloxei64_v(self, vd, rs1, vs2, vm, nf);
42074    }
42075    /// RISC-V `vloxei8.v` instruction.
42076    ///
42077    /// # Forms
42078    /// Assembly: `vloxei8.v vm, vs2, xs1, vd`
42079    /// Rust: `vloxei8_v(vd, rs1, vs2, vm, nf)`
42080    ///
42081    /// # Arguments
42082    /// - `vd` — Vector register operand.
42083    /// - `rs1` — Memory base register.
42084    /// - `vs2` — Vector register operand.
42085    /// - `vm` — Vector mask control.
42086    /// - `nf` — Vector segment field count.
42087    pub fn vloxei8_v<T0, T1, T2, T3, T4>(&mut self, vd: T0, rs1: T1, vs2: T2, vm: T3, nf: T4)
42088    where
42089        Self: Vloxei8VEmitter<T0, T1, T2, T3, T4>,
42090    {
42091        <Self as Vloxei8VEmitter<T0, T1, T2, T3, T4>>::vloxei8_v(self, vd, rs1, vs2, vm, nf);
42092    }
42093    /// RISC-V `vlse16.v` instruction.
42094    ///
42095    /// # Forms
42096    /// Assembly: `vlse16.v vm, xs2, xs1, vd`
42097    /// Rust: `vlse16_v(vd, rs1, rs2, vm, nf)`
42098    ///
42099    /// # Arguments
42100    /// - `vd` — Vector register operand.
42101    /// - `rs1` — Memory base register.
42102    /// - `rs2` — Source register.
42103    /// - `vm` — Vector mask control.
42104    /// - `nf` — Vector segment field count.
42105    pub fn vlse16_v<T0, T1, T2, T3, T4>(&mut self, vd: T0, rs1: T1, rs2: T2, vm: T3, nf: T4)
42106    where
42107        Self: Vlse16VEmitter<T0, T1, T2, T3, T4>,
42108    {
42109        <Self as Vlse16VEmitter<T0, T1, T2, T3, T4>>::vlse16_v(self, vd, rs1, rs2, vm, nf);
42110    }
42111    /// RISC-V `vlse32.v` instruction.
42112    ///
42113    /// # Forms
42114    /// Assembly: `vlse32.v vm, xs2, xs1, vd`
42115    /// Rust: `vlse32_v(vd, rs1, rs2, vm, nf)`
42116    ///
42117    /// # Arguments
42118    /// - `vd` — Vector register operand.
42119    /// - `rs1` — Memory base register.
42120    /// - `rs2` — Source register.
42121    /// - `vm` — Vector mask control.
42122    /// - `nf` — Vector segment field count.
42123    pub fn vlse32_v<T0, T1, T2, T3, T4>(&mut self, vd: T0, rs1: T1, rs2: T2, vm: T3, nf: T4)
42124    where
42125        Self: Vlse32VEmitter<T0, T1, T2, T3, T4>,
42126    {
42127        <Self as Vlse32VEmitter<T0, T1, T2, T3, T4>>::vlse32_v(self, vd, rs1, rs2, vm, nf);
42128    }
42129    /// RISC-V `vlse64.v` instruction.
42130    ///
42131    /// # Forms
42132    /// Assembly: `vlse64.v vm, xs2, xs1, vd`
42133    /// Rust: `vlse64_v(vd, rs1, rs2, vm, nf)`
42134    ///
42135    /// # Arguments
42136    /// - `vd` — Vector register operand.
42137    /// - `rs1` — Memory base register.
42138    /// - `rs2` — Source register.
42139    /// - `vm` — Vector mask control.
42140    /// - `nf` — Vector segment field count.
42141    pub fn vlse64_v<T0, T1, T2, T3, T4>(&mut self, vd: T0, rs1: T1, rs2: T2, vm: T3, nf: T4)
42142    where
42143        Self: Vlse64VEmitter<T0, T1, T2, T3, T4>,
42144    {
42145        <Self as Vlse64VEmitter<T0, T1, T2, T3, T4>>::vlse64_v(self, vd, rs1, rs2, vm, nf);
42146    }
42147    /// RISC-V `vlse8.v` instruction.
42148    ///
42149    /// # Forms
42150    /// Assembly: `vlse8.v vm, xs2, xs1, vd`
42151    /// Rust: `vlse8_v(vd, rs1, rs2, vm, nf)`
42152    ///
42153    /// # Arguments
42154    /// - `vd` — Vector register operand.
42155    /// - `rs1` — Memory base register.
42156    /// - `rs2` — Source register.
42157    /// - `vm` — Vector mask control.
42158    /// - `nf` — Vector segment field count.
42159    pub fn vlse8_v<T0, T1, T2, T3, T4>(&mut self, vd: T0, rs1: T1, rs2: T2, vm: T3, nf: T4)
42160    where
42161        Self: Vlse8VEmitter<T0, T1, T2, T3, T4>,
42162    {
42163        <Self as Vlse8VEmitter<T0, T1, T2, T3, T4>>::vlse8_v(self, vd, rs1, rs2, vm, nf);
42164    }
42165    /// RISC-V `vluxei16.v` instruction.
42166    ///
42167    /// # Forms
42168    /// Assembly: `vluxei16.v vm, vs2, xs1, vd`
42169    /// Rust: `vluxei16_v(vd, rs1, vs2, vm, nf)`
42170    ///
42171    /// # Arguments
42172    /// - `vd` — Vector register operand.
42173    /// - `rs1` — Memory base register.
42174    /// - `vs2` — Vector register operand.
42175    /// - `vm` — Vector mask control.
42176    /// - `nf` — Vector segment field count.
42177    pub fn vluxei16_v<T0, T1, T2, T3, T4>(&mut self, vd: T0, rs1: T1, vs2: T2, vm: T3, nf: T4)
42178    where
42179        Self: Vluxei16VEmitter<T0, T1, T2, T3, T4>,
42180    {
42181        <Self as Vluxei16VEmitter<T0, T1, T2, T3, T4>>::vluxei16_v(self, vd, rs1, vs2, vm, nf);
42182    }
42183    /// RISC-V `vluxei32.v` instruction.
42184    ///
42185    /// # Forms
42186    /// Assembly: `vluxei32.v vm, vs2, xs1, vd`
42187    /// Rust: `vluxei32_v(vd, rs1, vs2, vm, nf)`
42188    ///
42189    /// # Arguments
42190    /// - `vd` — Vector register operand.
42191    /// - `rs1` — Memory base register.
42192    /// - `vs2` — Vector register operand.
42193    /// - `vm` — Vector mask control.
42194    /// - `nf` — Vector segment field count.
42195    pub fn vluxei32_v<T0, T1, T2, T3, T4>(&mut self, vd: T0, rs1: T1, vs2: T2, vm: T3, nf: T4)
42196    where
42197        Self: Vluxei32VEmitter<T0, T1, T2, T3, T4>,
42198    {
42199        <Self as Vluxei32VEmitter<T0, T1, T2, T3, T4>>::vluxei32_v(self, vd, rs1, vs2, vm, nf);
42200    }
42201    /// RISC-V `vluxei64.v` instruction.
42202    ///
42203    /// # Forms
42204    /// Assembly: `vluxei64.v vm, vs2, xs1, vd`
42205    /// Rust: `vluxei64_v(vd, rs1, vs2, vm, nf)`
42206    ///
42207    /// # Arguments
42208    /// - `vd` — Vector register operand.
42209    /// - `rs1` — Memory base register.
42210    /// - `vs2` — Vector register operand.
42211    /// - `vm` — Vector mask control.
42212    /// - `nf` — Vector segment field count.
42213    pub fn vluxei64_v<T0, T1, T2, T3, T4>(&mut self, vd: T0, rs1: T1, vs2: T2, vm: T3, nf: T4)
42214    where
42215        Self: Vluxei64VEmitter<T0, T1, T2, T3, T4>,
42216    {
42217        <Self as Vluxei64VEmitter<T0, T1, T2, T3, T4>>::vluxei64_v(self, vd, rs1, vs2, vm, nf);
42218    }
42219    /// RISC-V `vluxei8.v` instruction.
42220    ///
42221    /// # Forms
42222    /// Assembly: `vluxei8.v vm, vs2, xs1, vd`
42223    /// Rust: `vluxei8_v(vd, rs1, vs2, vm, nf)`
42224    ///
42225    /// # Arguments
42226    /// - `vd` — Vector register operand.
42227    /// - `rs1` — Memory base register.
42228    /// - `vs2` — Vector register operand.
42229    /// - `vm` — Vector mask control.
42230    /// - `nf` — Vector segment field count.
42231    pub fn vluxei8_v<T0, T1, T2, T3, T4>(&mut self, vd: T0, rs1: T1, vs2: T2, vm: T3, nf: T4)
42232    where
42233        Self: Vluxei8VEmitter<T0, T1, T2, T3, T4>,
42234    {
42235        <Self as Vluxei8VEmitter<T0, T1, T2, T3, T4>>::vluxei8_v(self, vd, rs1, vs2, vm, nf);
42236    }
42237    /// RISC-V `vmacc.vv` instruction.
42238    ///
42239    /// # Forms
42240    /// Assembly: `vmacc.vv vm, vs2, vs1, vd`
42241    /// Rust: `vmacc_vv(vd, vs1, vs2, vm)`
42242    ///
42243    /// # Arguments
42244    /// - `vd` — Vector register operand.
42245    /// - `vs1` — Vector register operand.
42246    /// - `vs2` — Vector register operand.
42247    /// - `vm` — Vector mask control.
42248    pub fn vmacc_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
42249    where
42250        Self: VmaccVvEmitter<T0, T1, T2, T3>,
42251    {
42252        <Self as VmaccVvEmitter<T0, T1, T2, T3>>::vmacc_vv(self, vd, vs1, vs2, vm);
42253    }
42254    /// RISC-V `vmacc.vx` instruction.
42255    ///
42256    /// # Forms
42257    /// Assembly: `vmacc.vx vm, vs2, xs1, vd`
42258    /// Rust: `vmacc_vx(vd, vs2, rs1, vm)`
42259    ///
42260    /// # Arguments
42261    /// - `vd` — Vector register operand.
42262    /// - `vs2` — Vector register operand.
42263    /// - `rs1` — Source register.
42264    /// - `vm` — Vector mask control.
42265    pub fn vmacc_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
42266    where
42267        Self: VmaccVxEmitter<T0, T1, T2, T3>,
42268    {
42269        <Self as VmaccVxEmitter<T0, T1, T2, T3>>::vmacc_vx(self, vd, vs2, rs1, vm);
42270    }
42271    /// RISC-V `vmadc.vi` instruction.
42272    ///
42273    /// # Forms
42274    /// Assembly: `vmadc.vi vs2, vd, imm`
42275    /// Rust: `vmadc_vi(vd, vs2, simm5)`
42276    ///
42277    /// # Arguments
42278    /// - `vd` — Vector register operand.
42279    /// - `vs2` — Vector register operand.
42280    /// - `simm5` — Immediate encoding value.
42281    pub fn vmadc_vi<T0, T1, T2>(&mut self, vd: T0, vs2: T1, simm5: T2)
42282    where
42283        Self: VmadcViEmitter<T0, T1, T2>,
42284    {
42285        <Self as VmadcViEmitter<T0, T1, T2>>::vmadc_vi(self, vd, vs2, simm5);
42286    }
42287    /// RISC-V `vmadc.vim` instruction.
42288    ///
42289    /// # Forms
42290    /// Assembly: `vmadc.vim vs2, vd, imm`
42291    /// Rust: `vmadc_vim(vd, vs2, simm5)`
42292    ///
42293    /// # Arguments
42294    /// - `vd` — Vector register operand.
42295    /// - `vs2` — Vector register operand.
42296    /// - `simm5` — Immediate encoding value.
42297    pub fn vmadc_vim<T0, T1, T2>(&mut self, vd: T0, vs2: T1, simm5: T2)
42298    where
42299        Self: VmadcVimEmitter<T0, T1, T2>,
42300    {
42301        <Self as VmadcVimEmitter<T0, T1, T2>>::vmadc_vim(self, vd, vs2, simm5);
42302    }
42303    /// RISC-V `vmadc.vv` instruction.
42304    ///
42305    /// # Forms
42306    /// Assembly: `vmadc.vv vs2, vs1, vd`
42307    /// Rust: `vmadc_vv(vd, vs1, vs2)`
42308    ///
42309    /// # Arguments
42310    /// - `vd` — Vector register operand.
42311    /// - `vs1` — Vector register operand.
42312    /// - `vs2` — Vector register operand.
42313    pub fn vmadc_vv<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)
42314    where
42315        Self: VmadcVvEmitter<T0, T1, T2>,
42316    {
42317        <Self as VmadcVvEmitter<T0, T1, T2>>::vmadc_vv(self, vd, vs1, vs2);
42318    }
42319    /// RISC-V `vmadc.vvm` instruction.
42320    ///
42321    /// # Forms
42322    /// Assembly: `vmadc.vvm vs2, vs1, vd`
42323    /// Rust: `vmadc_vvm(vd, vs1, vs2)`
42324    ///
42325    /// # Arguments
42326    /// - `vd` — Vector register operand.
42327    /// - `vs1` — Vector register operand.
42328    /// - `vs2` — Vector register operand.
42329    pub fn vmadc_vvm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)
42330    where
42331        Self: VmadcVvmEmitter<T0, T1, T2>,
42332    {
42333        <Self as VmadcVvmEmitter<T0, T1, T2>>::vmadc_vvm(self, vd, vs1, vs2);
42334    }
42335    /// RISC-V `vmadc.vx` instruction.
42336    ///
42337    /// # Forms
42338    /// Assembly: `vmadc.vx vs2, xs1, vd`
42339    /// Rust: `vmadc_vx(vd, rs1, vs2)`
42340    ///
42341    /// # Arguments
42342    /// - `vd` — Vector register operand.
42343    /// - `rs1` — Source register.
42344    /// - `vs2` — Vector register operand.
42345    pub fn vmadc_vx<T0, T1, T2>(&mut self, vd: T0, rs1: T1, vs2: T2)
42346    where
42347        Self: VmadcVxEmitter<T0, T1, T2>,
42348    {
42349        <Self as VmadcVxEmitter<T0, T1, T2>>::vmadc_vx(self, vd, rs1, vs2);
42350    }
42351    /// RISC-V `vmadc.vxm` instruction.
42352    ///
42353    /// # Forms
42354    /// Assembly: `vmadc.vxm vs2, xs1, vd`
42355    /// Rust: `vmadc_vxm(vd, rs1, vs2)`
42356    ///
42357    /// # Arguments
42358    /// - `vd` — Vector register operand.
42359    /// - `rs1` — Source register.
42360    /// - `vs2` — Vector register operand.
42361    pub fn vmadc_vxm<T0, T1, T2>(&mut self, vd: T0, rs1: T1, vs2: T2)
42362    where
42363        Self: VmadcVxmEmitter<T0, T1, T2>,
42364    {
42365        <Self as VmadcVxmEmitter<T0, T1, T2>>::vmadc_vxm(self, vd, rs1, vs2);
42366    }
42367    /// RISC-V `vmadd.vv` instruction.
42368    ///
42369    /// # Forms
42370    /// Assembly: `vmadd.vv vm, vs2, vs1, vd`
42371    /// Rust: `vmadd_vv(vd, vs1, vs2, vm)`
42372    ///
42373    /// # Arguments
42374    /// - `vd` — Vector register operand.
42375    /// - `vs1` — Vector register operand.
42376    /// - `vs2` — Vector register operand.
42377    /// - `vm` — Vector mask control.
42378    pub fn vmadd_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
42379    where
42380        Self: VmaddVvEmitter<T0, T1, T2, T3>,
42381    {
42382        <Self as VmaddVvEmitter<T0, T1, T2, T3>>::vmadd_vv(self, vd, vs1, vs2, vm);
42383    }
42384    /// RISC-V `vmadd.vx` instruction.
42385    ///
42386    /// # Forms
42387    /// Assembly: `vmadd.vx vm, vs2, xs1, vd`
42388    /// Rust: `vmadd_vx(vd, vs2, rs1, vm)`
42389    ///
42390    /// # Arguments
42391    /// - `vd` — Vector register operand.
42392    /// - `vs2` — Vector register operand.
42393    /// - `rs1` — Source register.
42394    /// - `vm` — Vector mask control.
42395    pub fn vmadd_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
42396    where
42397        Self: VmaddVxEmitter<T0, T1, T2, T3>,
42398    {
42399        <Self as VmaddVxEmitter<T0, T1, T2, T3>>::vmadd_vx(self, vd, vs2, rs1, vm);
42400    }
42401    /// RISC-V `vmand.mm` instruction.
42402    ///
42403    /// # Forms
42404    /// Assembly: `vmand.mm vs2, vs1, vd`
42405    /// Rust: `vmand_mm(vd, vs1, vs2)`
42406    ///
42407    /// # Arguments
42408    /// - `vd` — Vector register operand.
42409    /// - `vs1` — Vector register operand.
42410    /// - `vs2` — Vector register operand.
42411    pub fn vmand_mm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)
42412    where
42413        Self: VmandMmEmitter<T0, T1, T2>,
42414    {
42415        <Self as VmandMmEmitter<T0, T1, T2>>::vmand_mm(self, vd, vs1, vs2);
42416    }
42417    /// RISC-V `vmandn.mm` instruction.
42418    ///
42419    /// # Forms
42420    /// Assembly: `vmandn.mm vs2, vs1, vd`
42421    /// Rust: `vmandn_mm(vd, vs1, vs2)`
42422    ///
42423    /// # Arguments
42424    /// - `vd` — Vector register operand.
42425    /// - `vs1` — Vector register operand.
42426    /// - `vs2` — Vector register operand.
42427    pub fn vmandn_mm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)
42428    where
42429        Self: VmandnMmEmitter<T0, T1, T2>,
42430    {
42431        <Self as VmandnMmEmitter<T0, T1, T2>>::vmandn_mm(self, vd, vs1, vs2);
42432    }
42433    /// RISC-V `vmandnot.mm` instruction.
42434    ///
42435    /// # Forms
42436    /// Assembly: `vmandnot.mm vd vs1 vs2 vm`
42437    /// Rust: `vmandnot_mm(vd, vs1, vs2, vm)`
42438    ///
42439    /// # Arguments
42440    /// - `vd` — Vector register operand.
42441    /// - `vs1` — Vector register operand.
42442    /// - `vs2` — Vector register operand.
42443    /// - `vm` — Vector mask control.
42444    pub fn vmandnot_mm<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
42445    where
42446        Self: VmandnotMmEmitter<T0, T1, T2, T3>,
42447    {
42448        <Self as VmandnotMmEmitter<T0, T1, T2, T3>>::vmandnot_mm(self, vd, vs1, vs2, vm);
42449    }
42450    /// RISC-V `vmax.vv` instruction.
42451    ///
42452    /// # Forms
42453    /// Assembly: `vmax.vv vm, vs2, vs1, vd`
42454    /// Rust: `vmax_vv(vd, vs1, vs2, vm)`
42455    ///
42456    /// # Arguments
42457    /// - `vd` — Vector register operand.
42458    /// - `vs1` — Vector register operand.
42459    /// - `vs2` — Vector register operand.
42460    /// - `vm` — Vector mask control.
42461    pub fn vmax_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
42462    where
42463        Self: VmaxVvEmitter<T0, T1, T2, T3>,
42464    {
42465        <Self as VmaxVvEmitter<T0, T1, T2, T3>>::vmax_vv(self, vd, vs1, vs2, vm);
42466    }
42467    /// RISC-V `vmax.vx` instruction.
42468    ///
42469    /// # Forms
42470    /// Assembly: `vmax.vx vm, vs2, xs1, vd`
42471    /// Rust: `vmax_vx(vd, vs2, rs1, vm)`
42472    ///
42473    /// # Arguments
42474    /// - `vd` — Vector register operand.
42475    /// - `vs2` — Vector register operand.
42476    /// - `rs1` — Source register.
42477    /// - `vm` — Vector mask control.
42478    pub fn vmax_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
42479    where
42480        Self: VmaxVxEmitter<T0, T1, T2, T3>,
42481    {
42482        <Self as VmaxVxEmitter<T0, T1, T2, T3>>::vmax_vx(self, vd, vs2, rs1, vm);
42483    }
42484    /// RISC-V `vmaxu.vv` instruction.
42485    ///
42486    /// # Forms
42487    /// Assembly: `vmaxu.vv vm, vs2, vs1, vd`
42488    /// Rust: `vmaxu_vv(vd, vs1, vs2, vm)`
42489    ///
42490    /// # Arguments
42491    /// - `vd` — Vector register operand.
42492    /// - `vs1` — Vector register operand.
42493    /// - `vs2` — Vector register operand.
42494    /// - `vm` — Vector mask control.
42495    pub fn vmaxu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
42496    where
42497        Self: VmaxuVvEmitter<T0, T1, T2, T3>,
42498    {
42499        <Self as VmaxuVvEmitter<T0, T1, T2, T3>>::vmaxu_vv(self, vd, vs1, vs2, vm);
42500    }
42501    /// RISC-V `vmaxu.vx` instruction.
42502    ///
42503    /// # Forms
42504    /// Assembly: `vmaxu.vx vm, vs2, xs1, vd`
42505    /// Rust: `vmaxu_vx(vd, vs2, rs1, vm)`
42506    ///
42507    /// # Arguments
42508    /// - `vd` — Vector register operand.
42509    /// - `vs2` — Vector register operand.
42510    /// - `rs1` — Source register.
42511    /// - `vm` — Vector mask control.
42512    pub fn vmaxu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
42513    where
42514        Self: VmaxuVxEmitter<T0, T1, T2, T3>,
42515    {
42516        <Self as VmaxuVxEmitter<T0, T1, T2, T3>>::vmaxu_vx(self, vd, vs2, rs1, vm);
42517    }
42518    /// RISC-V `vmerge.vim` instruction.
42519    ///
42520    /// # Forms
42521    /// Assembly: `vmerge.vim vs2, vd, imm`
42522    /// Rust: `vmerge_vim(vd, vs2, simm5)`
42523    ///
42524    /// # Arguments
42525    /// - `vd` — Vector register operand.
42526    /// - `vs2` — Vector register operand.
42527    /// - `simm5` — Immediate encoding value.
42528    pub fn vmerge_vim<T0, T1, T2>(&mut self, vd: T0, vs2: T1, simm5: T2)
42529    where
42530        Self: VmergeVimEmitter<T0, T1, T2>,
42531    {
42532        <Self as VmergeVimEmitter<T0, T1, T2>>::vmerge_vim(self, vd, vs2, simm5);
42533    }
42534    /// RISC-V `vmerge.vvm` instruction.
42535    ///
42536    /// # Forms
42537    /// Assembly: `vmerge.vvm vs2, vs1, vd`
42538    /// Rust: `vmerge_vvm(vd, vs1, vs2)`
42539    ///
42540    /// # Arguments
42541    /// - `vd` — Vector register operand.
42542    /// - `vs1` — Vector register operand.
42543    /// - `vs2` — Vector register operand.
42544    pub fn vmerge_vvm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)
42545    where
42546        Self: VmergeVvmEmitter<T0, T1, T2>,
42547    {
42548        <Self as VmergeVvmEmitter<T0, T1, T2>>::vmerge_vvm(self, vd, vs1, vs2);
42549    }
42550    /// RISC-V `vmerge.vxm` instruction.
42551    ///
42552    /// # Forms
42553    /// Assembly: `vmerge.vxm vs2, xs1, vd`
42554    /// Rust: `vmerge_vxm(vd, rs1, vs2)`
42555    ///
42556    /// # Arguments
42557    /// - `vd` — Vector register operand.
42558    /// - `rs1` — Source register.
42559    /// - `vs2` — Vector register operand.
42560    pub fn vmerge_vxm<T0, T1, T2>(&mut self, vd: T0, rs1: T1, vs2: T2)
42561    where
42562        Self: VmergeVxmEmitter<T0, T1, T2>,
42563    {
42564        <Self as VmergeVxmEmitter<T0, T1, T2>>::vmerge_vxm(self, vd, rs1, vs2);
42565    }
42566    /// RISC-V `vmfeq.vf` instruction.
42567    ///
42568    /// # Forms
42569    /// Assembly: `vmfeq.vf vm, vs2, xs1, vd`
42570    /// Rust: `vmfeq_vf(vd, vs2, rs1, vm)`
42571    ///
42572    /// # Arguments
42573    /// - `vd` — Vector register operand.
42574    /// - `vs2` — Vector register operand.
42575    /// - `rs1` — Source register.
42576    /// - `vm` — Vector mask control.
42577    pub fn vmfeq_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
42578    where
42579        Self: VmfeqVfEmitter<T0, T1, T2, T3>,
42580    {
42581        <Self as VmfeqVfEmitter<T0, T1, T2, T3>>::vmfeq_vf(self, vd, vs2, rs1, vm);
42582    }
42583    /// RISC-V `vmfeq.vv` instruction.
42584    ///
42585    /// # Forms
42586    /// Assembly: `vmfeq.vv vm, vs2, vs1, vd`
42587    /// Rust: `vmfeq_vv(vd, vs1, vs2, vm)`
42588    ///
42589    /// # Arguments
42590    /// - `vd` — Vector register operand.
42591    /// - `vs1` — Vector register operand.
42592    /// - `vs2` — Vector register operand.
42593    /// - `vm` — Vector mask control.
42594    pub fn vmfeq_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
42595    where
42596        Self: VmfeqVvEmitter<T0, T1, T2, T3>,
42597    {
42598        <Self as VmfeqVvEmitter<T0, T1, T2, T3>>::vmfeq_vv(self, vd, vs1, vs2, vm);
42599    }
42600    /// RISC-V `vmfge.vf` instruction.
42601    ///
42602    /// # Forms
42603    /// Assembly: `vmfge.vf vm, vs2, xs1, vd`
42604    /// Rust: `vmfge_vf(vd, vs2, rs1, vm)`
42605    ///
42606    /// # Arguments
42607    /// - `vd` — Vector register operand.
42608    /// - `vs2` — Vector register operand.
42609    /// - `rs1` — Source register.
42610    /// - `vm` — Vector mask control.
42611    pub fn vmfge_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
42612    where
42613        Self: VmfgeVfEmitter<T0, T1, T2, T3>,
42614    {
42615        <Self as VmfgeVfEmitter<T0, T1, T2, T3>>::vmfge_vf(self, vd, vs2, rs1, vm);
42616    }
42617    /// RISC-V `vmfgt.vf` instruction.
42618    ///
42619    /// # Forms
42620    /// Assembly: `vmfgt.vf vm, vs2, xs1, vd`
42621    /// Rust: `vmfgt_vf(vd, vs2, rs1, vm)`
42622    ///
42623    /// # Arguments
42624    /// - `vd` — Vector register operand.
42625    /// - `vs2` — Vector register operand.
42626    /// - `rs1` — Source register.
42627    /// - `vm` — Vector mask control.
42628    pub fn vmfgt_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
42629    where
42630        Self: VmfgtVfEmitter<T0, T1, T2, T3>,
42631    {
42632        <Self as VmfgtVfEmitter<T0, T1, T2, T3>>::vmfgt_vf(self, vd, vs2, rs1, vm);
42633    }
42634    /// RISC-V `vmfle.vf` instruction.
42635    ///
42636    /// # Forms
42637    /// Assembly: `vmfle.vf vm, vs2, xs1, vd`
42638    /// Rust: `vmfle_vf(vd, vs2, rs1, vm)`
42639    ///
42640    /// # Arguments
42641    /// - `vd` — Vector register operand.
42642    /// - `vs2` — Vector register operand.
42643    /// - `rs1` — Source register.
42644    /// - `vm` — Vector mask control.
42645    pub fn vmfle_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
42646    where
42647        Self: VmfleVfEmitter<T0, T1, T2, T3>,
42648    {
42649        <Self as VmfleVfEmitter<T0, T1, T2, T3>>::vmfle_vf(self, vd, vs2, rs1, vm);
42650    }
42651    /// RISC-V `vmfle.vv` instruction.
42652    ///
42653    /// # Forms
42654    /// Assembly: `vmfle.vv vm, vs2, vs1, vd`
42655    /// Rust: `vmfle_vv(vd, vs1, vs2, vm)`
42656    ///
42657    /// # Arguments
42658    /// - `vd` — Vector register operand.
42659    /// - `vs1` — Vector register operand.
42660    /// - `vs2` — Vector register operand.
42661    /// - `vm` — Vector mask control.
42662    pub fn vmfle_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
42663    where
42664        Self: VmfleVvEmitter<T0, T1, T2, T3>,
42665    {
42666        <Self as VmfleVvEmitter<T0, T1, T2, T3>>::vmfle_vv(self, vd, vs1, vs2, vm);
42667    }
42668    /// RISC-V `vmflt.vf` instruction.
42669    ///
42670    /// # Forms
42671    /// Assembly: `vmflt.vf vm, vs2, xs1, vd`
42672    /// Rust: `vmflt_vf(vd, vs2, rs1, vm)`
42673    ///
42674    /// # Arguments
42675    /// - `vd` — Vector register operand.
42676    /// - `vs2` — Vector register operand.
42677    /// - `rs1` — Source register.
42678    /// - `vm` — Vector mask control.
42679    pub fn vmflt_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
42680    where
42681        Self: VmfltVfEmitter<T0, T1, T2, T3>,
42682    {
42683        <Self as VmfltVfEmitter<T0, T1, T2, T3>>::vmflt_vf(self, vd, vs2, rs1, vm);
42684    }
42685    /// RISC-V `vmflt.vv` instruction.
42686    ///
42687    /// # Forms
42688    /// Assembly: `vmflt.vv vm, vs2, vs1, vd`
42689    /// Rust: `vmflt_vv(vd, vs1, vs2, vm)`
42690    ///
42691    /// # Arguments
42692    /// - `vd` — Vector register operand.
42693    /// - `vs1` — Vector register operand.
42694    /// - `vs2` — Vector register operand.
42695    /// - `vm` — Vector mask control.
42696    pub fn vmflt_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
42697    where
42698        Self: VmfltVvEmitter<T0, T1, T2, T3>,
42699    {
42700        <Self as VmfltVvEmitter<T0, T1, T2, T3>>::vmflt_vv(self, vd, vs1, vs2, vm);
42701    }
42702    /// RISC-V `vmfne.vf` instruction.
42703    ///
42704    /// # Forms
42705    /// Assembly: `vmfne.vf vm, vs2, xs1, vd`
42706    /// Rust: `vmfne_vf(vd, vs2, rs1, vm)`
42707    ///
42708    /// # Arguments
42709    /// - `vd` — Vector register operand.
42710    /// - `vs2` — Vector register operand.
42711    /// - `rs1` — Source register.
42712    /// - `vm` — Vector mask control.
42713    pub fn vmfne_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
42714    where
42715        Self: VmfneVfEmitter<T0, T1, T2, T3>,
42716    {
42717        <Self as VmfneVfEmitter<T0, T1, T2, T3>>::vmfne_vf(self, vd, vs2, rs1, vm);
42718    }
42719    /// RISC-V `vmfne.vv` instruction.
42720    ///
42721    /// # Forms
42722    /// Assembly: `vmfne.vv vm, vs2, vs1, vd`
42723    /// Rust: `vmfne_vv(vd, vs1, vs2, vm)`
42724    ///
42725    /// # Arguments
42726    /// - `vd` — Vector register operand.
42727    /// - `vs1` — Vector register operand.
42728    /// - `vs2` — Vector register operand.
42729    /// - `vm` — Vector mask control.
42730    pub fn vmfne_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
42731    where
42732        Self: VmfneVvEmitter<T0, T1, T2, T3>,
42733    {
42734        <Self as VmfneVvEmitter<T0, T1, T2, T3>>::vmfne_vv(self, vd, vs1, vs2, vm);
42735    }
42736    /// RISC-V `vmin.vv` instruction.
42737    ///
42738    /// # Forms
42739    /// Assembly: `vmin.vv vm, vs2, vs1, vd`
42740    /// Rust: `vmin_vv(vd, vs1, vs2, vm)`
42741    ///
42742    /// # Arguments
42743    /// - `vd` — Vector register operand.
42744    /// - `vs1` — Vector register operand.
42745    /// - `vs2` — Vector register operand.
42746    /// - `vm` — Vector mask control.
42747    pub fn vmin_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
42748    where
42749        Self: VminVvEmitter<T0, T1, T2, T3>,
42750    {
42751        <Self as VminVvEmitter<T0, T1, T2, T3>>::vmin_vv(self, vd, vs1, vs2, vm);
42752    }
42753    /// RISC-V `vmin.vx` instruction.
42754    ///
42755    /// # Forms
42756    /// Assembly: `vmin.vx vm, vs2, xs1, vd`
42757    /// Rust: `vmin_vx(vd, vs2, rs1, vm)`
42758    ///
42759    /// # Arguments
42760    /// - `vd` — Vector register operand.
42761    /// - `vs2` — Vector register operand.
42762    /// - `rs1` — Source register.
42763    /// - `vm` — Vector mask control.
42764    pub fn vmin_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
42765    where
42766        Self: VminVxEmitter<T0, T1, T2, T3>,
42767    {
42768        <Self as VminVxEmitter<T0, T1, T2, T3>>::vmin_vx(self, vd, vs2, rs1, vm);
42769    }
42770    /// RISC-V `vminu.vv` instruction.
42771    ///
42772    /// # Forms
42773    /// Assembly: `vminu.vv vm, vs2, vs1, vd`
42774    /// Rust: `vminu_vv(vd, vs1, vs2, vm)`
42775    ///
42776    /// # Arguments
42777    /// - `vd` — Vector register operand.
42778    /// - `vs1` — Vector register operand.
42779    /// - `vs2` — Vector register operand.
42780    /// - `vm` — Vector mask control.
42781    pub fn vminu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
42782    where
42783        Self: VminuVvEmitter<T0, T1, T2, T3>,
42784    {
42785        <Self as VminuVvEmitter<T0, T1, T2, T3>>::vminu_vv(self, vd, vs1, vs2, vm);
42786    }
42787    /// RISC-V `vminu.vx` instruction.
42788    ///
42789    /// # Forms
42790    /// Assembly: `vminu.vx vm, vs2, xs1, vd`
42791    /// Rust: `vminu_vx(vd, vs2, rs1, vm)`
42792    ///
42793    /// # Arguments
42794    /// - `vd` — Vector register operand.
42795    /// - `vs2` — Vector register operand.
42796    /// - `rs1` — Source register.
42797    /// - `vm` — Vector mask control.
42798    pub fn vminu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
42799    where
42800        Self: VminuVxEmitter<T0, T1, T2, T3>,
42801    {
42802        <Self as VminuVxEmitter<T0, T1, T2, T3>>::vminu_vx(self, vd, vs2, rs1, vm);
42803    }
42804    /// RISC-V `vmnand.mm` instruction.
42805    ///
42806    /// # Forms
42807    /// Assembly: `vmnand.mm vs2, vs1, vd`
42808    /// Rust: `vmnand_mm(vd, vs1, vs2)`
42809    ///
42810    /// # Arguments
42811    /// - `vd` — Vector register operand.
42812    /// - `vs1` — Vector register operand.
42813    /// - `vs2` — Vector register operand.
42814    pub fn vmnand_mm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)
42815    where
42816        Self: VmnandMmEmitter<T0, T1, T2>,
42817    {
42818        <Self as VmnandMmEmitter<T0, T1, T2>>::vmnand_mm(self, vd, vs1, vs2);
42819    }
42820    /// RISC-V `vmnor.mm` instruction.
42821    ///
42822    /// # Forms
42823    /// Assembly: `vmnor.mm vs2, vs1, vd`
42824    /// Rust: `vmnor_mm(vd, vs1, vs2)`
42825    ///
42826    /// # Arguments
42827    /// - `vd` — Vector register operand.
42828    /// - `vs1` — Vector register operand.
42829    /// - `vs2` — Vector register operand.
42830    pub fn vmnor_mm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)
42831    where
42832        Self: VmnorMmEmitter<T0, T1, T2>,
42833    {
42834        <Self as VmnorMmEmitter<T0, T1, T2>>::vmnor_mm(self, vd, vs1, vs2);
42835    }
42836    /// RISC-V `vmor.mm` instruction.
42837    ///
42838    /// # Forms
42839    /// Assembly: `vmor.mm vs2, vs1, vd`
42840    /// Rust: `vmor_mm(vd, vs1, vs2)`
42841    ///
42842    /// # Arguments
42843    /// - `vd` — Vector register operand.
42844    /// - `vs1` — Vector register operand.
42845    /// - `vs2` — Vector register operand.
42846    pub fn vmor_mm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)
42847    where
42848        Self: VmorMmEmitter<T0, T1, T2>,
42849    {
42850        <Self as VmorMmEmitter<T0, T1, T2>>::vmor_mm(self, vd, vs1, vs2);
42851    }
42852    /// RISC-V `vmorn.mm` instruction.
42853    ///
42854    /// # Forms
42855    /// Assembly: `vmorn.mm vs2, vs1, vd`
42856    /// Rust: `vmorn_mm(vd, vs1, vs2)`
42857    ///
42858    /// # Arguments
42859    /// - `vd` — Vector register operand.
42860    /// - `vs1` — Vector register operand.
42861    /// - `vs2` — Vector register operand.
42862    pub fn vmorn_mm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)
42863    where
42864        Self: VmornMmEmitter<T0, T1, T2>,
42865    {
42866        <Self as VmornMmEmitter<T0, T1, T2>>::vmorn_mm(self, vd, vs1, vs2);
42867    }
42868    /// RISC-V `vmornot.mm` instruction.
42869    ///
42870    /// # Forms
42871    /// Assembly: `vmornot.mm vd vs1 vs2 vm`
42872    /// Rust: `vmornot_mm(vd, vs1, vs2, vm)`
42873    ///
42874    /// # Arguments
42875    /// - `vd` — Vector register operand.
42876    /// - `vs1` — Vector register operand.
42877    /// - `vs2` — Vector register operand.
42878    /// - `vm` — Vector mask control.
42879    pub fn vmornot_mm<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
42880    where
42881        Self: VmornotMmEmitter<T0, T1, T2, T3>,
42882    {
42883        <Self as VmornotMmEmitter<T0, T1, T2, T3>>::vmornot_mm(self, vd, vs1, vs2, vm);
42884    }
42885    /// RISC-V `vmsbc.vv` instruction.
42886    ///
42887    /// # Forms
42888    /// Assembly: `vmsbc.vv vs2, vs1, vd`
42889    /// Rust: `vmsbc_vv(vd, vs1, vs2)`
42890    ///
42891    /// # Arguments
42892    /// - `vd` — Vector register operand.
42893    /// - `vs1` — Vector register operand.
42894    /// - `vs2` — Vector register operand.
42895    pub fn vmsbc_vv<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)
42896    where
42897        Self: VmsbcVvEmitter<T0, T1, T2>,
42898    {
42899        <Self as VmsbcVvEmitter<T0, T1, T2>>::vmsbc_vv(self, vd, vs1, vs2);
42900    }
42901    /// RISC-V `vmsbc.vvm` instruction.
42902    ///
42903    /// # Forms
42904    /// Assembly: `vmsbc.vvm vs2, vs1, vd`
42905    /// Rust: `vmsbc_vvm(vd, vs1, vs2)`
42906    ///
42907    /// # Arguments
42908    /// - `vd` — Vector register operand.
42909    /// - `vs1` — Vector register operand.
42910    /// - `vs2` — Vector register operand.
42911    pub fn vmsbc_vvm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)
42912    where
42913        Self: VmsbcVvmEmitter<T0, T1, T2>,
42914    {
42915        <Self as VmsbcVvmEmitter<T0, T1, T2>>::vmsbc_vvm(self, vd, vs1, vs2);
42916    }
42917    /// RISC-V `vmsbc.vx` instruction.
42918    ///
42919    /// # Forms
42920    /// Assembly: `vmsbc.vx vs2, xs1, vd`
42921    /// Rust: `vmsbc_vx(vd, rs1, vs2)`
42922    ///
42923    /// # Arguments
42924    /// - `vd` — Vector register operand.
42925    /// - `rs1` — Source register.
42926    /// - `vs2` — Vector register operand.
42927    pub fn vmsbc_vx<T0, T1, T2>(&mut self, vd: T0, rs1: T1, vs2: T2)
42928    where
42929        Self: VmsbcVxEmitter<T0, T1, T2>,
42930    {
42931        <Self as VmsbcVxEmitter<T0, T1, T2>>::vmsbc_vx(self, vd, rs1, vs2);
42932    }
42933    /// RISC-V `vmsbc.vxm` instruction.
42934    ///
42935    /// # Forms
42936    /// Assembly: `vmsbc.vxm vs2, xs1, vd`
42937    /// Rust: `vmsbc_vxm(vd, rs1, vs2)`
42938    ///
42939    /// # Arguments
42940    /// - `vd` — Vector register operand.
42941    /// - `rs1` — Source register.
42942    /// - `vs2` — Vector register operand.
42943    pub fn vmsbc_vxm<T0, T1, T2>(&mut self, vd: T0, rs1: T1, vs2: T2)
42944    where
42945        Self: VmsbcVxmEmitter<T0, T1, T2>,
42946    {
42947        <Self as VmsbcVxmEmitter<T0, T1, T2>>::vmsbc_vxm(self, vd, rs1, vs2);
42948    }
42949    /// RISC-V `vmsbf.m` instruction.
42950    ///
42951    /// # Forms
42952    /// Assembly: `vmsbf.m vm, vs2, vd`
42953    /// Rust: `vmsbf_m(vd, vs2, vm)`
42954    ///
42955    /// # Arguments
42956    /// - `vd` — Vector register operand.
42957    /// - `vs2` — Vector register operand.
42958    /// - `vm` — Vector mask control.
42959    pub fn vmsbf_m<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
42960    where
42961        Self: VmsbfMEmitter<T0, T1, T2>,
42962    {
42963        <Self as VmsbfMEmitter<T0, T1, T2>>::vmsbf_m(self, vd, vs2, vm);
42964    }
42965    /// RISC-V `vmseq.vi` instruction.
42966    ///
42967    /// # Forms
42968    /// Assembly: `vmseq.vi vm, vs2, vd, imm`
42969    /// Rust: `vmseq_vi(vd, vs2, simm5, vm)`
42970    ///
42971    /// # Arguments
42972    /// - `vd` — Vector register operand.
42973    /// - `vs2` — Vector register operand.
42974    /// - `simm5` — Immediate encoding value.
42975    /// - `vm` — Vector mask control.
42976    pub fn vmseq_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)
42977    where
42978        Self: VmseqViEmitter<T0, T1, T2, T3>,
42979    {
42980        <Self as VmseqViEmitter<T0, T1, T2, T3>>::vmseq_vi(self, vd, vs2, simm5, vm);
42981    }
42982    /// RISC-V `vmseq.vv` instruction.
42983    ///
42984    /// # Forms
42985    /// Assembly: `vmseq.vv vm, vs2, vs1, vd`
42986    /// Rust: `vmseq_vv(vd, vs1, vs2, vm)`
42987    ///
42988    /// # Arguments
42989    /// - `vd` — Vector register operand.
42990    /// - `vs1` — Vector register operand.
42991    /// - `vs2` — Vector register operand.
42992    /// - `vm` — Vector mask control.
42993    pub fn vmseq_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
42994    where
42995        Self: VmseqVvEmitter<T0, T1, T2, T3>,
42996    {
42997        <Self as VmseqVvEmitter<T0, T1, T2, T3>>::vmseq_vv(self, vd, vs1, vs2, vm);
42998    }
42999    /// RISC-V `vmseq.vx` instruction.
43000    ///
43001    /// # Forms
43002    /// Assembly: `vmseq.vx vm, vs2, xs1, vd`
43003    /// Rust: `vmseq_vx(vd, vs2, rs1, vm)`
43004    ///
43005    /// # Arguments
43006    /// - `vd` — Vector register operand.
43007    /// - `vs2` — Vector register operand.
43008    /// - `rs1` — Source register.
43009    /// - `vm` — Vector mask control.
43010    pub fn vmseq_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
43011    where
43012        Self: VmseqVxEmitter<T0, T1, T2, T3>,
43013    {
43014        <Self as VmseqVxEmitter<T0, T1, T2, T3>>::vmseq_vx(self, vd, vs2, rs1, vm);
43015    }
43016    /// RISC-V `vmsgt.vi` instruction.
43017    ///
43018    /// # Forms
43019    /// Assembly: `vmsgt.vi vm, vs2, vd, imm`
43020    /// Rust: `vmsgt_vi(vd, vs2, simm5, vm)`
43021    ///
43022    /// # Arguments
43023    /// - `vd` — Vector register operand.
43024    /// - `vs2` — Vector register operand.
43025    /// - `simm5` — Immediate encoding value.
43026    /// - `vm` — Vector mask control.
43027    pub fn vmsgt_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)
43028    where
43029        Self: VmsgtViEmitter<T0, T1, T2, T3>,
43030    {
43031        <Self as VmsgtViEmitter<T0, T1, T2, T3>>::vmsgt_vi(self, vd, vs2, simm5, vm);
43032    }
43033    /// RISC-V `vmsgt.vx` instruction.
43034    ///
43035    /// # Forms
43036    /// Assembly: `vmsgt.vx vm, vs2, xs1, vd`
43037    /// Rust: `vmsgt_vx(vd, vs2, rs1, vm)`
43038    ///
43039    /// # Arguments
43040    /// - `vd` — Vector register operand.
43041    /// - `vs2` — Vector register operand.
43042    /// - `rs1` — Source register.
43043    /// - `vm` — Vector mask control.
43044    pub fn vmsgt_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
43045    where
43046        Self: VmsgtVxEmitter<T0, T1, T2, T3>,
43047    {
43048        <Self as VmsgtVxEmitter<T0, T1, T2, T3>>::vmsgt_vx(self, vd, vs2, rs1, vm);
43049    }
43050    /// RISC-V `vmsgtu.vi` instruction.
43051    ///
43052    /// # Forms
43053    /// Assembly: `vmsgtu.vi vm, vs2, vd, imm`
43054    /// Rust: `vmsgtu_vi(vd, vs2, simm5, vm)`
43055    ///
43056    /// # Arguments
43057    /// - `vd` — Vector register operand.
43058    /// - `vs2` — Vector register operand.
43059    /// - `simm5` — Immediate encoding value.
43060    /// - `vm` — Vector mask control.
43061    pub fn vmsgtu_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)
43062    where
43063        Self: VmsgtuViEmitter<T0, T1, T2, T3>,
43064    {
43065        <Self as VmsgtuViEmitter<T0, T1, T2, T3>>::vmsgtu_vi(self, vd, vs2, simm5, vm);
43066    }
43067    /// RISC-V `vmsgtu.vx` instruction.
43068    ///
43069    /// # Forms
43070    /// Assembly: `vmsgtu.vx vm, vs2, xs1, vd`
43071    /// Rust: `vmsgtu_vx(vd, vs2, rs1, vm)`
43072    ///
43073    /// # Arguments
43074    /// - `vd` — Vector register operand.
43075    /// - `vs2` — Vector register operand.
43076    /// - `rs1` — Source register.
43077    /// - `vm` — Vector mask control.
43078    pub fn vmsgtu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
43079    where
43080        Self: VmsgtuVxEmitter<T0, T1, T2, T3>,
43081    {
43082        <Self as VmsgtuVxEmitter<T0, T1, T2, T3>>::vmsgtu_vx(self, vd, vs2, rs1, vm);
43083    }
43084    /// RISC-V `vmsif.m` instruction.
43085    ///
43086    /// # Forms
43087    /// Assembly: `vmsif.m vm, vs2, vd`
43088    /// Rust: `vmsif_m(vd, vs2, vm)`
43089    ///
43090    /// # Arguments
43091    /// - `vd` — Vector register operand.
43092    /// - `vs2` — Vector register operand.
43093    /// - `vm` — Vector mask control.
43094    pub fn vmsif_m<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
43095    where
43096        Self: VmsifMEmitter<T0, T1, T2>,
43097    {
43098        <Self as VmsifMEmitter<T0, T1, T2>>::vmsif_m(self, vd, vs2, vm);
43099    }
43100    /// RISC-V `vmsle.vi` instruction.
43101    ///
43102    /// # Forms
43103    /// Assembly: `vmsle.vi vm, vs2, vd, imm`
43104    /// Rust: `vmsle_vi(vd, vs2, simm5, vm)`
43105    ///
43106    /// # Arguments
43107    /// - `vd` — Vector register operand.
43108    /// - `vs2` — Vector register operand.
43109    /// - `simm5` — Immediate encoding value.
43110    /// - `vm` — Vector mask control.
43111    pub fn vmsle_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)
43112    where
43113        Self: VmsleViEmitter<T0, T1, T2, T3>,
43114    {
43115        <Self as VmsleViEmitter<T0, T1, T2, T3>>::vmsle_vi(self, vd, vs2, simm5, vm);
43116    }
43117    /// RISC-V `vmsle.vv` instruction.
43118    ///
43119    /// # Forms
43120    /// Assembly: `vmsle.vv vm, vs2, vs1, vd`
43121    /// Rust: `vmsle_vv(vd, vs1, vs2, vm)`
43122    ///
43123    /// # Arguments
43124    /// - `vd` — Vector register operand.
43125    /// - `vs1` — Vector register operand.
43126    /// - `vs2` — Vector register operand.
43127    /// - `vm` — Vector mask control.
43128    pub fn vmsle_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
43129    where
43130        Self: VmsleVvEmitter<T0, T1, T2, T3>,
43131    {
43132        <Self as VmsleVvEmitter<T0, T1, T2, T3>>::vmsle_vv(self, vd, vs1, vs2, vm);
43133    }
43134    /// RISC-V `vmsle.vx` instruction.
43135    ///
43136    /// # Forms
43137    /// Assembly: `vmsle.vx vm, vs2, xs1, vd`
43138    /// Rust: `vmsle_vx(vd, vs2, rs1, vm)`
43139    ///
43140    /// # Arguments
43141    /// - `vd` — Vector register operand.
43142    /// - `vs2` — Vector register operand.
43143    /// - `rs1` — Source register.
43144    /// - `vm` — Vector mask control.
43145    pub fn vmsle_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
43146    where
43147        Self: VmsleVxEmitter<T0, T1, T2, T3>,
43148    {
43149        <Self as VmsleVxEmitter<T0, T1, T2, T3>>::vmsle_vx(self, vd, vs2, rs1, vm);
43150    }
43151    /// RISC-V `vmsleu.vi` instruction.
43152    ///
43153    /// # Forms
43154    /// Assembly: `vmsleu.vi vm, vs2, vd, imm`
43155    /// Rust: `vmsleu_vi(vd, vs2, simm5, vm)`
43156    ///
43157    /// # Arguments
43158    /// - `vd` — Vector register operand.
43159    /// - `vs2` — Vector register operand.
43160    /// - `simm5` — Immediate encoding value.
43161    /// - `vm` — Vector mask control.
43162    pub fn vmsleu_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)
43163    where
43164        Self: VmsleuViEmitter<T0, T1, T2, T3>,
43165    {
43166        <Self as VmsleuViEmitter<T0, T1, T2, T3>>::vmsleu_vi(self, vd, vs2, simm5, vm);
43167    }
43168    /// RISC-V `vmsleu.vv` instruction.
43169    ///
43170    /// # Forms
43171    /// Assembly: `vmsleu.vv vm, vs2, vs1, vd`
43172    /// Rust: `vmsleu_vv(vd, vs1, vs2, vm)`
43173    ///
43174    /// # Arguments
43175    /// - `vd` — Vector register operand.
43176    /// - `vs1` — Vector register operand.
43177    /// - `vs2` — Vector register operand.
43178    /// - `vm` — Vector mask control.
43179    pub fn vmsleu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
43180    where
43181        Self: VmsleuVvEmitter<T0, T1, T2, T3>,
43182    {
43183        <Self as VmsleuVvEmitter<T0, T1, T2, T3>>::vmsleu_vv(self, vd, vs1, vs2, vm);
43184    }
43185    /// RISC-V `vmsleu.vx` instruction.
43186    ///
43187    /// # Forms
43188    /// Assembly: `vmsleu.vx vm, vs2, xs1, vd`
43189    /// Rust: `vmsleu_vx(vd, vs2, rs1, vm)`
43190    ///
43191    /// # Arguments
43192    /// - `vd` — Vector register operand.
43193    /// - `vs2` — Vector register operand.
43194    /// - `rs1` — Source register.
43195    /// - `vm` — Vector mask control.
43196    pub fn vmsleu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
43197    where
43198        Self: VmsleuVxEmitter<T0, T1, T2, T3>,
43199    {
43200        <Self as VmsleuVxEmitter<T0, T1, T2, T3>>::vmsleu_vx(self, vd, vs2, rs1, vm);
43201    }
43202    /// RISC-V `vmslt.vv` instruction.
43203    ///
43204    /// # Forms
43205    /// Assembly: `vmslt.vv vm, vs2, vs1, vd`
43206    /// Rust: `vmslt_vv(vd, vs1, vs2, vm)`
43207    ///
43208    /// # Arguments
43209    /// - `vd` — Vector register operand.
43210    /// - `vs1` — Vector register operand.
43211    /// - `vs2` — Vector register operand.
43212    /// - `vm` — Vector mask control.
43213    pub fn vmslt_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
43214    where
43215        Self: VmsltVvEmitter<T0, T1, T2, T3>,
43216    {
43217        <Self as VmsltVvEmitter<T0, T1, T2, T3>>::vmslt_vv(self, vd, vs1, vs2, vm);
43218    }
43219    /// RISC-V `vmslt.vx` instruction.
43220    ///
43221    /// # Forms
43222    /// Assembly: `vmslt.vx vm, vs2, xs1, vd`
43223    /// Rust: `vmslt_vx(vd, vs2, rs1, vm)`
43224    ///
43225    /// # Arguments
43226    /// - `vd` — Vector register operand.
43227    /// - `vs2` — Vector register operand.
43228    /// - `rs1` — Source register.
43229    /// - `vm` — Vector mask control.
43230    pub fn vmslt_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
43231    where
43232        Self: VmsltVxEmitter<T0, T1, T2, T3>,
43233    {
43234        <Self as VmsltVxEmitter<T0, T1, T2, T3>>::vmslt_vx(self, vd, vs2, rs1, vm);
43235    }
43236    /// RISC-V `vmsltu.vv` instruction.
43237    ///
43238    /// # Forms
43239    /// Assembly: `vmsltu.vv vm, vs2, vs1, vd`
43240    /// Rust: `vmsltu_vv(vd, vs1, vs2, vm)`
43241    ///
43242    /// # Arguments
43243    /// - `vd` — Vector register operand.
43244    /// - `vs1` — Vector register operand.
43245    /// - `vs2` — Vector register operand.
43246    /// - `vm` — Vector mask control.
43247    pub fn vmsltu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
43248    where
43249        Self: VmsltuVvEmitter<T0, T1, T2, T3>,
43250    {
43251        <Self as VmsltuVvEmitter<T0, T1, T2, T3>>::vmsltu_vv(self, vd, vs1, vs2, vm);
43252    }
43253    /// RISC-V `vmsltu.vx` instruction.
43254    ///
43255    /// # Forms
43256    /// Assembly: `vmsltu.vx vm, vs2, xs1, vd`
43257    /// Rust: `vmsltu_vx(vd, vs2, rs1, vm)`
43258    ///
43259    /// # Arguments
43260    /// - `vd` — Vector register operand.
43261    /// - `vs2` — Vector register operand.
43262    /// - `rs1` — Source register.
43263    /// - `vm` — Vector mask control.
43264    pub fn vmsltu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
43265    where
43266        Self: VmsltuVxEmitter<T0, T1, T2, T3>,
43267    {
43268        <Self as VmsltuVxEmitter<T0, T1, T2, T3>>::vmsltu_vx(self, vd, vs2, rs1, vm);
43269    }
43270    /// RISC-V `vmsne.vi` instruction.
43271    ///
43272    /// # Forms
43273    /// Assembly: `vmsne.vi vm, vs2, vd, imm`
43274    /// Rust: `vmsne_vi(vd, vs2, simm5, vm)`
43275    ///
43276    /// # Arguments
43277    /// - `vd` — Vector register operand.
43278    /// - `vs2` — Vector register operand.
43279    /// - `simm5` — Immediate encoding value.
43280    /// - `vm` — Vector mask control.
43281    pub fn vmsne_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)
43282    where
43283        Self: VmsneViEmitter<T0, T1, T2, T3>,
43284    {
43285        <Self as VmsneViEmitter<T0, T1, T2, T3>>::vmsne_vi(self, vd, vs2, simm5, vm);
43286    }
43287    /// RISC-V `vmsne.vv` instruction.
43288    ///
43289    /// # Forms
43290    /// Assembly: `vmsne.vv vm, vs2, vs1, vd`
43291    /// Rust: `vmsne_vv(vd, vs1, vs2, vm)`
43292    ///
43293    /// # Arguments
43294    /// - `vd` — Vector register operand.
43295    /// - `vs1` — Vector register operand.
43296    /// - `vs2` — Vector register operand.
43297    /// - `vm` — Vector mask control.
43298    pub fn vmsne_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
43299    where
43300        Self: VmsneVvEmitter<T0, T1, T2, T3>,
43301    {
43302        <Self as VmsneVvEmitter<T0, T1, T2, T3>>::vmsne_vv(self, vd, vs1, vs2, vm);
43303    }
43304    /// RISC-V `vmsne.vx` instruction.
43305    ///
43306    /// # Forms
43307    /// Assembly: `vmsne.vx vm, vs2, xs1, vd`
43308    /// Rust: `vmsne_vx(vd, vs2, rs1, vm)`
43309    ///
43310    /// # Arguments
43311    /// - `vd` — Vector register operand.
43312    /// - `vs2` — Vector register operand.
43313    /// - `rs1` — Source register.
43314    /// - `vm` — Vector mask control.
43315    pub fn vmsne_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
43316    where
43317        Self: VmsneVxEmitter<T0, T1, T2, T3>,
43318    {
43319        <Self as VmsneVxEmitter<T0, T1, T2, T3>>::vmsne_vx(self, vd, vs2, rs1, vm);
43320    }
43321    /// RISC-V `vmsof.m` instruction.
43322    ///
43323    /// # Forms
43324    /// Assembly: `vmsof.m vm, vs2, vd`
43325    /// Rust: `vmsof_m(vd, vs2, vm)`
43326    ///
43327    /// # Arguments
43328    /// - `vd` — Vector register operand.
43329    /// - `vs2` — Vector register operand.
43330    /// - `vm` — Vector mask control.
43331    pub fn vmsof_m<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
43332    where
43333        Self: VmsofMEmitter<T0, T1, T2>,
43334    {
43335        <Self as VmsofMEmitter<T0, T1, T2>>::vmsof_m(self, vd, vs2, vm);
43336    }
43337    /// RISC-V `vmul.vv` instruction.
43338    ///
43339    /// # Forms
43340    /// Assembly: `vmul.vv vm, vs2, vs1, vd`
43341    /// Rust: `vmul_vv(vd, vs1, vs2, vm)`
43342    ///
43343    /// # Arguments
43344    /// - `vd` — Vector register operand.
43345    /// - `vs1` — Vector register operand.
43346    /// - `vs2` — Vector register operand.
43347    /// - `vm` — Vector mask control.
43348    pub fn vmul_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
43349    where
43350        Self: VmulVvEmitter<T0, T1, T2, T3>,
43351    {
43352        <Self as VmulVvEmitter<T0, T1, T2, T3>>::vmul_vv(self, vd, vs1, vs2, vm);
43353    }
43354    /// RISC-V `vmul.vx` instruction.
43355    ///
43356    /// # Forms
43357    /// Assembly: `vmul.vx vm, vs2, xs1, vd`
43358    /// Rust: `vmul_vx(vd, vs2, rs1, vm)`
43359    ///
43360    /// # Arguments
43361    /// - `vd` — Vector register operand.
43362    /// - `vs2` — Vector register operand.
43363    /// - `rs1` — Source register.
43364    /// - `vm` — Vector mask control.
43365    pub fn vmul_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
43366    where
43367        Self: VmulVxEmitter<T0, T1, T2, T3>,
43368    {
43369        <Self as VmulVxEmitter<T0, T1, T2, T3>>::vmul_vx(self, vd, vs2, rs1, vm);
43370    }
43371    /// RISC-V `vmulh.vv` instruction.
43372    ///
43373    /// # Forms
43374    /// Assembly: `vmulh.vv vm, vs2, vs1, vd`
43375    /// Rust: `vmulh_vv(vd, vs1, vs2, vm)`
43376    ///
43377    /// # Arguments
43378    /// - `vd` — Vector register operand.
43379    /// - `vs1` — Vector register operand.
43380    /// - `vs2` — Vector register operand.
43381    /// - `vm` — Vector mask control.
43382    pub fn vmulh_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
43383    where
43384        Self: VmulhVvEmitter<T0, T1, T2, T3>,
43385    {
43386        <Self as VmulhVvEmitter<T0, T1, T2, T3>>::vmulh_vv(self, vd, vs1, vs2, vm);
43387    }
43388    /// RISC-V `vmulh.vx` instruction.
43389    ///
43390    /// # Forms
43391    /// Assembly: `vmulh.vx vm, vs2, xs1, vd`
43392    /// Rust: `vmulh_vx(vd, vs2, rs1, vm)`
43393    ///
43394    /// # Arguments
43395    /// - `vd` — Vector register operand.
43396    /// - `vs2` — Vector register operand.
43397    /// - `rs1` — Source register.
43398    /// - `vm` — Vector mask control.
43399    pub fn vmulh_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
43400    where
43401        Self: VmulhVxEmitter<T0, T1, T2, T3>,
43402    {
43403        <Self as VmulhVxEmitter<T0, T1, T2, T3>>::vmulh_vx(self, vd, vs2, rs1, vm);
43404    }
43405    /// RISC-V `vmulhsu.vv` instruction.
43406    ///
43407    /// # Forms
43408    /// Assembly: `vmulhsu.vv vm, vs2, vs1, vd`
43409    /// Rust: `vmulhsu_vv(vd, vs1, vs2, vm)`
43410    ///
43411    /// # Arguments
43412    /// - `vd` — Vector register operand.
43413    /// - `vs1` — Vector register operand.
43414    /// - `vs2` — Vector register operand.
43415    /// - `vm` — Vector mask control.
43416    pub fn vmulhsu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
43417    where
43418        Self: VmulhsuVvEmitter<T0, T1, T2, T3>,
43419    {
43420        <Self as VmulhsuVvEmitter<T0, T1, T2, T3>>::vmulhsu_vv(self, vd, vs1, vs2, vm);
43421    }
43422    /// RISC-V `vmulhsu.vx` instruction.
43423    ///
43424    /// # Forms
43425    /// Assembly: `vmulhsu.vx vm, vs2, xs1, vd`
43426    /// Rust: `vmulhsu_vx(vd, vs2, rs1, vm)`
43427    ///
43428    /// # Arguments
43429    /// - `vd` — Vector register operand.
43430    /// - `vs2` — Vector register operand.
43431    /// - `rs1` — Source register.
43432    /// - `vm` — Vector mask control.
43433    pub fn vmulhsu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
43434    where
43435        Self: VmulhsuVxEmitter<T0, T1, T2, T3>,
43436    {
43437        <Self as VmulhsuVxEmitter<T0, T1, T2, T3>>::vmulhsu_vx(self, vd, vs2, rs1, vm);
43438    }
43439    /// RISC-V `vmulhu.vv` instruction.
43440    ///
43441    /// # Forms
43442    /// Assembly: `vmulhu.vv vm, vs2, vs1, vd`
43443    /// Rust: `vmulhu_vv(vd, vs1, vs2, vm)`
43444    ///
43445    /// # Arguments
43446    /// - `vd` — Vector register operand.
43447    /// - `vs1` — Vector register operand.
43448    /// - `vs2` — Vector register operand.
43449    /// - `vm` — Vector mask control.
43450    pub fn vmulhu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
43451    where
43452        Self: VmulhuVvEmitter<T0, T1, T2, T3>,
43453    {
43454        <Self as VmulhuVvEmitter<T0, T1, T2, T3>>::vmulhu_vv(self, vd, vs1, vs2, vm);
43455    }
43456    /// RISC-V `vmulhu.vx` instruction.
43457    ///
43458    /// # Forms
43459    /// Assembly: `vmulhu.vx vm, vs2, xs1, vd`
43460    /// Rust: `vmulhu_vx(vd, vs2, rs1, vm)`
43461    ///
43462    /// # Arguments
43463    /// - `vd` — Vector register operand.
43464    /// - `vs2` — Vector register operand.
43465    /// - `rs1` — Source register.
43466    /// - `vm` — Vector mask control.
43467    pub fn vmulhu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
43468    where
43469        Self: VmulhuVxEmitter<T0, T1, T2, T3>,
43470    {
43471        <Self as VmulhuVxEmitter<T0, T1, T2, T3>>::vmulhu_vx(self, vd, vs2, rs1, vm);
43472    }
43473    /// RISC-V `vmv1r.v` instruction.
43474    ///
43475    /// # Forms
43476    /// Assembly: `vmv1r.v vs2, vd`
43477    /// Rust: `vmv1r_v(vd, vs2)`
43478    ///
43479    /// # Arguments
43480    /// - `vd` — Vector register operand.
43481    /// - `vs2` — Vector register operand.
43482    pub fn vmv1r_v<T0, T1>(&mut self, vd: T0, vs2: T1)
43483    where
43484        Self: Vmv1RVEmitter<T0, T1>,
43485    {
43486        <Self as Vmv1RVEmitter<T0, T1>>::vmv1r_v(self, vd, vs2);
43487    }
43488    /// RISC-V `vmv2r.v` instruction.
43489    ///
43490    /// # Forms
43491    /// Assembly: `vmv2r.v vs2, vd`
43492    /// Rust: `vmv2r_v(vd, vs2)`
43493    ///
43494    /// # Arguments
43495    /// - `vd` — Vector register operand.
43496    /// - `vs2` — Vector register operand.
43497    pub fn vmv2r_v<T0, T1>(&mut self, vd: T0, vs2: T1)
43498    where
43499        Self: Vmv2RVEmitter<T0, T1>,
43500    {
43501        <Self as Vmv2RVEmitter<T0, T1>>::vmv2r_v(self, vd, vs2);
43502    }
43503    /// RISC-V `vmv4r.v` instruction.
43504    ///
43505    /// # Forms
43506    /// Assembly: `vmv4r.v vs2, vd`
43507    /// Rust: `vmv4r_v(vd, vs2)`
43508    ///
43509    /// # Arguments
43510    /// - `vd` — Vector register operand.
43511    /// - `vs2` — Vector register operand.
43512    pub fn vmv4r_v<T0, T1>(&mut self, vd: T0, vs2: T1)
43513    where
43514        Self: Vmv4RVEmitter<T0, T1>,
43515    {
43516        <Self as Vmv4RVEmitter<T0, T1>>::vmv4r_v(self, vd, vs2);
43517    }
43518    /// RISC-V `vmv8r.v` instruction.
43519    ///
43520    /// # Forms
43521    /// Assembly: `vmv8r.v vs2, vd`
43522    /// Rust: `vmv8r_v(vd, vs2)`
43523    ///
43524    /// # Arguments
43525    /// - `vd` — Vector register operand.
43526    /// - `vs2` — Vector register operand.
43527    pub fn vmv8r_v<T0, T1>(&mut self, vd: T0, vs2: T1)
43528    where
43529        Self: Vmv8RVEmitter<T0, T1>,
43530    {
43531        <Self as Vmv8RVEmitter<T0, T1>>::vmv8r_v(self, vd, vs2);
43532    }
43533    /// RISC-V `vmv.s.x` instruction.
43534    ///
43535    /// # Forms
43536    /// Assembly: `vmv.s.x xs1, vd`
43537    /// Rust: `vmv_s_x(vd, rs1)`
43538    ///
43539    /// # Arguments
43540    /// - `vd` — Vector register operand.
43541    /// - `rs1` — Source register.
43542    pub fn vmv_s_x<T0, T1>(&mut self, vd: T0, rs1: T1)
43543    where
43544        Self: VmvSXEmitter<T0, T1>,
43545    {
43546        <Self as VmvSXEmitter<T0, T1>>::vmv_s_x(self, vd, rs1);
43547    }
43548    /// RISC-V `vmv.v.i` instruction.
43549    ///
43550    /// # Forms
43551    /// Assembly: `vmv.v.i vd, imm`
43552    /// Rust: `vmv_v_i(vd, simm5)`
43553    ///
43554    /// # Arguments
43555    /// - `vd` — Vector register operand.
43556    /// - `simm5` — Immediate encoding value.
43557    pub fn vmv_v_i<T0, T1>(&mut self, vd: T0, simm5: T1)
43558    where
43559        Self: VmvVIEmitter<T0, T1>,
43560    {
43561        <Self as VmvVIEmitter<T0, T1>>::vmv_v_i(self, vd, simm5);
43562    }
43563    /// RISC-V `vmv.v.v` instruction.
43564    ///
43565    /// # Forms
43566    /// Assembly: `vmv.v.v vs1, vd`
43567    /// Rust: `vmv_v_v(vd, vs1)`
43568    ///
43569    /// # Arguments
43570    /// - `vd` — Vector register operand.
43571    /// - `vs1` — Vector register operand.
43572    pub fn vmv_v_v<T0, T1>(&mut self, vd: T0, vs1: T1)
43573    where
43574        Self: VmvVVEmitter<T0, T1>,
43575    {
43576        <Self as VmvVVEmitter<T0, T1>>::vmv_v_v(self, vd, vs1);
43577    }
43578    /// RISC-V `vmv.v.x` instruction.
43579    ///
43580    /// # Forms
43581    /// Assembly: `vmv.v.x xs1, vd`
43582    /// Rust: `vmv_v_x(vd, rs1)`
43583    ///
43584    /// # Arguments
43585    /// - `vd` — Vector register operand.
43586    /// - `rs1` — Source register.
43587    pub fn vmv_v_x<T0, T1>(&mut self, vd: T0, rs1: T1)
43588    where
43589        Self: VmvVXEmitter<T0, T1>,
43590    {
43591        <Self as VmvVXEmitter<T0, T1>>::vmv_v_x(self, vd, rs1);
43592    }
43593    /// RISC-V `vmv.x.s` instruction.
43594    ///
43595    /// # Forms
43596    /// Assembly: `vmv.x.s vs2, xd`
43597    /// Rust: `vmv_x_s(rd, vs2)`
43598    ///
43599    /// # Arguments
43600    /// - `rd` — Destination register.
43601    /// - `vs2` — Vector register operand.
43602    pub fn vmv_x_s<T0, T1>(&mut self, rd: T0, vs2: T1)
43603    where
43604        Self: VmvXSEmitter<T0, T1>,
43605    {
43606        <Self as VmvXSEmitter<T0, T1>>::vmv_x_s(self, rd, vs2);
43607    }
43608    /// RISC-V `vmxnor.mm` instruction.
43609    ///
43610    /// # Forms
43611    /// Assembly: `vmxnor.mm vs2, vs1, vd`
43612    /// Rust: `vmxnor_mm(vd, vs1, vs2)`
43613    ///
43614    /// # Arguments
43615    /// - `vd` — Vector register operand.
43616    /// - `vs1` — Vector register operand.
43617    /// - `vs2` — Vector register operand.
43618    pub fn vmxnor_mm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)
43619    where
43620        Self: VmxnorMmEmitter<T0, T1, T2>,
43621    {
43622        <Self as VmxnorMmEmitter<T0, T1, T2>>::vmxnor_mm(self, vd, vs1, vs2);
43623    }
43624    /// RISC-V `vmxor.mm` instruction.
43625    ///
43626    /// # Forms
43627    /// Assembly: `vmxor.mm vs2, vs1, vd`
43628    /// Rust: `vmxor_mm(vd, vs1, vs2)`
43629    ///
43630    /// # Arguments
43631    /// - `vd` — Vector register operand.
43632    /// - `vs1` — Vector register operand.
43633    /// - `vs2` — Vector register operand.
43634    pub fn vmxor_mm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)
43635    where
43636        Self: VmxorMmEmitter<T0, T1, T2>,
43637    {
43638        <Self as VmxorMmEmitter<T0, T1, T2>>::vmxor_mm(self, vd, vs1, vs2);
43639    }
43640    /// RISC-V `vnclip.wi` instruction.
43641    ///
43642    /// # Forms
43643    /// Assembly: `vnclip.wi vm, vs2, vd, imm`
43644    /// Rust: `vnclip_wi(vd, vs2, zimm5, vm)`
43645    ///
43646    /// # Arguments
43647    /// - `vd` — Vector register operand.
43648    /// - `vs2` — Vector register operand.
43649    /// - `zimm5` — Immediate encoding value.
43650    /// - `vm` — Vector mask control.
43651    pub fn vnclip_wi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3)
43652    where
43653        Self: VnclipWiEmitter<T0, T1, T2, T3>,
43654    {
43655        <Self as VnclipWiEmitter<T0, T1, T2, T3>>::vnclip_wi(self, vd, vs2, zimm5, vm);
43656    }
43657    /// RISC-V `vnclip.wv` instruction.
43658    ///
43659    /// # Forms
43660    /// Assembly: `vnclip.wv vm, vs2, vs1, vd`
43661    /// Rust: `vnclip_wv(vd, vs1, vs2, vm)`
43662    ///
43663    /// # Arguments
43664    /// - `vd` — Vector register operand.
43665    /// - `vs1` — Vector register operand.
43666    /// - `vs2` — Vector register operand.
43667    /// - `vm` — Vector mask control.
43668    pub fn vnclip_wv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
43669    where
43670        Self: VnclipWvEmitter<T0, T1, T2, T3>,
43671    {
43672        <Self as VnclipWvEmitter<T0, T1, T2, T3>>::vnclip_wv(self, vd, vs1, vs2, vm);
43673    }
43674    /// RISC-V `vnclip.wx` instruction.
43675    ///
43676    /// # Forms
43677    /// Assembly: `vnclip.wx vm, vs2, xs1, vd`
43678    /// Rust: `vnclip_wx(vd, vs2, rs1, vm)`
43679    ///
43680    /// # Arguments
43681    /// - `vd` — Vector register operand.
43682    /// - `vs2` — Vector register operand.
43683    /// - `rs1` — Source register.
43684    /// - `vm` — Vector mask control.
43685    pub fn vnclip_wx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
43686    where
43687        Self: VnclipWxEmitter<T0, T1, T2, T3>,
43688    {
43689        <Self as VnclipWxEmitter<T0, T1, T2, T3>>::vnclip_wx(self, vd, vs2, rs1, vm);
43690    }
43691    /// RISC-V `vnclipu.wi` instruction.
43692    ///
43693    /// # Forms
43694    /// Assembly: `vnclipu.wi vm, vs2, vd, imm`
43695    /// Rust: `vnclipu_wi(vd, vs2, zimm5, vm)`
43696    ///
43697    /// # Arguments
43698    /// - `vd` — Vector register operand.
43699    /// - `vs2` — Vector register operand.
43700    /// - `zimm5` — Immediate encoding value.
43701    /// - `vm` — Vector mask control.
43702    pub fn vnclipu_wi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3)
43703    where
43704        Self: VnclipuWiEmitter<T0, T1, T2, T3>,
43705    {
43706        <Self as VnclipuWiEmitter<T0, T1, T2, T3>>::vnclipu_wi(self, vd, vs2, zimm5, vm);
43707    }
43708    /// RISC-V `vnclipu.wv` instruction.
43709    ///
43710    /// # Forms
43711    /// Assembly: `vnclipu.wv vm, vs2, vs1, vd`
43712    /// Rust: `vnclipu_wv(vd, vs1, vs2, vm)`
43713    ///
43714    /// # Arguments
43715    /// - `vd` — Vector register operand.
43716    /// - `vs1` — Vector register operand.
43717    /// - `vs2` — Vector register operand.
43718    /// - `vm` — Vector mask control.
43719    pub fn vnclipu_wv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
43720    where
43721        Self: VnclipuWvEmitter<T0, T1, T2, T3>,
43722    {
43723        <Self as VnclipuWvEmitter<T0, T1, T2, T3>>::vnclipu_wv(self, vd, vs1, vs2, vm);
43724    }
43725    /// RISC-V `vnclipu.wx` instruction.
43726    ///
43727    /// # Forms
43728    /// Assembly: `vnclipu.wx vm, vs2, xs1, vd`
43729    /// Rust: `vnclipu_wx(vd, vs2, rs1, vm)`
43730    ///
43731    /// # Arguments
43732    /// - `vd` — Vector register operand.
43733    /// - `vs2` — Vector register operand.
43734    /// - `rs1` — Source register.
43735    /// - `vm` — Vector mask control.
43736    pub fn vnclipu_wx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
43737    where
43738        Self: VnclipuWxEmitter<T0, T1, T2, T3>,
43739    {
43740        <Self as VnclipuWxEmitter<T0, T1, T2, T3>>::vnclipu_wx(self, vd, vs2, rs1, vm);
43741    }
43742    /// RISC-V `vnmsac.vv` instruction.
43743    ///
43744    /// # Forms
43745    /// Assembly: `vnmsac.vv vm, vs2, vs1, vd`
43746    /// Rust: `vnmsac_vv(vd, vs1, vs2, vm)`
43747    ///
43748    /// # Arguments
43749    /// - `vd` — Vector register operand.
43750    /// - `vs1` — Vector register operand.
43751    /// - `vs2` — Vector register operand.
43752    /// - `vm` — Vector mask control.
43753    pub fn vnmsac_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
43754    where
43755        Self: VnmsacVvEmitter<T0, T1, T2, T3>,
43756    {
43757        <Self as VnmsacVvEmitter<T0, T1, T2, T3>>::vnmsac_vv(self, vd, vs1, vs2, vm);
43758    }
43759    /// RISC-V `vnmsac.vx` instruction.
43760    ///
43761    /// # Forms
43762    /// Assembly: `vnmsac.vx vm, vs2, xs1, vd`
43763    /// Rust: `vnmsac_vx(vd, vs2, rs1, vm)`
43764    ///
43765    /// # Arguments
43766    /// - `vd` — Vector register operand.
43767    /// - `vs2` — Vector register operand.
43768    /// - `rs1` — Source register.
43769    /// - `vm` — Vector mask control.
43770    pub fn vnmsac_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
43771    where
43772        Self: VnmsacVxEmitter<T0, T1, T2, T3>,
43773    {
43774        <Self as VnmsacVxEmitter<T0, T1, T2, T3>>::vnmsac_vx(self, vd, vs2, rs1, vm);
43775    }
43776    /// RISC-V `vnmsub.vv` instruction.
43777    ///
43778    /// # Forms
43779    /// Assembly: `vnmsub.vv vm, vs2, vs1, vd`
43780    /// Rust: `vnmsub_vv(vd, vs1, vs2, vm)`
43781    ///
43782    /// # Arguments
43783    /// - `vd` — Vector register operand.
43784    /// - `vs1` — Vector register operand.
43785    /// - `vs2` — Vector register operand.
43786    /// - `vm` — Vector mask control.
43787    pub fn vnmsub_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
43788    where
43789        Self: VnmsubVvEmitter<T0, T1, T2, T3>,
43790    {
43791        <Self as VnmsubVvEmitter<T0, T1, T2, T3>>::vnmsub_vv(self, vd, vs1, vs2, vm);
43792    }
43793    /// RISC-V `vnmsub.vx` instruction.
43794    ///
43795    /// # Forms
43796    /// Assembly: `vnmsub.vx vm, vs2, xs1, vd`
43797    /// Rust: `vnmsub_vx(vd, vs2, rs1, vm)`
43798    ///
43799    /// # Arguments
43800    /// - `vd` — Vector register operand.
43801    /// - `vs2` — Vector register operand.
43802    /// - `rs1` — Source register.
43803    /// - `vm` — Vector mask control.
43804    pub fn vnmsub_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
43805    where
43806        Self: VnmsubVxEmitter<T0, T1, T2, T3>,
43807    {
43808        <Self as VnmsubVxEmitter<T0, T1, T2, T3>>::vnmsub_vx(self, vd, vs2, rs1, vm);
43809    }
43810    /// RISC-V `vnsra.wi` instruction.
43811    ///
43812    /// # Forms
43813    /// Assembly: `vnsra.wi vm, vs2, vd, imm`
43814    /// Rust: `vnsra_wi(vd, vs2, zimm5, vm)`
43815    ///
43816    /// # Arguments
43817    /// - `vd` — Vector register operand.
43818    /// - `vs2` — Vector register operand.
43819    /// - `zimm5` — Immediate encoding value.
43820    /// - `vm` — Vector mask control.
43821    pub fn vnsra_wi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3)
43822    where
43823        Self: VnsraWiEmitter<T0, T1, T2, T3>,
43824    {
43825        <Self as VnsraWiEmitter<T0, T1, T2, T3>>::vnsra_wi(self, vd, vs2, zimm5, vm);
43826    }
43827    /// RISC-V `vnsra.wv` instruction.
43828    ///
43829    /// # Forms
43830    /// Assembly: `vnsra.wv vm, vs2, vs1, vd`
43831    /// Rust: `vnsra_wv(vd, vs1, vs2, vm)`
43832    ///
43833    /// # Arguments
43834    /// - `vd` — Vector register operand.
43835    /// - `vs1` — Vector register operand.
43836    /// - `vs2` — Vector register operand.
43837    /// - `vm` — Vector mask control.
43838    pub fn vnsra_wv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
43839    where
43840        Self: VnsraWvEmitter<T0, T1, T2, T3>,
43841    {
43842        <Self as VnsraWvEmitter<T0, T1, T2, T3>>::vnsra_wv(self, vd, vs1, vs2, vm);
43843    }
43844    /// RISC-V `vnsra.wx` instruction.
43845    ///
43846    /// # Forms
43847    /// Assembly: `vnsra.wx vm, vs2, xs1, vd`
43848    /// Rust: `vnsra_wx(vd, vs2, rs1, vm)`
43849    ///
43850    /// # Arguments
43851    /// - `vd` — Vector register operand.
43852    /// - `vs2` — Vector register operand.
43853    /// - `rs1` — Source register.
43854    /// - `vm` — Vector mask control.
43855    pub fn vnsra_wx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
43856    where
43857        Self: VnsraWxEmitter<T0, T1, T2, T3>,
43858    {
43859        <Self as VnsraWxEmitter<T0, T1, T2, T3>>::vnsra_wx(self, vd, vs2, rs1, vm);
43860    }
43861    /// RISC-V `vnsrl.wi` instruction.
43862    ///
43863    /// # Forms
43864    /// Assembly: `vnsrl.wi vm, vs2, vd, imm`
43865    /// Rust: `vnsrl_wi(vd, vs2, zimm5, vm)`
43866    ///
43867    /// # Arguments
43868    /// - `vd` — Vector register operand.
43869    /// - `vs2` — Vector register operand.
43870    /// - `zimm5` — Immediate encoding value.
43871    /// - `vm` — Vector mask control.
43872    pub fn vnsrl_wi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3)
43873    where
43874        Self: VnsrlWiEmitter<T0, T1, T2, T3>,
43875    {
43876        <Self as VnsrlWiEmitter<T0, T1, T2, T3>>::vnsrl_wi(self, vd, vs2, zimm5, vm);
43877    }
43878    /// RISC-V `vnsrl.wv` instruction.
43879    ///
43880    /// # Forms
43881    /// Assembly: `vnsrl.wv vm, vs2, vs1, vd`
43882    /// Rust: `vnsrl_wv(vd, vs1, vs2, vm)`
43883    ///
43884    /// # Arguments
43885    /// - `vd` — Vector register operand.
43886    /// - `vs1` — Vector register operand.
43887    /// - `vs2` — Vector register operand.
43888    /// - `vm` — Vector mask control.
43889    pub fn vnsrl_wv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
43890    where
43891        Self: VnsrlWvEmitter<T0, T1, T2, T3>,
43892    {
43893        <Self as VnsrlWvEmitter<T0, T1, T2, T3>>::vnsrl_wv(self, vd, vs1, vs2, vm);
43894    }
43895    /// RISC-V `vnsrl.wx` instruction.
43896    ///
43897    /// # Forms
43898    /// Assembly: `vnsrl.wx vm, vs2, xs1, vd`
43899    /// Rust: `vnsrl_wx(vd, vs2, rs1, vm)`
43900    ///
43901    /// # Arguments
43902    /// - `vd` — Vector register operand.
43903    /// - `vs2` — Vector register operand.
43904    /// - `rs1` — Source register.
43905    /// - `vm` — Vector mask control.
43906    pub fn vnsrl_wx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
43907    where
43908        Self: VnsrlWxEmitter<T0, T1, T2, T3>,
43909    {
43910        <Self as VnsrlWxEmitter<T0, T1, T2, T3>>::vnsrl_wx(self, vd, vs2, rs1, vm);
43911    }
43912    /// RISC-V `vor.vi` instruction.
43913    ///
43914    /// # Forms
43915    /// Assembly: `vor.vi vm, vs2, vd, imm`
43916    /// Rust: `vor_vi(vd, vs2, simm5, vm)`
43917    ///
43918    /// # Arguments
43919    /// - `vd` — Vector register operand.
43920    /// - `vs2` — Vector register operand.
43921    /// - `simm5` — Immediate encoding value.
43922    /// - `vm` — Vector mask control.
43923    pub fn vor_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)
43924    where
43925        Self: VorViEmitter<T0, T1, T2, T3>,
43926    {
43927        <Self as VorViEmitter<T0, T1, T2, T3>>::vor_vi(self, vd, vs2, simm5, vm);
43928    }
43929    /// RISC-V `vor.vv` instruction.
43930    ///
43931    /// # Forms
43932    /// Assembly: `vor.vv vm, vs2, vs1, vd`
43933    /// Rust: `vor_vv(vd, vs1, vs2, vm)`
43934    ///
43935    /// # Arguments
43936    /// - `vd` — Vector register operand.
43937    /// - `vs1` — Vector register operand.
43938    /// - `vs2` — Vector register operand.
43939    /// - `vm` — Vector mask control.
43940    pub fn vor_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
43941    where
43942        Self: VorVvEmitter<T0, T1, T2, T3>,
43943    {
43944        <Self as VorVvEmitter<T0, T1, T2, T3>>::vor_vv(self, vd, vs1, vs2, vm);
43945    }
43946    /// RISC-V `vor.vx` instruction.
43947    ///
43948    /// # Forms
43949    /// Assembly: `vor.vx vm, vs2, xs1, vd`
43950    /// Rust: `vor_vx(vd, vs2, rs1, vm)`
43951    ///
43952    /// # Arguments
43953    /// - `vd` — Vector register operand.
43954    /// - `vs2` — Vector register operand.
43955    /// - `rs1` — Source register.
43956    /// - `vm` — Vector mask control.
43957    pub fn vor_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
43958    where
43959        Self: VorVxEmitter<T0, T1, T2, T3>,
43960    {
43961        <Self as VorVxEmitter<T0, T1, T2, T3>>::vor_vx(self, vd, vs2, rs1, vm);
43962    }
43963    /// RISC-V `vpopc.m` instruction.
43964    ///
43965    /// # Forms
43966    /// Assembly: `vpopc.m rd vs2 vm`
43967    /// Rust: `vpopc_m(rd, vs2, vm)`
43968    ///
43969    /// # Arguments
43970    /// - `rd` — Destination register.
43971    /// - `vs2` — Vector register operand.
43972    /// - `vm` — Vector mask control.
43973    pub fn vpopc_m<T0, T1, T2>(&mut self, rd: T0, vs2: T1, vm: T2)
43974    where
43975        Self: VpopcMEmitter<T0, T1, T2>,
43976    {
43977        <Self as VpopcMEmitter<T0, T1, T2>>::vpopc_m(self, rd, vs2, vm);
43978    }
43979    /// RISC-V `vredand.vs` instruction.
43980    ///
43981    /// # Forms
43982    /// Assembly: `vredand.vs vm, vs2, vs1, vd`
43983    /// Rust: `vredand_vs(vd, vs1, vs2, vm)`
43984    ///
43985    /// # Arguments
43986    /// - `vd` — Vector register operand.
43987    /// - `vs1` — Vector register operand.
43988    /// - `vs2` — Vector register operand.
43989    /// - `vm` — Vector mask control.
43990    pub fn vredand_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
43991    where
43992        Self: VredandVsEmitter<T0, T1, T2, T3>,
43993    {
43994        <Self as VredandVsEmitter<T0, T1, T2, T3>>::vredand_vs(self, vd, vs1, vs2, vm);
43995    }
43996    /// RISC-V `vredmax.vs` instruction.
43997    ///
43998    /// # Forms
43999    /// Assembly: `vredmax.vs vm, vs2, vs1, vd`
44000    /// Rust: `vredmax_vs(vd, vs1, vs2, vm)`
44001    ///
44002    /// # Arguments
44003    /// - `vd` — Vector register operand.
44004    /// - `vs1` — Vector register operand.
44005    /// - `vs2` — Vector register operand.
44006    /// - `vm` — Vector mask control.
44007    pub fn vredmax_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
44008    where
44009        Self: VredmaxVsEmitter<T0, T1, T2, T3>,
44010    {
44011        <Self as VredmaxVsEmitter<T0, T1, T2, T3>>::vredmax_vs(self, vd, vs1, vs2, vm);
44012    }
44013    /// RISC-V `vredmaxu.vs` instruction.
44014    ///
44015    /// # Forms
44016    /// Assembly: `vredmaxu.vs vm, vs2, vs1, vd`
44017    /// Rust: `vredmaxu_vs(vd, vs1, vs2, vm)`
44018    ///
44019    /// # Arguments
44020    /// - `vd` — Vector register operand.
44021    /// - `vs1` — Vector register operand.
44022    /// - `vs2` — Vector register operand.
44023    /// - `vm` — Vector mask control.
44024    pub fn vredmaxu_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
44025    where
44026        Self: VredmaxuVsEmitter<T0, T1, T2, T3>,
44027    {
44028        <Self as VredmaxuVsEmitter<T0, T1, T2, T3>>::vredmaxu_vs(self, vd, vs1, vs2, vm);
44029    }
44030    /// RISC-V `vredmin.vs` instruction.
44031    ///
44032    /// # Forms
44033    /// Assembly: `vredmin.vs vm, vs2, vs1, vd`
44034    /// Rust: `vredmin_vs(vd, vs1, vs2, vm)`
44035    ///
44036    /// # Arguments
44037    /// - `vd` — Vector register operand.
44038    /// - `vs1` — Vector register operand.
44039    /// - `vs2` — Vector register operand.
44040    /// - `vm` — Vector mask control.
44041    pub fn vredmin_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
44042    where
44043        Self: VredminVsEmitter<T0, T1, T2, T3>,
44044    {
44045        <Self as VredminVsEmitter<T0, T1, T2, T3>>::vredmin_vs(self, vd, vs1, vs2, vm);
44046    }
44047    /// RISC-V `vredminu.vs` instruction.
44048    ///
44049    /// # Forms
44050    /// Assembly: `vredminu.vs vm, vs2, vs1, vd`
44051    /// Rust: `vredminu_vs(vd, vs1, vs2, vm)`
44052    ///
44053    /// # Arguments
44054    /// - `vd` — Vector register operand.
44055    /// - `vs1` — Vector register operand.
44056    /// - `vs2` — Vector register operand.
44057    /// - `vm` — Vector mask control.
44058    pub fn vredminu_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
44059    where
44060        Self: VredminuVsEmitter<T0, T1, T2, T3>,
44061    {
44062        <Self as VredminuVsEmitter<T0, T1, T2, T3>>::vredminu_vs(self, vd, vs1, vs2, vm);
44063    }
44064    /// RISC-V `vredor.vs` instruction.
44065    ///
44066    /// # Forms
44067    /// Assembly: `vredor.vs vm, vs2, vs1, vd`
44068    /// Rust: `vredor_vs(vd, vs1, vs2, vm)`
44069    ///
44070    /// # Arguments
44071    /// - `vd` — Vector register operand.
44072    /// - `vs1` — Vector register operand.
44073    /// - `vs2` — Vector register operand.
44074    /// - `vm` — Vector mask control.
44075    pub fn vredor_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
44076    where
44077        Self: VredorVsEmitter<T0, T1, T2, T3>,
44078    {
44079        <Self as VredorVsEmitter<T0, T1, T2, T3>>::vredor_vs(self, vd, vs1, vs2, vm);
44080    }
44081    /// RISC-V `vredsum.vs` instruction.
44082    ///
44083    /// # Forms
44084    /// Assembly: `vredsum.vs vm, vs2, vs1, vd`
44085    /// Rust: `vredsum_vs(vd, vs1, vs2, vm)`
44086    ///
44087    /// # Arguments
44088    /// - `vd` — Vector register operand.
44089    /// - `vs1` — Vector register operand.
44090    /// - `vs2` — Vector register operand.
44091    /// - `vm` — Vector mask control.
44092    pub fn vredsum_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
44093    where
44094        Self: VredsumVsEmitter<T0, T1, T2, T3>,
44095    {
44096        <Self as VredsumVsEmitter<T0, T1, T2, T3>>::vredsum_vs(self, vd, vs1, vs2, vm);
44097    }
44098    /// RISC-V `vredxor.vs` instruction.
44099    ///
44100    /// # Forms
44101    /// Assembly: `vredxor.vs vm, vs2, vs1, vd`
44102    /// Rust: `vredxor_vs(vd, vs1, vs2, vm)`
44103    ///
44104    /// # Arguments
44105    /// - `vd` — Vector register operand.
44106    /// - `vs1` — Vector register operand.
44107    /// - `vs2` — Vector register operand.
44108    /// - `vm` — Vector mask control.
44109    pub fn vredxor_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
44110    where
44111        Self: VredxorVsEmitter<T0, T1, T2, T3>,
44112    {
44113        <Self as VredxorVsEmitter<T0, T1, T2, T3>>::vredxor_vs(self, vd, vs1, vs2, vm);
44114    }
44115    /// RISC-V `vrem.vv` instruction.
44116    ///
44117    /// # Forms
44118    /// Assembly: `vrem.vv vm, vs2, vs1, vd`
44119    /// Rust: `vrem_vv(vd, vs1, vs2, vm)`
44120    ///
44121    /// # Arguments
44122    /// - `vd` — Vector register operand.
44123    /// - `vs1` — Vector register operand.
44124    /// - `vs2` — Vector register operand.
44125    /// - `vm` — Vector mask control.
44126    pub fn vrem_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
44127    where
44128        Self: VremVvEmitter<T0, T1, T2, T3>,
44129    {
44130        <Self as VremVvEmitter<T0, T1, T2, T3>>::vrem_vv(self, vd, vs1, vs2, vm);
44131    }
44132    /// RISC-V `vrem.vx` instruction.
44133    ///
44134    /// # Forms
44135    /// Assembly: `vrem.vx vm, vs2, xs1, vd`
44136    /// Rust: `vrem_vx(vd, vs2, rs1, vm)`
44137    ///
44138    /// # Arguments
44139    /// - `vd` — Vector register operand.
44140    /// - `vs2` — Vector register operand.
44141    /// - `rs1` — Source register.
44142    /// - `vm` — Vector mask control.
44143    pub fn vrem_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
44144    where
44145        Self: VremVxEmitter<T0, T1, T2, T3>,
44146    {
44147        <Self as VremVxEmitter<T0, T1, T2, T3>>::vrem_vx(self, vd, vs2, rs1, vm);
44148    }
44149    /// RISC-V `vremu.vv` instruction.
44150    ///
44151    /// # Forms
44152    /// Assembly: `vremu.vv vm, vs2, vs1, vd`
44153    /// Rust: `vremu_vv(vd, vs1, vs2, vm)`
44154    ///
44155    /// # Arguments
44156    /// - `vd` — Vector register operand.
44157    /// - `vs1` — Vector register operand.
44158    /// - `vs2` — Vector register operand.
44159    /// - `vm` — Vector mask control.
44160    pub fn vremu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
44161    where
44162        Self: VremuVvEmitter<T0, T1, T2, T3>,
44163    {
44164        <Self as VremuVvEmitter<T0, T1, T2, T3>>::vremu_vv(self, vd, vs1, vs2, vm);
44165    }
44166    /// RISC-V `vremu.vx` instruction.
44167    ///
44168    /// # Forms
44169    /// Assembly: `vremu.vx vm, vs2, xs1, vd`
44170    /// Rust: `vremu_vx(vd, vs2, rs1, vm)`
44171    ///
44172    /// # Arguments
44173    /// - `vd` — Vector register operand.
44174    /// - `vs2` — Vector register operand.
44175    /// - `rs1` — Source register.
44176    /// - `vm` — Vector mask control.
44177    pub fn vremu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
44178    where
44179        Self: VremuVxEmitter<T0, T1, T2, T3>,
44180    {
44181        <Self as VremuVxEmitter<T0, T1, T2, T3>>::vremu_vx(self, vd, vs2, rs1, vm);
44182    }
44183    /// RISC-V `vrev8.v` instruction.
44184    ///
44185    /// # Forms
44186    /// Assembly: `vrev8.v vm, vs2, vd`
44187    /// Rust: `vrev8_v(vd, vs2, vm)`
44188    ///
44189    /// # Arguments
44190    /// - `vd` — Vector register operand.
44191    /// - `vs2` — Vector register operand.
44192    /// - `vm` — Vector mask control.
44193    pub fn vrev8_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
44194    where
44195        Self: Vrev8VEmitter<T0, T1, T2>,
44196    {
44197        <Self as Vrev8VEmitter<T0, T1, T2>>::vrev8_v(self, vd, vs2, vm);
44198    }
44199    /// RISC-V `vrgather.vi` instruction.
44200    ///
44201    /// # Forms
44202    /// Assembly: `vrgather.vi vm, vs2, vd, imm`
44203    /// Rust: `vrgather_vi(vd, vs2, zimm5, vm)`
44204    ///
44205    /// # Arguments
44206    /// - `vd` — Vector register operand.
44207    /// - `vs2` — Vector register operand.
44208    /// - `zimm5` — Immediate encoding value.
44209    /// - `vm` — Vector mask control.
44210    pub fn vrgather_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3)
44211    where
44212        Self: VrgatherViEmitter<T0, T1, T2, T3>,
44213    {
44214        <Self as VrgatherViEmitter<T0, T1, T2, T3>>::vrgather_vi(self, vd, vs2, zimm5, vm);
44215    }
44216    /// RISC-V `vrgather.vv` instruction.
44217    ///
44218    /// # Forms
44219    /// Assembly: `vrgather.vv vm, vs2, vs1, vd`
44220    /// Rust: `vrgather_vv(vd, vs1, vs2, vm)`
44221    ///
44222    /// # Arguments
44223    /// - `vd` — Vector register operand.
44224    /// - `vs1` — Vector register operand.
44225    /// - `vs2` — Vector register operand.
44226    /// - `vm` — Vector mask control.
44227    pub fn vrgather_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
44228    where
44229        Self: VrgatherVvEmitter<T0, T1, T2, T3>,
44230    {
44231        <Self as VrgatherVvEmitter<T0, T1, T2, T3>>::vrgather_vv(self, vd, vs1, vs2, vm);
44232    }
44233    /// RISC-V `vrgather.vx` instruction.
44234    ///
44235    /// # Forms
44236    /// Assembly: `vrgather.vx vm, vs2, xs1, vd`
44237    /// Rust: `vrgather_vx(vd, vs2, rs1, vm)`
44238    ///
44239    /// # Arguments
44240    /// - `vd` — Vector register operand.
44241    /// - `vs2` — Vector register operand.
44242    /// - `rs1` — Source register.
44243    /// - `vm` — Vector mask control.
44244    pub fn vrgather_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
44245    where
44246        Self: VrgatherVxEmitter<T0, T1, T2, T3>,
44247    {
44248        <Self as VrgatherVxEmitter<T0, T1, T2, T3>>::vrgather_vx(self, vd, vs2, rs1, vm);
44249    }
44250    /// RISC-V `vrgatherei16.vv` instruction.
44251    ///
44252    /// # Forms
44253    /// Assembly: `vrgatherei16.vv vm, vs2, vs1, vd`
44254    /// Rust: `vrgatherei16_vv(vd, vs1, vs2, vm)`
44255    ///
44256    /// # Arguments
44257    /// - `vd` — Vector register operand.
44258    /// - `vs1` — Vector register operand.
44259    /// - `vs2` — Vector register operand.
44260    /// - `vm` — Vector mask control.
44261    pub fn vrgatherei16_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
44262    where
44263        Self: Vrgatherei16VvEmitter<T0, T1, T2, T3>,
44264    {
44265        <Self as Vrgatherei16VvEmitter<T0, T1, T2, T3>>::vrgatherei16_vv(self, vd, vs1, vs2, vm);
44266    }
44267    /// RISC-V `vrol.vv` instruction.
44268    ///
44269    /// # Forms
44270    /// Assembly: `vrol.vv vm, vs2, vs1, vd`
44271    /// Rust: `vrol_vv(vd, vs1, vs2, vm)`
44272    ///
44273    /// # Arguments
44274    /// - `vd` — Vector register operand.
44275    /// - `vs1` — Vector register operand.
44276    /// - `vs2` — Vector register operand.
44277    /// - `vm` — Vector mask control.
44278    pub fn vrol_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
44279    where
44280        Self: VrolVvEmitter<T0, T1, T2, T3>,
44281    {
44282        <Self as VrolVvEmitter<T0, T1, T2, T3>>::vrol_vv(self, vd, vs1, vs2, vm);
44283    }
44284    /// RISC-V `vrol.vx` instruction.
44285    ///
44286    /// # Forms
44287    /// Assembly: `vrol.vx vm, vs2, xs1, vd`
44288    /// Rust: `vrol_vx(vd, vs2, rs1, vm)`
44289    ///
44290    /// # Arguments
44291    /// - `vd` — Vector register operand.
44292    /// - `vs2` — Vector register operand.
44293    /// - `rs1` — Source register.
44294    /// - `vm` — Vector mask control.
44295    pub fn vrol_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
44296    where
44297        Self: VrolVxEmitter<T0, T1, T2, T3>,
44298    {
44299        <Self as VrolVxEmitter<T0, T1, T2, T3>>::vrol_vx(self, vd, vs2, rs1, vm);
44300    }
44301    /// RISC-V `vror.vi` instruction.
44302    ///
44303    /// # Forms
44304    /// Assembly: `vror.vi vm, vs2, vd, imm`
44305    /// Rust: `vror_vi(vd, vs2, zimm6lohi, vm)`
44306    ///
44307    /// # Arguments
44308    /// - `vd` — Vector register operand.
44309    /// - `vs2` — Vector register operand.
44310    /// - `zimm6lohi` — Immediate encoding value.
44311    /// - `vm` — Vector mask control.
44312    pub fn vror_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, zimm6lohi: T2, vm: T3)
44313    where
44314        Self: VrorViEmitter<T0, T1, T2, T3>,
44315    {
44316        <Self as VrorViEmitter<T0, T1, T2, T3>>::vror_vi(self, vd, vs2, zimm6lohi, vm);
44317    }
44318    /// RISC-V `vror.vv` instruction.
44319    ///
44320    /// # Forms
44321    /// Assembly: `vror.vv vm, vs2, vs1, vd`
44322    /// Rust: `vror_vv(vd, vs1, vs2, vm)`
44323    ///
44324    /// # Arguments
44325    /// - `vd` — Vector register operand.
44326    /// - `vs1` — Vector register operand.
44327    /// - `vs2` — Vector register operand.
44328    /// - `vm` — Vector mask control.
44329    pub fn vror_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
44330    where
44331        Self: VrorVvEmitter<T0, T1, T2, T3>,
44332    {
44333        <Self as VrorVvEmitter<T0, T1, T2, T3>>::vror_vv(self, vd, vs1, vs2, vm);
44334    }
44335    /// RISC-V `vror.vx` instruction.
44336    ///
44337    /// # Forms
44338    /// Assembly: `vror.vx vm, vs2, xs1, vd`
44339    /// Rust: `vror_vx(vd, vs2, rs1, vm)`
44340    ///
44341    /// # Arguments
44342    /// - `vd` — Vector register operand.
44343    /// - `vs2` — Vector register operand.
44344    /// - `rs1` — Source register.
44345    /// - `vm` — Vector mask control.
44346    pub fn vror_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
44347    where
44348        Self: VrorVxEmitter<T0, T1, T2, T3>,
44349    {
44350        <Self as VrorVxEmitter<T0, T1, T2, T3>>::vror_vx(self, vd, vs2, rs1, vm);
44351    }
44352    /// RISC-V `vrsub.vi` instruction.
44353    ///
44354    /// # Forms
44355    /// Assembly: `vrsub.vi vm, vs2, vd, imm`
44356    /// Rust: `vrsub_vi(vd, vs2, simm5, vm)`
44357    ///
44358    /// # Arguments
44359    /// - `vd` — Vector register operand.
44360    /// - `vs2` — Vector register operand.
44361    /// - `simm5` — Immediate encoding value.
44362    /// - `vm` — Vector mask control.
44363    pub fn vrsub_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)
44364    where
44365        Self: VrsubViEmitter<T0, T1, T2, T3>,
44366    {
44367        <Self as VrsubViEmitter<T0, T1, T2, T3>>::vrsub_vi(self, vd, vs2, simm5, vm);
44368    }
44369    /// RISC-V `vrsub.vx` instruction.
44370    ///
44371    /// # Forms
44372    /// Assembly: `vrsub.vx vm, vs2, xs1, vd`
44373    /// Rust: `vrsub_vx(vd, vs2, rs1, vm)`
44374    ///
44375    /// # Arguments
44376    /// - `vd` — Vector register operand.
44377    /// - `vs2` — Vector register operand.
44378    /// - `rs1` — Source register.
44379    /// - `vm` — Vector mask control.
44380    pub fn vrsub_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
44381    where
44382        Self: VrsubVxEmitter<T0, T1, T2, T3>,
44383    {
44384        <Self as VrsubVxEmitter<T0, T1, T2, T3>>::vrsub_vx(self, vd, vs2, rs1, vm);
44385    }
44386    /// RISC-V `vs1r.v` instruction.
44387    ///
44388    /// # Forms
44389    /// Assembly: `vs1r.v xs1, vs3`
44390    /// Rust: `vs1r_v(vs3, rs1)`
44391    ///
44392    /// # Arguments
44393    /// - `vs3` — Vector register operand.
44394    /// - `rs1` — Memory base register.
44395    pub fn vs1r_v<T0, T1>(&mut self, vs3: T0, rs1: T1)
44396    where
44397        Self: Vs1RVEmitter<T0, T1>,
44398    {
44399        <Self as Vs1RVEmitter<T0, T1>>::vs1r_v(self, vs3, rs1);
44400    }
44401    /// RISC-V `vs2r.v` instruction.
44402    ///
44403    /// # Forms
44404    /// Assembly: `vs2r.v xs1, vs3`
44405    /// Rust: `vs2r_v(vs3, rs1)`
44406    ///
44407    /// # Arguments
44408    /// - `vs3` — Vector register operand.
44409    /// - `rs1` — Memory base register.
44410    pub fn vs2r_v<T0, T1>(&mut self, vs3: T0, rs1: T1)
44411    where
44412        Self: Vs2RVEmitter<T0, T1>,
44413    {
44414        <Self as Vs2RVEmitter<T0, T1>>::vs2r_v(self, vs3, rs1);
44415    }
44416    /// RISC-V `vs4r.v` instruction.
44417    ///
44418    /// # Forms
44419    /// Assembly: `vs4r.v xs1, vs3`
44420    /// Rust: `vs4r_v(vs3, rs1)`
44421    ///
44422    /// # Arguments
44423    /// - `vs3` — Vector register operand.
44424    /// - `rs1` — Memory base register.
44425    pub fn vs4r_v<T0, T1>(&mut self, vs3: T0, rs1: T1)
44426    where
44427        Self: Vs4RVEmitter<T0, T1>,
44428    {
44429        <Self as Vs4RVEmitter<T0, T1>>::vs4r_v(self, vs3, rs1);
44430    }
44431    /// RISC-V `vs8r.v` instruction.
44432    ///
44433    /// # Forms
44434    /// Assembly: `vs8r.v xs1, vs3`
44435    /// Rust: `vs8r_v(vs3, rs1)`
44436    ///
44437    /// # Arguments
44438    /// - `vs3` — Vector register operand.
44439    /// - `rs1` — Memory base register.
44440    pub fn vs8r_v<T0, T1>(&mut self, vs3: T0, rs1: T1)
44441    where
44442        Self: Vs8RVEmitter<T0, T1>,
44443    {
44444        <Self as Vs8RVEmitter<T0, T1>>::vs8r_v(self, vs3, rs1);
44445    }
44446    /// RISC-V `vsadd.vi` instruction.
44447    ///
44448    /// # Forms
44449    /// Assembly: `vsadd.vi vm, vs2, vd, imm`
44450    /// Rust: `vsadd_vi(vd, vs2, simm5, vm)`
44451    ///
44452    /// # Arguments
44453    /// - `vd` — Vector register operand.
44454    /// - `vs2` — Vector register operand.
44455    /// - `simm5` — Immediate encoding value.
44456    /// - `vm` — Vector mask control.
44457    pub fn vsadd_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)
44458    where
44459        Self: VsaddViEmitter<T0, T1, T2, T3>,
44460    {
44461        <Self as VsaddViEmitter<T0, T1, T2, T3>>::vsadd_vi(self, vd, vs2, simm5, vm);
44462    }
44463    /// RISC-V `vsadd.vv` instruction.
44464    ///
44465    /// # Forms
44466    /// Assembly: `vsadd.vv vm, vs2, vs1, vd`
44467    /// Rust: `vsadd_vv(vd, vs1, vs2, vm)`
44468    ///
44469    /// # Arguments
44470    /// - `vd` — Vector register operand.
44471    /// - `vs1` — Vector register operand.
44472    /// - `vs2` — Vector register operand.
44473    /// - `vm` — Vector mask control.
44474    pub fn vsadd_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
44475    where
44476        Self: VsaddVvEmitter<T0, T1, T2, T3>,
44477    {
44478        <Self as VsaddVvEmitter<T0, T1, T2, T3>>::vsadd_vv(self, vd, vs1, vs2, vm);
44479    }
44480    /// RISC-V `vsadd.vx` instruction.
44481    ///
44482    /// # Forms
44483    /// Assembly: `vsadd.vx vm, vs2, xs1, vd`
44484    /// Rust: `vsadd_vx(vd, vs2, rs1, vm)`
44485    ///
44486    /// # Arguments
44487    /// - `vd` — Vector register operand.
44488    /// - `vs2` — Vector register operand.
44489    /// - `rs1` — Source register.
44490    /// - `vm` — Vector mask control.
44491    pub fn vsadd_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
44492    where
44493        Self: VsaddVxEmitter<T0, T1, T2, T3>,
44494    {
44495        <Self as VsaddVxEmitter<T0, T1, T2, T3>>::vsadd_vx(self, vd, vs2, rs1, vm);
44496    }
44497    /// RISC-V `vsaddu.vi` instruction.
44498    ///
44499    /// # Forms
44500    /// Assembly: `vsaddu.vi vm, vs2, vd, imm`
44501    /// Rust: `vsaddu_vi(vd, vs2, simm5, vm)`
44502    ///
44503    /// # Arguments
44504    /// - `vd` — Vector register operand.
44505    /// - `vs2` — Vector register operand.
44506    /// - `simm5` — Immediate encoding value.
44507    /// - `vm` — Vector mask control.
44508    pub fn vsaddu_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)
44509    where
44510        Self: VsadduViEmitter<T0, T1, T2, T3>,
44511    {
44512        <Self as VsadduViEmitter<T0, T1, T2, T3>>::vsaddu_vi(self, vd, vs2, simm5, vm);
44513    }
44514    /// RISC-V `vsaddu.vv` instruction.
44515    ///
44516    /// # Forms
44517    /// Assembly: `vsaddu.vv vm, vs2, vs1, vd`
44518    /// Rust: `vsaddu_vv(vd, vs1, vs2, vm)`
44519    ///
44520    /// # Arguments
44521    /// - `vd` — Vector register operand.
44522    /// - `vs1` — Vector register operand.
44523    /// - `vs2` — Vector register operand.
44524    /// - `vm` — Vector mask control.
44525    pub fn vsaddu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
44526    where
44527        Self: VsadduVvEmitter<T0, T1, T2, T3>,
44528    {
44529        <Self as VsadduVvEmitter<T0, T1, T2, T3>>::vsaddu_vv(self, vd, vs1, vs2, vm);
44530    }
44531    /// RISC-V `vsaddu.vx` instruction.
44532    ///
44533    /// # Forms
44534    /// Assembly: `vsaddu.vx vm, vs2, xs1, vd`
44535    /// Rust: `vsaddu_vx(vd, vs2, rs1, vm)`
44536    ///
44537    /// # Arguments
44538    /// - `vd` — Vector register operand.
44539    /// - `vs2` — Vector register operand.
44540    /// - `rs1` — Source register.
44541    /// - `vm` — Vector mask control.
44542    pub fn vsaddu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
44543    where
44544        Self: VsadduVxEmitter<T0, T1, T2, T3>,
44545    {
44546        <Self as VsadduVxEmitter<T0, T1, T2, T3>>::vsaddu_vx(self, vd, vs2, rs1, vm);
44547    }
44548    /// RISC-V `vsbc.vvm` instruction.
44549    ///
44550    /// # Forms
44551    /// Assembly: `vsbc.vvm vs2, vs1, vd`
44552    /// Rust: `vsbc_vvm(vd, vs1, vs2)`
44553    ///
44554    /// # Arguments
44555    /// - `vd` — Vector register operand.
44556    /// - `vs1` — Vector register operand.
44557    /// - `vs2` — Vector register operand.
44558    pub fn vsbc_vvm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)
44559    where
44560        Self: VsbcVvmEmitter<T0, T1, T2>,
44561    {
44562        <Self as VsbcVvmEmitter<T0, T1, T2>>::vsbc_vvm(self, vd, vs1, vs2);
44563    }
44564    /// RISC-V `vsbc.vxm` instruction.
44565    ///
44566    /// # Forms
44567    /// Assembly: `vsbc.vxm vs2, xs1, vd`
44568    /// Rust: `vsbc_vxm(vd, rs1, vs2)`
44569    ///
44570    /// # Arguments
44571    /// - `vd` — Vector register operand.
44572    /// - `rs1` — Source register.
44573    /// - `vs2` — Vector register operand.
44574    pub fn vsbc_vxm<T0, T1, T2>(&mut self, vd: T0, rs1: T1, vs2: T2)
44575    where
44576        Self: VsbcVxmEmitter<T0, T1, T2>,
44577    {
44578        <Self as VsbcVxmEmitter<T0, T1, T2>>::vsbc_vxm(self, vd, rs1, vs2);
44579    }
44580    /// RISC-V `vse16.v` instruction.
44581    ///
44582    /// # Forms
44583    /// Assembly: `vse16.v vm, xs1, vs3`
44584    /// Rust: `vse16_v(vs3, rs1, vm, nf)`
44585    ///
44586    /// # Arguments
44587    /// - `vs3` — Vector register operand.
44588    /// - `rs1` — Memory base register.
44589    /// - `vm` — Vector mask control.
44590    /// - `nf` — Vector segment field count.
44591    pub fn vse16_v<T0, T1, T2, T3>(&mut self, vs3: T0, rs1: T1, vm: T2, nf: T3)
44592    where
44593        Self: Vse16VEmitter<T0, T1, T2, T3>,
44594    {
44595        <Self as Vse16VEmitter<T0, T1, T2, T3>>::vse16_v(self, vs3, rs1, vm, nf);
44596    }
44597    /// RISC-V `vse1.v` instruction.
44598    ///
44599    /// # Forms
44600    /// Assembly: `vse1.v vs3 rs1`
44601    /// Rust: `vse1_v(vs3, rs1)`
44602    ///
44603    /// # Arguments
44604    /// - `vs3` — Vector register operand.
44605    /// - `rs1` — Memory base register.
44606    pub fn vse1_v<T0, T1>(&mut self, vs3: T0, rs1: T1)
44607    where
44608        Self: Vse1VEmitter<T0, T1>,
44609    {
44610        <Self as Vse1VEmitter<T0, T1>>::vse1_v(self, vs3, rs1);
44611    }
44612    /// RISC-V `vse32.v` instruction.
44613    ///
44614    /// # Forms
44615    /// Assembly: `vse32.v vm, xs1, vs3`
44616    /// Rust: `vse32_v(vs3, rs1, vm, nf)`
44617    ///
44618    /// # Arguments
44619    /// - `vs3` — Vector register operand.
44620    /// - `rs1` — Memory base register.
44621    /// - `vm` — Vector mask control.
44622    /// - `nf` — Vector segment field count.
44623    pub fn vse32_v<T0, T1, T2, T3>(&mut self, vs3: T0, rs1: T1, vm: T2, nf: T3)
44624    where
44625        Self: Vse32VEmitter<T0, T1, T2, T3>,
44626    {
44627        <Self as Vse32VEmitter<T0, T1, T2, T3>>::vse32_v(self, vs3, rs1, vm, nf);
44628    }
44629    /// RISC-V `vse64.v` instruction.
44630    ///
44631    /// # Forms
44632    /// Assembly: `vse64.v vm, xs1, vs3`
44633    /// Rust: `vse64_v(vs3, rs1, vm, nf)`
44634    ///
44635    /// # Arguments
44636    /// - `vs3` — Vector register operand.
44637    /// - `rs1` — Memory base register.
44638    /// - `vm` — Vector mask control.
44639    /// - `nf` — Vector segment field count.
44640    pub fn vse64_v<T0, T1, T2, T3>(&mut self, vs3: T0, rs1: T1, vm: T2, nf: T3)
44641    where
44642        Self: Vse64VEmitter<T0, T1, T2, T3>,
44643    {
44644        <Self as Vse64VEmitter<T0, T1, T2, T3>>::vse64_v(self, vs3, rs1, vm, nf);
44645    }
44646    /// RISC-V `vse8.v` instruction.
44647    ///
44648    /// # Forms
44649    /// Assembly: `vse8.v vm, xs1, vs3`
44650    /// Rust: `vse8_v(vs3, rs1, vm, nf)`
44651    ///
44652    /// # Arguments
44653    /// - `vs3` — Vector register operand.
44654    /// - `rs1` — Memory base register.
44655    /// - `vm` — Vector mask control.
44656    /// - `nf` — Vector segment field count.
44657    pub fn vse8_v<T0, T1, T2, T3>(&mut self, vs3: T0, rs1: T1, vm: T2, nf: T3)
44658    where
44659        Self: Vse8VEmitter<T0, T1, T2, T3>,
44660    {
44661        <Self as Vse8VEmitter<T0, T1, T2, T3>>::vse8_v(self, vs3, rs1, vm, nf);
44662    }
44663    /// RISC-V `vsetivli` instruction.
44664    ///
44665    /// # Forms
44666    /// Assembly: `vsetivli xd, imm`
44667    /// Rust: `vsetivli(rd, zimm5, zimm10)`
44668    ///
44669    /// # Arguments
44670    /// - `rd` — Destination register.
44671    /// - `zimm5` — Immediate encoding value.
44672    /// - `zimm10` — Immediate encoding value.
44673    pub fn vsetivli<T0, T1, T2>(&mut self, rd: T0, zimm5: T1, zimm10: T2)
44674    where
44675        Self: VsetivliEmitter<T0, T1, T2>,
44676    {
44677        <Self as VsetivliEmitter<T0, T1, T2>>::vsetivli(self, rd, zimm5, zimm10);
44678    }
44679    /// RISC-V `vsetvl` instruction.
44680    ///
44681    /// # Forms
44682    /// Assembly: `vsetvl xs2, xs1, xd`
44683    /// Rust: `vsetvl(rd, rs1, rs2)`
44684    ///
44685    /// # Arguments
44686    /// - `rd` — Destination register.
44687    /// - `rs1` — Source register.
44688    /// - `rs2` — Source register.
44689    pub fn vsetvl<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
44690    where
44691        Self: VsetvlEmitter<T0, T1, T2>,
44692    {
44693        <Self as VsetvlEmitter<T0, T1, T2>>::vsetvl(self, rd, rs1, rs2);
44694    }
44695    /// RISC-V `vsetvli` instruction.
44696    ///
44697    /// # Forms
44698    /// Assembly: `vsetvli xs1, xd, imm`
44699    /// Rust: `vsetvli(rd, rs1, zimm11)`
44700    ///
44701    /// # Arguments
44702    /// - `rd` — Destination register.
44703    /// - `rs1` — Source register.
44704    /// - `zimm11` — Immediate encoding value.
44705    pub fn vsetvli<T0, T1, T2>(&mut self, rd: T0, rs1: T1, zimm11: T2)
44706    where
44707        Self: VsetvliEmitter<T0, T1, T2>,
44708    {
44709        <Self as VsetvliEmitter<T0, T1, T2>>::vsetvli(self, rd, rs1, zimm11);
44710    }
44711    /// RISC-V `vsext.vf2` instruction.
44712    ///
44713    /// # Forms
44714    /// Assembly: `vsext.vf2 vm, vs2, vd`
44715    /// Rust: `vsext_vf2(vd, vs2, vm)`
44716    ///
44717    /// # Arguments
44718    /// - `vd` — Vector register operand.
44719    /// - `vs2` — Vector register operand.
44720    /// - `vm` — Vector mask control.
44721    pub fn vsext_vf2<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
44722    where
44723        Self: VsextVf2Emitter<T0, T1, T2>,
44724    {
44725        <Self as VsextVf2Emitter<T0, T1, T2>>::vsext_vf2(self, vd, vs2, vm);
44726    }
44727    /// RISC-V `vsext.vf4` instruction.
44728    ///
44729    /// # Forms
44730    /// Assembly: `vsext.vf4 vm, vs2, vd`
44731    /// Rust: `vsext_vf4(vd, vs2, vm)`
44732    ///
44733    /// # Arguments
44734    /// - `vd` — Vector register operand.
44735    /// - `vs2` — Vector register operand.
44736    /// - `vm` — Vector mask control.
44737    pub fn vsext_vf4<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
44738    where
44739        Self: VsextVf4Emitter<T0, T1, T2>,
44740    {
44741        <Self as VsextVf4Emitter<T0, T1, T2>>::vsext_vf4(self, vd, vs2, vm);
44742    }
44743    /// RISC-V `vsext.vf8` instruction.
44744    ///
44745    /// # Forms
44746    /// Assembly: `vsext.vf8 vm, vs2, vd`
44747    /// Rust: `vsext_vf8(vd, vs2, vm)`
44748    ///
44749    /// # Arguments
44750    /// - `vd` — Vector register operand.
44751    /// - `vs2` — Vector register operand.
44752    /// - `vm` — Vector mask control.
44753    pub fn vsext_vf8<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
44754    where
44755        Self: VsextVf8Emitter<T0, T1, T2>,
44756    {
44757        <Self as VsextVf8Emitter<T0, T1, T2>>::vsext_vf8(self, vd, vs2, vm);
44758    }
44759    /// RISC-V `vsha2ch.vv` instruction.
44760    ///
44761    /// # Forms
44762    /// Assembly: `vsha2ch.vv vs2, vs1, vd`
44763    /// Rust: `vsha2ch_vv(vd, vs1, vs2)`
44764    ///
44765    /// # Arguments
44766    /// - `vd` — Vector register operand.
44767    /// - `vs1` — Vector register operand.
44768    /// - `vs2` — Vector register operand.
44769    pub fn vsha2ch_vv<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)
44770    where
44771        Self: Vsha2ChVvEmitter<T0, T1, T2>,
44772    {
44773        <Self as Vsha2ChVvEmitter<T0, T1, T2>>::vsha2ch_vv(self, vd, vs1, vs2);
44774    }
44775    /// RISC-V `vsha2cl.vv` instruction.
44776    ///
44777    /// # Forms
44778    /// Assembly: `vsha2cl.vv vs2, vs1, vd`
44779    /// Rust: `vsha2cl_vv(vd, vs1, vs2)`
44780    ///
44781    /// # Arguments
44782    /// - `vd` — Vector register operand.
44783    /// - `vs1` — Vector register operand.
44784    /// - `vs2` — Vector register operand.
44785    pub fn vsha2cl_vv<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)
44786    where
44787        Self: Vsha2ClVvEmitter<T0, T1, T2>,
44788    {
44789        <Self as Vsha2ClVvEmitter<T0, T1, T2>>::vsha2cl_vv(self, vd, vs1, vs2);
44790    }
44791    /// RISC-V `vsha2ms.vv` instruction.
44792    ///
44793    /// # Forms
44794    /// Assembly: `vsha2ms.vv vs2, vs1, vd`
44795    /// Rust: `vsha2ms_vv(vd, vs1, vs2)`
44796    ///
44797    /// # Arguments
44798    /// - `vd` — Vector register operand.
44799    /// - `vs1` — Vector register operand.
44800    /// - `vs2` — Vector register operand.
44801    pub fn vsha2ms_vv<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)
44802    where
44803        Self: Vsha2MsVvEmitter<T0, T1, T2>,
44804    {
44805        <Self as Vsha2MsVvEmitter<T0, T1, T2>>::vsha2ms_vv(self, vd, vs1, vs2);
44806    }
44807    /// RISC-V `vslide1down.vx` instruction.
44808    ///
44809    /// # Forms
44810    /// Assembly: `vslide1down.vx vm, vs2, xs1, vd`
44811    /// Rust: `vslide1down_vx(vd, vs2, rs1, vm)`
44812    ///
44813    /// # Arguments
44814    /// - `vd` — Vector register operand.
44815    /// - `vs2` — Vector register operand.
44816    /// - `rs1` — Source register.
44817    /// - `vm` — Vector mask control.
44818    pub fn vslide1down_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
44819    where
44820        Self: Vslide1DownVxEmitter<T0, T1, T2, T3>,
44821    {
44822        <Self as Vslide1DownVxEmitter<T0, T1, T2, T3>>::vslide1down_vx(self, vd, vs2, rs1, vm);
44823    }
44824    /// RISC-V `vslide1up.vx` instruction.
44825    ///
44826    /// # Forms
44827    /// Assembly: `vslide1up.vx vm, vs2, xs1, vd`
44828    /// Rust: `vslide1up_vx(vd, vs2, rs1, vm)`
44829    ///
44830    /// # Arguments
44831    /// - `vd` — Vector register operand.
44832    /// - `vs2` — Vector register operand.
44833    /// - `rs1` — Source register.
44834    /// - `vm` — Vector mask control.
44835    pub fn vslide1up_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
44836    where
44837        Self: Vslide1UpVxEmitter<T0, T1, T2, T3>,
44838    {
44839        <Self as Vslide1UpVxEmitter<T0, T1, T2, T3>>::vslide1up_vx(self, vd, vs2, rs1, vm);
44840    }
44841    /// RISC-V `vslidedown.vi` instruction.
44842    ///
44843    /// # Forms
44844    /// Assembly: `vslidedown.vi vm, vs2, vd, imm`
44845    /// Rust: `vslidedown_vi(vd, vs2, zimm5, vm)`
44846    ///
44847    /// # Arguments
44848    /// - `vd` — Vector register operand.
44849    /// - `vs2` — Vector register operand.
44850    /// - `zimm5` — Immediate encoding value.
44851    /// - `vm` — Vector mask control.
44852    pub fn vslidedown_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3)
44853    where
44854        Self: VslidedownViEmitter<T0, T1, T2, T3>,
44855    {
44856        <Self as VslidedownViEmitter<T0, T1, T2, T3>>::vslidedown_vi(self, vd, vs2, zimm5, vm);
44857    }
44858    /// RISC-V `vslidedown.vx` instruction.
44859    ///
44860    /// # Forms
44861    /// Assembly: `vslidedown.vx vm, vs2, xs1, vd`
44862    /// Rust: `vslidedown_vx(vd, vs2, rs1, vm)`
44863    ///
44864    /// # Arguments
44865    /// - `vd` — Vector register operand.
44866    /// - `vs2` — Vector register operand.
44867    /// - `rs1` — Source register.
44868    /// - `vm` — Vector mask control.
44869    pub fn vslidedown_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
44870    where
44871        Self: VslidedownVxEmitter<T0, T1, T2, T3>,
44872    {
44873        <Self as VslidedownVxEmitter<T0, T1, T2, T3>>::vslidedown_vx(self, vd, vs2, rs1, vm);
44874    }
44875    /// RISC-V `vslideup.vi` instruction.
44876    ///
44877    /// # Forms
44878    /// Assembly: `vslideup.vi vm, vs2, vd, imm`
44879    /// Rust: `vslideup_vi(vd, vs2, zimm5, vm)`
44880    ///
44881    /// # Arguments
44882    /// - `vd` — Vector register operand.
44883    /// - `vs2` — Vector register operand.
44884    /// - `zimm5` — Immediate encoding value.
44885    /// - `vm` — Vector mask control.
44886    pub fn vslideup_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3)
44887    where
44888        Self: VslideupViEmitter<T0, T1, T2, T3>,
44889    {
44890        <Self as VslideupViEmitter<T0, T1, T2, T3>>::vslideup_vi(self, vd, vs2, zimm5, vm);
44891    }
44892    /// RISC-V `vslideup.vx` instruction.
44893    ///
44894    /// # Forms
44895    /// Assembly: `vslideup.vx vm, vs2, xs1, vd`
44896    /// Rust: `vslideup_vx(vd, vs2, rs1, vm)`
44897    ///
44898    /// # Arguments
44899    /// - `vd` — Vector register operand.
44900    /// - `vs2` — Vector register operand.
44901    /// - `rs1` — Source register.
44902    /// - `vm` — Vector mask control.
44903    pub fn vslideup_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
44904    where
44905        Self: VslideupVxEmitter<T0, T1, T2, T3>,
44906    {
44907        <Self as VslideupVxEmitter<T0, T1, T2, T3>>::vslideup_vx(self, vd, vs2, rs1, vm);
44908    }
44909    /// RISC-V `vsll.vi` instruction.
44910    ///
44911    /// # Forms
44912    /// Assembly: `vsll.vi vm, vs2, vd, imm`
44913    /// Rust: `vsll_vi(vd, vs2, zimm5, vm)`
44914    ///
44915    /// # Arguments
44916    /// - `vd` — Vector register operand.
44917    /// - `vs2` — Vector register operand.
44918    /// - `zimm5` — Immediate encoding value.
44919    /// - `vm` — Vector mask control.
44920    pub fn vsll_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3)
44921    where
44922        Self: VsllViEmitter<T0, T1, T2, T3>,
44923    {
44924        <Self as VsllViEmitter<T0, T1, T2, T3>>::vsll_vi(self, vd, vs2, zimm5, vm);
44925    }
44926    /// RISC-V `vsll.vv` instruction.
44927    ///
44928    /// # Forms
44929    /// Assembly: `vsll.vv vm, vs2, vs1, vd`
44930    /// Rust: `vsll_vv(vd, vs1, vs2, vm)`
44931    ///
44932    /// # Arguments
44933    /// - `vd` — Vector register operand.
44934    /// - `vs1` — Vector register operand.
44935    /// - `vs2` — Vector register operand.
44936    /// - `vm` — Vector mask control.
44937    pub fn vsll_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
44938    where
44939        Self: VsllVvEmitter<T0, T1, T2, T3>,
44940    {
44941        <Self as VsllVvEmitter<T0, T1, T2, T3>>::vsll_vv(self, vd, vs1, vs2, vm);
44942    }
44943    /// RISC-V `vsll.vx` instruction.
44944    ///
44945    /// # Forms
44946    /// Assembly: `vsll.vx vm, vs2, xs1, vd`
44947    /// Rust: `vsll_vx(vd, vs2, rs1, vm)`
44948    ///
44949    /// # Arguments
44950    /// - `vd` — Vector register operand.
44951    /// - `vs2` — Vector register operand.
44952    /// - `rs1` — Source register.
44953    /// - `vm` — Vector mask control.
44954    pub fn vsll_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
44955    where
44956        Self: VsllVxEmitter<T0, T1, T2, T3>,
44957    {
44958        <Self as VsllVxEmitter<T0, T1, T2, T3>>::vsll_vx(self, vd, vs2, rs1, vm);
44959    }
44960    /// RISC-V `vsm3c.vi` instruction.
44961    ///
44962    /// # Forms
44963    /// Assembly: `vsm3c.vi vs2, vd, imm`
44964    /// Rust: `vsm3c_vi(vd, vs2, zimm5)`
44965    ///
44966    /// # Arguments
44967    /// - `vd` — Vector register operand.
44968    /// - `vs2` — Vector register operand.
44969    /// - `zimm5` — Immediate encoding value.
44970    pub fn vsm3c_vi<T0, T1, T2>(&mut self, vd: T0, vs2: T1, zimm5: T2)
44971    where
44972        Self: Vsm3CViEmitter<T0, T1, T2>,
44973    {
44974        <Self as Vsm3CViEmitter<T0, T1, T2>>::vsm3c_vi(self, vd, vs2, zimm5);
44975    }
44976    /// RISC-V `vsm3me.vv` instruction.
44977    ///
44978    /// # Forms
44979    /// Assembly: `vsm3me.vv vs2, vs1, vd`
44980    /// Rust: `vsm3me_vv(vd, vs1, vs2)`
44981    ///
44982    /// # Arguments
44983    /// - `vd` — Vector register operand.
44984    /// - `vs1` — Vector register operand.
44985    /// - `vs2` — Vector register operand.
44986    pub fn vsm3me_vv<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)
44987    where
44988        Self: Vsm3MeVvEmitter<T0, T1, T2>,
44989    {
44990        <Self as Vsm3MeVvEmitter<T0, T1, T2>>::vsm3me_vv(self, vd, vs1, vs2);
44991    }
44992    /// RISC-V `vsm4k.vi` instruction.
44993    ///
44994    /// # Forms
44995    /// Assembly: `vsm4k.vi vs2, vd, imm`
44996    /// Rust: `vsm4k_vi(vd, vs2, zimm5)`
44997    ///
44998    /// # Arguments
44999    /// - `vd` — Vector register operand.
45000    /// - `vs2` — Vector register operand.
45001    /// - `zimm5` — Immediate encoding value.
45002    pub fn vsm4k_vi<T0, T1, T2>(&mut self, vd: T0, vs2: T1, zimm5: T2)
45003    where
45004        Self: Vsm4KViEmitter<T0, T1, T2>,
45005    {
45006        <Self as Vsm4KViEmitter<T0, T1, T2>>::vsm4k_vi(self, vd, vs2, zimm5);
45007    }
45008    /// RISC-V `vsm4r.vs` instruction.
45009    ///
45010    /// # Forms
45011    /// Assembly: `vsm4r.vs vs2, vd`
45012    /// Rust: `vsm4r_vs(vd, vs2)`
45013    ///
45014    /// # Arguments
45015    /// - `vd` — Vector register operand.
45016    /// - `vs2` — Vector register operand.
45017    pub fn vsm4r_vs<T0, T1>(&mut self, vd: T0, vs2: T1)
45018    where
45019        Self: Vsm4RVsEmitter<T0, T1>,
45020    {
45021        <Self as Vsm4RVsEmitter<T0, T1>>::vsm4r_vs(self, vd, vs2);
45022    }
45023    /// RISC-V `vsm4r.vv` instruction.
45024    ///
45025    /// # Forms
45026    /// Assembly: `vsm4r.vv vs2, vd`
45027    /// Rust: `vsm4r_vv(vd, vs2)`
45028    ///
45029    /// # Arguments
45030    /// - `vd` — Vector register operand.
45031    /// - `vs2` — Vector register operand.
45032    pub fn vsm4r_vv<T0, T1>(&mut self, vd: T0, vs2: T1)
45033    where
45034        Self: Vsm4RVvEmitter<T0, T1>,
45035    {
45036        <Self as Vsm4RVvEmitter<T0, T1>>::vsm4r_vv(self, vd, vs2);
45037    }
45038    /// RISC-V `vsm.v` instruction.
45039    ///
45040    /// # Forms
45041    /// Assembly: `vsm.v xs1, vs3`
45042    /// Rust: `vsm_v(vs3, rs1)`
45043    ///
45044    /// # Arguments
45045    /// - `vs3` — Vector register operand.
45046    /// - `rs1` — Memory base register.
45047    pub fn vsm_v<T0, T1>(&mut self, vs3: T0, rs1: T1)
45048    where
45049        Self: VsmVEmitter<T0, T1>,
45050    {
45051        <Self as VsmVEmitter<T0, T1>>::vsm_v(self, vs3, rs1);
45052    }
45053    /// RISC-V `vsmul.vv` instruction.
45054    ///
45055    /// # Forms
45056    /// Assembly: `vsmul.vv vm, vs2, vs1, vd`
45057    /// Rust: `vsmul_vv(vd, vs1, vs2, vm)`
45058    ///
45059    /// # Arguments
45060    /// - `vd` — Vector register operand.
45061    /// - `vs1` — Vector register operand.
45062    /// - `vs2` — Vector register operand.
45063    /// - `vm` — Vector mask control.
45064    pub fn vsmul_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
45065    where
45066        Self: VsmulVvEmitter<T0, T1, T2, T3>,
45067    {
45068        <Self as VsmulVvEmitter<T0, T1, T2, T3>>::vsmul_vv(self, vd, vs1, vs2, vm);
45069    }
45070    /// RISC-V `vsmul.vx` instruction.
45071    ///
45072    /// # Forms
45073    /// Assembly: `vsmul.vx vm, vs2, xs1, vd`
45074    /// Rust: `vsmul_vx(vd, vs2, rs1, vm)`
45075    ///
45076    /// # Arguments
45077    /// - `vd` — Vector register operand.
45078    /// - `vs2` — Vector register operand.
45079    /// - `rs1` — Source register.
45080    /// - `vm` — Vector mask control.
45081    pub fn vsmul_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
45082    where
45083        Self: VsmulVxEmitter<T0, T1, T2, T3>,
45084    {
45085        <Self as VsmulVxEmitter<T0, T1, T2, T3>>::vsmul_vx(self, vd, vs2, rs1, vm);
45086    }
45087    /// RISC-V `vsoxei16.v` instruction.
45088    ///
45089    /// # Forms
45090    /// Assembly: `vsoxei16.v vm, vs2, xs1, vs3`
45091    /// Rust: `vsoxei16_v(vs3, rs1, vs2, vm, nf)`
45092    ///
45093    /// # Arguments
45094    /// - `vs3` — Vector register operand.
45095    /// - `rs1` — Memory base register.
45096    /// - `vs2` — Vector register operand.
45097    /// - `vm` — Vector mask control.
45098    /// - `nf` — Vector segment field count.
45099    pub fn vsoxei16_v<T0, T1, T2, T3, T4>(&mut self, vs3: T0, rs1: T1, vs2: T2, vm: T3, nf: T4)
45100    where
45101        Self: Vsoxei16VEmitter<T0, T1, T2, T3, T4>,
45102    {
45103        <Self as Vsoxei16VEmitter<T0, T1, T2, T3, T4>>::vsoxei16_v(self, vs3, rs1, vs2, vm, nf);
45104    }
45105    /// RISC-V `vsoxei32.v` instruction.
45106    ///
45107    /// # Forms
45108    /// Assembly: `vsoxei32.v vm, vs2, xs1, vs3`
45109    /// Rust: `vsoxei32_v(vs3, rs1, vs2, vm, nf)`
45110    ///
45111    /// # Arguments
45112    /// - `vs3` — Vector register operand.
45113    /// - `rs1` — Memory base register.
45114    /// - `vs2` — Vector register operand.
45115    /// - `vm` — Vector mask control.
45116    /// - `nf` — Vector segment field count.
45117    pub fn vsoxei32_v<T0, T1, T2, T3, T4>(&mut self, vs3: T0, rs1: T1, vs2: T2, vm: T3, nf: T4)
45118    where
45119        Self: Vsoxei32VEmitter<T0, T1, T2, T3, T4>,
45120    {
45121        <Self as Vsoxei32VEmitter<T0, T1, T2, T3, T4>>::vsoxei32_v(self, vs3, rs1, vs2, vm, nf);
45122    }
45123    /// RISC-V `vsoxei64.v` instruction.
45124    ///
45125    /// # Forms
45126    /// Assembly: `vsoxei64.v vm, vs2, xs1, vs3`
45127    /// Rust: `vsoxei64_v(vs3, rs1, vs2, vm, nf)`
45128    ///
45129    /// # Arguments
45130    /// - `vs3` — Vector register operand.
45131    /// - `rs1` — Memory base register.
45132    /// - `vs2` — Vector register operand.
45133    /// - `vm` — Vector mask control.
45134    /// - `nf` — Vector segment field count.
45135    pub fn vsoxei64_v<T0, T1, T2, T3, T4>(&mut self, vs3: T0, rs1: T1, vs2: T2, vm: T3, nf: T4)
45136    where
45137        Self: Vsoxei64VEmitter<T0, T1, T2, T3, T4>,
45138    {
45139        <Self as Vsoxei64VEmitter<T0, T1, T2, T3, T4>>::vsoxei64_v(self, vs3, rs1, vs2, vm, nf);
45140    }
45141    /// RISC-V `vsoxei8.v` instruction.
45142    ///
45143    /// # Forms
45144    /// Assembly: `vsoxei8.v vm, vs2, xs1, vs3`
45145    /// Rust: `vsoxei8_v(vs3, rs1, vs2, vm, nf)`
45146    ///
45147    /// # Arguments
45148    /// - `vs3` — Vector register operand.
45149    /// - `rs1` — Memory base register.
45150    /// - `vs2` — Vector register operand.
45151    /// - `vm` — Vector mask control.
45152    /// - `nf` — Vector segment field count.
45153    pub fn vsoxei8_v<T0, T1, T2, T3, T4>(&mut self, vs3: T0, rs1: T1, vs2: T2, vm: T3, nf: T4)
45154    where
45155        Self: Vsoxei8VEmitter<T0, T1, T2, T3, T4>,
45156    {
45157        <Self as Vsoxei8VEmitter<T0, T1, T2, T3, T4>>::vsoxei8_v(self, vs3, rs1, vs2, vm, nf);
45158    }
45159    /// RISC-V `vsra.vi` instruction.
45160    ///
45161    /// # Forms
45162    /// Assembly: `vsra.vi vm, vs2, vd, imm`
45163    /// Rust: `vsra_vi(vd, vs2, zimm5, vm)`
45164    ///
45165    /// # Arguments
45166    /// - `vd` — Vector register operand.
45167    /// - `vs2` — Vector register operand.
45168    /// - `zimm5` — Immediate encoding value.
45169    /// - `vm` — Vector mask control.
45170    pub fn vsra_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3)
45171    where
45172        Self: VsraViEmitter<T0, T1, T2, T3>,
45173    {
45174        <Self as VsraViEmitter<T0, T1, T2, T3>>::vsra_vi(self, vd, vs2, zimm5, vm);
45175    }
45176    /// RISC-V `vsra.vv` instruction.
45177    ///
45178    /// # Forms
45179    /// Assembly: `vsra.vv vm, vs2, vs1, vd`
45180    /// Rust: `vsra_vv(vd, vs1, vs2, vm)`
45181    ///
45182    /// # Arguments
45183    /// - `vd` — Vector register operand.
45184    /// - `vs1` — Vector register operand.
45185    /// - `vs2` — Vector register operand.
45186    /// - `vm` — Vector mask control.
45187    pub fn vsra_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
45188    where
45189        Self: VsraVvEmitter<T0, T1, T2, T3>,
45190    {
45191        <Self as VsraVvEmitter<T0, T1, T2, T3>>::vsra_vv(self, vd, vs1, vs2, vm);
45192    }
45193    /// RISC-V `vsra.vx` instruction.
45194    ///
45195    /// # Forms
45196    /// Assembly: `vsra.vx vm, vs2, xs1, vd`
45197    /// Rust: `vsra_vx(vd, vs2, rs1, vm)`
45198    ///
45199    /// # Arguments
45200    /// - `vd` — Vector register operand.
45201    /// - `vs2` — Vector register operand.
45202    /// - `rs1` — Source register.
45203    /// - `vm` — Vector mask control.
45204    pub fn vsra_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
45205    where
45206        Self: VsraVxEmitter<T0, T1, T2, T3>,
45207    {
45208        <Self as VsraVxEmitter<T0, T1, T2, T3>>::vsra_vx(self, vd, vs2, rs1, vm);
45209    }
45210    /// RISC-V `vsrl.vi` instruction.
45211    ///
45212    /// # Forms
45213    /// Assembly: `vsrl.vi vm, vs2, vd, imm`
45214    /// Rust: `vsrl_vi(vd, vs2, zimm5, vm)`
45215    ///
45216    /// # Arguments
45217    /// - `vd` — Vector register operand.
45218    /// - `vs2` — Vector register operand.
45219    /// - `zimm5` — Immediate encoding value.
45220    /// - `vm` — Vector mask control.
45221    pub fn vsrl_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3)
45222    where
45223        Self: VsrlViEmitter<T0, T1, T2, T3>,
45224    {
45225        <Self as VsrlViEmitter<T0, T1, T2, T3>>::vsrl_vi(self, vd, vs2, zimm5, vm);
45226    }
45227    /// RISC-V `vsrl.vv` instruction.
45228    ///
45229    /// # Forms
45230    /// Assembly: `vsrl.vv vm, vs2, vs1, vd`
45231    /// Rust: `vsrl_vv(vd, vs1, vs2, vm)`
45232    ///
45233    /// # Arguments
45234    /// - `vd` — Vector register operand.
45235    /// - `vs1` — Vector register operand.
45236    /// - `vs2` — Vector register operand.
45237    /// - `vm` — Vector mask control.
45238    pub fn vsrl_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
45239    where
45240        Self: VsrlVvEmitter<T0, T1, T2, T3>,
45241    {
45242        <Self as VsrlVvEmitter<T0, T1, T2, T3>>::vsrl_vv(self, vd, vs1, vs2, vm);
45243    }
45244    /// RISC-V `vsrl.vx` instruction.
45245    ///
45246    /// # Forms
45247    /// Assembly: `vsrl.vx vm, vs2, xs1, vd`
45248    /// Rust: `vsrl_vx(vd, vs2, rs1, vm)`
45249    ///
45250    /// # Arguments
45251    /// - `vd` — Vector register operand.
45252    /// - `vs2` — Vector register operand.
45253    /// - `rs1` — Source register.
45254    /// - `vm` — Vector mask control.
45255    pub fn vsrl_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
45256    where
45257        Self: VsrlVxEmitter<T0, T1, T2, T3>,
45258    {
45259        <Self as VsrlVxEmitter<T0, T1, T2, T3>>::vsrl_vx(self, vd, vs2, rs1, vm);
45260    }
45261    /// RISC-V `vsse16.v` instruction.
45262    ///
45263    /// # Forms
45264    /// Assembly: `vsse16.v vm, xs2, xs1, vs3`
45265    /// Rust: `vsse16_v(vs3, rs1, rs2, vm, nf)`
45266    ///
45267    /// # Arguments
45268    /// - `vs3` — Vector register operand.
45269    /// - `rs1` — Memory base register.
45270    /// - `rs2` — Source register.
45271    /// - `vm` — Vector mask control.
45272    /// - `nf` — Vector segment field count.
45273    pub fn vsse16_v<T0, T1, T2, T3, T4>(&mut self, vs3: T0, rs1: T1, rs2: T2, vm: T3, nf: T4)
45274    where
45275        Self: Vsse16VEmitter<T0, T1, T2, T3, T4>,
45276    {
45277        <Self as Vsse16VEmitter<T0, T1, T2, T3, T4>>::vsse16_v(self, vs3, rs1, rs2, vm, nf);
45278    }
45279    /// RISC-V `vsse32.v` instruction.
45280    ///
45281    /// # Forms
45282    /// Assembly: `vsse32.v vm, xs2, xs1, vs3`
45283    /// Rust: `vsse32_v(vs3, rs1, rs2, vm, nf)`
45284    ///
45285    /// # Arguments
45286    /// - `vs3` — Vector register operand.
45287    /// - `rs1` — Memory base register.
45288    /// - `rs2` — Source register.
45289    /// - `vm` — Vector mask control.
45290    /// - `nf` — Vector segment field count.
45291    pub fn vsse32_v<T0, T1, T2, T3, T4>(&mut self, vs3: T0, rs1: T1, rs2: T2, vm: T3, nf: T4)
45292    where
45293        Self: Vsse32VEmitter<T0, T1, T2, T3, T4>,
45294    {
45295        <Self as Vsse32VEmitter<T0, T1, T2, T3, T4>>::vsse32_v(self, vs3, rs1, rs2, vm, nf);
45296    }
45297    /// RISC-V `vsse64.v` instruction.
45298    ///
45299    /// # Forms
45300    /// Assembly: `vsse64.v vm, xs2, xs1, vs3`
45301    /// Rust: `vsse64_v(vs3, rs1, rs2, vm, nf)`
45302    ///
45303    /// # Arguments
45304    /// - `vs3` — Vector register operand.
45305    /// - `rs1` — Memory base register.
45306    /// - `rs2` — Source register.
45307    /// - `vm` — Vector mask control.
45308    /// - `nf` — Vector segment field count.
45309    pub fn vsse64_v<T0, T1, T2, T3, T4>(&mut self, vs3: T0, rs1: T1, rs2: T2, vm: T3, nf: T4)
45310    where
45311        Self: Vsse64VEmitter<T0, T1, T2, T3, T4>,
45312    {
45313        <Self as Vsse64VEmitter<T0, T1, T2, T3, T4>>::vsse64_v(self, vs3, rs1, rs2, vm, nf);
45314    }
45315    /// RISC-V `vsse8.v` instruction.
45316    ///
45317    /// # Forms
45318    /// Assembly: `vsse8.v vm, xs2, xs1, vs3`
45319    /// Rust: `vsse8_v(vs3, rs1, rs2, vm, nf)`
45320    ///
45321    /// # Arguments
45322    /// - `vs3` — Vector register operand.
45323    /// - `rs1` — Memory base register.
45324    /// - `rs2` — Source register.
45325    /// - `vm` — Vector mask control.
45326    /// - `nf` — Vector segment field count.
45327    pub fn vsse8_v<T0, T1, T2, T3, T4>(&mut self, vs3: T0, rs1: T1, rs2: T2, vm: T3, nf: T4)
45328    where
45329        Self: Vsse8VEmitter<T0, T1, T2, T3, T4>,
45330    {
45331        <Self as Vsse8VEmitter<T0, T1, T2, T3, T4>>::vsse8_v(self, vs3, rs1, rs2, vm, nf);
45332    }
45333    /// RISC-V `vssra.vi` instruction.
45334    ///
45335    /// # Forms
45336    /// Assembly: `vssra.vi vm, vs2, vd, imm`
45337    /// Rust: `vssra_vi(vd, vs2, zimm5, vm)`
45338    ///
45339    /// # Arguments
45340    /// - `vd` — Vector register operand.
45341    /// - `vs2` — Vector register operand.
45342    /// - `zimm5` — Immediate encoding value.
45343    /// - `vm` — Vector mask control.
45344    pub fn vssra_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3)
45345    where
45346        Self: VssraViEmitter<T0, T1, T2, T3>,
45347    {
45348        <Self as VssraViEmitter<T0, T1, T2, T3>>::vssra_vi(self, vd, vs2, zimm5, vm);
45349    }
45350    /// RISC-V `vssra.vv` instruction.
45351    ///
45352    /// # Forms
45353    /// Assembly: `vssra.vv vm, vs2, vs1, vd`
45354    /// Rust: `vssra_vv(vd, vs1, vs2, vm)`
45355    ///
45356    /// # Arguments
45357    /// - `vd` — Vector register operand.
45358    /// - `vs1` — Vector register operand.
45359    /// - `vs2` — Vector register operand.
45360    /// - `vm` — Vector mask control.
45361    pub fn vssra_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
45362    where
45363        Self: VssraVvEmitter<T0, T1, T2, T3>,
45364    {
45365        <Self as VssraVvEmitter<T0, T1, T2, T3>>::vssra_vv(self, vd, vs1, vs2, vm);
45366    }
45367    /// RISC-V `vssra.vx` instruction.
45368    ///
45369    /// # Forms
45370    /// Assembly: `vssra.vx vm, vs2, xs1, vd`
45371    /// Rust: `vssra_vx(vd, vs2, rs1, vm)`
45372    ///
45373    /// # Arguments
45374    /// - `vd` — Vector register operand.
45375    /// - `vs2` — Vector register operand.
45376    /// - `rs1` — Source register.
45377    /// - `vm` — Vector mask control.
45378    pub fn vssra_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
45379    where
45380        Self: VssraVxEmitter<T0, T1, T2, T3>,
45381    {
45382        <Self as VssraVxEmitter<T0, T1, T2, T3>>::vssra_vx(self, vd, vs2, rs1, vm);
45383    }
45384    /// RISC-V `vssrl.vi` instruction.
45385    ///
45386    /// # Forms
45387    /// Assembly: `vssrl.vi vm, vs2, vd, imm`
45388    /// Rust: `vssrl_vi(vd, vs2, zimm5, vm)`
45389    ///
45390    /// # Arguments
45391    /// - `vd` — Vector register operand.
45392    /// - `vs2` — Vector register operand.
45393    /// - `zimm5` — Immediate encoding value.
45394    /// - `vm` — Vector mask control.
45395    pub fn vssrl_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3)
45396    where
45397        Self: VssrlViEmitter<T0, T1, T2, T3>,
45398    {
45399        <Self as VssrlViEmitter<T0, T1, T2, T3>>::vssrl_vi(self, vd, vs2, zimm5, vm);
45400    }
45401    /// RISC-V `vssrl.vv` instruction.
45402    ///
45403    /// # Forms
45404    /// Assembly: `vssrl.vv vm, vs2, vs1, vd`
45405    /// Rust: `vssrl_vv(vd, vs1, vs2, vm)`
45406    ///
45407    /// # Arguments
45408    /// - `vd` — Vector register operand.
45409    /// - `vs1` — Vector register operand.
45410    /// - `vs2` — Vector register operand.
45411    /// - `vm` — Vector mask control.
45412    pub fn vssrl_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
45413    where
45414        Self: VssrlVvEmitter<T0, T1, T2, T3>,
45415    {
45416        <Self as VssrlVvEmitter<T0, T1, T2, T3>>::vssrl_vv(self, vd, vs1, vs2, vm);
45417    }
45418    /// RISC-V `vssrl.vx` instruction.
45419    ///
45420    /// # Forms
45421    /// Assembly: `vssrl.vx vm, vs2, xs1, vd`
45422    /// Rust: `vssrl_vx(vd, vs2, rs1, vm)`
45423    ///
45424    /// # Arguments
45425    /// - `vd` — Vector register operand.
45426    /// - `vs2` — Vector register operand.
45427    /// - `rs1` — Source register.
45428    /// - `vm` — Vector mask control.
45429    pub fn vssrl_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
45430    where
45431        Self: VssrlVxEmitter<T0, T1, T2, T3>,
45432    {
45433        <Self as VssrlVxEmitter<T0, T1, T2, T3>>::vssrl_vx(self, vd, vs2, rs1, vm);
45434    }
45435    /// RISC-V `vssub.vv` instruction.
45436    ///
45437    /// # Forms
45438    /// Assembly: `vssub.vv vm, vs2, vs1, vd`
45439    /// Rust: `vssub_vv(vd, vs1, vs2, vm)`
45440    ///
45441    /// # Arguments
45442    /// - `vd` — Vector register operand.
45443    /// - `vs1` — Vector register operand.
45444    /// - `vs2` — Vector register operand.
45445    /// - `vm` — Vector mask control.
45446    pub fn vssub_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
45447    where
45448        Self: VssubVvEmitter<T0, T1, T2, T3>,
45449    {
45450        <Self as VssubVvEmitter<T0, T1, T2, T3>>::vssub_vv(self, vd, vs1, vs2, vm);
45451    }
45452    /// RISC-V `vssub.vx` instruction.
45453    ///
45454    /// # Forms
45455    /// Assembly: `vssub.vx vm, vs2, xs1, vd`
45456    /// Rust: `vssub_vx(vd, vs2, rs1, vm)`
45457    ///
45458    /// # Arguments
45459    /// - `vd` — Vector register operand.
45460    /// - `vs2` — Vector register operand.
45461    /// - `rs1` — Source register.
45462    /// - `vm` — Vector mask control.
45463    pub fn vssub_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
45464    where
45465        Self: VssubVxEmitter<T0, T1, T2, T3>,
45466    {
45467        <Self as VssubVxEmitter<T0, T1, T2, T3>>::vssub_vx(self, vd, vs2, rs1, vm);
45468    }
45469    /// RISC-V `vssubu.vv` instruction.
45470    ///
45471    /// # Forms
45472    /// Assembly: `vssubu.vv vm, vs2, vs1, vd`
45473    /// Rust: `vssubu_vv(vd, vs1, vs2, vm)`
45474    ///
45475    /// # Arguments
45476    /// - `vd` — Vector register operand.
45477    /// - `vs1` — Vector register operand.
45478    /// - `vs2` — Vector register operand.
45479    /// - `vm` — Vector mask control.
45480    pub fn vssubu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
45481    where
45482        Self: VssubuVvEmitter<T0, T1, T2, T3>,
45483    {
45484        <Self as VssubuVvEmitter<T0, T1, T2, T3>>::vssubu_vv(self, vd, vs1, vs2, vm);
45485    }
45486    /// RISC-V `vssubu.vx` instruction.
45487    ///
45488    /// # Forms
45489    /// Assembly: `vssubu.vx vm, vs2, xs1, vd`
45490    /// Rust: `vssubu_vx(vd, vs2, rs1, vm)`
45491    ///
45492    /// # Arguments
45493    /// - `vd` — Vector register operand.
45494    /// - `vs2` — Vector register operand.
45495    /// - `rs1` — Source register.
45496    /// - `vm` — Vector mask control.
45497    pub fn vssubu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
45498    where
45499        Self: VssubuVxEmitter<T0, T1, T2, T3>,
45500    {
45501        <Self as VssubuVxEmitter<T0, T1, T2, T3>>::vssubu_vx(self, vd, vs2, rs1, vm);
45502    }
45503    /// RISC-V `vsub.vv` instruction.
45504    ///
45505    /// # Forms
45506    /// Assembly: `vsub.vv vm, vs2, vs1, vd`
45507    /// Rust: `vsub_vv(vd, vs1, vs2, vm)`
45508    ///
45509    /// # Arguments
45510    /// - `vd` — Vector register operand.
45511    /// - `vs1` — Vector register operand.
45512    /// - `vs2` — Vector register operand.
45513    /// - `vm` — Vector mask control.
45514    pub fn vsub_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
45515    where
45516        Self: VsubVvEmitter<T0, T1, T2, T3>,
45517    {
45518        <Self as VsubVvEmitter<T0, T1, T2, T3>>::vsub_vv(self, vd, vs1, vs2, vm);
45519    }
45520    /// RISC-V `vsub.vx` instruction.
45521    ///
45522    /// # Forms
45523    /// Assembly: `vsub.vx vm, vs2, xs1, vd`
45524    /// Rust: `vsub_vx(vd, vs2, rs1, vm)`
45525    ///
45526    /// # Arguments
45527    /// - `vd` — Vector register operand.
45528    /// - `vs2` — Vector register operand.
45529    /// - `rs1` — Source register.
45530    /// - `vm` — Vector mask control.
45531    pub fn vsub_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
45532    where
45533        Self: VsubVxEmitter<T0, T1, T2, T3>,
45534    {
45535        <Self as VsubVxEmitter<T0, T1, T2, T3>>::vsub_vx(self, vd, vs2, rs1, vm);
45536    }
45537    /// RISC-V `vsuxei16.v` instruction.
45538    ///
45539    /// # Forms
45540    /// Assembly: `vsuxei16.v vm, vs2, xs1, vs3`
45541    /// Rust: `vsuxei16_v(vs3, rs1, vs2, vm, nf)`
45542    ///
45543    /// # Arguments
45544    /// - `vs3` — Vector register operand.
45545    /// - `rs1` — Memory base register.
45546    /// - `vs2` — Vector register operand.
45547    /// - `vm` — Vector mask control.
45548    /// - `nf` — Vector segment field count.
45549    pub fn vsuxei16_v<T0, T1, T2, T3, T4>(&mut self, vs3: T0, rs1: T1, vs2: T2, vm: T3, nf: T4)
45550    where
45551        Self: Vsuxei16VEmitter<T0, T1, T2, T3, T4>,
45552    {
45553        <Self as Vsuxei16VEmitter<T0, T1, T2, T3, T4>>::vsuxei16_v(self, vs3, rs1, vs2, vm, nf);
45554    }
45555    /// RISC-V `vsuxei32.v` instruction.
45556    ///
45557    /// # Forms
45558    /// Assembly: `vsuxei32.v vm, vs2, xs1, vs3`
45559    /// Rust: `vsuxei32_v(vs3, rs1, vs2, vm, nf)`
45560    ///
45561    /// # Arguments
45562    /// - `vs3` — Vector register operand.
45563    /// - `rs1` — Memory base register.
45564    /// - `vs2` — Vector register operand.
45565    /// - `vm` — Vector mask control.
45566    /// - `nf` — Vector segment field count.
45567    pub fn vsuxei32_v<T0, T1, T2, T3, T4>(&mut self, vs3: T0, rs1: T1, vs2: T2, vm: T3, nf: T4)
45568    where
45569        Self: Vsuxei32VEmitter<T0, T1, T2, T3, T4>,
45570    {
45571        <Self as Vsuxei32VEmitter<T0, T1, T2, T3, T4>>::vsuxei32_v(self, vs3, rs1, vs2, vm, nf);
45572    }
45573    /// RISC-V `vsuxei64.v` instruction.
45574    ///
45575    /// # Forms
45576    /// Assembly: `vsuxei64.v vm, vs2, xs1, vs3`
45577    /// Rust: `vsuxei64_v(vs3, rs1, vs2, vm, nf)`
45578    ///
45579    /// # Arguments
45580    /// - `vs3` — Vector register operand.
45581    /// - `rs1` — Memory base register.
45582    /// - `vs2` — Vector register operand.
45583    /// - `vm` — Vector mask control.
45584    /// - `nf` — Vector segment field count.
45585    pub fn vsuxei64_v<T0, T1, T2, T3, T4>(&mut self, vs3: T0, rs1: T1, vs2: T2, vm: T3, nf: T4)
45586    where
45587        Self: Vsuxei64VEmitter<T0, T1, T2, T3, T4>,
45588    {
45589        <Self as Vsuxei64VEmitter<T0, T1, T2, T3, T4>>::vsuxei64_v(self, vs3, rs1, vs2, vm, nf);
45590    }
45591    /// RISC-V `vsuxei8.v` instruction.
45592    ///
45593    /// # Forms
45594    /// Assembly: `vsuxei8.v vm, vs2, xs1, vs3`
45595    /// Rust: `vsuxei8_v(vs3, rs1, vs2, vm, nf)`
45596    ///
45597    /// # Arguments
45598    /// - `vs3` — Vector register operand.
45599    /// - `rs1` — Memory base register.
45600    /// - `vs2` — Vector register operand.
45601    /// - `vm` — Vector mask control.
45602    /// - `nf` — Vector segment field count.
45603    pub fn vsuxei8_v<T0, T1, T2, T3, T4>(&mut self, vs3: T0, rs1: T1, vs2: T2, vm: T3, nf: T4)
45604    where
45605        Self: Vsuxei8VEmitter<T0, T1, T2, T3, T4>,
45606    {
45607        <Self as Vsuxei8VEmitter<T0, T1, T2, T3, T4>>::vsuxei8_v(self, vs3, rs1, vs2, vm, nf);
45608    }
45609    /// RISC-V `vwadd.vv` instruction.
45610    ///
45611    /// # Forms
45612    /// Assembly: `vwadd.vv vm, vs2, vs1, vd`
45613    /// Rust: `vwadd_vv(vd, vs1, vs2, vm)`
45614    ///
45615    /// # Arguments
45616    /// - `vd` — Vector register operand.
45617    /// - `vs1` — Vector register operand.
45618    /// - `vs2` — Vector register operand.
45619    /// - `vm` — Vector mask control.
45620    pub fn vwadd_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
45621    where
45622        Self: VwaddVvEmitter<T0, T1, T2, T3>,
45623    {
45624        <Self as VwaddVvEmitter<T0, T1, T2, T3>>::vwadd_vv(self, vd, vs1, vs2, vm);
45625    }
45626    /// RISC-V `vwadd.vx` instruction.
45627    ///
45628    /// # Forms
45629    /// Assembly: `vwadd.vx vm, vs2, xs1, vd`
45630    /// Rust: `vwadd_vx(vd, vs2, rs1, vm)`
45631    ///
45632    /// # Arguments
45633    /// - `vd` — Vector register operand.
45634    /// - `vs2` — Vector register operand.
45635    /// - `rs1` — Source register.
45636    /// - `vm` — Vector mask control.
45637    pub fn vwadd_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
45638    where
45639        Self: VwaddVxEmitter<T0, T1, T2, T3>,
45640    {
45641        <Self as VwaddVxEmitter<T0, T1, T2, T3>>::vwadd_vx(self, vd, vs2, rs1, vm);
45642    }
45643    /// RISC-V `vwadd.wv` instruction.
45644    ///
45645    /// # Forms
45646    /// Assembly: `vwadd.wv vm, vs2, vs1, vd`
45647    /// Rust: `vwadd_wv(vd, vs1, vs2, vm)`
45648    ///
45649    /// # Arguments
45650    /// - `vd` — Vector register operand.
45651    /// - `vs1` — Vector register operand.
45652    /// - `vs2` — Vector register operand.
45653    /// - `vm` — Vector mask control.
45654    pub fn vwadd_wv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
45655    where
45656        Self: VwaddWvEmitter<T0, T1, T2, T3>,
45657    {
45658        <Self as VwaddWvEmitter<T0, T1, T2, T3>>::vwadd_wv(self, vd, vs1, vs2, vm);
45659    }
45660    /// RISC-V `vwadd.wx` instruction.
45661    ///
45662    /// # Forms
45663    /// Assembly: `vwadd.wx vm, vs2, xs1, vd`
45664    /// Rust: `vwadd_wx(vd, vs2, rs1, vm)`
45665    ///
45666    /// # Arguments
45667    /// - `vd` — Vector register operand.
45668    /// - `vs2` — Vector register operand.
45669    /// - `rs1` — Source register.
45670    /// - `vm` — Vector mask control.
45671    pub fn vwadd_wx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
45672    where
45673        Self: VwaddWxEmitter<T0, T1, T2, T3>,
45674    {
45675        <Self as VwaddWxEmitter<T0, T1, T2, T3>>::vwadd_wx(self, vd, vs2, rs1, vm);
45676    }
45677    /// RISC-V `vwaddu.vv` instruction.
45678    ///
45679    /// # Forms
45680    /// Assembly: `vwaddu.vv vm, vs2, vs1, vd`
45681    /// Rust: `vwaddu_vv(vd, vs1, vs2, vm)`
45682    ///
45683    /// # Arguments
45684    /// - `vd` — Vector register operand.
45685    /// - `vs1` — Vector register operand.
45686    /// - `vs2` — Vector register operand.
45687    /// - `vm` — Vector mask control.
45688    pub fn vwaddu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
45689    where
45690        Self: VwadduVvEmitter<T0, T1, T2, T3>,
45691    {
45692        <Self as VwadduVvEmitter<T0, T1, T2, T3>>::vwaddu_vv(self, vd, vs1, vs2, vm);
45693    }
45694    /// RISC-V `vwaddu.vx` instruction.
45695    ///
45696    /// # Forms
45697    /// Assembly: `vwaddu.vx vm, vs2, xs1, vd`
45698    /// Rust: `vwaddu_vx(vd, vs2, rs1, vm)`
45699    ///
45700    /// # Arguments
45701    /// - `vd` — Vector register operand.
45702    /// - `vs2` — Vector register operand.
45703    /// - `rs1` — Source register.
45704    /// - `vm` — Vector mask control.
45705    pub fn vwaddu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
45706    where
45707        Self: VwadduVxEmitter<T0, T1, T2, T3>,
45708    {
45709        <Self as VwadduVxEmitter<T0, T1, T2, T3>>::vwaddu_vx(self, vd, vs2, rs1, vm);
45710    }
45711    /// RISC-V `vwaddu.wv` instruction.
45712    ///
45713    /// # Forms
45714    /// Assembly: `vwaddu.wv vm, vs2, vs1, vd`
45715    /// Rust: `vwaddu_wv(vd, vs1, vs2, vm)`
45716    ///
45717    /// # Arguments
45718    /// - `vd` — Vector register operand.
45719    /// - `vs1` — Vector register operand.
45720    /// - `vs2` — Vector register operand.
45721    /// - `vm` — Vector mask control.
45722    pub fn vwaddu_wv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
45723    where
45724        Self: VwadduWvEmitter<T0, T1, T2, T3>,
45725    {
45726        <Self as VwadduWvEmitter<T0, T1, T2, T3>>::vwaddu_wv(self, vd, vs1, vs2, vm);
45727    }
45728    /// RISC-V `vwaddu.wx` instruction.
45729    ///
45730    /// # Forms
45731    /// Assembly: `vwaddu.wx vm, vs2, xs1, vd`
45732    /// Rust: `vwaddu_wx(vd, vs2, rs1, vm)`
45733    ///
45734    /// # Arguments
45735    /// - `vd` — Vector register operand.
45736    /// - `vs2` — Vector register operand.
45737    /// - `rs1` — Source register.
45738    /// - `vm` — Vector mask control.
45739    pub fn vwaddu_wx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
45740    where
45741        Self: VwadduWxEmitter<T0, T1, T2, T3>,
45742    {
45743        <Self as VwadduWxEmitter<T0, T1, T2, T3>>::vwaddu_wx(self, vd, vs2, rs1, vm);
45744    }
45745    /// RISC-V `vwmacc.vv` instruction.
45746    ///
45747    /// # Forms
45748    /// Assembly: `vwmacc.vv vm, vs2, vs1, vd`
45749    /// Rust: `vwmacc_vv(vd, vs1, vs2, vm)`
45750    ///
45751    /// # Arguments
45752    /// - `vd` — Vector register operand.
45753    /// - `vs1` — Vector register operand.
45754    /// - `vs2` — Vector register operand.
45755    /// - `vm` — Vector mask control.
45756    pub fn vwmacc_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
45757    where
45758        Self: VwmaccVvEmitter<T0, T1, T2, T3>,
45759    {
45760        <Self as VwmaccVvEmitter<T0, T1, T2, T3>>::vwmacc_vv(self, vd, vs1, vs2, vm);
45761    }
45762    /// RISC-V `vwmacc.vx` instruction.
45763    ///
45764    /// # Forms
45765    /// Assembly: `vwmacc.vx vm, vs2, xs1, vd`
45766    /// Rust: `vwmacc_vx(vd, vs2, rs1, vm)`
45767    ///
45768    /// # Arguments
45769    /// - `vd` — Vector register operand.
45770    /// - `vs2` — Vector register operand.
45771    /// - `rs1` — Source register.
45772    /// - `vm` — Vector mask control.
45773    pub fn vwmacc_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
45774    where
45775        Self: VwmaccVxEmitter<T0, T1, T2, T3>,
45776    {
45777        <Self as VwmaccVxEmitter<T0, T1, T2, T3>>::vwmacc_vx(self, vd, vs2, rs1, vm);
45778    }
45779    /// RISC-V `vwmaccsu.vv` instruction.
45780    ///
45781    /// # Forms
45782    /// Assembly: `vwmaccsu.vv vm, vs2, vs1, vd`
45783    /// Rust: `vwmaccsu_vv(vd, vs1, vs2, vm)`
45784    ///
45785    /// # Arguments
45786    /// - `vd` — Vector register operand.
45787    /// - `vs1` — Vector register operand.
45788    /// - `vs2` — Vector register operand.
45789    /// - `vm` — Vector mask control.
45790    pub fn vwmaccsu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
45791    where
45792        Self: VwmaccsuVvEmitter<T0, T1, T2, T3>,
45793    {
45794        <Self as VwmaccsuVvEmitter<T0, T1, T2, T3>>::vwmaccsu_vv(self, vd, vs1, vs2, vm);
45795    }
45796    /// RISC-V `vwmaccsu.vx` instruction.
45797    ///
45798    /// # Forms
45799    /// Assembly: `vwmaccsu.vx vm, vs2, xs1, vd`
45800    /// Rust: `vwmaccsu_vx(vd, vs2, rs1, vm)`
45801    ///
45802    /// # Arguments
45803    /// - `vd` — Vector register operand.
45804    /// - `vs2` — Vector register operand.
45805    /// - `rs1` — Source register.
45806    /// - `vm` — Vector mask control.
45807    pub fn vwmaccsu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
45808    where
45809        Self: VwmaccsuVxEmitter<T0, T1, T2, T3>,
45810    {
45811        <Self as VwmaccsuVxEmitter<T0, T1, T2, T3>>::vwmaccsu_vx(self, vd, vs2, rs1, vm);
45812    }
45813    /// RISC-V `vwmaccu.vv` instruction.
45814    ///
45815    /// # Forms
45816    /// Assembly: `vwmaccu.vv vm, vs2, vs1, vd`
45817    /// Rust: `vwmaccu_vv(vd, vs1, vs2, vm)`
45818    ///
45819    /// # Arguments
45820    /// - `vd` — Vector register operand.
45821    /// - `vs1` — Vector register operand.
45822    /// - `vs2` — Vector register operand.
45823    /// - `vm` — Vector mask control.
45824    pub fn vwmaccu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
45825    where
45826        Self: VwmaccuVvEmitter<T0, T1, T2, T3>,
45827    {
45828        <Self as VwmaccuVvEmitter<T0, T1, T2, T3>>::vwmaccu_vv(self, vd, vs1, vs2, vm);
45829    }
45830    /// RISC-V `vwmaccu.vx` instruction.
45831    ///
45832    /// # Forms
45833    /// Assembly: `vwmaccu.vx vm, vs2, xs1, vd`
45834    /// Rust: `vwmaccu_vx(vd, vs2, rs1, vm)`
45835    ///
45836    /// # Arguments
45837    /// - `vd` — Vector register operand.
45838    /// - `vs2` — Vector register operand.
45839    /// - `rs1` — Source register.
45840    /// - `vm` — Vector mask control.
45841    pub fn vwmaccu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
45842    where
45843        Self: VwmaccuVxEmitter<T0, T1, T2, T3>,
45844    {
45845        <Self as VwmaccuVxEmitter<T0, T1, T2, T3>>::vwmaccu_vx(self, vd, vs2, rs1, vm);
45846    }
45847    /// RISC-V `vwmaccus.vx` instruction.
45848    ///
45849    /// # Forms
45850    /// Assembly: `vwmaccus.vx vm, vs2, xs1, vd`
45851    /// Rust: `vwmaccus_vx(vd, vs2, rs1, vm)`
45852    ///
45853    /// # Arguments
45854    /// - `vd` — Vector register operand.
45855    /// - `vs2` — Vector register operand.
45856    /// - `rs1` — Source register.
45857    /// - `vm` — Vector mask control.
45858    pub fn vwmaccus_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
45859    where
45860        Self: VwmaccusVxEmitter<T0, T1, T2, T3>,
45861    {
45862        <Self as VwmaccusVxEmitter<T0, T1, T2, T3>>::vwmaccus_vx(self, vd, vs2, rs1, vm);
45863    }
45864    /// RISC-V `vwmul.vv` instruction.
45865    ///
45866    /// # Forms
45867    /// Assembly: `vwmul.vv vm, vs2, vs1, vd`
45868    /// Rust: `vwmul_vv(vd, vs1, vs2, vm)`
45869    ///
45870    /// # Arguments
45871    /// - `vd` — Vector register operand.
45872    /// - `vs1` — Vector register operand.
45873    /// - `vs2` — Vector register operand.
45874    /// - `vm` — Vector mask control.
45875    pub fn vwmul_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
45876    where
45877        Self: VwmulVvEmitter<T0, T1, T2, T3>,
45878    {
45879        <Self as VwmulVvEmitter<T0, T1, T2, T3>>::vwmul_vv(self, vd, vs1, vs2, vm);
45880    }
45881    /// RISC-V `vwmul.vx` instruction.
45882    ///
45883    /// # Forms
45884    /// Assembly: `vwmul.vx vm, vs2, xs1, vd`
45885    /// Rust: `vwmul_vx(vd, vs2, rs1, vm)`
45886    ///
45887    /// # Arguments
45888    /// - `vd` — Vector register operand.
45889    /// - `vs2` — Vector register operand.
45890    /// - `rs1` — Source register.
45891    /// - `vm` — Vector mask control.
45892    pub fn vwmul_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
45893    where
45894        Self: VwmulVxEmitter<T0, T1, T2, T3>,
45895    {
45896        <Self as VwmulVxEmitter<T0, T1, T2, T3>>::vwmul_vx(self, vd, vs2, rs1, vm);
45897    }
45898    /// RISC-V `vwmulsu.vv` instruction.
45899    ///
45900    /// # Forms
45901    /// Assembly: `vwmulsu.vv vm, vs2, vs1, vd`
45902    /// Rust: `vwmulsu_vv(vd, vs1, vs2, vm)`
45903    ///
45904    /// # Arguments
45905    /// - `vd` — Vector register operand.
45906    /// - `vs1` — Vector register operand.
45907    /// - `vs2` — Vector register operand.
45908    /// - `vm` — Vector mask control.
45909    pub fn vwmulsu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
45910    where
45911        Self: VwmulsuVvEmitter<T0, T1, T2, T3>,
45912    {
45913        <Self as VwmulsuVvEmitter<T0, T1, T2, T3>>::vwmulsu_vv(self, vd, vs1, vs2, vm);
45914    }
45915    /// RISC-V `vwmulsu.vx` instruction.
45916    ///
45917    /// # Forms
45918    /// Assembly: `vwmulsu.vx vm, vs2, xs1, vd`
45919    /// Rust: `vwmulsu_vx(vd, vs2, rs1, vm)`
45920    ///
45921    /// # Arguments
45922    /// - `vd` — Vector register operand.
45923    /// - `vs2` — Vector register operand.
45924    /// - `rs1` — Source register.
45925    /// - `vm` — Vector mask control.
45926    pub fn vwmulsu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
45927    where
45928        Self: VwmulsuVxEmitter<T0, T1, T2, T3>,
45929    {
45930        <Self as VwmulsuVxEmitter<T0, T1, T2, T3>>::vwmulsu_vx(self, vd, vs2, rs1, vm);
45931    }
45932    /// RISC-V `vwmulu.vv` instruction.
45933    ///
45934    /// # Forms
45935    /// Assembly: `vwmulu.vv vm, vs2, vs1, vd`
45936    /// Rust: `vwmulu_vv(vd, vs1, vs2, vm)`
45937    ///
45938    /// # Arguments
45939    /// - `vd` — Vector register operand.
45940    /// - `vs1` — Vector register operand.
45941    /// - `vs2` — Vector register operand.
45942    /// - `vm` — Vector mask control.
45943    pub fn vwmulu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
45944    where
45945        Self: VwmuluVvEmitter<T0, T1, T2, T3>,
45946    {
45947        <Self as VwmuluVvEmitter<T0, T1, T2, T3>>::vwmulu_vv(self, vd, vs1, vs2, vm);
45948    }
45949    /// RISC-V `vwmulu.vx` instruction.
45950    ///
45951    /// # Forms
45952    /// Assembly: `vwmulu.vx vm, vs2, xs1, vd`
45953    /// Rust: `vwmulu_vx(vd, vs2, rs1, vm)`
45954    ///
45955    /// # Arguments
45956    /// - `vd` — Vector register operand.
45957    /// - `vs2` — Vector register operand.
45958    /// - `rs1` — Source register.
45959    /// - `vm` — Vector mask control.
45960    pub fn vwmulu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
45961    where
45962        Self: VwmuluVxEmitter<T0, T1, T2, T3>,
45963    {
45964        <Self as VwmuluVxEmitter<T0, T1, T2, T3>>::vwmulu_vx(self, vd, vs2, rs1, vm);
45965    }
45966    /// RISC-V `vwredsum.vs` instruction.
45967    ///
45968    /// # Forms
45969    /// Assembly: `vwredsum.vs vm, vs2, vs1, vd`
45970    /// Rust: `vwredsum_vs(vd, vs1, vs2, vm)`
45971    ///
45972    /// # Arguments
45973    /// - `vd` — Vector register operand.
45974    /// - `vs1` — Vector register operand.
45975    /// - `vs2` — Vector register operand.
45976    /// - `vm` — Vector mask control.
45977    pub fn vwredsum_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
45978    where
45979        Self: VwredsumVsEmitter<T0, T1, T2, T3>,
45980    {
45981        <Self as VwredsumVsEmitter<T0, T1, T2, T3>>::vwredsum_vs(self, vd, vs1, vs2, vm);
45982    }
45983    /// RISC-V `vwredsumu.vs` instruction.
45984    ///
45985    /// # Forms
45986    /// Assembly: `vwredsumu.vs vm, vs2, vs1, vd`
45987    /// Rust: `vwredsumu_vs(vd, vs1, vs2, vm)`
45988    ///
45989    /// # Arguments
45990    /// - `vd` — Vector register operand.
45991    /// - `vs1` — Vector register operand.
45992    /// - `vs2` — Vector register operand.
45993    /// - `vm` — Vector mask control.
45994    pub fn vwredsumu_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
45995    where
45996        Self: VwredsumuVsEmitter<T0, T1, T2, T3>,
45997    {
45998        <Self as VwredsumuVsEmitter<T0, T1, T2, T3>>::vwredsumu_vs(self, vd, vs1, vs2, vm);
45999    }
46000    /// RISC-V `vwsll.vi` instruction.
46001    ///
46002    /// # Forms
46003    /// Assembly: `vwsll.vi vm, vs2, vd, imm`
46004    /// Rust: `vwsll_vi(vd, vs2, zimm5, vm)`
46005    ///
46006    /// # Arguments
46007    /// - `vd` — Vector register operand.
46008    /// - `vs2` — Vector register operand.
46009    /// - `zimm5` — Immediate encoding value.
46010    /// - `vm` — Vector mask control.
46011    pub fn vwsll_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3)
46012    where
46013        Self: VwsllViEmitter<T0, T1, T2, T3>,
46014    {
46015        <Self as VwsllViEmitter<T0, T1, T2, T3>>::vwsll_vi(self, vd, vs2, zimm5, vm);
46016    }
46017    /// RISC-V `vwsll.vv` instruction.
46018    ///
46019    /// # Forms
46020    /// Assembly: `vwsll.vv vm, vs2, vs1, vd`
46021    /// Rust: `vwsll_vv(vd, vs1, vs2, vm)`
46022    ///
46023    /// # Arguments
46024    /// - `vd` — Vector register operand.
46025    /// - `vs1` — Vector register operand.
46026    /// - `vs2` — Vector register operand.
46027    /// - `vm` — Vector mask control.
46028    pub fn vwsll_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
46029    where
46030        Self: VwsllVvEmitter<T0, T1, T2, T3>,
46031    {
46032        <Self as VwsllVvEmitter<T0, T1, T2, T3>>::vwsll_vv(self, vd, vs1, vs2, vm);
46033    }
46034    /// RISC-V `vwsll.vx` instruction.
46035    ///
46036    /// # Forms
46037    /// Assembly: `vwsll.vx vm, vs2, xs1, vd`
46038    /// Rust: `vwsll_vx(vd, vs2, rs1, vm)`
46039    ///
46040    /// # Arguments
46041    /// - `vd` — Vector register operand.
46042    /// - `vs2` — Vector register operand.
46043    /// - `rs1` — Source register.
46044    /// - `vm` — Vector mask control.
46045    pub fn vwsll_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
46046    where
46047        Self: VwsllVxEmitter<T0, T1, T2, T3>,
46048    {
46049        <Self as VwsllVxEmitter<T0, T1, T2, T3>>::vwsll_vx(self, vd, vs2, rs1, vm);
46050    }
46051    /// RISC-V `vwsub.vv` instruction.
46052    ///
46053    /// # Forms
46054    /// Assembly: `vwsub.vv vm, vs2, vs1, vd`
46055    /// Rust: `vwsub_vv(vd, vs1, vs2, vm)`
46056    ///
46057    /// # Arguments
46058    /// - `vd` — Vector register operand.
46059    /// - `vs1` — Vector register operand.
46060    /// - `vs2` — Vector register operand.
46061    /// - `vm` — Vector mask control.
46062    pub fn vwsub_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
46063    where
46064        Self: VwsubVvEmitter<T0, T1, T2, T3>,
46065    {
46066        <Self as VwsubVvEmitter<T0, T1, T2, T3>>::vwsub_vv(self, vd, vs1, vs2, vm);
46067    }
46068    /// RISC-V `vwsub.vx` instruction.
46069    ///
46070    /// # Forms
46071    /// Assembly: `vwsub.vx vm, vs2, xs1, vd`
46072    /// Rust: `vwsub_vx(vd, vs2, rs1, vm)`
46073    ///
46074    /// # Arguments
46075    /// - `vd` — Vector register operand.
46076    /// - `vs2` — Vector register operand.
46077    /// - `rs1` — Source register.
46078    /// - `vm` — Vector mask control.
46079    pub fn vwsub_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
46080    where
46081        Self: VwsubVxEmitter<T0, T1, T2, T3>,
46082    {
46083        <Self as VwsubVxEmitter<T0, T1, T2, T3>>::vwsub_vx(self, vd, vs2, rs1, vm);
46084    }
46085    /// RISC-V `vwsub.wv` instruction.
46086    ///
46087    /// # Forms
46088    /// Assembly: `vwsub.wv vm, vs2, vs1, vd`
46089    /// Rust: `vwsub_wv(vd, vs1, vs2, vm)`
46090    ///
46091    /// # Arguments
46092    /// - `vd` — Vector register operand.
46093    /// - `vs1` — Vector register operand.
46094    /// - `vs2` — Vector register operand.
46095    /// - `vm` — Vector mask control.
46096    pub fn vwsub_wv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
46097    where
46098        Self: VwsubWvEmitter<T0, T1, T2, T3>,
46099    {
46100        <Self as VwsubWvEmitter<T0, T1, T2, T3>>::vwsub_wv(self, vd, vs1, vs2, vm);
46101    }
46102    /// RISC-V `vwsub.wx` instruction.
46103    ///
46104    /// # Forms
46105    /// Assembly: `vwsub.wx vm, vs2, xs1, vd`
46106    /// Rust: `vwsub_wx(vd, vs2, rs1, vm)`
46107    ///
46108    /// # Arguments
46109    /// - `vd` — Vector register operand.
46110    /// - `vs2` — Vector register operand.
46111    /// - `rs1` — Source register.
46112    /// - `vm` — Vector mask control.
46113    pub fn vwsub_wx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
46114    where
46115        Self: VwsubWxEmitter<T0, T1, T2, T3>,
46116    {
46117        <Self as VwsubWxEmitter<T0, T1, T2, T3>>::vwsub_wx(self, vd, vs2, rs1, vm);
46118    }
46119    /// RISC-V `vwsubu.vv` instruction.
46120    ///
46121    /// # Forms
46122    /// Assembly: `vwsubu.vv vm, vs2, vs1, vd`
46123    /// Rust: `vwsubu_vv(vd, vs1, vs2, vm)`
46124    ///
46125    /// # Arguments
46126    /// - `vd` — Vector register operand.
46127    /// - `vs1` — Vector register operand.
46128    /// - `vs2` — Vector register operand.
46129    /// - `vm` — Vector mask control.
46130    pub fn vwsubu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
46131    where
46132        Self: VwsubuVvEmitter<T0, T1, T2, T3>,
46133    {
46134        <Self as VwsubuVvEmitter<T0, T1, T2, T3>>::vwsubu_vv(self, vd, vs1, vs2, vm);
46135    }
46136    /// RISC-V `vwsubu.vx` instruction.
46137    ///
46138    /// # Forms
46139    /// Assembly: `vwsubu.vx vm, vs2, xs1, vd`
46140    /// Rust: `vwsubu_vx(vd, vs2, rs1, vm)`
46141    ///
46142    /// # Arguments
46143    /// - `vd` — Vector register operand.
46144    /// - `vs2` — Vector register operand.
46145    /// - `rs1` — Source register.
46146    /// - `vm` — Vector mask control.
46147    pub fn vwsubu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
46148    where
46149        Self: VwsubuVxEmitter<T0, T1, T2, T3>,
46150    {
46151        <Self as VwsubuVxEmitter<T0, T1, T2, T3>>::vwsubu_vx(self, vd, vs2, rs1, vm);
46152    }
46153    /// RISC-V `vwsubu.wv` instruction.
46154    ///
46155    /// # Forms
46156    /// Assembly: `vwsubu.wv vm, vs2, vs1, vd`
46157    /// Rust: `vwsubu_wv(vd, vs1, vs2, vm)`
46158    ///
46159    /// # Arguments
46160    /// - `vd` — Vector register operand.
46161    /// - `vs1` — Vector register operand.
46162    /// - `vs2` — Vector register operand.
46163    /// - `vm` — Vector mask control.
46164    pub fn vwsubu_wv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
46165    where
46166        Self: VwsubuWvEmitter<T0, T1, T2, T3>,
46167    {
46168        <Self as VwsubuWvEmitter<T0, T1, T2, T3>>::vwsubu_wv(self, vd, vs1, vs2, vm);
46169    }
46170    /// RISC-V `vwsubu.wx` instruction.
46171    ///
46172    /// # Forms
46173    /// Assembly: `vwsubu.wx vm, vs2, xs1, vd`
46174    /// Rust: `vwsubu_wx(vd, vs2, rs1, vm)`
46175    ///
46176    /// # Arguments
46177    /// - `vd` — Vector register operand.
46178    /// - `vs2` — Vector register operand.
46179    /// - `rs1` — Source register.
46180    /// - `vm` — Vector mask control.
46181    pub fn vwsubu_wx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
46182    where
46183        Self: VwsubuWxEmitter<T0, T1, T2, T3>,
46184    {
46185        <Self as VwsubuWxEmitter<T0, T1, T2, T3>>::vwsubu_wx(self, vd, vs2, rs1, vm);
46186    }
46187    /// RISC-V `vxor.vi` instruction.
46188    ///
46189    /// # Forms
46190    /// Assembly: `vxor.vi vm, vs2, vd, imm`
46191    /// Rust: `vxor_vi(vd, vs2, simm5, vm)`
46192    ///
46193    /// # Arguments
46194    /// - `vd` — Vector register operand.
46195    /// - `vs2` — Vector register operand.
46196    /// - `simm5` — Immediate encoding value.
46197    /// - `vm` — Vector mask control.
46198    pub fn vxor_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)
46199    where
46200        Self: VxorViEmitter<T0, T1, T2, T3>,
46201    {
46202        <Self as VxorViEmitter<T0, T1, T2, T3>>::vxor_vi(self, vd, vs2, simm5, vm);
46203    }
46204    /// RISC-V `vxor.vv` instruction.
46205    ///
46206    /// # Forms
46207    /// Assembly: `vxor.vv vm, vs2, vs1, vd`
46208    /// Rust: `vxor_vv(vd, vs1, vs2, vm)`
46209    ///
46210    /// # Arguments
46211    /// - `vd` — Vector register operand.
46212    /// - `vs1` — Vector register operand.
46213    /// - `vs2` — Vector register operand.
46214    /// - `vm` — Vector mask control.
46215    pub fn vxor_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)
46216    where
46217        Self: VxorVvEmitter<T0, T1, T2, T3>,
46218    {
46219        <Self as VxorVvEmitter<T0, T1, T2, T3>>::vxor_vv(self, vd, vs1, vs2, vm);
46220    }
46221    /// RISC-V `vxor.vx` instruction.
46222    ///
46223    /// # Forms
46224    /// Assembly: `vxor.vx vm, vs2, xs1, vd`
46225    /// Rust: `vxor_vx(vd, vs2, rs1, vm)`
46226    ///
46227    /// # Arguments
46228    /// - `vd` — Vector register operand.
46229    /// - `vs2` — Vector register operand.
46230    /// - `rs1` — Source register.
46231    /// - `vm` — Vector mask control.
46232    pub fn vxor_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)
46233    where
46234        Self: VxorVxEmitter<T0, T1, T2, T3>,
46235    {
46236        <Self as VxorVxEmitter<T0, T1, T2, T3>>::vxor_vx(self, vd, vs2, rs1, vm);
46237    }
46238    /// RISC-V `vzext.vf2` instruction.
46239    ///
46240    /// # Forms
46241    /// Assembly: `vzext.vf2 vm, vs2, vd`
46242    /// Rust: `vzext_vf2(vd, vs2, vm)`
46243    ///
46244    /// # Arguments
46245    /// - `vd` — Vector register operand.
46246    /// - `vs2` — Vector register operand.
46247    /// - `vm` — Vector mask control.
46248    pub fn vzext_vf2<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
46249    where
46250        Self: VzextVf2Emitter<T0, T1, T2>,
46251    {
46252        <Self as VzextVf2Emitter<T0, T1, T2>>::vzext_vf2(self, vd, vs2, vm);
46253    }
46254    /// RISC-V `vzext.vf4` instruction.
46255    ///
46256    /// # Forms
46257    /// Assembly: `vzext.vf4 vm, vs2, vd`
46258    /// Rust: `vzext_vf4(vd, vs2, vm)`
46259    ///
46260    /// # Arguments
46261    /// - `vd` — Vector register operand.
46262    /// - `vs2` — Vector register operand.
46263    /// - `vm` — Vector mask control.
46264    pub fn vzext_vf4<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
46265    where
46266        Self: VzextVf4Emitter<T0, T1, T2>,
46267    {
46268        <Self as VzextVf4Emitter<T0, T1, T2>>::vzext_vf4(self, vd, vs2, vm);
46269    }
46270    /// RISC-V `vzext.vf8` instruction.
46271    ///
46272    /// # Forms
46273    /// Assembly: `vzext.vf8 vm, vs2, vd`
46274    /// Rust: `vzext_vf8(vd, vs2, vm)`
46275    ///
46276    /// # Arguments
46277    /// - `vd` — Vector register operand.
46278    /// - `vs2` — Vector register operand.
46279    /// - `vm` — Vector mask control.
46280    pub fn vzext_vf8<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)
46281    where
46282        Self: VzextVf8Emitter<T0, T1, T2>,
46283    {
46284        <Self as VzextVf8Emitter<T0, T1, T2>>::vzext_vf8(self, vd, vs2, vm);
46285    }
46286    /// Wait for interrupt
46287    ///
46288    /// Can causes the processor to enter a low-power state until the next interrupt occurs.
46289    ///
46290    /// &lt;%- if ext?(:H) -%&gt;
46291    /// The behavior of `wfi` is affected by the `mstatus.TW`
46292    /// and `hstatus.VTW` bits, as summarized below.
46293    ///
46294    /// \[%autowidth,%footer\]
46295    /// |===
46296    /// .2+| \[.rotate\]#`mstatus.TW`# .2+| \[.rotate\]#`hstatus.VTW`# 4+^.&gt;| `wfi` behavior
46297    /// h| HS-mode h| U-mode h| VS-mode h| in VU-mode
46298    ///
46299    /// | 0 | 0 | Wait | Trap (I) | Wait | Trap (V)
46300    /// | 0 | 1 | Wait | Trap (I) | Trap (V) | Trap (V)
46301    /// | 1 | - | Trap (I) | Trap (I) | Trap (I) | Trap (I)
46302    ///
46303    /// 6+| Trap (I) - Trap with `Illegal Instruction` code +
46304    /// Trap (V) - Trap with `Virtual Instruction` code
46305    /// |===
46306    ///
46307    /// &lt;%- else -%&gt;
46308    /// The `wfi` instruction is also affected by `mstatus.TW`, as shown below:
46309    ///
46310    /// \[%autowidth,%footer\]
46311    /// |===
46312    /// .2+| \[.rotate\]#`mstatus.TW`# 2+^.&gt;| `wfi` behavior
46313    /// h| S-mode h| U-mode
46314    ///
46315    /// | 0 | Wait | Trap (I)
46316    /// | 1 | Trap (I) | Trap (I)
46317    ///
46318    /// 3+| Trap (I) - Trap with `Illegal Instruction` code
46319    /// |===
46320    ///
46321    /// &lt;%- end -%&gt;
46322    ///
46323    /// When `wfi` is marked as causing a trap above, the implementation is allowed to wait
46324    /// for an unspecified period of time to see if an interrupt occurs before raising the trap.
46325    /// That period of time can be zero (_i.e._, `wfi` always causes a trap in the cases identified
46326    /// above).
46327    ///
46328    /// # Forms
46329    /// Assembly: `wfi ""`
46330    /// Rust: `wfi()`
46331    ///
46332    /// # Arguments
46333    pub fn wfi(&mut self)
46334    where
46335        Self: WfiEmitter,
46336    {
46337        <Self as WfiEmitter>::wfi(self);
46338    }
46339    /// RISC-V `wrs.nto` instruction.
46340    ///
46341    /// # Forms
46342    /// Assembly: `wrs.nto wrs_nto`
46343    /// Rust: `wrs_nto()`
46344    ///
46345    /// # Arguments
46346    pub fn wrs_nto(&mut self)
46347    where
46348        Self: WrsNtoEmitter,
46349    {
46350        <Self as WrsNtoEmitter>::wrs_nto(self);
46351    }
46352    /// RISC-V `wrs.sto` instruction.
46353    ///
46354    /// # Forms
46355    /// Assembly: `wrs.sto wrs_sto`
46356    /// Rust: `wrs_sto()`
46357    ///
46358    /// # Arguments
46359    pub fn wrs_sto(&mut self)
46360    where
46361        Self: WrsStoEmitter,
46362    {
46363        <Self as WrsStoEmitter>::wrs_sto(self);
46364    }
46365    /// Exclusive NOR
46366    ///
46367    /// This instruction performs the bit-wise exclusive-NOR operation on rs1 and rs2.
46368    ///
46369    /// # Forms
46370    /// Assembly: `xnor xd, xs1, xs2`
46371    /// Rust: `xnor(rd, rs1, rs2)`
46372    ///
46373    /// # Arguments
46374    /// - `rd` — Destination register.
46375    /// - `rs1` — Source register.
46376    /// - `rs2` — Source register.
46377    pub fn xnor<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
46378    where
46379        Self: XnorEmitter<T0, T1, T2>,
46380    {
46381        <Self as XnorEmitter<T0, T1, T2>>::xnor(self, rd, rs1, rs2);
46382    }
46383    /// Exclusive Or
46384    ///
46385    /// Exclusive or rs1 with rs2, and store the result in rd
46386    ///
46387    /// # Forms
46388    /// Assembly: `xor xd, xs1, xs2`
46389    /// Rust: `xor(rd, rs1, rs2)`
46390    ///
46391    /// # Arguments
46392    /// - `rd` — Destination register.
46393    /// - `rs1` — Source register.
46394    /// - `rs2` — Source register.
46395    pub fn xor<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
46396    where
46397        Self: XorEmitter<T0, T1, T2>,
46398    {
46399        <Self as XorEmitter<T0, T1, T2>>::xor(self, rd, rs1, rs2);
46400    }
46401    /// Exclusive Or immediate
46402    ///
46403    /// Exclusive or an immediate to the value in rs1, and store the result in rd
46404    ///
46405    /// # Forms
46406    /// Assembly: `xori xd, xs1, imm`
46407    /// Rust: `xori(rd, rs1, imm)`
46408    ///
46409    /// # Arguments
46410    /// - `rd` — Destination register.
46411    /// - `rs1` — Source register.
46412    /// - `imm` — Immediate encoding value.
46413    pub fn xori<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)
46414    where
46415        Self: XoriEmitter<T0, T1, T2>,
46416    {
46417        <Self as XoriEmitter<T0, T1, T2>>::xori(self, rd, rs1, imm);
46418    }
46419    /// Crossbar permutation (nibbles)
46420    ///
46421    /// The xperm4 instruction operates on nibbles. The rs1 register contains a vector of XLEN/4 4-bit
46422    /// elements. The rs2 register contains a vector of XLEN/4 4-bit indexes. The result is each element in
46423    /// rs2 replaced by the indexed element in rs1, or zero if the index into rs2 is out of bounds.
46424    ///
46425    /// # Forms
46426    /// Assembly: `xperm4 xd, xs1, xs2`
46427    /// Rust: `xperm4(rd, rs1, rs2)`
46428    ///
46429    /// # Arguments
46430    /// - `rd` — Destination register.
46431    /// - `rs1` — Source register.
46432    /// - `rs2` — Source register.
46433    pub fn xperm4<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
46434    where
46435        Self: Xperm4Emitter<T0, T1, T2>,
46436    {
46437        <Self as Xperm4Emitter<T0, T1, T2>>::xperm4(self, rd, rs1, rs2);
46438    }
46439    /// Crossbar permutation (bytes)
46440    ///
46441    /// The xperm8 instruction operates on bytes. The rs1 register contains a vector of XLEN/8 8-bit
46442    /// elements. The rs2 register contains a vector of XLEN/8 8-bit indexes. The result is each element in
46443    /// rs2 replaced by the indexed element in rs1, or zero if the index into rs2 is out of bounds.
46444    ///
46445    /// # Forms
46446    /// Assembly: `xperm8 xd, xs1, xs2`
46447    /// Rust: `xperm8(rd, rs1, rs2)`
46448    ///
46449    /// # Arguments
46450    /// - `rd` — Destination register.
46451    /// - `rs1` — Source register.
46452    /// - `rs2` — Source register.
46453    pub fn xperm8<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)
46454    where
46455        Self: Xperm8Emitter<T0, T1, T2>,
46456    {
46457        <Self as Xperm8Emitter<T0, T1, T2>>::xperm8(self, rd, rs1, rs2);
46458    }
46459    /// RISC-V `zext.b` instruction.
46460    ///
46461    /// # Forms
46462    /// Assembly: `zext.b rd rs1`
46463    /// Rust: `zext_b(rd, rs1)`
46464    ///
46465    /// # Arguments
46466    /// - `rd` — Destination register.
46467    /// - `rs1` — Source register.
46468    pub fn zext_b<T0, T1>(&mut self, rd: T0, rs1: T1)
46469    where
46470        Self: ZextBEmitter<T0, T1>,
46471    {
46472        <Self as ZextBEmitter<T0, T1>>::zext_b(self, rd, rs1);
46473    }
46474    /// Zero-extend halfword
46475    ///
46476    /// This instruction zero-extends the least-significant halfword of the source to XLEN by inserting
46477    /// 0's into all of the bits more significant than 15.
46478    ///
46479    /// \[NOTE\]
46480    /// The *zext.h* instruction is a pseudo-op for `pack` when `Zbkb` is implemented and XLEN == 32.
46481    ///
46482    /// \[NOTE\]
46483    /// The *zext.h* instruction is a pseudo-op for `packw` when `Zbkb` is implemented and XLEN == 64.
46484    ///
46485    /// # Forms
46486    /// Assembly: `zext.h xd, xs1`
46487    /// Rust: `zext_h(rd, rs1)`
46488    ///
46489    /// # Arguments
46490    /// - `rd` — Destination register.
46491    /// - `rs1` — Source register.
46492    pub fn zext_h<T0, T1>(&mut self, rd: T0, rs1: T1)
46493    where
46494        Self: ZextHEmitter<T0, T1>,
46495    {
46496        <Self as ZextHEmitter<T0, T1>>::zext_h(self, rd, rs1);
46497    }
46498    /// Zero-extend halfword
46499    ///
46500    /// This instruction zero-extends the least-significant halfword of the source to XLEN by inserting
46501    /// 0's into all of the bits more significant than 15.
46502    ///
46503    /// \[NOTE\]
46504    /// The *zext.h* instruction is a pseudo-op for `pack` when `Zbkb` is implemented and XLEN == 32.
46505    ///
46506    /// \[NOTE\]
46507    /// The *zext.h* instruction is a pseudo-op for `packw` when `Zbkb` is implemented and XLEN == 64.
46508    ///
46509    /// # Forms
46510    /// Assembly: `zext.h.rv32 xd, xs1`
46511    /// Rust: `zext_h_rv32(rd, rs1)`
46512    ///
46513    /// # Arguments
46514    /// - `rd` — Destination register.
46515    /// - `rs1` — Source register.
46516    pub fn zext_h_rv32<T0, T1>(&mut self, rd: T0, rs1: T1)
46517    where
46518        Self: ZextHRv32Emitter<T0, T1>,
46519    {
46520        <Self as ZextHRv32Emitter<T0, T1>>::zext_h_rv32(self, rd, rs1);
46521    }
46522    /// RISC-V `zext.w` instruction.
46523    ///
46524    /// # Forms
46525    /// Assembly: `zext.w rd rs1`
46526    /// Rust: `zext_w(rd, rs1)`
46527    ///
46528    /// # Arguments
46529    /// - `rd` — Destination register.
46530    /// - `rs1` — Source register.
46531    pub fn zext_w<T0, T1>(&mut self, rd: T0, rs1: T1)
46532    where
46533        Self: ZextWEmitter<T0, T1>,
46534    {
46535        <Self as ZextWEmitter<T0, T1>>::zext_w(self, rd, rs1);
46536    }
46537    /// Bit interleave
46538    ///
46539    /// This instruction scatters all of the odd and even bits of a source word into the high and low halves
46540    /// of a destination word. It is the inverse of the unzip instruction. This instruction is available only on
46541    /// RV32.
46542    ///
46543    /// # Forms
46544    /// Assembly: `zip xd, xs1`
46545    /// Rust: `zip(rd, rs1)`
46546    ///
46547    /// # Arguments
46548    /// - `rd` — Destination register.
46549    /// - `rs1` — Source register.
46550    pub fn zip<T0, T1>(&mut self, rd: T0, rs1: T1)
46551    where
46552        Self: ZipEmitter<T0, T1>,
46553    {
46554        <Self as ZipEmitter<T0, T1>>::zip(self, rd, rs1);
46555    }
46556}