pub struct Assembler<'a> { /* private fields */ }Implementations§
Source§impl<'a> Assembler<'a>
impl<'a> Assembler<'a>
pub fn new(buffer: &'a mut CodeBuffer) -> Self
pub fn try_new(buffer: &'a mut CodeBuffer) -> Result<Self, AsmError>
Sourcepub fn environment(&self) -> &Environment
pub fn environment(&self) -> &Environment
Returns the environment (arch/mode) this assembler targets.
pub fn get_label(&mut self) -> Label
pub fn bind_label(&mut self, label: Label)
pub fn try_bind_label(&mut self, label: Label) -> Result<(), AsmError>
pub fn add_constant(&mut self, c: impl Into<ConstantData>) -> Label
pub fn label_offset(&self, label: Label) -> CodeOffset
pub fn data(&self) -> &[u8]
pub fn error(&self) -> Option<&AsmError>
Sourcepub fn reserve_patch_block(
&mut self,
size: CodeOffset,
align: CodeOffset,
) -> Result<PatchableBlock, AsmError>
pub fn reserve_patch_block( &mut self, size: CodeOffset, align: CodeOffset, ) -> Result<PatchableBlock, AsmError>
Reserve a nop-filled island for later custom rewriting.
pub fn patchable_j(&mut self, label: Label) -> PatchableSite
pub fn patchable_call(&mut self, label: Label) -> PatchableSite
Sourcepub fn patchable_li(&mut self, rd: Gp, imm: impl Into<i64>) -> PatchableBlock
pub fn patchable_li(&mut self, rd: Gp, imm: impl Into<i64>) -> PatchableBlock
Materialize imm into rd with a fixed-size sequence and a patchable literal.
Layout (RV64): auipc; ld; jal; .dword — the returned block covers the 8-byte literal.
Layout (RV32): auipc; lw; jal; .word — the returned block covers the 4-byte literal.
Rewrite with PatchableBlock::repatch_u64 / PatchableBlock::repatch_u32.
pub fn la(&mut self, rd: Gp, target: impl OperandCast)
pub fn call(&mut self, target: impl OperandCast)
Source§impl Assembler<'_>
impl Assembler<'_>
Sourcepub fn add<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: AddEmitter<T0, T1, T2>,
pub fn add<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: AddEmitter<T0, T1, T2>,
Sourcepub fn add_uw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: AddUwEmitter<T0, T1, T2>,
pub fn add_uw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: AddUwEmitter<T0, T1, T2>,
Sourcepub fn addi<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: AddiEmitter<T0, T1, T2>,
pub fn addi<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: AddiEmitter<T0, T1, T2>,
Sourcepub fn addiw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: AddiwEmitter<T0, T1, T2>,
pub fn addiw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: AddiwEmitter<T0, T1, T2>,
Sourcepub fn addw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: AddwEmitter<T0, T1, T2>,
pub fn addw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: AddwEmitter<T0, T1, T2>,
Sourcepub fn aes32dsi<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, bs: T3)where
Self: Aes32DsiEmitter<T0, T1, T2, T3>,
pub fn aes32dsi<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, bs: T3)where
Self: Aes32DsiEmitter<T0, T1, T2, T3>,
Sourcepub fn aes32dsmi<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, bs: T3)where
Self: Aes32DsmiEmitter<T0, T1, T2, T3>,
pub fn aes32dsmi<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, bs: T3)where
Self: Aes32DsmiEmitter<T0, T1, T2, T3>,
Sourcepub fn aes32esi<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, bs: T3)where
Self: Aes32EsiEmitter<T0, T1, T2, T3>,
pub fn aes32esi<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, bs: T3)where
Self: Aes32EsiEmitter<T0, T1, T2, T3>,
Sourcepub fn aes32esmi<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, bs: T3)where
Self: Aes32EsmiEmitter<T0, T1, T2, T3>,
pub fn aes32esmi<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, bs: T3)where
Self: Aes32EsmiEmitter<T0, T1, T2, T3>,
Sourcepub fn aes64ds<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Aes64DsEmitter<T0, T1, T2>,
pub fn aes64ds<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Aes64DsEmitter<T0, T1, T2>,
Sourcepub fn aes64dsm<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Aes64DsmEmitter<T0, T1, T2>,
pub fn aes64dsm<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Aes64DsmEmitter<T0, T1, T2>,
Sourcepub fn aes64es<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Aes64EsEmitter<T0, T1, T2>,
pub fn aes64es<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Aes64EsEmitter<T0, T1, T2>,
Sourcepub fn aes64esm<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Aes64EsmEmitter<T0, T1, T2>,
pub fn aes64esm<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Aes64EsmEmitter<T0, T1, T2>,
Sourcepub fn aes64im<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: Aes64ImEmitter<T0, T1>,
pub fn aes64im<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: Aes64ImEmitter<T0, T1>,
Sourcepub fn aes64ks1i<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rnum: T2)where
Self: Aes64Ks1IEmitter<T0, T1, T2>,
pub fn aes64ks1i<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rnum: T2)where
Self: Aes64Ks1IEmitter<T0, T1, T2>,
Sourcepub fn aes64ks2<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Aes64Ks2Emitter<T0, T1, T2>,
pub fn aes64ks2<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Aes64Ks2Emitter<T0, T1, T2>,
Sourcepub fn amoadd_b<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoaddBEmitter<T0, T1, T2, T3, T4>,
pub fn amoadd_b<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoaddBEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn amoadd_d<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoaddDEmitter<T0, T1, T2, T3, T4>,
pub fn amoadd_d<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoaddDEmitter<T0, T1, T2, T3, T4>,
Atomic fetch-and-add doubleword
Atomically:
- Load the doubleword at address rs1
- Write the loaded value into rd
- Add the value of register rs2 to the loaded value
- Write the sum to the address in rs1
§Forms
Assembly: amoadd.d xd, xs2, (xs1)
Rust: amoadd_d(rd, rs1, rs2, aq, rl)
§Arguments
rd— Destination register.rs1— Memory base register.rs2— Source register.aq— Acquire-order bit.rl— Release-order bit; retained for the existing emitter API.
Sourcepub fn amoadd_h<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoaddHEmitter<T0, T1, T2, T3, T4>,
pub fn amoadd_h<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoaddHEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn amoadd_w<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoaddWEmitter<T0, T1, T2, T3, T4>,
pub fn amoadd_w<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoaddWEmitter<T0, T1, T2, T3, T4>,
Atomic fetch-and-add word
Atomically:
- Load the word at address rs1
- Write the sign-extended value into rd
- Add the least-significant word of register rs2 to the loaded value
- Write the sum to the address in rs1
§Forms
Assembly: amoadd.w xd, xs2, (xrs1)
Rust: amoadd_w(rd, rs1, rs2, aq, rl)
§Arguments
rd— Destination register.rs1— Memory base register.rs2— Source register.aq— Acquire-order bit.rl— Release-order bit; retained for the existing emitter API.
Sourcepub fn amoand_b<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoandBEmitter<T0, T1, T2, T3, T4>,
pub fn amoand_b<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoandBEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn amoand_d<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoandDEmitter<T0, T1, T2, T3, T4>,
pub fn amoand_d<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoandDEmitter<T0, T1, T2, T3, T4>,
Atomic fetch-and-and doubleword
Atomically:
- Load the doubleword at address rs1
- Write the loaded value into rd
- AND the value of register rs2 to the loaded value
- Write the result to the address in rs1
§Forms
Assembly: amoand.d xd, xs2, (xrs1)
Rust: amoand_d(rd, rs1, rs2, aq, rl)
§Arguments
rd— Destination register.rs1— Memory base register.rs2— Source register.aq— Acquire-order bit.rl— Release-order bit; retained for the existing emitter API.
Sourcepub fn amoand_h<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoandHEmitter<T0, T1, T2, T3, T4>,
pub fn amoand_h<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoandHEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn amoand_w<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoandWEmitter<T0, T1, T2, T3, T4>,
pub fn amoand_w<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoandWEmitter<T0, T1, T2, T3, T4>,
Atomic fetch-and-and word
Atomically:
- Load the word at address rs1
- Write the sign-extended value into rd
- AND the least-significant word of register rs2 to the loaded value
- Write the result to the address in rs1
§Forms
Assembly: amoand.w xd, xs2, (xrs1)
Rust: amoand_w(rd, rs1, rs2, aq, rl)
§Arguments
rd— Destination register.rs1— Memory base register.rs2— Source register.aq— Acquire-order bit.rl— Release-order bit; retained for the existing emitter API.
Sourcepub fn amocas_b<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmocasBEmitter<T0, T1, T2, T3, T4>,
pub fn amocas_b<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmocasBEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn amocas_d<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmocasDEmitter<T0, T1, T2, T3, T4>,
pub fn amocas_d<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmocasDEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn amocas_h<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmocasHEmitter<T0, T1, T2, T3, T4>,
pub fn amocas_h<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmocasHEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn amocas_q<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmocasQEmitter<T0, T1, T2, T3, T4>,
pub fn amocas_q<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmocasQEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn amocas_w<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmocasWEmitter<T0, T1, T2, T3, T4>,
pub fn amocas_w<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmocasWEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn amomax_b<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmomaxBEmitter<T0, T1, T2, T3, T4>,
pub fn amomax_b<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmomaxBEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn amomax_d<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmomaxDEmitter<T0, T1, T2, T3, T4>,
pub fn amomax_d<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmomaxDEmitter<T0, T1, T2, T3, T4>,
Atomic MAX doubleword
Atomically:
- Load the doubleword at address rs1
- Write the loaded value into rd
- Signed compare the value of register rs2 to the loaded value, and select the maximum value
- Write the maximum to the address in rs1
§Forms
Assembly: amomax.d xd, xs2, (xrs1)
Rust: amomax_d(rd, rs1, rs2, aq, rl)
§Arguments
rd— Destination register.rs1— Memory base register.rs2— Source register.aq— Acquire-order bit.rl— Release-order bit; retained for the existing emitter API.
Sourcepub fn amomax_h<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmomaxHEmitter<T0, T1, T2, T3, T4>,
pub fn amomax_h<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmomaxHEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn amomax_w<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmomaxWEmitter<T0, T1, T2, T3, T4>,
pub fn amomax_w<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmomaxWEmitter<T0, T1, T2, T3, T4>,
Atomic MAX word
Atomically:
- Load the word at address rs1
- Write the sign-extended value into rd
- Signed compare the least-significant word of register rs2 to the loaded value, and select the maximum value
- Write the maximum to the address in rs1
§Forms
Assembly: amomax.w xd, xs2, (xrs1)
Rust: amomax_w(rd, rs1, rs2, aq, rl)
§Arguments
rd— Destination register.rs1— Memory base register.rs2— Source register.aq— Acquire-order bit.rl— Release-order bit; retained for the existing emitter API.
Sourcepub fn amomaxu_b<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmomaxuBEmitter<T0, T1, T2, T3, T4>,
pub fn amomaxu_b<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmomaxuBEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn amomaxu_d<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmomaxuDEmitter<T0, T1, T2, T3, T4>,
pub fn amomaxu_d<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmomaxuDEmitter<T0, T1, T2, T3, T4>,
Atomic MAX unsigned doubleword
Atomically:
- Load the doubleword at address rs1
- Write the loaded value into rd
- Unsigned compare the value of register rs2 to the loaded value, and select the maximum value
- Write the maximum to the address in rs1
§Forms
Assembly: amomaxu.d xd, xs2, (xrs1)
Rust: amomaxu_d(rd, rs1, rs2, aq, rl)
§Arguments
rd— Destination register.rs1— Memory base register.rs2— Source register.aq— Acquire-order bit.rl— Release-order bit; retained for the existing emitter API.
Sourcepub fn amomaxu_h<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmomaxuHEmitter<T0, T1, T2, T3, T4>,
pub fn amomaxu_h<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmomaxuHEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn amomaxu_w<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmomaxuWEmitter<T0, T1, T2, T3, T4>,
pub fn amomaxu_w<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmomaxuWEmitter<T0, T1, T2, T3, T4>,
Atomic MAX unsigned word
Atomically:
- Load the word at address rs1
- Write the sign-extended value into rd
- Unsigned compare the least-significant word of register rs2 to the loaded value, and select the maximum value
- Write the maximum to the address in rs1
§Forms
Assembly: amomaxu.w xd, xs2, (xrs1)
Rust: amomaxu_w(rd, rs1, rs2, aq, rl)
§Arguments
rd— Destination register.rs1— Memory base register.rs2— Source register.aq— Acquire-order bit.rl— Release-order bit; retained for the existing emitter API.
Sourcepub fn amomin_b<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmominBEmitter<T0, T1, T2, T3, T4>,
pub fn amomin_b<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmominBEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn amomin_d<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmominDEmitter<T0, T1, T2, T3, T4>,
pub fn amomin_d<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmominDEmitter<T0, T1, T2, T3, T4>,
Atomic MIN doubleword
Atomically:
- Load the doubleword at address rs1
- Write the loaded value into rd
- Signed compare the value of register rs2 to the loaded value, and select the minimum value
- Write the minimum to the address in rs1
§Forms
Assembly: amomin.d xd, xs2, (xrs1)
Rust: amomin_d(rd, rs1, rs2, aq, rl)
§Arguments
rd— Destination register.rs1— Memory base register.rs2— Source register.aq— Acquire-order bit.rl— Release-order bit; retained for the existing emitter API.
Sourcepub fn amomin_h<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmominHEmitter<T0, T1, T2, T3, T4>,
pub fn amomin_h<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmominHEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn amomin_w<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmominWEmitter<T0, T1, T2, T3, T4>,
pub fn amomin_w<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmominWEmitter<T0, T1, T2, T3, T4>,
Atomic MIN word
Atomically:
- Load the word at address rs1
- Write the sign-extended value into rd
- Signed compare the least-significant word of register rs2 to the loaded value, and select the minimum value
- Write the result to the address in rs1
§Forms
Assembly: amomin.w xd, xs2, (xrs1)
Rust: amomin_w(rd, rs1, rs2, aq, rl)
§Arguments
rd— Destination register.rs1— Memory base register.rs2— Source register.aq— Acquire-order bit.rl— Release-order bit; retained for the existing emitter API.
Sourcepub fn amominu_b<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmominuBEmitter<T0, T1, T2, T3, T4>,
pub fn amominu_b<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmominuBEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn amominu_d<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmominuDEmitter<T0, T1, T2, T3, T4>,
pub fn amominu_d<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmominuDEmitter<T0, T1, T2, T3, T4>,
Atomic MIN unsigned doubleword
Atomically:
- Load the doubleword at address rs1
- Write the loaded value into rd
- Unsigned compare the value of register rs2 to the loaded value, and select the minimum value
- Write the minimum to the address in rs1
§Forms
Assembly: amominu.d xd, xs2, (xrs1)
Rust: amominu_d(rd, rs1, rs2, aq, rl)
§Arguments
rd— Destination register.rs1— Memory base register.rs2— Source register.aq— Acquire-order bit.rl— Release-order bit; retained for the existing emitter API.
Sourcepub fn amominu_h<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmominuHEmitter<T0, T1, T2, T3, T4>,
pub fn amominu_h<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmominuHEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn amominu_w<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmominuWEmitter<T0, T1, T2, T3, T4>,
pub fn amominu_w<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmominuWEmitter<T0, T1, T2, T3, T4>,
Atomic MIN unsigned word
Atomically:
- Load the word at address rs1
- Write the sign-extended value into rd
- Unsigned compare the least-significant word of register rs2 to the loaded word, and select the minimum value
- Write the result to the address in rs1
§Forms
Assembly: amominu.w xd, xs2, (xrs1)
Rust: amominu_w(rd, rs1, rs2, aq, rl)
§Arguments
rd— Destination register.rs1— Memory base register.rs2— Source register.aq— Acquire-order bit.rl— Release-order bit; retained for the existing emitter API.
Sourcepub fn amoor_b<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoorBEmitter<T0, T1, T2, T3, T4>,
pub fn amoor_b<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoorBEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn amoor_d<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoorDEmitter<T0, T1, T2, T3, T4>,
pub fn amoor_d<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoorDEmitter<T0, T1, T2, T3, T4>,
Atomic fetch-and-or doubleword
Atomically:
- Load the doubleword at address rs1
- Write the loaded value into rd
- OR the value of register rs2 to the loaded value
- Write the result to the address in rs1
§Forms
Assembly: amoor.d xd, xs2, (xrs1)
Rust: amoor_d(rd, rs1, rs2, aq, rl)
§Arguments
rd— Destination register.rs1— Memory base register.rs2— Source register.aq— Acquire-order bit.rl— Release-order bit; retained for the existing emitter API.
Sourcepub fn amoor_h<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoorHEmitter<T0, T1, T2, T3, T4>,
pub fn amoor_h<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoorHEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn amoor_w<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoorWEmitter<T0, T1, T2, T3, T4>,
pub fn amoor_w<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoorWEmitter<T0, T1, T2, T3, T4>,
Atomic fetch-and-or word
Atomically:
- Load the word at address rs1
- Write the sign-extended value into rd
- OR the least-significant word of register rs2 to the loaded value
- Write the result to the address in rs1
§Forms
Assembly: amoor.w xd, xs2, (xrs1)
Rust: amoor_w(rd, rs1, rs2, aq, rl)
§Arguments
rd— Destination register.rs1— Memory base register.rs2— Source register.aq— Acquire-order bit.rl— Release-order bit; retained for the existing emitter API.
Sourcepub fn amoswap_b<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoswapBEmitter<T0, T1, T2, T3, T4>,
pub fn amoswap_b<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoswapBEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn amoswap_d<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoswapDEmitter<T0, T1, T2, T3, T4>,
pub fn amoswap_d<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoswapDEmitter<T0, T1, T2, T3, T4>,
Atomic SWAP doubleword
Atomically:
- Load the doubleword at address rs1
- Write the value into rd
- Store the value of register rs2 to the address in rs1
§Forms
Assembly: amoswap.d xd, xs2, (xrs1)
Rust: amoswap_d(rd, rs1, rs2, aq, rl)
§Arguments
rd— Destination register.rs1— Memory base register.rs2— Source register.aq— Acquire-order bit.rl— Release-order bit; retained for the existing emitter API.
Sourcepub fn amoswap_h<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoswapHEmitter<T0, T1, T2, T3, T4>,
pub fn amoswap_h<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoswapHEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn amoswap_w<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoswapWEmitter<T0, T1, T2, T3, T4>,
pub fn amoswap_w<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoswapWEmitter<T0, T1, T2, T3, T4>,
Atomic SWAP word
Atomically:
- Load the word at address rs1
- Write the sign-extended value into rd
- Store the least-significant word of register rs2 to the address in rs1
§Forms
Assembly: amoswap.w xd, xs2, (xrs1)
Rust: amoswap_w(rd, rs1, rs2, aq, rl)
§Arguments
rd— Destination register.rs1— Memory base register.rs2— Source register.aq— Acquire-order bit.rl— Release-order bit; retained for the existing emitter API.
Sourcepub fn amoxor_b<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoxorBEmitter<T0, T1, T2, T3, T4>,
pub fn amoxor_b<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoxorBEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn amoxor_d<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoxorDEmitter<T0, T1, T2, T3, T4>,
pub fn amoxor_d<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoxorDEmitter<T0, T1, T2, T3, T4>,
Atomic fetch-and-xor doubleword
Atomically:
- Load the doubleword at address rs1
- Write the loaded value into rd
- XOR the value of register rs2 to the loaded value
- Write the result to the address in rs1
§Forms
Assembly: amoxor.d xd, xs2, (xrs1)
Rust: amoxor_d(rd, rs1, rs2, aq, rl)
§Arguments
rd— Destination register.rs1— Memory base register.rs2— Source register.aq— Acquire-order bit.rl— Release-order bit; retained for the existing emitter API.
Sourcepub fn amoxor_h<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoxorHEmitter<T0, T1, T2, T3, T4>,
pub fn amoxor_h<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoxorHEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn amoxor_w<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoxorWEmitter<T0, T1, T2, T3, T4>,
pub fn amoxor_w<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: AmoxorWEmitter<T0, T1, T2, T3, T4>,
Atomic fetch-and-xor word
Atomically:
- Load the word at address rs1
- Write the sign-extended value into rd
- XOR the least-significant word of register rs2 to the loaded value
- Write the result to the address in rs1
§Forms
Assembly: amoxor.w xd, xs2, (xrs1)
Rust: amoxor_w(rd, rs1, rs2, aq, rl)
§Arguments
rd— Destination register.rs1— Memory base register.rs2— Source register.aq— Acquire-order bit.rl— Release-order bit; retained for the existing emitter API.
Sourcepub fn and<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: AndEmitter<T0, T1, T2>,
pub fn and<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: AndEmitter<T0, T1, T2>,
Sourcepub fn andi<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: AndiEmitter<T0, T1, T2>,
pub fn andi<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: AndiEmitter<T0, T1, T2>,
Sourcepub fn andn<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: AndnEmitter<T0, T1, T2>,
pub fn andn<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: AndnEmitter<T0, T1, T2>,
Sourcepub fn auipc<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: AuipcEmitter<T0, T1>,
pub fn auipc<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: AuipcEmitter<T0, T1>,
Sourcepub fn bclr<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: BclrEmitter<T0, T1, T2>,
pub fn bclr<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: BclrEmitter<T0, T1, T2>,
Single-Bit clear (Register)
This instruction returns rs1 with a single bit cleared at the index specified in rs2. The index is read from the lower log2(XLEN) bits of rs2.
§Forms
Assembly: bclr xd, xs1, xs2
Rust: bclr(rd, rs1, rs2)
§Arguments
rd— Destination register.rs1— Source register.rs2— Source register.
Sourcepub fn bclri<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtd: T2)where
Self: BclriEmitter<T0, T1, T2>,
pub fn bclri<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtd: T2)where
Self: BclriEmitter<T0, T1, T2>,
Single-Bit clear (Immediate)
This instruction returns rs1 with a single bit cleared at the index specified in shamt. The index is read from the lower log2(XLEN) bits of shamt. For RV32, the encodings corresponding to shamt[5]=1 are reserved.
§Forms
Assembly: bclri xd, xs1, shamt
Rust: bclri(rd, rs1, shamtd)
§Arguments
rd— Destination register.rs1— Source register.shamtd— Immediate encoding value.
Sourcepub fn bclri_rv32<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtw: T2)where
Self: BclriRv32Emitter<T0, T1, T2>,
pub fn bclri_rv32<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtw: T2)where
Self: BclriRv32Emitter<T0, T1, T2>,
Single-Bit clear (Immediate)
This instruction returns rs1 with a single bit cleared at the index specified in shamt. The index is read from the lower log2(XLEN) bits of shamt. For RV32, the encodings corresponding to shamt[5]=1 are reserved.
§Forms
Assembly: bclri.rv32 xd, xs1, shamt
Rust: bclri_rv32(rd, rs1, shamtw)
§Arguments
rd— Destination register.rs1— Source register.shamtw— Immediate encoding value.
Sourcepub fn beq<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: BeqEmitter<T0, T1, T2>,
pub fn beq<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: BeqEmitter<T0, T1, T2>,
Branch if equal
Branch to PC + imm if the value in register rs1 is equal to the value in register rs2.
Raise a MisalignedAddress exception if PC + imm is misaligned.
§Forms
Assembly: beq xs1, xs2, imm
Rust: beq(rs1, rs2, imm)
§Arguments
rs1— Source register.rs2— Source register.imm— Immediate encoding value.
Sourcepub fn beqz<T0, T1>(&mut self, rs1: T0, imm: T1)where
Self: BeqzEmitter<T0, T1>,
pub fn beqz<T0, T1>(&mut self, rs1: T0, imm: T1)where
Self: BeqzEmitter<T0, T1>,
Sourcepub fn bext<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: BextEmitter<T0, T1, T2>,
pub fn bext<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: BextEmitter<T0, T1, T2>,
Single-Bit extract (Register)
This instruction returns a single bit extracted from rs1 at the index specified in rs2. The index is read from the lower log2(XLEN) bits of rs2.
§Forms
Assembly: bext xd, xs1, xs2
Rust: bext(rd, rs1, rs2)
§Arguments
rd— Destination register.rs1— Source register.rs2— Source register.
Sourcepub fn bexti<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtd: T2)where
Self: BextiEmitter<T0, T1, T2>,
pub fn bexti<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtd: T2)where
Self: BextiEmitter<T0, T1, T2>,
Single-Bit extract (Immediate)
This instruction returns a single bit extracted from rs1 at the index specified in rs2. The index is read from the lower log2(XLEN) bits of shamt. For RV32, the encodings corresponding to shamt[5]=1 are reserved.
§Forms
Assembly: bexti xd, xs1, shamt
Rust: bexti(rd, rs1, shamtd)
§Arguments
rd— Destination register.rs1— Source register.shamtd— Immediate encoding value.
Sourcepub fn bexti_rv32<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtw: T2)where
Self: BextiRv32Emitter<T0, T1, T2>,
pub fn bexti_rv32<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtw: T2)where
Self: BextiRv32Emitter<T0, T1, T2>,
Single-Bit extract (Immediate)
This instruction returns a single bit extracted from rs1 at the index specified in rs2. The index is read from the lower log2(XLEN) bits of shamt. For RV32, the encodings corresponding to shamt[5]=1 are reserved.
§Forms
Assembly: bexti.rv32 xd, xs1, shamt
Rust: bexti_rv32(rd, rs1, shamtw)
§Arguments
rd— Destination register.rs1— Source register.shamtw— Immediate encoding value.
Sourcepub fn bge<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: BgeEmitter<T0, T1, T2>,
pub fn bge<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: BgeEmitter<T0, T1, T2>,
Branch if greater than or equal
Branch to PC + imm if the signed value in register rs1 is greater than or equal to the signed value in register rs2.
Raise a MisalignedAddress exception if PC + imm is misaligned.
§Forms
Assembly: bge xs1, xs2, imm
Rust: bge(rs1, rs2, imm)
§Arguments
rs1— Source register.rs2— Source register.imm— Immediate encoding value.
Sourcepub fn bgeu<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: BgeuEmitter<T0, T1, T2>,
pub fn bgeu<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: BgeuEmitter<T0, T1, T2>,
Branch if greater than or equal unsigned
Branch to PC + imm if the unsigned value in register rs1 is greater than or equal to the unsigned value in register rs2.
Raise a MisalignedAddress exception if PC + imm is misaligned.
§Forms
Assembly: bgeu xs1, xs2, imm
Rust: bgeu(rs1, rs2, imm)
§Arguments
rs1— Source register.rs2— Source register.imm— Immediate encoding value.
Sourcepub fn bgez<T0, T1>(&mut self, rs1: T0, imm: T1)where
Self: BgezEmitter<T0, T1>,
pub fn bgez<T0, T1>(&mut self, rs1: T0, imm: T1)where
Self: BgezEmitter<T0, T1>,
Sourcepub fn bgt<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: BgtEmitter<T0, T1, T2>,
pub fn bgt<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: BgtEmitter<T0, T1, T2>,
Sourcepub fn bgtu<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: BgtuEmitter<T0, T1, T2>,
pub fn bgtu<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: BgtuEmitter<T0, T1, T2>,
Sourcepub fn bgtz<T0, T1>(&mut self, rs2: T0, imm: T1)where
Self: BgtzEmitter<T0, T1>,
pub fn bgtz<T0, T1>(&mut self, rs2: T0, imm: T1)where
Self: BgtzEmitter<T0, T1>,
Sourcepub fn binv<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: BinvEmitter<T0, T1, T2>,
pub fn binv<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: BinvEmitter<T0, T1, T2>,
Single-Bit invert (Register)
This instruction returns rs1 with a single bit inverted at the index specified in rs2. The index is read from the lower log2(XLEN) bits of rs2.
§Forms
Assembly: binv xd, xs1, xs2
Rust: binv(rd, rs1, rs2)
§Arguments
rd— Destination register.rs1— Source register.rs2— Source register.
Sourcepub fn binvi<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtd: T2)where
Self: BinviEmitter<T0, T1, T2>,
pub fn binvi<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtd: T2)where
Self: BinviEmitter<T0, T1, T2>,
Single-Bit invert (Immediate)
This instruction returns rs1 with a single bit inverted at the index specified in shamt. The index is read from the lower log2(XLEN) bits of shamt. For RV32, the encodings corresponding to shamt[5]=1 are reserved.
§Forms
Assembly: binvi xd, xs1, shamt
Rust: binvi(rd, rs1, shamtd)
§Arguments
rd— Destination register.rs1— Source register.shamtd— Immediate encoding value.
Sourcepub fn binvi_rv32<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtw: T2)where
Self: BinviRv32Emitter<T0, T1, T2>,
pub fn binvi_rv32<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtw: T2)where
Self: BinviRv32Emitter<T0, T1, T2>,
Single-Bit invert (Immediate)
This instruction returns rs1 with a single bit inverted at the index specified in shamt. The index is read from the lower log2(XLEN) bits of shamt. For RV32, the encodings corresponding to shamt[5]=1 are reserved.
§Forms
Assembly: binvi.rv32 xd, xs1, shamt
Rust: binvi_rv32(rd, rs1, shamtw)
§Arguments
rd— Destination register.rs1— Source register.shamtw— Immediate encoding value.
Sourcepub fn ble<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: BleEmitter<T0, T1, T2>,
pub fn ble<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: BleEmitter<T0, T1, T2>,
Sourcepub fn bleu<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: BleuEmitter<T0, T1, T2>,
pub fn bleu<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: BleuEmitter<T0, T1, T2>,
Sourcepub fn blez<T0, T1>(&mut self, rs2: T0, imm: T1)where
Self: BlezEmitter<T0, T1>,
pub fn blez<T0, T1>(&mut self, rs2: T0, imm: T1)where
Self: BlezEmitter<T0, T1>,
Sourcepub fn blt<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: BltEmitter<T0, T1, T2>,
pub fn blt<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: BltEmitter<T0, T1, T2>,
Branch if less than
Branch to PC + imm if the signed value in register rs1 is less than the signed value in register rs2.
Raise a MisalignedAddress exception if PC + imm is misaligned.
§Forms
Assembly: blt xs1, xs2, imm
Rust: blt(rs1, rs2, imm)
§Arguments
rs1— Source register.rs2— Source register.imm— Immediate encoding value.
Sourcepub fn bltu<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: BltuEmitter<T0, T1, T2>,
pub fn bltu<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: BltuEmitter<T0, T1, T2>,
Branch if less than unsigned
Branch to PC + imm if the unsigned value in register rs1 is less than the unsigned value in register rs2.
Raise a MisalignedAddress exception if PC + imm is misaligned.
§Forms
Assembly: bltu xs1, xs2, imm
Rust: bltu(rs1, rs2, imm)
§Arguments
rs1— Source register.rs2— Source register.imm— Immediate encoding value.
Sourcepub fn bltz<T0, T1>(&mut self, rs1: T0, imm: T1)where
Self: BltzEmitter<T0, T1>,
pub fn bltz<T0, T1>(&mut self, rs1: T0, imm: T1)where
Self: BltzEmitter<T0, T1>,
Sourcepub fn bne<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: BneEmitter<T0, T1, T2>,
pub fn bne<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: BneEmitter<T0, T1, T2>,
Branch if not equal
Branch to PC + imm if the value in register rs1 is not equal to the value in register rs2.
Raise a MisalignedAddress exception if PC + imm is misaligned.
§Forms
Assembly: bne xs1, xs2, imm
Rust: bne(rs1, rs2, imm)
§Arguments
rs1— Source register.rs2— Source register.imm— Immediate encoding value.
Sourcepub fn bnez<T0, T1>(&mut self, rs1: T0, imm: T1)where
Self: BnezEmitter<T0, T1>,
pub fn bnez<T0, T1>(&mut self, rs1: T0, imm: T1)where
Self: BnezEmitter<T0, T1>,
Sourcepub fn brev8<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: Brev8Emitter<T0, T1>,
pub fn brev8<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: Brev8Emitter<T0, T1>,
Sourcepub fn bset<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: BsetEmitter<T0, T1, T2>,
pub fn bset<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: BsetEmitter<T0, T1, T2>,
Single-Bit set (Register)
This instruction returns rs1 with a single bit set at the index specified in rs2. The index is read from the lower log2(XLEN) bits of rs2.
§Forms
Assembly: bset xd, xs1, xs2
Rust: bset(rd, rs1, rs2)
§Arguments
rd— Destination register.rs1— Source register.rs2— Source register.
Sourcepub fn bseti<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtd: T2)where
Self: BsetiEmitter<T0, T1, T2>,
pub fn bseti<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtd: T2)where
Self: BsetiEmitter<T0, T1, T2>,
Single-Bit set (Immediate)
This instruction returns rs1 with a single bit set at the index specified in shamt. The index is read from the lower log2(XLEN) bits of shamt. For RV32, the encodings corresponding to shamt[5]=1 are reserved.
§Forms
Assembly: bseti xd, xs1, shamt
Rust: bseti(rd, rs1, shamtd)
§Arguments
rd— Destination register.rs1— Source register.shamtd— Immediate encoding value.
Sourcepub fn bseti_rv32<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtw: T2)where
Self: BsetiRv32Emitter<T0, T1, T2>,
pub fn bseti_rv32<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtw: T2)where
Self: BsetiRv32Emitter<T0, T1, T2>,
Single-Bit set (Immediate)
This instruction returns rs1 with a single bit set at the index specified in shamt. The index is read from the lower log2(XLEN) bits of shamt. For RV32, the encodings corresponding to shamt[5]=1 are reserved.
§Forms
Assembly: bseti.rv32 xd, xs1, shamt
Rust: bseti_rv32(rd, rs1, shamtw)
§Arguments
rd— Destination register.rs1— Source register.shamtw— Immediate encoding value.
Sourcepub fn c_add<T0, T1>(&mut self, rd: T0, rs2: T1)where
Self: CAddEmitter<T0, T1>,
pub fn c_add<T0, T1>(&mut self, rd: T0, rs2: T1)where
Self: CAddEmitter<T0, T1>,
Sourcepub fn c_addi<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: CAddiEmitter<T0, T1>,
pub fn c_addi<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: CAddiEmitter<T0, T1>,
Add a sign-extended non-zero immediate
C.ADDI adds the non-zero sign-extended 6-bit immediate to the value in register rd then writes the result to rd.
C.ADDI expands into addi rd, rd, imm.
C.ADDI is only valid when rd ≠ x0 and imm ≠ 0.
The code points with rd=x0 encode the C.NOP instruction; the remaining code points with imm=0 encode HINTs.
§Forms
Assembly: c.addi xd, imm
Rust: c_addi(rd, imm)
§Arguments
rd— Destination/source register.imm— Immediate encoding value.
Sourcepub fn c_addi16sp<T0>(&mut self, imm: T0)where
Self: CAddi16spEmitter<T0>,
pub fn c_addi16sp<T0>(&mut self, imm: T0)where
Self: CAddi16spEmitter<T0>,
Add a sign-extended non-zero immediate
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).
C.ADDI16SP is used to adjust the stack pointer in procedure prologues and epilogues.
It expands into addi x2, x2, nzimm\[9:4\].
C.ADDI16SP is only valid when nzimm ≠ 0; the code point with nzimm=0 is reserved.
§Forms
Assembly: c.addi16sp imm
Rust: c_addi16sp(imm)
§Arguments
imm— Immediate encoding value.
Sourcepub fn c_addi4spn<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: CAddi4spnEmitter<T0, T1>,
pub fn c_addi4spn<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: CAddi4spnEmitter<T0, T1>,
Add a zero-extended non-zero immediate, scaled by 4, to the stack pointer
Adds a zero-extended non-zero immediate, scaled by 4, to the stack pointer, x2, and writes the result to rd’.
This instruction is used to generate pointers to stack-allocated variables.
It expands to addi rd', x2, nzuimm\[9:2\].
C.ADDI4SPN is only valid when nzuimm ≠ 0; the code points with nzuimm=0 are reserved.
§Forms
Assembly: c.addi4spn xd, imm
Rust: c_addi4spn(rd, imm)
§Arguments
rd— Destination register.imm— Immediate encoding value.
Sourcepub fn c_addiw<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: CAddiwEmitter<T0, T1>,
pub fn c_addiw<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: CAddiwEmitter<T0, T1>,
Add a sign-extended non-zero immediate
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.
C.ADDIW expands into addiw rd, rd, imm.
The immediate can be zero for C.ADDIW, where this corresponds to sext.w rd.
C.ADDIW is only valid when rd ≠ x0; the code points with rd=x0 are reserved.
§Forms
Assembly: c.addiw xd, imm
Rust: c_addiw(rd, imm)
§Arguments
rd— Destination/source register.imm— Immediate encoding value.
Sourcepub fn c_addw<T0, T1>(&mut self, rd: T0, rs2: T1)where
Self: CAddwEmitter<T0, T1>,
pub fn c_addw<T0, T1>(&mut self, rd: T0, rs2: T1)where
Self: CAddwEmitter<T0, T1>,
Add word
Add the 32-bit values in rs2 from rd, and store the result in rd.
The rd and rs2 register indexes should be used as rd+8 and rs2+8 (registers x8-x15).
C.ADDW expands into addw rd, rd, rs2.
§Forms
Assembly: c.addw xd, rs2
Rust: c_addw(rd, rs2)
§Arguments
rd— Destination/source register.rs2— Source register.
Sourcepub fn c_and<T0, T1>(&mut self, rd: T0, rs2: T1)where
Self: CAndEmitter<T0, T1>,
pub fn c_and<T0, T1>(&mut self, rd: T0, rs2: T1)where
Self: CAndEmitter<T0, T1>,
Sourcepub fn c_andi<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: CAndiEmitter<T0, T1>,
pub fn c_andi<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: CAndiEmitter<T0, T1>,
And immediate
And an immediate to the value in rd, and store the result in rd.
The rd register index should be used as rd+8 (registers x8-x15).
C.ANDI expands into andi rd, rd, imm.
§Forms
Assembly: c.andi xd, imm
Rust: c_andi(rd, imm)
§Arguments
rd— Destination/source register.imm— Immediate encoding value.
Sourcepub fn c_beqz<T0, T1>(&mut self, rs1: T0, bimm9lohi: T1)where
Self: CBeqzEmitter<T0, T1>,
pub fn c_beqz<T0, T1>(&mut self, rs1: T0, bimm9lohi: T1)where
Self: CBeqzEmitter<T0, T1>,
Branch if Equal Zero
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 ±256 B range. C.BEQZ takes the branch if the value in register rs1’ is zero.
It expands to beq rs1, x0, offset.
§Forms
Assembly: c.beqz xs1, imm
Rust: c_beqz(rs1, bimm9lohi)
§Arguments
rs1— Source register.bimm9lohi— Immediate encoding value.
Sourcepub fn c_bnez<T0, T1>(&mut self, rs1: T0, bimm9lohi: T1)where
Self: CBnezEmitter<T0, T1>,
pub fn c_bnez<T0, T1>(&mut self, rs1: T0, bimm9lohi: T1)where
Self: CBnezEmitter<T0, T1>,
Branch if NOT Equal Zero
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 ±256 B range. C.BEQZ takes the branch if the value in register rs1’ is NOT zero.
It expands to beq rs1, x0, offset.
§Forms
Assembly: c.bnez xs1, imm
Rust: c_bnez(rs1, bimm9lohi)
§Arguments
rs1— Source register.bimm9lohi— Immediate encoding value.
Sourcepub fn c_ebreak(&mut self)where
Self: CEbreakEmitter,
pub fn c_ebreak(&mut self)where
Self: CEbreakEmitter,
Breakpoint exception.
The C.EBREAK instruction is used by debuggers to cause control to be transferred back to a debugging environment. Unless overridden by an external debug environment, C.EBREAK raises a breakpoint exception and performs no other operation.
[NOTE]
As described in the C Standard Extension for Compressed Instructions, the c.ebreak
instruction performs the same operation as the EBREAK instruction.
EBREAK causes the receiving privilege mode’s epc register to be set to the address of
the EBREAK instruction itself, not the address of the following instruction.
As EBREAK causes a synchronous exception, it is not considered to retire,
and should not increment the minstret CSR.
§Forms
Assembly: c.ebreak " "
Rust: c_ebreak()
§Arguments
Sourcepub fn c_fld<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: CFldEmitter<T0, T1, T2>,
pub fn c_fld<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: CFldEmitter<T0, T1, T2>,
Load double-precision
Loads a double precision floating-point value from memory into register rd.
It computes an effective address by adding the zero-extended offset, scaled by 8,
to the base address in register rs1.
It expands to fld rd, offset(rs1).
§Forms
Assembly: c.fld xd, imm(xs1)
Rust: c_fld(rd, rs1, imm)
§Arguments
rd— Destination register.rs1— Memory base register.imm— Immediate encoding value.
Sourcepub fn c_fldsp<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: CFldspEmitter<T0, T1>,
pub fn c_fldsp<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: CFldspEmitter<T0, T1>,
Load doubleword into floating-point register from stack
Loads a double-precision floating-point value from memory into floating-point register rd.
It computes its effective address by adding the zero-extended offset, scaled by 8,
to the stack pointer, x2.
It expands to fld rd, offset(x2).
§Forms
Assembly: c.fldsp fd, imm(sp)
Rust: c_fldsp(rd, imm)
§Arguments
rd— Destination register.imm— Immediate encoding value.
Sourcepub fn c_flw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: CFlwEmitter<T0, T1, T2>,
pub fn c_flw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: CFlwEmitter<T0, T1, T2>,
Load single-precision
Loads a single precision floating-point value from memory into register rd.
It computes an effective address by adding the zero-extended offset, scaled by 4,
to the base address in register rs1.
It expands to flw rd, offset(rs1).
§Forms
Assembly: c.flw xd, imm(xs1)
Rust: c_flw(rd, rs1, imm)
§Arguments
rd— Destination register.rs1— Memory base register.imm— Immediate encoding value.
Sourcepub fn c_flwsp<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: CFlwspEmitter<T0, T1>,
pub fn c_flwsp<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: CFlwspEmitter<T0, T1>,
Load word into floating-point register from stack
Loads a single-precision floating-point value from memory into floating-point register rd.
It computes its effective address by adding the zero-extended offset, scaled by 4,
to the stack pointer, x2.
It expands to flw rd, offset(x2).
§Forms
Assembly: c.flwsp fd, imm(sp)
Rust: c_flwsp(rd, imm)
§Arguments
rd— Destination register.imm— Immediate encoding value.
Sourcepub fn c_fsd<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: CFsdEmitter<T0, T1, T2>,
pub fn c_fsd<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: CFsdEmitter<T0, T1, T2>,
Store double-precision
Stores a double precision floating-point value in register rs2 to memory.
It computes an effective address by adding the zero-extended offset, scaled by 8,
to the base address in register rs1.
It expands to fsd rs2, offset(rs1).
§Forms
Assembly: c.fsd xs2, imm(xs1)
Rust: c_fsd(rs1, rs2, imm)
§Arguments
rs1— Memory base register.rs2— Source register.imm— Immediate encoding value.
Sourcepub fn c_fsdsp<T0, T1>(&mut self, rs2: T0, imm: T1)where
Self: CFsdspEmitter<T0, T1>,
pub fn c_fsdsp<T0, T1>(&mut self, rs2: T0, imm: T1)where
Self: CFsdspEmitter<T0, T1>,
Store double-precision value to stack
Stores a double-precision floating-point value in floating-point register rs2 to memory.
It computes an effective address by adding the zero-extended offset, scaled by 8,
to the stack pointer, x2.
It expands to fsd rs2, offset(x2).
§Forms
Assembly: c.fsdsp fs2, imm(sp)
Rust: c_fsdsp(rs2, imm)
§Arguments
rs2— Instruction operand.imm— Immediate encoding value.
Sourcepub fn c_fsw<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: CFswEmitter<T0, T1, T2>,
pub fn c_fsw<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: CFswEmitter<T0, T1, T2>,
Store single-precision
Stores a single precision floating-point value in register rs2 to memory.
It computes an effective address by adding the zero-extended offset, scaled by 4,
to the base address in register rs1.
It expands to fsw rs2, offset(rs1).
§Forms
Assembly: c.fsw xs2, imm(xs1)
Rust: c_fsw(rs1, rs2, imm)
§Arguments
rs1— Memory base register.rs2— Source register.imm— Immediate encoding value.
Sourcepub fn c_fswsp<T0, T1>(&mut self, rs2: T0, imm: T1)where
Self: CFswspEmitter<T0, T1>,
pub fn c_fswsp<T0, T1>(&mut self, rs2: T0, imm: T1)where
Self: CFswspEmitter<T0, T1>,
Store single-precision value to stack
Stores a single-precision floating-point value in floating-point register rs2 to memory.
It computes an effective address by adding the zero-extended offset, scaled by 4,
to the stack pointer, x2.
It expands to fsw rs2, offset(x2).
§Forms
Assembly: c.fswsp fs2, imm(sp)
Rust: c_fswsp(rs2, imm)
§Arguments
rs2— Instruction operand.imm— Immediate encoding value.
Sourcepub fn c_jal<T0>(&mut self, imm: T0)where
Self: CJalEmitter<T0>,
pub fn c_jal<T0>(&mut self, imm: T0)where
Self: CJalEmitter<T0>,
Jump and Link
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.
It expands to jal x1, offset.
§Forms
Assembly: c.jal imm
Rust: c_jal(imm)
§Arguments
imm— Immediate encoding value.
Sourcepub fn c_jalr<T0>(&mut self, rs1: T0)where
Self: CJalrEmitter<T0>,
pub fn c_jalr<T0>(&mut self, rs1: T0)where
Self: CJalrEmitter<T0>,
Jump and Link Register.
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. C.JALR expands to jalr x1, 0(rs1).
§Forms
Assembly: c.jalr xs1
Rust: c_jalr(rs1)
§Arguments
rs1— Instruction operand.
Sourcepub fn c_jr<T0>(&mut self, rs1: T0)where
Self: CJrEmitter<T0>,
pub fn c_jr<T0>(&mut self, rs1: T0)where
Self: CJrEmitter<T0>,
Sourcepub fn c_lbu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: CLbuEmitter<T0, T1, T2>,
pub fn c_lbu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: CLbuEmitter<T0, T1, T2>,
Load unsigned byte, 16-bit encoding
Loads a 8-bit value from memory into register rd.
It computes an effective address by adding the zero-extended offset, to the base address in register rs1.
It expands to lbu rd, offset(rs1).
§Forms
Assembly: c.lbu xd, imm(xs1)
Rust: c_lbu(rd, rs1, imm)
§Arguments
rd— Destination register.rs1— Source register.imm— Immediate encoding value.
Sourcepub fn c_ld<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: CLdEmitter<T0, T1, T2>,
pub fn c_ld<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: CLdEmitter<T0, T1, T2>,
Load double
Loads a 64-bit value from memory into register rd.
It computes an effective address by adding the zero-extended offset, scaled by 8,
to the base address in register rs1.
It expands to ld rd, offset(rs1).
§Forms
Assembly: c.ld xd, imm(xs1)
Rust: c_ld(rd, rs1, imm)
§Arguments
rd— Destination register.rs1— Memory base register.imm— Immediate encoding value.
Sourcepub fn c_ldsp<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: CLdspEmitter<T0, T1>,
pub fn c_ldsp<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: CLdspEmitter<T0, T1>,
Load doubleword from stack pointer
C.LDSP is an RV64C/RV128C-only instruction that loads a 64-bit value from memory
into register rd.
It computes its effective address by adding the zero-extended offset, scaled by 8,
to the stack pointer, x2.
It expands to ld rd, offset(x2).
C.LDSP is only valid when rd ≠ x0 the code points with rd=x0 are reserved.
§Forms
Assembly: c.ldsp xd, imm(sp)
Rust: c_ldsp(rd, imm)
§Arguments
rd— Destination register.imm— Immediate encoding value.
Sourcepub fn c_lh<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: CLhEmitter<T0, T1, T2>,
pub fn c_lh<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: CLhEmitter<T0, T1, T2>,
Load signed halfword, 16-bit encoding
Loads a 16-bit value from memory into register rd.
It computes an effective address by adding the zero-extended offset, to the base address in register rs1.
It expands to lh rd, offset(rs1).
§Forms
Assembly: c.lh xd, imm(xs1)
Rust: c_lh(rd, rs1, imm)
§Arguments
rd— Destination register.rs1— Source register.imm— Immediate encoding value.
Sourcepub fn c_lhu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: CLhuEmitter<T0, T1, T2>,
pub fn c_lhu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: CLhuEmitter<T0, T1, T2>,
Load unsigned halfword, 16-bit encoding
Loads a 16-bit value from memory into register rd.
It computes an effective address by adding the zero-extended offset, to the base address in register rs1.
It expands to lhu rd, offset(rs1).
§Forms
Assembly: c.lhu xd, imm(xs1)
Rust: c_lhu(rd, rs1, imm)
§Arguments
rd— Destination register.rs1— Source register.imm— Immediate encoding value.
Sourcepub fn c_li<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: CLiEmitter<T0, T1>,
pub fn c_li<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: CLiEmitter<T0, T1>,
Load the sign-extended 6-bit immediate
C.LI loads the sign-extended 6-bit immediate, imm, into register rd.
C.LI expands into addi rd, x0, imm.
C.LI is only valid when rd ≠ x0; the code points with rd=x0 encode HINTs.
§Forms
Assembly: c.li xd, imm
Rust: c_li(rd, imm)
§Arguments
rd— Destination register.imm— Immediate encoding value.
Sourcepub fn c_lui<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: CLuiEmitter<T0, T1>,
pub fn c_lui<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: CLuiEmitter<T0, T1>,
Load the non-zero 6-bit immediate field into bits 17-12 of the destination register
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.
C.LUI expands into lui rd, imm.
C.LUI is only valid when rd≠x0 and rd≠x2, and when the immediate is not equal to zero.
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
§Forms
Assembly: c.lui xd, imm
Rust: c_lui(rd, imm)
§Arguments
rd— Destination register.imm— Immediate encoding value.
Sourcepub fn c_lw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: CLwEmitter<T0, T1, T2>,
pub fn c_lw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: CLwEmitter<T0, T1, T2>,
Load word
Loads a 32-bit value from memory into register rd.
It computes an effective address by adding the zero-extended offset, scaled by 4,
to the base address in register rs1.
It expands to lw rd, offset(rs1).
§Forms
Assembly: c.lw xd, imm(xs1)
Rust: c_lw(rd, rs1, imm)
§Arguments
rd— Destination register.rs1— Memory base register.imm— Immediate encoding value.
Sourcepub fn c_lwsp<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: CLwspEmitter<T0, T1>,
pub fn c_lwsp<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: CLwspEmitter<T0, T1>,
Load word from stack pointer
Loads a 32-bit value from memory into register rd.
It computes an effective address by adding the zero-extended offset, scaled by 4,
to the stack pointer, x2.
It expands to lw rd, offset(x2).
C.LWSP is only valid when rd ≠ x0. The code points with rd=x0 are reserved.
§Forms
Assembly: c.lwsp xd, imm(sp)
Rust: c_lwsp(rd, imm)
§Arguments
rd— Destination register.imm— Immediate encoding value.
Sourcepub fn c_mop_1(&mut self)where
Self: CMop1Emitter,
pub fn c_mop_1(&mut self)where
Self: CMop1Emitter,
Sourcepub fn c_mop_11(&mut self)where
Self: CMop11Emitter,
pub fn c_mop_11(&mut self)where
Self: CMop11Emitter,
Sourcepub fn c_mop_13(&mut self)where
Self: CMop13Emitter,
pub fn c_mop_13(&mut self)where
Self: CMop13Emitter,
Sourcepub fn c_mop_15(&mut self)where
Self: CMop15Emitter,
pub fn c_mop_15(&mut self)where
Self: CMop15Emitter,
Sourcepub fn c_mop_3(&mut self)where
Self: CMop3Emitter,
pub fn c_mop_3(&mut self)where
Self: CMop3Emitter,
Sourcepub fn c_mop_5(&mut self)where
Self: CMop5Emitter,
pub fn c_mop_5(&mut self)where
Self: CMop5Emitter,
Sourcepub fn c_mop_7(&mut self)where
Self: CMop7Emitter,
pub fn c_mop_7(&mut self)where
Self: CMop7Emitter,
Sourcepub fn c_mop_9(&mut self)where
Self: CMop9Emitter,
pub fn c_mop_9(&mut self)where
Self: CMop9Emitter,
Sourcepub fn c_mop_n<T0>(&mut self, mop_t: T0)where
Self: CMopNEmitter<T0>,
pub fn c_mop_n<T0>(&mut self, mop_t: T0)where
Self: CMopNEmitter<T0>,
Sourcepub fn c_mul<T0, T1>(&mut self, rd: T0, rs2: T1)where
Self: CMulEmitter<T0, T1>,
pub fn c_mul<T0, T1>(&mut self, rd: T0, rs2: T1)where
Self: CMulEmitter<T0, T1>,
Sourcepub fn c_mv<T0, T1>(&mut self, rd: T0, rs2: T1)where
Self: CMvEmitter<T0, T1>,
pub fn c_mv<T0, T1>(&mut self, rd: T0, rs2: T1)where
Self: CMvEmitter<T0, T1>,
Sourcepub fn c_nop<T0>(&mut self, imm: T0)where
Self: CNopEmitter<T0>,
pub fn c_nop<T0>(&mut self, imm: T0)where
Self: CNopEmitter<T0>,
Sourcepub fn c_not<T0>(&mut self, rd: T0)where
Self: CNotEmitter<T0>,
pub fn c_not<T0>(&mut self, rd: T0)where
Self: CNotEmitter<T0>,
Sourcepub fn c_ntl_all(&mut self)where
Self: CNtlAllEmitter,
pub fn c_ntl_all(&mut self)where
Self: CNtlAllEmitter,
Sourcepub fn c_ntl_p1(&mut self)where
Self: CNtlP1Emitter,
pub fn c_ntl_p1(&mut self)where
Self: CNtlP1Emitter,
Sourcepub fn c_ntl_pall(&mut self)where
Self: CNtlPallEmitter,
pub fn c_ntl_pall(&mut self)where
Self: CNtlPallEmitter,
Sourcepub fn c_ntl_s1(&mut self)where
Self: CNtlS1Emitter,
pub fn c_ntl_s1(&mut self)where
Self: CNtlS1Emitter,
Sourcepub fn c_or<T0, T1>(&mut self, rd: T0, rs2: T1)where
Self: COrEmitter<T0, T1>,
pub fn c_or<T0, T1>(&mut self, rd: T0, rs2: T1)where
Self: COrEmitter<T0, T1>,
Sourcepub fn c_sb<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: CSbEmitter<T0, T1, T2>,
pub fn c_sb<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: CSbEmitter<T0, T1, T2>,
Store unsigned byte, 16-bit encoding
Stores a 8-bit value from register rs2 into memory.
It computes an effective address by adding the zero-extended offset, to the base address in register rs1.
It expands to sb rs2, offset(rs1).
§Forms
Assembly: c.sb xs2, imm(xs1)
Rust: c_sb(rs1, rs2, imm)
§Arguments
rs1— Source register.rs2— Source register.imm— Immediate encoding value.
Sourcepub fn c_sd<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: CSdEmitter<T0, T1, T2>,
pub fn c_sd<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: CSdEmitter<T0, T1, T2>,
Store double
Stores a 64-bit value in register rs2 to memory.
It computes an effective address by adding the zero-extended offset, scaled by 8,
to the base address in register rs1.
It expands to sd rs2, offset(rs1).
§Forms
Assembly: c.sd xs2, imm(xs1)
Rust: c_sd(rs1, rs2, imm)
§Arguments
rs1— Memory base register.rs2— Source register.imm— Immediate encoding value.
Sourcepub fn c_sdsp<T0, T1>(&mut self, rs2: T0, imm: T1)where
Self: CSdspEmitter<T0, T1>,
pub fn c_sdsp<T0, T1>(&mut self, rs2: T0, imm: T1)where
Self: CSdspEmitter<T0, T1>,
Store doubleword to stack
Stores a 64-bit value in register rs2 to memory.
It computes an effective address by adding the zero-extended offset, scaled by 8,
to the stack pointer, x2.
It expands to sd rs2, offset(x2).
§Forms
Assembly: c.sdsp xs2, imm(sp)
Rust: c_sdsp(rs2, imm)
§Arguments
rs2— Instruction operand.imm— Immediate encoding value.
Sourcepub fn c_sext_b<T0>(&mut self, rd: T0)where
Self: CSextBEmitter<T0>,
pub fn c_sext_b<T0>(&mut self, rd: T0)where
Self: CSextBEmitter<T0>,
Sign-extend byte, 16-bit encoding
This instruction takes a single source/destination operand. This instruction sign-extends the least-significant byte of the source to XLEN by copying the most-significant bit in the byte (i.e., bit 7) to all of the more-significant bits.
§Forms
Assembly: c.sext.b xd
Rust: c_sext_b(rd)
§Arguments
rd— Destination/source register.
Sourcepub fn c_sext_h<T0>(&mut self, rd: T0)where
Self: CSextHEmitter<T0>,
pub fn c_sext_h<T0>(&mut self, rd: T0)where
Self: CSextHEmitter<T0>,
Sign-extend halfword, 16-bit encoding
This instruction takes a single source/destination operand. This instruction sign-extends the least-significant halfword of the source to XLEN by copying the most-significant bit in the halfword (i.e., bit 15) to all of the more-significant bits.
§Forms
Assembly: c.sext.h xd
Rust: c_sext_h(rd)
§Arguments
rd— Destination/source register.
Sourcepub fn c_sh<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: CShEmitter<T0, T1, T2>,
pub fn c_sh<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: CShEmitter<T0, T1, T2>,
Store unsigned halfword, 16-bit encoding
Stores a 16-bit value from register rs2 into memory.
It computes an effective address by adding the zero-extended offset, to the base address in register rs1.
It expands to sh rs2, offset(rs1).
§Forms
Assembly: c.sh xs2, imm(xs1)
Rust: c_sh(rs1, rs2, imm)
§Arguments
rs1— Source register.rs2— Source register.imm— Immediate encoding value.
Sourcepub fn c_slli<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: CSlliEmitter<T0, T1>,
pub fn c_slli<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: CSlliEmitter<T0, T1>,
Sourcepub fn c_slli_rv32<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: CSlliRv32Emitter<T0, T1>,
pub fn c_slli_rv32<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: CSlliRv32Emitter<T0, T1>,
Sourcepub fn c_srai<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: CSraiEmitter<T0, T1>,
pub fn c_srai<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: CSraiEmitter<T0, T1>,
Shift right arithmetical immediate
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.
The rd register index should be used as rd+8 (registers x8-x15).
C.SRAI expands into srai rd, rd, shamt.
§Forms
Assembly: c.srai xd, shamt
Rust: c_srai(rd, imm)
§Arguments
rd— Destination/source register.imm— Immediate encoding value.
Sourcepub fn c_srai_rv32<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: CSraiRv32Emitter<T0, T1>,
pub fn c_srai_rv32<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: CSraiRv32Emitter<T0, T1>,
Shift right arithmetical immediate
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.
The rd register index should be used as rd+8 (registers x8-x15).
C.SRAI expands into srai rd, rd, shamt.
§Forms
Assembly: c.srai.rv32 xd, shamt
Rust: c_srai_rv32(rd, imm)
§Arguments
rd— Destination/source register.imm— Immediate encoding value.
Sourcepub fn c_srli<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: CSrliEmitter<T0, T1>,
pub fn c_srli<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: CSrliEmitter<T0, T1>,
Shift right logical immediate
Shift the value in rd right by shamt, and store the result back in rd.
The rd register index should be used as rd+8 (registers x8-x15).
C.SRLI expands into srli rd, rd, shamt.
§Forms
Assembly: c.srli xd, shamt
Rust: c_srli(rd, imm)
§Arguments
rd— Destination/source register.imm— Immediate encoding value.
Sourcepub fn c_srli_rv32<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: CSrliRv32Emitter<T0, T1>,
pub fn c_srli_rv32<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: CSrliRv32Emitter<T0, T1>,
Shift right logical immediate
Shift the value in rd right by shamt, and store the result back in rd.
The rd register index should be used as rd+8 (registers x8-x15).
C.SRLI expands into srli rd, rd, shamt.
§Forms
Assembly: c.srli.rv32 xd, shamt
Rust: c_srli_rv32(rd, imm)
§Arguments
rd— Destination/source register.imm— Immediate encoding value.
Sourcepub fn c_sspopchk_x5(&mut self)where
Self: CSspopchkX5Emitter,
pub fn c_sspopchk_x5(&mut self)where
Self: CSspopchkX5Emitter,
Sourcepub fn c_sspush_x1(&mut self)where
Self: CSspushX1Emitter,
pub fn c_sspush_x1(&mut self)where
Self: CSspushX1Emitter,
Sourcepub fn c_sub<T0, T1>(&mut self, rd: T0, rs2: T1)where
Self: CSubEmitter<T0, T1>,
pub fn c_sub<T0, T1>(&mut self, rd: T0, rs2: T1)where
Self: CSubEmitter<T0, T1>,
Subtract
Subtract the value in rs2 from rd, and store the result in rd.
The rd and rs2 register indexes should be used as rd+8 and rs2+8 (registers x8-x15).
C.SUB expands into sub rd, rd, rs2.
§Forms
Assembly: c.sub xd, rs2
Rust: c_sub(rd, rs2)
§Arguments
rd— Destination/source register.rs2— Source register.
Sourcepub fn c_subw<T0, T1>(&mut self, rd: T0, rs2: T1)where
Self: CSubwEmitter<T0, T1>,
pub fn c_subw<T0, T1>(&mut self, rd: T0, rs2: T1)where
Self: CSubwEmitter<T0, T1>,
Subtract word
Subtract the 32-bit values in rs2 from rd, and store the result in rd.
The rd and rs2 register indexes should be used as rd+8 and rs2+8 (registers x8-x15).
C.SUBW expands into subw rd, rd, rs2.
§Forms
Assembly: c.subw xd, rs2
Rust: c_subw(rd, rs2)
§Arguments
rd— Destination/source register.rs2— Source register.
Sourcepub fn c_sw<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: CSwEmitter<T0, T1, T2>,
pub fn c_sw<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: CSwEmitter<T0, T1, T2>,
Store word
Stores a 32-bit value in register rs2 to memory.
It computes an effective address by adding the zero-extended offset, scaled by 4,
to the base address in register rs1.
It expands to sw rs2, offset(rs1).
§Forms
Assembly: c.sw xs2, imm(xs1)
Rust: c_sw(rs1, rs2, imm)
§Arguments
rs1— Memory base register.rs2— Source register.imm— Immediate encoding value.
Sourcepub fn c_swsp<T0, T1>(&mut self, rs2: T0, imm: T1)where
Self: CSwspEmitter<T0, T1>,
pub fn c_swsp<T0, T1>(&mut self, rs2: T0, imm: T1)where
Self: CSwspEmitter<T0, T1>,
Store word to stack
Stores a 32-bit value in register rs2 to memory.
It computes an effective address by adding the zero-extended offset, scaled by 4,
to the stack pointer, x2.
It expands to sw rs2, offset(x2).
§Forms
Assembly: c.swsp xs2, imm(sp)
Rust: c_swsp(rs2, imm)
§Arguments
rs2— Instruction operand.imm— Immediate encoding value.
Sourcepub fn c_xor<T0, T1>(&mut self, rd: T0, rs2: T1)where
Self: CXorEmitter<T0, T1>,
pub fn c_xor<T0, T1>(&mut self, rd: T0, rs2: T1)where
Self: CXorEmitter<T0, T1>,
Exclusive Or
Exclusive or rd with rs2, and store the result in rd
The rd and rs2 register indexes should be used as rd+8 and rs2+8 (registers x8-x15).
C.XOR expands into xor rd, rd, rs2.
§Forms
Assembly: c.xor xd, rs2
Rust: c_xor(rd, rs2)
§Arguments
rd— Destination/source register.rs2— Source register.
Sourcepub fn c_zext_b<T0>(&mut self, rd: T0)where
Self: CZextBEmitter<T0>,
pub fn c_zext_b<T0>(&mut self, rd: T0)where
Self: CZextBEmitter<T0>,
Zero-extend byte, 16-bit encoding
This instruction takes a single source/destination operand. This instruction zero-extends the least-significant byte of the source to XLEN by inserting 0’s into all of the bits more significant than 7.
§Forms
Assembly: c.zext.b xd
Rust: c_zext_b(rd)
§Arguments
rd— Destination/source register.
Sourcepub fn c_zext_h<T0>(&mut self, rd: T0)where
Self: CZextHEmitter<T0>,
pub fn c_zext_h<T0>(&mut self, rd: T0)where
Self: CZextHEmitter<T0>,
Zero-extend halfword, 16-bit encoding
This instruction takes a single source/destination operand. This instruction zero-extends the least-significant halfword of the source to XLEN by inserting 0’s into all of the bits more significant than 15.
§Forms
Assembly: c.zext.h xd
Rust: c_zext_h(rd)
§Arguments
rd— Destination/source register.
Sourcepub fn c_zext_w<T0>(&mut self, rd: T0)where
Self: CZextWEmitter<T0>,
pub fn c_zext_w<T0>(&mut self, rd: T0)where
Self: CZextWEmitter<T0>,
Zero-extend word, 16-bit encoding
This instruction takes a single source/destination operand. 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.
§Forms
Assembly: c.zext.w xd
Rust: c_zext_w(rd)
§Arguments
rd— Destination/source register.
Sourcepub fn cbo_clean<T0>(&mut self, rs1: T0)where
Self: CboCleanEmitter<T0>,
pub fn cbo_clean<T0>(&mut self, rs1: T0)where
Self: CboCleanEmitter<T0>,
Cache Block Clean
Cleans an entire cache block globally throughout the system.
Exactly what happens is coherence protocol-dependent, but in general it is expected that after this operation():
- The cache block will be in the clean (not dirty) state in any coherent cache holding a valid copy of the line.
- The data will be cleaned to a point such that an incoherent load can observe the cleaned data.
cbo.clean is ordered by FENCE instructions but not FENCE.I or SFENCE.VMA.
<%- if CACHE_BLOCK_SIZE.bit_length > [PMP_GRANULARITY, PMA_GRANULARITY].min -%>
Both PMP and PMA access control must be the same for all bytes in the block; otherwise, cbo.clean has UNSPECIFIED behavior.
<%- end -%>
Clean operations are treated as stores for page and access permissions. If permission checks fail, one of the following exceptions will occur:
<%- if ext?(:H) -%>
Store/AMO Guest-Page Faultif virtual memory translation fails during G-stage translation. <%- end -%>Store/AMO Page Faultif virtual memory translation fails <% if ext?(:H) %>when V=0 or during VS-stage translation<% end %>Store/AMO Access Faultif a PMP or PMA access check fails
<%- if CACHE_BLOCK_SIZE.bit_length <= [PMP_GRANULARITY, PMA_GRANULARITY].min -%> Because cache blocks are naturally aligned and always fit in a single PMP or PMA regions, the PMP and PMA access checks only need to check a single address in the line. <%- end -%>
CBO operations never raise a misaligned address fault.
§Forms
Assembly: cbo.clean "TODO"
Rust: cbo_clean(rs1)
§Arguments
rs1— Source register.
Sourcepub fn cbo_flush<T0>(&mut self, rs1: T0)where
Self: CboFlushEmitter<T0>,
pub fn cbo_flush<T0>(&mut self, rs1: T0)where
Self: CboFlushEmitter<T0>,
Cache Block Flush
Flushes an entire cache block by cleaning it and then invalidating it in all caches.
cbo.flush is ordered by FENCE instructions but not FENCE.I or SFENCE.VMA.
<%- if CACHE_BLOCK_SIZE.bit_length > [PMP_GRANULARITY, PMA_GRANULARITY].min -%>
Both PMP and PMA access control must be the same for all bytes in the block; otherwise, cbo.flush has UNSPECIFIED behavior.
<%- end -%>
Flush operations are treated as stores for page and access permissions. If permission checks fail, one of the following exceptions will occur:
<%- if ext?(:H) -%>
Store/AMO Guest-Page Faultif virtual memory translation fails during G-stage translation. <%- end -%>Store/AMO Page Faultif virtual memory translation fails <% if ext?(:H) %>when V=0 or during VS-stage translation<% end %>Store/AMO Access Faultif a PMP or PMA access check fails.
<%- if CACHE_BLOCK_SIZE.bit_length <= [PMP_GRANULARITY, PMA_GRANULARITY].min -%> Because cache blocks are naturally aligned and always fit in a single PMP or PMA regions, the PMP and PMA access checks only need to check a single address in the line. <%- end -%>
CBO operations never raise a misaligned address fault.
§Forms
Assembly: cbo.flush "TODO"
Rust: cbo_flush(rs1)
§Arguments
rs1— Source register.
Sourcepub fn cbo_inval<T0>(&mut self, rs1: T0)where
Self: CboInvalEmitter<T0>,
pub fn cbo_inval<T0>(&mut self, rs1: T0)where
Self: CboInvalEmitter<T0>,
Cache Block Invalidate
Either invalidates or flushes (clean + invalidate) a cache block, depending on the current mode and value of
menvcfg.CBIE, senvcfg.CBIE, and/or henvcfg.CBIE.
The instruction is an invalidate (without a clean) when:
- In M-mode
- In (H)S-mode and
menvcfg.CBIE== 11 - In U-mode and
menvcfg.CBIE== 11 andsenvcfg.CBIE== 11 - In VS-mode and
menvcfg.CBIE== 11 andhenvcfg.CBIE== 11 - In VU-mode and
menvcfg.CBIE== 11 andhenvcfg.CBIE== 11 andsenvcfg.CBIE== 11
Otherwise, if the instruction does not trap (see Access section), the operation is a flush. The table below summarizes the options.
[%autowidth,cols=“1,1,1,1,1,1,1,1”,separator=“!”]
!===
.2+h![.rotate]#menvcfg.CBIE# .2+h! [.rotate]#senvcfg.CBIE# .2+h! [.rotate]#henvcfg.CBIE#
5+^.>h! cbe.inval Operation
.^h! M-mode .^h! S-mode .^h! U-mode .^h! VS-mode .^h! VU-mode
! 00 ! - ! - ! Invalidate ! Illegal Instruction ! Illegal Instruction ! Virtual Instruction ! Virtual Instruction
! 01 ! 00 ! 00 ! Invalidate ! Flush ! Illegal Instruction ! Virtual Instruction ! Virtual Instruction
! 01 ! 00 ! 01 ! Invalidate ! Flush ! Illegal Instruction ! Flush ! Virtual Instruction
! 01 ! 00 ! 11 ! Invalidate ! Flush ! Illegal Instruction ! Flush ! Virtual Instruction
! 01 ! 01 ! 00 ! Invalidate ! Flush ! Flush ! Virtual Instruction ! Virtual Instruction
! 01 ! 01 ! 01 ! Invalidate ! Flush ! Flush ! Flush ! Flush
! 01 ! 01 ! 11 ! Invalidate ! Flush ! Flush ! Flush ! Flush
! 01 ! 11 ! 00 ! Invalidate ! Flush ! Flush ! Virtual Instruction ! Virtual Instruction
! 01 ! 11 ! 01 ! Invalidate ! Flush ! Flush ! Flush ! Flush
! 01 ! 11 ! 11 ! Invalidate ! Flush ! Flush ! Flush ! Flush
! 11 ! 00 ! 00 ! Invalidate ! Invalidate ! Illegal Instruction ! Virtual Instruction ! Virtual Instruction
! 11 ! 00 ! 01 ! Invalidate ! Invalidate ! Illegal Instruction ! Flush ! Virtual Instruction
! 11 ! 00 ! 11 ! Invalidate ! Invalidate ! Illegal Instruction ! Invalidate ! Virtual Instruction
! 11 ! 01 ! 00 ! Invalidate ! Invalidate ! Flush ! Virtual Instruction ! Virtual Instruction
! 11 ! 01 ! 01 ! Invalidate ! Invalidate ! Flush ! Flush ! Flush
! 11 ! 01 ! 11 ! Invalidate ! Invalidate ! Flush ! Invalidate ! Flush
! 11 ! 11 ! 00 ! Invalidate ! Invalidate ! Invalidate ! Virtual Instruction ! Virtual Instruction
! 11 ! 11 ! 01 ! Invalidate ! Invalidate ! Invalidate ! Flush ! Flush
! 11 ! 11 ! 11 ! Invalidate ! Invalidate ! Invalidate ! Invalidate ! Invalidate
!===
cbo.inval is ordered by FENCE instructions but not FENCE.I or SFENCE.VMA.
<%- if CACHE_BLOCK_SIZE.bit_length > [PMP_GRANULARITY, PMA_GRANULARITY].min -%>
Both PMP and PMA access control must be the same for all bytes in the block; otherwise, cbo.zero has UNSPECIFIED behavior.
<%- end -%>
Invalidate operations are treated as stores for page and access permissions. If permission checks fail, one of the following exceptions will occur:
<%- if ext?(:H) -%>
Store/AMO Guest-Page Faultif virtual memory translation fails during G-stage translation. <%- end -%>Store/AMO Page Faultif virtual memory translation fails <% if ext?(:H) %>when V=0 or during VS-stage translation<% end %>Store/AMO Access Faultif a PMP or PMA access check fails.
<%- if CACHE_BLOCK_SIZE.bit_length <= [PMP_GRANULARITY, PMA_GRANULARITY].min -%> Because cache blocks are naturally aligned and always fit in a single PMP or PMA regions, the PMP and PMA access checks only need to check a single address in the line. <%- end -%>
CBO operations never raise a misaligned address fault.
§Forms
Assembly: cbo.inval "TODO"
Rust: cbo_inval(rs1)
§Arguments
rs1— Source register.
Sourcepub fn cbo_zero<T0>(&mut self, rs1: T0)where
Self: CboZeroEmitter<T0>,
pub fn cbo_zero<T0>(&mut self, rs1: T0)where
Self: CboZeroEmitter<T0>,
Cache Block Zero
Zeros an entire cache block
The block zeroing does not need to be atomic.
cbo.zero is ordered by FENCE instructions but not FENCE.I or SFENCE.VMA.
<%- if CACHE_BLOCK_SIZE.bit_length > [PMP_GRANULARITY, PMA_GRANULARITY].min -%>
Both PMP and PMA access control must be the same for all bytes in the block; otherwise, cbo.zero has UNSPECIFIED behavior.
<%- end -%>
Clean operations are treated as stores for page and access permissions. If permission checks fail, one of the following exceptions will occur:
<%- if ext?(:H) -%>
Store/AMO Guest-Page Faultif virtual memory translation fails during G-stage translation. <%- end -%>Store/AMO Page Faultif virtual memory translation fails <% if ext?(:H) %>when V=0 or during VS-stage translation<% end %>Store/AMO Access Faultif a PMP or PMA access check fails.
<%- if CACHE_BLOCK_SIZE.bit_length <= [PMP_GRANULARITY, PMA_GRANULARITY].min -%> Because cache blocks are naturally aligned and always fit in a single PMP or PMA regions, the PMP and PMA access checks only need to check a single address in the line. <%- end -%>
CBO operations never raise a misaligned address fault.
§Forms
Assembly: cbo.zero "TODO"
Rust: cbo_zero(rs1)
§Arguments
rs1— Source register.
Sourcepub fn clmul<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: ClmulEmitter<T0, T1, T2>,
pub fn clmul<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: ClmulEmitter<T0, T1, T2>,
Sourcepub fn clmulh<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: ClmulhEmitter<T0, T1, T2>,
pub fn clmulh<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: ClmulhEmitter<T0, T1, T2>,
Sourcepub fn clmulr<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: ClmulrEmitter<T0, T1, T2>,
pub fn clmulr<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: ClmulrEmitter<T0, T1, T2>,
Sourcepub fn clz<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: ClzEmitter<T0, T1>,
pub fn clz<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: ClzEmitter<T0, T1>,
Count leading zero bits
This instruction counts the number of 0’s before the first 1, starting at the most-significant bit (i.e., XLEN-1) and progressing to bit 0. Accordingly, if the input is 0, the output is XLEN, and if the most-significant bit of the input is a 1, the output is 0.
§Forms
Assembly: clz xd, xs1
Rust: clz(rd, rs1)
§Arguments
rd— Destination register.rs1— Source register.
Sourcepub fn clzw<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: ClzwEmitter<T0, T1>,
pub fn clzw<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: ClzwEmitter<T0, T1>,
Count leading zero bits in word
This instruction counts the number of 0’s before the first 1 starting at bit 31 and progressing to bit 0. Accordingly, if the least-significant word is 0, the output is 32, and if the most-significant bit of the word (i.e., bit 31) is a 1, the output is 0.
§Forms
Assembly: clzw xd, xs1
Rust: clzw(rd, rs1)
§Arguments
rd— Destination register.rs1— Source register.
Sourcepub fn cm_jalt<T0>(&mut self, index: T0)where
Self: CmJaltEmitter<T0>,
pub fn cm_jalt<T0>(&mut self, index: T0)where
Self: CmJaltEmitter<T0>,
Sourcepub fn cpop<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: CpopEmitter<T0, T1>,
pub fn cpop<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: CpopEmitter<T0, T1>,
Count set bits
This instructions counts the number of 1’s (i.e., set bits) in the source register.
§.Software Hint [NOTE]
This operations is known as population count, popcount, sideways sum, bit summation, or Hamming weight.
§The GCC builtin function __builtin_popcount (unsigned int x) is
implemented by cpop on RV32 and by cpopw on RV64. The GCC builtin
function __builtin_popcountl (unsigned long x) for LP64 is
implemented by cpop on RV64.
§Forms
Assembly: cpop xd, xs1
Rust: cpop(rd, rs1)
§Arguments
rd— Destination register.rs1— Source register.
Sourcepub fn cpopw<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: CpopwEmitter<T0, T1>,
pub fn cpopw<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: CpopwEmitter<T0, T1>,
Count set bits in word
This instructions counts the number of 1’s (i.e., set bits) in the least-significant word of the source register.
§.Software Hint [NOTE]
This operations is known as population count, popcount, sideways sum, bit summation, or Hamming weight.
§The GCC builtin function __builtin_popcount (unsigned int x) is
implemented by cpop on RV32 and by cpopw on RV64. The GCC builtin
function __builtin_popcountl (unsigned long x) for LP64 is
implemented by cpop on RV64.
§Forms
Assembly: cpopw xd, xs1
Rust: cpopw(rd, rs1)
§Arguments
rd— Destination register.rs1— Source register.
Sourcepub fn csrc<T0, T1>(&mut self, rs1: T0, csr: T1)where
Self: CsrcEmitter<T0, T1>,
pub fn csrc<T0, T1>(&mut self, rs1: T0, csr: T1)where
Self: CsrcEmitter<T0, T1>,
Sourcepub fn csrci<T0, T1>(&mut self, csr: T0, zimm5: T1)where
Self: CsrciEmitter<T0, T1>,
pub fn csrci<T0, T1>(&mut self, csr: T0, zimm5: T1)where
Self: CsrciEmitter<T0, T1>,
Sourcepub fn csrr<T0, T1>(&mut self, rd: T0, csr: T1)where
Self: CsrrEmitter<T0, T1>,
pub fn csrr<T0, T1>(&mut self, rd: T0, csr: T1)where
Self: CsrrEmitter<T0, T1>,
Sourcepub fn csrrc<T0, T1, T2>(&mut self, rd: T0, rs1: T1, csr: T2)where
Self: CsrrcEmitter<T0, T1, T2>,
pub fn csrrc<T0, T1, T2>(&mut self, rd: T0, rs1: T1, csr: T2)where
Self: CsrrcEmitter<T0, T1, T2>,
Sourcepub fn csrrci<T0, T1, T2>(&mut self, rd: T0, csr: T1, zimm5: T2)where
Self: CsrrciEmitter<T0, T1, T2>,
pub fn csrrci<T0, T1, T2>(&mut self, rd: T0, csr: T1, zimm5: T2)where
Self: CsrrciEmitter<T0, T1, T2>,
Sourcepub fn csrrs<T0, T1, T2>(&mut self, rd: T0, rs1: T1, csr: T2)where
Self: CsrrsEmitter<T0, T1, T2>,
pub fn csrrs<T0, T1, T2>(&mut self, rd: T0, rs1: T1, csr: T2)where
Self: CsrrsEmitter<T0, T1, T2>,
Atomic Read and Set Bits in CSR
Atomically read and set bits in a CSR.
Reads the value of the CSR, zero-extends the value to XLEN bits,
and writes it to integer register rd. The initial value in integer
register rs1 is treated as a bit mask that specifies bit positions
to be set in the CSR. Any bit that is high in rs1 will cause the
corresponding bit to be set in the CSR, if that CSR bit is writable.
Other bits in the CSR are not explicitly written.
§Forms
Assembly: csrrs xd, xs1, csr
Rust: csrrs(rd, rs1, csr)
§Arguments
rd— Destination register.rs1— Source register.csr— Control and status register number.
Sourcepub fn csrrsi<T0, T1, T2>(&mut self, rd: T0, csr: T1, zimm5: T2)where
Self: CsrrsiEmitter<T0, T1, T2>,
pub fn csrrsi<T0, T1, T2>(&mut self, rd: T0, csr: T1, zimm5: T2)where
Self: CsrrsiEmitter<T0, T1, T2>,
Sourcepub fn csrrw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, csr: T2)where
Self: CsrrwEmitter<T0, T1, T2>,
pub fn csrrw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, csr: T2)where
Self: CsrrwEmitter<T0, T1, T2>,
Atomic Read/Write CSR
Atomically swap values in the CSRs and integer registers.
Read the old value of the CSR, zero-extends the value to XLEN bits,
and then write it to integer register rd.
The initial value in rs1 is written to the CSR.
If rd=x0, then the instruction shall not read the CSR and shall not
cause any of the side effects that might occur on a CSR read.
§Forms
Assembly: csrrw xd, xs1, csr
Rust: csrrw(rd, rs1, csr)
§Arguments
rd— Destination register.rs1— Source register.csr— Control and status register number.
Sourcepub fn csrrwi<T0, T1, T2>(&mut self, rd: T0, csr: T1, zimm5: T2)where
Self: CsrrwiEmitter<T0, T1, T2>,
pub fn csrrwi<T0, T1, T2>(&mut self, rd: T0, csr: T1, zimm5: T2)where
Self: CsrrwiEmitter<T0, T1, T2>,
Atomic Read/Write CSR Immediate
Atomically write CSR using a 5-bit immediate, and load the previous value into ‘rd’.
Read the old value of the CSR, zero-extends the value to XLEN bits,
and then write it to integer register rd.
The 5-bit uimm field is zero-extended and written to the CSR.
If rd=x0, then the instruction shall not read the CSR and shall not
cause any of the side effects that might occur on a CSR read.
§Forms
Assembly: csrrwi xd, zimm, csr
Rust: csrrwi(rd, csr, zimm5)
§Arguments
rd— Destination register.csr— Control and status register number.zimm5— Immediate encoding value.
Sourcepub fn csrs<T0, T1>(&mut self, rs1: T0, csr: T1)where
Self: CsrsEmitter<T0, T1>,
pub fn csrs<T0, T1>(&mut self, rs1: T0, csr: T1)where
Self: CsrsEmitter<T0, T1>,
Sourcepub fn csrsi<T0, T1>(&mut self, csr: T0, zimm5: T1)where
Self: CsrsiEmitter<T0, T1>,
pub fn csrsi<T0, T1>(&mut self, csr: T0, zimm5: T1)where
Self: CsrsiEmitter<T0, T1>,
Sourcepub fn csrw<T0, T1>(&mut self, rs1: T0, csr: T1)where
Self: CsrwEmitter<T0, T1>,
pub fn csrw<T0, T1>(&mut self, rs1: T0, csr: T1)where
Self: CsrwEmitter<T0, T1>,
Sourcepub fn csrwi<T0, T1>(&mut self, csr: T0, zimm5: T1)where
Self: CsrwiEmitter<T0, T1>,
pub fn csrwi<T0, T1>(&mut self, csr: T0, zimm5: T1)where
Self: CsrwiEmitter<T0, T1>,
Sourcepub fn ctz<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: CtzEmitter<T0, T1>,
pub fn ctz<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: CtzEmitter<T0, T1>,
Count trailing zero bits
This instruction counts the number of 0’s before the first 1, starting at the least-significant bit (i.e., 0) and progressing to the most-significant bit (i.e., XLEN-1). Accordingly, if the input is 0, the output is XLEN, and if the least-significant bit of the input is a 1, the output is 0.
§Forms
Assembly: ctz xd, xs1
Rust: ctz(rd, rs1)
§Arguments
rd— Destination register.rs1— Source register.
Sourcepub fn ctzw<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: CtzwEmitter<T0, T1>,
pub fn ctzw<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: CtzwEmitter<T0, T1>,
Count trailing zero bits in word
This instruction counts the number of 0’s before the first 1, starting at the least-significant bit (i.e., 0) and progressing to the most-significant bit of the least-significant word (i.e., 31). Accordingly, if the least-significant word is 0, the output is 32, and if the least-significant bit of the input is a 1, the output is 0.
§Forms
Assembly: ctzw xd, xs1
Rust: ctzw(rd, rs1)
§Arguments
rd— Destination register.rs1— Source register.
Sourcepub fn czero_eqz<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: CzeroEqzEmitter<T0, T1, T2>,
pub fn czero_eqz<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: CzeroEqzEmitter<T0, T1, T2>,
Sourcepub fn czero_nez<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: CzeroNezEmitter<T0, T1, T2>,
pub fn czero_nez<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: CzeroNezEmitter<T0, T1, T2>,
Sourcepub fn div<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: DivEmitter<T0, T1, T2>,
pub fn div<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: DivEmitter<T0, T1, T2>,
Signed division
Divide rs1 by rs2, and store the result in rd. The remainder is discarded.
Division by zero will put -1 into rd.
Division resulting in signed overflow (when most negative number is divided by -1) will put the most negative number into rd;
§Forms
Assembly: div xd, xs1, xs2
Rust: div(rd, rs1, rs2)
§Arguments
rd— Destination register.rs1— Source register.rs2— Source register.
Sourcepub fn divu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: DivuEmitter<T0, T1, T2>,
pub fn divu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: DivuEmitter<T0, T1, T2>,
Unsigned division
Divide unsigned values in rs1 by rs2, and store the result in rd.
The remainder is discarded.
If the value in rs2 is zero, rd gets the largest unsigned value.
§Forms
Assembly: divu xd, xs1, xs2
Rust: divu(rd, rs1, rs2)
§Arguments
rd— Destination register.rs1— Source register.rs2— Source register.
Sourcepub fn divuw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: DivuwEmitter<T0, T1, T2>,
pub fn divuw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: DivuwEmitter<T0, T1, T2>,
Unsigned 32-bit division
Divide the unsigned 32-bit values in rs1 and rs2, and store the sign-extended result in rd.
The remainder is discarded.
If the value in rs2 is zero, rd is written with all 1s.
§Forms
Assembly: divuw xd, xs1, xs2
Rust: divuw(rd, rs1, rs2)
§Arguments
rd— Destination register.rs1— Source register.rs2— Source register.
Sourcepub fn divw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: DivwEmitter<T0, T1, T2>,
pub fn divw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: DivwEmitter<T0, T1, T2>,
Signed 32-bit division
Divide the lower 32-bits of register rs1 by the lower 32-bits of register rs2, and store the sign-extended result in rd.
The remainder is discarded.
Division by zero will put -1 into rd.
Division resulting in signed overflow (when most negative number is divided by -1) will put the most negative number into rd;
§Forms
Assembly: divw xd, xs1, xs2
Rust: divw(rd, rs1, rs2)
§Arguments
rd— Destination register.rs1— Source register.rs2— Source register.
Sourcepub fn dret(&mut self)where
Self: DretEmitter,
pub fn dret(&mut self)where
Self: DretEmitter,
Sourcepub fn ebreak(&mut self)where
Self: EbreakEmitter,
pub fn ebreak(&mut self)where
Self: EbreakEmitter,
Breakpoint exception
The EBREAK instruction is used by debuggers to cause control to be transferred back to a debugging environment. Unless overridden by an external debug environment, EBREAK raises a breakpoint exception and performs no other operation.
[NOTE]
As described in the C Standard Extension for Compressed Instructions, the c.ebreak
instruction performs the same operation as the EBREAK instruction.
EBREAK causes the receiving privilege mode’s epc register to be set to the address of
the EBREAK instruction itself, not the address of the following instruction.
As EBREAK causes a synchronous exception, it is not considered to retire,
and should not increment the minstret CSR.
§Forms
Assembly: ebreak ""
Rust: ebreak()
§Arguments
Sourcepub fn ecall(&mut self)where
Self: EcallEmitter,
pub fn ecall(&mut self)where
Self: EcallEmitter,
Environment call
The ECALL instruction is used to make a request to the supporting execution environment. When executed in U-mode, S-mode, or M-mode, it generates an environment-call-from-U-mode exception, environment-call-from-S-mode exception, or environment-call-from-M-mode exception, respectively, and performs no other operation.
[NOTE] ECALL generates a different exception for each originating privilege mode so that environment call exceptions can be selectively delegated. A typical use case for Unix-like operating systems is to delegate to S-mode the environment-call-from-U-mode exception but not the others.
ECALL causes the receiving privilege mode’s epc register to be set to the address of
the ECALL instruction itself, not the address of the following instruction.
As ECALL causes a synchronous exception, it is not considered to retire,
and should not increment the minstret CSR.
§Forms
Assembly: ecall ""
Rust: ecall()
§Arguments
Sourcepub fn fabs_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FabsDEmitter<T0, T1, T2>,
pub fn fabs_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FabsDEmitter<T0, T1, T2>,
Sourcepub fn fabs_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FabsHEmitter<T0, T1, T2>,
pub fn fabs_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FabsHEmitter<T0, T1, T2>,
Sourcepub fn fabs_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FabsQEmitter<T0, T1, T2>,
pub fn fabs_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FabsQEmitter<T0, T1, T2>,
Sourcepub fn fabs_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FabsSEmitter<T0, T1, T2>,
pub fn fabs_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FabsSEmitter<T0, T1, T2>,
Sourcepub fn fadd_d<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)where
Self: FaddDEmitter<T0, T1, T2, T3>,
pub fn fadd_d<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)where
Self: FaddDEmitter<T0, T1, T2, T3>,
Sourcepub fn fadd_h<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)where
Self: FaddHEmitter<T0, T1, T2, T3>,
pub fn fadd_h<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)where
Self: FaddHEmitter<T0, T1, T2, T3>,
Sourcepub fn fadd_q<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)where
Self: FaddQEmitter<T0, T1, T2, T3>,
pub fn fadd_q<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)where
Self: FaddQEmitter<T0, T1, T2, T3>,
Sourcepub fn fadd_s<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)where
Self: FaddSEmitter<T0, T1, T2, T3>,
pub fn fadd_s<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)where
Self: FaddSEmitter<T0, T1, T2, T3>,
Single-precision floating-point addition
Do the single-precision floating-point addition of fs1 and fs2 and store the result in fd. rm is the dynamic Rounding Mode.
§Forms
Assembly: fadd.s fd, fs1, fs2, rm
Rust: fadd_s(rd, rs1, rs2, rm)
§Arguments
rd— Destination register.rs1— Source register.rs2— Source register.rm— Rounding mode.
Sourcepub fn fclass_d<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FclassDEmitter<T0, T1>,
pub fn fclass_d<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FclassDEmitter<T0, T1>,
Sourcepub fn fclass_h<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FclassHEmitter<T0, T1>,
pub fn fclass_h<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FclassHEmitter<T0, T1>,
Sourcepub fn fclass_q<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FclassQEmitter<T0, T1>,
pub fn fclass_q<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FclassQEmitter<T0, T1>,
Sourcepub fn fclass_s<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FclassSEmitter<T0, T1>,
pub fn fclass_s<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FclassSEmitter<T0, T1>,
Single-precision floating-point classify.
The fclass.s instruction examines the value in floating-point register
fs1 and writes to integer register rd a 10-bit mask that indicates
the class of the floating-point number.
The format of the mask is described in the table below.
The corresponding bit in rd will be set if the property is true and
clear otherwise.
All other bits in rd are cleared.
Note that exactly one bit in rd will be set.
fclass.s does not set the floating-point exception flags.
.Format of result of fclass instruction.
[%autowidth,float=“center”,align=“center”,cols=“^,<”,options=“header”,]
|===
|rd bit |Meaning
|0 |rs1 is latexmath:[$-\infty$].
|1 |rs1 is a negative normal number.
|2 |rs1 is a negative subnormal number.
|3 |rs1 is latexmath:[$-0$].
|4 |rs1 is latexmath:[$+0$].
|5 |rs1 is a positive subnormal number.
|6 |rs1 is a positive normal number.
|7 |rs1 is latexmath:[$+\infty$].
|8 |rs1 is a signaling NaN.
|9 |rs1 is a quiet NaN.
|===
§Forms
Assembly: fclass.s xd, fs1
Rust: fclass_s(rd, rs1)
§Arguments
rd— Destination register.rs1— Source register.
Sourcepub fn fcvt_bf16_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtBf16SEmitter<T0, T1, T2>,
pub fn fcvt_bf16_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtBf16SEmitter<T0, T1, T2>,
Sourcepub fn fcvt_d_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtDHEmitter<T0, T1, T2>,
pub fn fcvt_d_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtDHEmitter<T0, T1, T2>,
Sourcepub fn fcvt_d_l<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtDLEmitter<T0, T1, T2>,
pub fn fcvt_d_l<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtDLEmitter<T0, T1, T2>,
Sourcepub fn fcvt_d_lu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtDLuEmitter<T0, T1, T2>,
pub fn fcvt_d_lu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtDLuEmitter<T0, T1, T2>,
Sourcepub fn fcvt_d_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtDQEmitter<T0, T1, T2>,
pub fn fcvt_d_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtDQEmitter<T0, T1, T2>,
Sourcepub fn fcvt_d_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtDSEmitter<T0, T1, T2>,
pub fn fcvt_d_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtDSEmitter<T0, T1, T2>,
Sourcepub fn fcvt_d_w<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtDWEmitter<T0, T1, T2>,
pub fn fcvt_d_w<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtDWEmitter<T0, T1, T2>,
Sourcepub fn fcvt_d_wu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtDWuEmitter<T0, T1, T2>,
pub fn fcvt_d_wu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtDWuEmitter<T0, T1, T2>,
Sourcepub fn fcvt_h_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtHDEmitter<T0, T1, T2>,
pub fn fcvt_h_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtHDEmitter<T0, T1, T2>,
Sourcepub fn fcvt_h_l<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtHLEmitter<T0, T1, T2>,
pub fn fcvt_h_l<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtHLEmitter<T0, T1, T2>,
Sourcepub fn fcvt_h_lu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtHLuEmitter<T0, T1, T2>,
pub fn fcvt_h_lu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtHLuEmitter<T0, T1, T2>,
Sourcepub fn fcvt_h_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtHQEmitter<T0, T1, T2>,
pub fn fcvt_h_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtHQEmitter<T0, T1, T2>,
Sourcepub fn fcvt_h_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtHSEmitter<T0, T1, T2>,
pub fn fcvt_h_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtHSEmitter<T0, T1, T2>,
Convert half-precision float to a single-precision float
Converts a half-precision number in floating-point register fs1 into a single-precision floating-point number in floating-point register fd.
fcvt.h.s rounds according to the rm field.
All floating-point conversion instructions set the Inexact exception flag if the rounded result differs from the operand value and the Invalid exception flag is not set.
§Forms
Assembly: fcvt.h.s fd, xs1
Rust: fcvt_h_s(rd, rs1, rm)
§Arguments
rd— Destination register.rs1— Source register.rm— Rounding mode.
Sourcepub fn fcvt_h_w<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtHWEmitter<T0, T1, T2>,
pub fn fcvt_h_w<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtHWEmitter<T0, T1, T2>,
Sourcepub fn fcvt_h_wu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtHWuEmitter<T0, T1, T2>,
pub fn fcvt_h_wu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtHWuEmitter<T0, T1, T2>,
Sourcepub fn fcvt_l_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtLDEmitter<T0, T1, T2>,
pub fn fcvt_l_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtLDEmitter<T0, T1, T2>,
Sourcepub fn fcvt_l_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtLHEmitter<T0, T1, T2>,
pub fn fcvt_l_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtLHEmitter<T0, T1, T2>,
Sourcepub fn fcvt_l_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtLQEmitter<T0, T1, T2>,
pub fn fcvt_l_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtLQEmitter<T0, T1, T2>,
Sourcepub fn fcvt_l_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtLSEmitter<T0, T1, T2>,
pub fn fcvt_l_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtLSEmitter<T0, T1, T2>,
Sourcepub fn fcvt_lu_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtLuDEmitter<T0, T1, T2>,
pub fn fcvt_lu_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtLuDEmitter<T0, T1, T2>,
Sourcepub fn fcvt_lu_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtLuHEmitter<T0, T1, T2>,
pub fn fcvt_lu_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtLuHEmitter<T0, T1, T2>,
Sourcepub fn fcvt_lu_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtLuQEmitter<T0, T1, T2>,
pub fn fcvt_lu_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtLuQEmitter<T0, T1, T2>,
Sourcepub fn fcvt_lu_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtLuSEmitter<T0, T1, T2>,
pub fn fcvt_lu_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtLuSEmitter<T0, T1, T2>,
Sourcepub fn fcvt_q_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtQDEmitter<T0, T1, T2>,
pub fn fcvt_q_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtQDEmitter<T0, T1, T2>,
Sourcepub fn fcvt_q_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtQHEmitter<T0, T1, T2>,
pub fn fcvt_q_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtQHEmitter<T0, T1, T2>,
Sourcepub fn fcvt_q_l<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtQLEmitter<T0, T1, T2>,
pub fn fcvt_q_l<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtQLEmitter<T0, T1, T2>,
Sourcepub fn fcvt_q_lu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtQLuEmitter<T0, T1, T2>,
pub fn fcvt_q_lu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtQLuEmitter<T0, T1, T2>,
Sourcepub fn fcvt_q_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtQSEmitter<T0, T1, T2>,
pub fn fcvt_q_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtQSEmitter<T0, T1, T2>,
Sourcepub fn fcvt_q_w<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtQWEmitter<T0, T1, T2>,
pub fn fcvt_q_w<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtQWEmitter<T0, T1, T2>,
Sourcepub fn fcvt_q_wu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtQWuEmitter<T0, T1, T2>,
pub fn fcvt_q_wu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtQWuEmitter<T0, T1, T2>,
Sourcepub fn fcvt_s_bf16<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtSBf16Emitter<T0, T1, T2>,
pub fn fcvt_s_bf16<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtSBf16Emitter<T0, T1, T2>,
Sourcepub fn fcvt_s_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtSDEmitter<T0, T1, T2>,
pub fn fcvt_s_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtSDEmitter<T0, T1, T2>,
Sourcepub fn fcvt_s_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtSHEmitter<T0, T1, T2>,
pub fn fcvt_s_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtSHEmitter<T0, T1, T2>,
Convert single-precision float to a half-precision float
Converts a single-precision number in floating-point register fs1 into a half-precision floating-point number in floating-point register fd.
fcvt.s.h will never round, and so the ‘rm’ field is effectively ignored.
§Forms
Assembly: fcvt.s.h fd, xs1
Rust: fcvt_s_h(rd, rs1, rm)
§Arguments
rd— Destination register.rs1— Source register.rm— Rounding mode.
Sourcepub fn fcvt_s_l<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtSLEmitter<T0, T1, T2>,
pub fn fcvt_s_l<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtSLEmitter<T0, T1, T2>,
Sourcepub fn fcvt_s_lu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtSLuEmitter<T0, T1, T2>,
pub fn fcvt_s_lu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtSLuEmitter<T0, T1, T2>,
Sourcepub fn fcvt_s_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtSQEmitter<T0, T1, T2>,
pub fn fcvt_s_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtSQEmitter<T0, T1, T2>,
Sourcepub fn fcvt_s_w<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtSWEmitter<T0, T1, T2>,
pub fn fcvt_s_w<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtSWEmitter<T0, T1, T2>,
Convert signed 32-bit integer to single-precision float
Converts a 32-bit signed integer in integer register rs1 into a floating-point number in floating-point register fd.
All floating-point to integer and integer to floating-point conversion instructions round
according to the rm field.
A floating-point register can be initialized to floating-point positive zero using
fcvt.s.w rd, x0, which will never set any exception flags.
All floating-point conversion instructions set the Inexact exception flag if the rounded result differs from the operand value and the Invalid exception flag is not set.
§Forms
Assembly: fcvt.s.w fd, xs1
Rust: fcvt_s_w(rd, rs1, rm)
§Arguments
rd— Destination register.rs1— Source register.rm— Rounding mode.
Sourcepub fn fcvt_s_wu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtSWuEmitter<T0, T1, T2>,
pub fn fcvt_s_wu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtSWuEmitter<T0, T1, T2>,
Sourcepub fn fcvt_w_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtWDEmitter<T0, T1, T2>,
pub fn fcvt_w_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtWDEmitter<T0, T1, T2>,
Sourcepub fn fcvt_w_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtWHEmitter<T0, T1, T2>,
pub fn fcvt_w_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtWHEmitter<T0, T1, T2>,
Sourcepub fn fcvt_w_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtWQEmitter<T0, T1, T2>,
pub fn fcvt_w_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtWQEmitter<T0, T1, T2>,
Sourcepub fn fcvt_w_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtWSEmitter<T0, T1, T2>,
pub fn fcvt_w_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtWSEmitter<T0, T1, T2>,
Convert single-precision float to integer word to signed 32-bit integer.
Converts a floating-point number in floating-point register fs1 to a signed 32-bit integer indicates integer register rd.
For XLEN >32, fcvt.w.s sign-extends the 32-bit result to the destination register width.
If the rounded result is not representable as a 32-bit signed integer, it is clipped to the nearest value and the invalid flag is set.
The range of valid inputs and behavior for invalid inputs are:
[separator=“!”] !=== ! ! Value
h! Minimum valid input (after rounding) ! -2^31
h! Maximum valid input (after rounding) ! 2^31 - 1
h! Output for out-of-range negative input ! -2^31
h! Output for -∞ ! -2^31
h! Output for out-of-range positive input ! 2^31 - 1
h! Output for +∞ for NaN ! 2^31 - 1
!===
All floating-point to integer and integer to floating-point conversion instructions round
according to the rm field.
A floating-point register can be initialized to floating-point positive zero using
fcvt.s.w rd, x0, which will never set any exception flags.
All floating-point conversion instructions set the Inexact exception flag if the rounded result differs from the operand value and the Invalid exception flag is not set.
§Forms
Assembly: fcvt.w.s xd, fs1
Rust: fcvt_w_s(rd, rs1, rm)
§Arguments
rd— Destination register.rs1— Source register.rm— Rounding mode.
Sourcepub fn fcvt_wu_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtWuDEmitter<T0, T1, T2>,
pub fn fcvt_wu_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtWuDEmitter<T0, T1, T2>,
Sourcepub fn fcvt_wu_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtWuHEmitter<T0, T1, T2>,
pub fn fcvt_wu_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtWuHEmitter<T0, T1, T2>,
Sourcepub fn fcvt_wu_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtWuQEmitter<T0, T1, T2>,
pub fn fcvt_wu_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtWuQEmitter<T0, T1, T2>,
Sourcepub fn fcvt_wu_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtWuSEmitter<T0, T1, T2>,
pub fn fcvt_wu_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FcvtWuSEmitter<T0, T1, T2>,
Sourcepub fn fcvtmod_w_d<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FcvtmodWDEmitter<T0, T1>,
pub fn fcvtmod_w_d<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FcvtmodWDEmitter<T0, T1>,
Sourcepub fn fdiv_d<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)where
Self: FdivDEmitter<T0, T1, T2, T3>,
pub fn fdiv_d<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)where
Self: FdivDEmitter<T0, T1, T2, T3>,
Sourcepub fn fdiv_h<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)where
Self: FdivHEmitter<T0, T1, T2, T3>,
pub fn fdiv_h<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)where
Self: FdivHEmitter<T0, T1, T2, T3>,
Sourcepub fn fdiv_q<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)where
Self: FdivQEmitter<T0, T1, T2, T3>,
pub fn fdiv_q<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)where
Self: FdivQEmitter<T0, T1, T2, T3>,
Sourcepub fn fdiv_s<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)where
Self: FdivSEmitter<T0, T1, T2, T3>,
pub fn fdiv_s<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)where
Self: FdivSEmitter<T0, T1, T2, T3>,
Sourcepub fn fence<T0, T1, T2, T3, T4>(
&mut self,
fm: T0,
pred: T1,
succ: T2,
rs1: T3,
rd: T4,
)where
Self: FenceEmitter<T0, T1, T2, T3, T4>,
pub fn fence<T0, T1, T2, T3, T4>(
&mut self,
fm: T0,
pred: T1,
succ: T2,
rs1: T3,
rd: T4,
)where
Self: FenceEmitter<T0, T1, T2, T3, T4>,
Memory ordering fence
Orders memory operations.
The fence instruction is used to order device I/O and memory accesses as
viewed by other RISC-V harts and external devices or coprocessors. Any
combination of device input (I), device output (O), memory reads (R),
and memory writes (W) may be ordered with respect to any combination of
the same. Informally, no other RISC-V hart or external device can
observe any operation in the successor set following a fence before
any operation in the predecessor set preceding the fence.
The predecessor and successor fields have the same format to specify operation types:
[%autowidth]
|===
4+| pred 4+| succ
| 27 | 26 |25 | 24 | 23 | 22 | 21| 20 | PI | PO |PR | PW | SI | SO |SR | SW |===
[%autowidth,align=“center”,cols=“^1,^1,<3”,options=“header”]
.Fence mode encoding
|===
|fm field |Mnemonic |Meaning
|0000 |none |Normal Fence
|1000 |TSO |With FENCE RW,RW: exclude write-to-read ordering; otherwise: Reserved for future use.
2+|other |Reserved for future use.
|===
When the mode field fm is 0001 and both the predecessor and successor sets are ‘RW’,
then the instruction acts as a special-case fence.tso. fence.tso orders all load operations
in its predecessor set before all memory operations in its successor set, and all store operations
in its predecessor set before all store operations in its successor set. This leaves non-AMO store
operations in the ’fence.tso’s predecessor set unordered with non-AMO loads in its successor set.
When mode field fm is not 0001, or when mode field fm is 0001 but the pred and
succ fields are not both ‘RW’ (0x3), then the fence acts as a baseline fence (e.g., fm is
effectively 0000). This is unaffected by the FIOM bits, described below (implicit promotion does
not change how fence.tso is decoded).
The rs1 and rd fields are unused and ignored.
In modes other than M-mode, fence is further affected by menvcfg.FIOM,
senvcfg.FIOM<% if ext?(:H) %>, and/or henvcfg.FIOM<% end %>
as follows:
.Effective PR/PW/SR/SW in (H)S-mode
[%autowidth,cols=“,,,”,options=“header”,separator=“!”]
!===
! [.rotate]#menvcfg.FIOM# ! pred.PI +
pred.PO +
succ.SI +
succ.SO
! -> +
-> +
-> +
->
! effective PR +
effective PW +
effective SR +
effective SW
! 0 ! - ! ! from encoding ! 1 ! 0 ! ! from encoding ! 1 ! 1 ! ! 1 !===
.Effective PR/PW/SR/SW in U-mode
[%autowidth,options=“header”,separator=“!”,cols=“,,,,”]
!===
! [.rotate]#menvcfg.FIOM# ! [.rotate]#senvcfg.FIOM# ! pred.PI +
pred.PO +
succ.SI +
succ.SO
! -> +
-> +
-> +
->
! effective PR +
effective PW +
effective SR +
effective SW
! 0 ! 0 ! - ! ! from encoding ! 0 ! 1 ! 0 ! ! from encoding ! 0 ! 1 ! 1 ! ! 1 ! 1 ! - ! 0 ! ! from encoding ! 1 ! - ! 1 ! ! 1 !===
<%- if ext?(:H) -%>
.Effective PR/PW/SR/SW in VS-mode and VU-mode
[%autowidth,options=“header”,separator=“!”,cols=“,,,,”]
!===
! [.rotate]#menvcfg.FIOM# ! [.rotate]#henvcfg.FIOM# ! pred.PI +
pred.PO +
succ.SI +
succ.SO
! -> +
-> +
-> +
->
! effective PR +
effective PW +
effective SR +
effective SW
! 0 ! 0 ! - ! ! from encoding ! 0 ! 1 ! 0 ! ! from encoding ! 0 ! 1 ! 1 ! ! 1 ! 1 ! - ! 0 ! ! from encoding ! 1 ! - ! 1 ! ! 1 !=== <%- end -%>
§Forms
Assembly: fence "TODO"
Rust: fence(fm, pred, succ, rs1, rd)
§Arguments
fm— Immediate encoding value.pred— Immediate encoding value.succ— Immediate encoding value.rs1— Source register.rd— Destination/source register.
Sourcepub fn fence_i(&mut self)where
Self: FenceIEmitter,
pub fn fence_i(&mut self)where
Self: FenceIEmitter,
Instruction fence
The FENCE.I instruction is used to synchronize the instruction and data streams. RISC-V does not guarantee that stores to instruction memory will be made visible to instruction fetches on a RISC-V hart until that hart executes a FENCE.I instruction. A FENCE.I instruction ensures that a subsequent instruction fetch on a RISC-V hart will see any previous data stores already visible to the same RISC-V hart. FENCE.I does not ensure that other RISC-V harts’ instruction fetches will observe the local hart’s stores in a multiprocessor system. To make a store to instruction memory visible to all RISC-V harts, the writing hart also has to execute a data FENCE before requesting that all remote RISC-V harts execute a FENCE.I.
The unused fields in the FENCE.I instruction, imm[11:0], rs1, and rd, are reserved for finer-grain fences in future extensions. For forward compatibility, base implementations shall ignore these fields, and standard software shall zero these fields. (((FENCE.I, finer-grained))) (((FENCE.I, forward compatibility)))
§[NOTE]
§Because FENCE.I only orders stores with a hart’s own instruction fetches, application code should only rely upon FENCE.I if the application thread will not be migrated to a different hart. The EEI can provide mechanisms for efficient multiprocessor instruction-stream synchronization.
§Forms
Assembly: fence.i ""
Rust: fence_i()
§Arguments
Sourcepub fn fence_tso(&mut self)where
Self: FenceTsoEmitter,
pub fn fence_tso(&mut self)where
Self: FenceTsoEmitter,
Sourcepub fn feq_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FeqDEmitter<T0, T1, T2>,
pub fn feq_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FeqDEmitter<T0, T1, T2>,
Sourcepub fn feq_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FeqHEmitter<T0, T1, T2>,
pub fn feq_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FeqHEmitter<T0, T1, T2>,
Sourcepub fn feq_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FeqQEmitter<T0, T1, T2>,
pub fn feq_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FeqQEmitter<T0, T1, T2>,
Sourcepub fn feq_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FeqSEmitter<T0, T1, T2>,
pub fn feq_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FeqSEmitter<T0, T1, T2>,
Single-precision floating-point equal
Writes 1 to rd if fs1 and fs2 are equal, and 0 otherwise.
If either operand is NaN, the result is 0 (not equal). If either operand is a signaling NaN, the invalid flag is set.
Positive zero is considered equal to negative zero.
§Forms
Assembly: feq.s xd, fs1, fs2
Rust: feq_s(rd, rs1, rs2)
§Arguments
rd— Destination register.rs1— Source register.rs2— Source register.
Sourcepub fn fld<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: FldEmitter<T0, T1, T2>,
pub fn fld<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: FldEmitter<T0, T1, T2>,
Sourcepub fn fle_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FleDEmitter<T0, T1, T2>,
pub fn fle_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FleDEmitter<T0, T1, T2>,
Sourcepub fn fle_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FleHEmitter<T0, T1, T2>,
pub fn fle_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FleHEmitter<T0, T1, T2>,
Sourcepub fn fle_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FleQEmitter<T0, T1, T2>,
pub fn fle_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FleQEmitter<T0, T1, T2>,
Sourcepub fn fle_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FleSEmitter<T0, T1, T2>,
pub fn fle_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FleSEmitter<T0, T1, T2>,
Single-precision floating-point less than or equal
Writes 1 to rd if fs1 is less than or equal to fs2, and 0 otherwise.
If either operand is NaN, the result is 0 (not equal). If either operand is a NaN (signaling or quiet), the invalid flag is set.
Positive zero and negative zero are considered equal.
§Forms
Assembly: fle.s xd, fs1, fs2
Rust: fle_s(rd, rs1, rs2)
§Arguments
rd— Destination register.rs1— Source register.rs2— Source register.
Sourcepub fn fleq_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FleqDEmitter<T0, T1, T2>,
pub fn fleq_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FleqDEmitter<T0, T1, T2>,
Sourcepub fn fleq_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FleqHEmitter<T0, T1, T2>,
pub fn fleq_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FleqHEmitter<T0, T1, T2>,
Sourcepub fn fleq_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FleqQEmitter<T0, T1, T2>,
pub fn fleq_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FleqQEmitter<T0, T1, T2>,
Sourcepub fn fleq_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FleqSEmitter<T0, T1, T2>,
pub fn fleq_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FleqSEmitter<T0, T1, T2>,
Sourcepub fn flh<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: FlhEmitter<T0, T1, T2>,
pub fn flh<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: FlhEmitter<T0, T1, T2>,
Half-precision floating-point load
The flh instruction loads a single-precision floating-point value from memory at address rs1 + imm into floating-point register rd.
flh does not modify the bits being transferred; in particular, the payloads of non-canonical NaNs are preserved.
flh is only guaranteed to execute atomically if the effective address is naturally aligned.
§Forms
Assembly: flh fd, imm(xs1)
Rust: flh(rd, rs1, imm)
§Arguments
rd— Destination register.rs1— Memory base register.imm— Immediate encoding value.
Sourcepub fn fli_d<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FliDEmitter<T0, T1>,
pub fn fli_d<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FliDEmitter<T0, T1>,
Sourcepub fn fli_h<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FliHEmitter<T0, T1>,
pub fn fli_h<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FliHEmitter<T0, T1>,
Sourcepub fn fli_q<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FliQEmitter<T0, T1>,
pub fn fli_q<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FliQEmitter<T0, T1>,
Sourcepub fn fli_s<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FliSEmitter<T0, T1>,
pub fn fli_s<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FliSEmitter<T0, T1>,
Sourcepub fn flq<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: FlqEmitter<T0, T1, T2>,
pub fn flq<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: FlqEmitter<T0, T1, T2>,
Sourcepub fn flt_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FltDEmitter<T0, T1, T2>,
pub fn flt_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FltDEmitter<T0, T1, T2>,
Sourcepub fn flt_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FltHEmitter<T0, T1, T2>,
pub fn flt_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FltHEmitter<T0, T1, T2>,
Sourcepub fn flt_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FltQEmitter<T0, T1, T2>,
pub fn flt_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FltQEmitter<T0, T1, T2>,
Sourcepub fn flt_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FltSEmitter<T0, T1, T2>,
pub fn flt_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FltSEmitter<T0, T1, T2>,
Single-precision floating-point less than
Writes 1 to rd if fs1 is less than fs2, and 0 otherwise.
If either operand is NaN, the result is 0 (not equal). If either operand is a NaN (signaling or quiet), the invalid flag is set.
§Forms
Assembly: flt.s xd, fs1, fs2
Rust: flt_s(rd, rs1, rs2)
§Arguments
rd— Destination register.rs1— Source register.rs2— Source register.
Sourcepub fn fltq_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FltqDEmitter<T0, T1, T2>,
pub fn fltq_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FltqDEmitter<T0, T1, T2>,
Sourcepub fn fltq_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FltqHEmitter<T0, T1, T2>,
pub fn fltq_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FltqHEmitter<T0, T1, T2>,
Sourcepub fn fltq_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FltqQEmitter<T0, T1, T2>,
pub fn fltq_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FltqQEmitter<T0, T1, T2>,
Sourcepub fn fltq_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FltqSEmitter<T0, T1, T2>,
pub fn fltq_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FltqSEmitter<T0, T1, T2>,
Sourcepub fn flw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: FlwEmitter<T0, T1, T2>,
pub fn flw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: FlwEmitter<T0, T1, T2>,
Single-precision floating-point load
The flw instruction loads a single-precision floating-point value from memory at address rs1 + imm into floating-point register fd.
flw does not modify the bits being transferred; in particular, the payloads of non-canonical NaNs are preserved.
§Forms
Assembly: flw fd, xs1, imm
Rust: flw(rd, rs1, imm)
§Arguments
rd— Destination register.rs1— Memory base register.imm— Immediate encoding value.
Sourcepub fn fmadd_d<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
rs3: T3,
rm: T4,
)where
Self: FmaddDEmitter<T0, T1, T2, T3, T4>,
pub fn fmadd_d<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
rs3: T3,
rm: T4,
)where
Self: FmaddDEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn fmadd_h<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
rs3: T3,
rm: T4,
)where
Self: FmaddHEmitter<T0, T1, T2, T3, T4>,
pub fn fmadd_h<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
rs3: T3,
rm: T4,
)where
Self: FmaddHEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn fmadd_q<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
rs3: T3,
rm: T4,
)where
Self: FmaddQEmitter<T0, T1, T2, T3, T4>,
pub fn fmadd_q<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
rs3: T3,
rm: T4,
)where
Self: FmaddQEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn fmadd_s<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
rs3: T3,
rm: T4,
)where
Self: FmaddSEmitter<T0, T1, T2, T3, T4>,
pub fn fmadd_s<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
rs3: T3,
rm: T4,
)where
Self: FmaddSEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn fmax_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FmaxDEmitter<T0, T1, T2>,
pub fn fmax_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FmaxDEmitter<T0, T1, T2>,
Sourcepub fn fmax_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FmaxHEmitter<T0, T1, T2>,
pub fn fmax_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FmaxHEmitter<T0, T1, T2>,
Sourcepub fn fmax_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FmaxQEmitter<T0, T1, T2>,
pub fn fmax_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FmaxQEmitter<T0, T1, T2>,
Sourcepub fn fmax_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FmaxSEmitter<T0, T1, T2>,
pub fn fmax_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FmaxSEmitter<T0, T1, T2>,
Sourcepub fn fmaxm_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FmaxmDEmitter<T0, T1, T2>,
pub fn fmaxm_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FmaxmDEmitter<T0, T1, T2>,
Sourcepub fn fmaxm_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FmaxmHEmitter<T0, T1, T2>,
pub fn fmaxm_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FmaxmHEmitter<T0, T1, T2>,
Sourcepub fn fmaxm_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FmaxmQEmitter<T0, T1, T2>,
pub fn fmaxm_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FmaxmQEmitter<T0, T1, T2>,
Sourcepub fn fmaxm_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FmaxmSEmitter<T0, T1, T2>,
pub fn fmaxm_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FmaxmSEmitter<T0, T1, T2>,
Sourcepub fn fmin_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FminDEmitter<T0, T1, T2>,
pub fn fmin_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FminDEmitter<T0, T1, T2>,
Sourcepub fn fmin_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FminHEmitter<T0, T1, T2>,
pub fn fmin_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FminHEmitter<T0, T1, T2>,
Sourcepub fn fmin_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FminQEmitter<T0, T1, T2>,
pub fn fmin_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FminQEmitter<T0, T1, T2>,
Sourcepub fn fmin_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FminSEmitter<T0, T1, T2>,
pub fn fmin_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FminSEmitter<T0, T1, T2>,
Sourcepub fn fminm_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FminmDEmitter<T0, T1, T2>,
pub fn fminm_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FminmDEmitter<T0, T1, T2>,
Sourcepub fn fminm_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FminmHEmitter<T0, T1, T2>,
pub fn fminm_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FminmHEmitter<T0, T1, T2>,
Sourcepub fn fminm_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FminmQEmitter<T0, T1, T2>,
pub fn fminm_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FminmQEmitter<T0, T1, T2>,
Sourcepub fn fminm_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FminmSEmitter<T0, T1, T2>,
pub fn fminm_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FminmSEmitter<T0, T1, T2>,
Sourcepub fn fmsub_d<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
rs3: T3,
rm: T4,
)where
Self: FmsubDEmitter<T0, T1, T2, T3, T4>,
pub fn fmsub_d<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
rs3: T3,
rm: T4,
)where
Self: FmsubDEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn fmsub_h<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
rs3: T3,
rm: T4,
)where
Self: FmsubHEmitter<T0, T1, T2, T3, T4>,
pub fn fmsub_h<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
rs3: T3,
rm: T4,
)where
Self: FmsubHEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn fmsub_q<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
rs3: T3,
rm: T4,
)where
Self: FmsubQEmitter<T0, T1, T2, T3, T4>,
pub fn fmsub_q<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
rs3: T3,
rm: T4,
)where
Self: FmsubQEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn fmsub_s<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
rs3: T3,
rm: T4,
)where
Self: FmsubSEmitter<T0, T1, T2, T3, T4>,
pub fn fmsub_s<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
rs3: T3,
rm: T4,
)where
Self: FmsubSEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn fmul_d<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)where
Self: FmulDEmitter<T0, T1, T2, T3>,
pub fn fmul_d<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)where
Self: FmulDEmitter<T0, T1, T2, T3>,
Sourcepub fn fmul_h<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)where
Self: FmulHEmitter<T0, T1, T2, T3>,
pub fn fmul_h<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)where
Self: FmulHEmitter<T0, T1, T2, T3>,
Sourcepub fn fmul_q<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)where
Self: FmulQEmitter<T0, T1, T2, T3>,
pub fn fmul_q<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)where
Self: FmulQEmitter<T0, T1, T2, T3>,
Sourcepub fn fmul_s<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)where
Self: FmulSEmitter<T0, T1, T2, T3>,
pub fn fmul_s<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)where
Self: FmulSEmitter<T0, T1, T2, T3>,
Sourcepub fn fmv_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FmvDEmitter<T0, T1, T2>,
pub fn fmv_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FmvDEmitter<T0, T1, T2>,
Sourcepub fn fmv_d_x<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FmvDXEmitter<T0, T1>,
pub fn fmv_d_x<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FmvDXEmitter<T0, T1>,
Sourcepub fn fmv_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FmvHEmitter<T0, T1, T2>,
pub fn fmv_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FmvHEmitter<T0, T1, T2>,
Sourcepub fn fmv_h_x<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FmvHXEmitter<T0, T1>,
pub fn fmv_h_x<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FmvHXEmitter<T0, T1>,
Half-precision floating-point move from integer
Moves the half-precision value encoded in IEEE 754-2008 standard encoding
from the lower 16 bits of integer register rs1 to the floating-point
register fd. The bits are not modified in the transfer, and in particular,
the payloads of non-canonical NaNs are preserved.
§Forms
Assembly: fmv.h.x fd, xs1
Rust: fmv_h_x(rd, rs1)
§Arguments
rd— Destination register.rs1— Source register.
Sourcepub fn fmv_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FmvQEmitter<T0, T1, T2>,
pub fn fmv_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FmvQEmitter<T0, T1, T2>,
Sourcepub fn fmv_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FmvSEmitter<T0, T1, T2>,
pub fn fmv_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FmvSEmitter<T0, T1, T2>,
Sourcepub fn fmv_s_x<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FmvSXEmitter<T0, T1>,
pub fn fmv_s_x<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FmvSXEmitter<T0, T1>,
Sourcepub fn fmv_w_x<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FmvWXEmitter<T0, T1>,
pub fn fmv_w_x<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FmvWXEmitter<T0, T1>,
Single-precision floating-point move from integer
Moves the single-precision value encoded in IEEE 754-2008 standard encoding
from the lower 32 bits of integer register rs1 to the floating-point
register fd. The bits are not modified in the transfer, and in particular,
the payloads of non-canonical NaNs are preserved.
§Forms
Assembly: fmv.w.x fd, xs1
Rust: fmv_w_x(rd, rs1)
§Arguments
rd— Destination register.rs1— Source register.
Sourcepub fn fmv_x_d<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FmvXDEmitter<T0, T1>,
pub fn fmv_x_d<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FmvXDEmitter<T0, T1>,
Sourcepub fn fmv_x_h<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FmvXHEmitter<T0, T1>,
pub fn fmv_x_h<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FmvXHEmitter<T0, T1>,
Move half-precision value from floating-point to integer register
Moves the half-precision value in floating-point register rs1 represented in IEEE 754-2008 encoding to the lower 16 bits of integer register rd.
The bits are not modified in the transfer, and in particular, the payloads of non-canonical NaNs are preserved.
The highest XLEN-16 bits of the destination register are filled with copies of the floating-point number’s sign bit.
§Forms
Assembly: fmv.x.h rd, fs1
Rust: fmv_x_h(rd, rs1)
§Arguments
rd— Destination register.rs1— Source register.
Sourcepub fn fmv_x_s<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FmvXSEmitter<T0, T1>,
pub fn fmv_x_s<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FmvXSEmitter<T0, T1>,
Sourcepub fn fmv_x_w<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FmvXWEmitter<T0, T1>,
pub fn fmv_x_w<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FmvXWEmitter<T0, T1>,
Move single-precision value from floating-point to integer register
Moves the single-precision value in floating-point register rs1 represented in IEEE 754-2008 encoding to the lower 32 bits of integer register rd. The bits are not modified in the transfer, and in particular, the payloads of non-canonical NaNs are preserved. For RV64, the higher 32 bits of the destination register are filled with copies of the floating-point number’s sign bit.
§Forms
Assembly: fmv.x.w xd, fs1
Rust: fmv_x_w(rd, rs1)
§Arguments
rd— Destination register.rs1— Source register.
Sourcepub fn fmvh_x_d<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FmvhXDEmitter<T0, T1>,
pub fn fmvh_x_d<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FmvhXDEmitter<T0, T1>,
Sourcepub fn fmvh_x_q<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FmvhXQEmitter<T0, T1>,
pub fn fmvh_x_q<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FmvhXQEmitter<T0, T1>,
Sourcepub fn fmvp_d_x<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FmvpDXEmitter<T0, T1, T2>,
pub fn fmvp_d_x<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FmvpDXEmitter<T0, T1, T2>,
Sourcepub fn fmvp_q_x<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FmvpQXEmitter<T0, T1, T2>,
pub fn fmvp_q_x<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FmvpQXEmitter<T0, T1, T2>,
Sourcepub fn fneg_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FnegDEmitter<T0, T1, T2>,
pub fn fneg_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FnegDEmitter<T0, T1, T2>,
Sourcepub fn fneg_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FnegHEmitter<T0, T1, T2>,
pub fn fneg_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FnegHEmitter<T0, T1, T2>,
Sourcepub fn fneg_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FnegQEmitter<T0, T1, T2>,
pub fn fneg_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FnegQEmitter<T0, T1, T2>,
Sourcepub fn fneg_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FnegSEmitter<T0, T1, T2>,
pub fn fneg_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FnegSEmitter<T0, T1, T2>,
Sourcepub fn fnmadd_d<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
rs3: T3,
rm: T4,
)where
Self: FnmaddDEmitter<T0, T1, T2, T3, T4>,
pub fn fnmadd_d<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
rs3: T3,
rm: T4,
)where
Self: FnmaddDEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn fnmadd_h<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
rs3: T3,
rm: T4,
)where
Self: FnmaddHEmitter<T0, T1, T2, T3, T4>,
pub fn fnmadd_h<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
rs3: T3,
rm: T4,
)where
Self: FnmaddHEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn fnmadd_q<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
rs3: T3,
rm: T4,
)where
Self: FnmaddQEmitter<T0, T1, T2, T3, T4>,
pub fn fnmadd_q<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
rs3: T3,
rm: T4,
)where
Self: FnmaddQEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn fnmadd_s<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
rs3: T3,
rm: T4,
)where
Self: FnmaddSEmitter<T0, T1, T2, T3, T4>,
pub fn fnmadd_s<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
rs3: T3,
rm: T4,
)where
Self: FnmaddSEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn fnmsub_d<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
rs3: T3,
rm: T4,
)where
Self: FnmsubDEmitter<T0, T1, T2, T3, T4>,
pub fn fnmsub_d<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
rs3: T3,
rm: T4,
)where
Self: FnmsubDEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn fnmsub_h<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
rs3: T3,
rm: T4,
)where
Self: FnmsubHEmitter<T0, T1, T2, T3, T4>,
pub fn fnmsub_h<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
rs3: T3,
rm: T4,
)where
Self: FnmsubHEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn fnmsub_q<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
rs3: T3,
rm: T4,
)where
Self: FnmsubQEmitter<T0, T1, T2, T3, T4>,
pub fn fnmsub_q<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
rs3: T3,
rm: T4,
)where
Self: FnmsubQEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn fnmsub_s<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
rs3: T3,
rm: T4,
)where
Self: FnmsubSEmitter<T0, T1, T2, T3, T4>,
pub fn fnmsub_s<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
rs3: T3,
rm: T4,
)where
Self: FnmsubSEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn frcsr<T0>(&mut self, rd: T0)where
Self: FrcsrEmitter<T0>,
pub fn frcsr<T0>(&mut self, rd: T0)where
Self: FrcsrEmitter<T0>,
Sourcepub fn frflags<T0>(&mut self, rd: T0)where
Self: FrflagsEmitter<T0>,
pub fn frflags<T0>(&mut self, rd: T0)where
Self: FrflagsEmitter<T0>,
Sourcepub fn fround_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FroundDEmitter<T0, T1, T2>,
pub fn fround_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FroundDEmitter<T0, T1, T2>,
Sourcepub fn fround_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FroundHEmitter<T0, T1, T2>,
pub fn fround_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FroundHEmitter<T0, T1, T2>,
Sourcepub fn fround_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FroundQEmitter<T0, T1, T2>,
pub fn fround_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FroundQEmitter<T0, T1, T2>,
Sourcepub fn fround_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FroundSEmitter<T0, T1, T2>,
pub fn fround_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FroundSEmitter<T0, T1, T2>,
Sourcepub fn froundnx_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FroundnxDEmitter<T0, T1, T2>,
pub fn froundnx_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FroundnxDEmitter<T0, T1, T2>,
Sourcepub fn froundnx_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FroundnxHEmitter<T0, T1, T2>,
pub fn froundnx_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FroundnxHEmitter<T0, T1, T2>,
Sourcepub fn froundnx_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FroundnxQEmitter<T0, T1, T2>,
pub fn froundnx_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FroundnxQEmitter<T0, T1, T2>,
Sourcepub fn froundnx_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FroundnxSEmitter<T0, T1, T2>,
pub fn froundnx_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FroundnxSEmitter<T0, T1, T2>,
Sourcepub fn frrm<T0>(&mut self, rd: T0)where
Self: FrrmEmitter<T0>,
pub fn frrm<T0>(&mut self, rd: T0)where
Self: FrrmEmitter<T0>,
Sourcepub fn fscsr<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FscsrEmitter<T0, T1>,
pub fn fscsr<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FscsrEmitter<T0, T1>,
Sourcepub fn fsd<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: FsdEmitter<T0, T1, T2>,
pub fn fsd<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: FsdEmitter<T0, T1, T2>,
Sourcepub fn fsflags<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FsflagsEmitter<T0, T1>,
pub fn fsflags<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FsflagsEmitter<T0, T1>,
Sourcepub fn fsflagsi<T0, T1>(&mut self, rd: T0, zimm5: T1)where
Self: FsflagsiEmitter<T0, T1>,
pub fn fsflagsi<T0, T1>(&mut self, rd: T0, zimm5: T1)where
Self: FsflagsiEmitter<T0, T1>,
Sourcepub fn fsgnj_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FsgnjDEmitter<T0, T1, T2>,
pub fn fsgnj_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FsgnjDEmitter<T0, T1, T2>,
Sourcepub fn fsgnj_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FsgnjHEmitter<T0, T1, T2>,
pub fn fsgnj_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FsgnjHEmitter<T0, T1, T2>,
Sourcepub fn fsgnj_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FsgnjQEmitter<T0, T1, T2>,
pub fn fsgnj_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FsgnjQEmitter<T0, T1, T2>,
Sourcepub fn fsgnj_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FsgnjSEmitter<T0, T1, T2>,
pub fn fsgnj_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FsgnjSEmitter<T0, T1, T2>,
Single-precision sign inject
Writes fd with sign bit of fs2 and the exponent and mantissa of fs1.
Sign-injection instructions do not set floating-point exception flags, nor do they canonicalize NaNs.
§Forms
Assembly: fsgnj.s fd, fs1, fs2
Rust: fsgnj_s(rd, rs1, rs2)
§Arguments
rd— Destination register.rs1— Source register.rs2— Source register.
Sourcepub fn fsgnjn_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FsgnjnDEmitter<T0, T1, T2>,
pub fn fsgnjn_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FsgnjnDEmitter<T0, T1, T2>,
Sourcepub fn fsgnjn_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FsgnjnHEmitter<T0, T1, T2>,
pub fn fsgnjn_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FsgnjnHEmitter<T0, T1, T2>,
Sourcepub fn fsgnjn_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FsgnjnQEmitter<T0, T1, T2>,
pub fn fsgnjn_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FsgnjnQEmitter<T0, T1, T2>,
Sourcepub fn fsgnjn_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FsgnjnSEmitter<T0, T1, T2>,
pub fn fsgnjn_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FsgnjnSEmitter<T0, T1, T2>,
Single-precision sign inject negate
Writes fd with the opposite of the sign bit of fs2 and the exponent and mantissa of fs1.
Sign-injection instructions do not set floating-point exception flags, nor do they canonicalize NaNs.
§Forms
Assembly: fsgnjn.s fd, fs1, fs2
Rust: fsgnjn_s(rd, rs1, rs2)
§Arguments
rd— Destination register.rs1— Source register.rs2— Source register.
Sourcepub fn fsgnjx_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FsgnjxDEmitter<T0, T1, T2>,
pub fn fsgnjx_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FsgnjxDEmitter<T0, T1, T2>,
Sourcepub fn fsgnjx_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FsgnjxHEmitter<T0, T1, T2>,
pub fn fsgnjx_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FsgnjxHEmitter<T0, T1, T2>,
Sourcepub fn fsgnjx_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FsgnjxQEmitter<T0, T1, T2>,
pub fn fsgnjx_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FsgnjxQEmitter<T0, T1, T2>,
Sourcepub fn fsgnjx_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FsgnjxSEmitter<T0, T1, T2>,
pub fn fsgnjx_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: FsgnjxSEmitter<T0, T1, T2>,
Single-precision sign inject exclusive or
Writes fd with the xor of the sign bits of fs2 and fs1 and the exponent and mantissa of fs1.
Sign-injection instructions do not set floating-point exception flags, nor do they canonicalize NaNs.
§Forms
Assembly: fsgnjx.s fd, fs1, fs2
Rust: fsgnjx_s(rd, rs1, rs2)
§Arguments
rd— Destination register.rs1— Source register.rs2— Source register.
Sourcepub fn fsh<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: FshEmitter<T0, T1, T2>,
pub fn fsh<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: FshEmitter<T0, T1, T2>,
Half-precision floating-point store
The fsh instruction stores a half-precision floating-point value
from register rd to memory at address rs1 + imm.
fsh does not modify the bits being transferred; in particular, the payloads of non-canonical NaNs are preserved.
fsh ignores all but the lower 16 bits in rs2.
fsh is only guaranteed to execute atomically if the effective address is naturally aligned.
§Forms
Assembly: fsh fs2, imm(xs1)
Rust: fsh(rs1, rs2, imm)
§Arguments
rs1— Memory base register.rs2— Source register.imm— Immediate encoding value.
Sourcepub fn fsq<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: FsqEmitter<T0, T1, T2>,
pub fn fsq<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: FsqEmitter<T0, T1, T2>,
Sourcepub fn fsqrt_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FsqrtDEmitter<T0, T1, T2>,
pub fn fsqrt_d<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FsqrtDEmitter<T0, T1, T2>,
Sourcepub fn fsqrt_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FsqrtHEmitter<T0, T1, T2>,
pub fn fsqrt_h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FsqrtHEmitter<T0, T1, T2>,
Sourcepub fn fsqrt_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FsqrtQEmitter<T0, T1, T2>,
pub fn fsqrt_q<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FsqrtQEmitter<T0, T1, T2>,
Sourcepub fn fsqrt_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FsqrtSEmitter<T0, T1, T2>,
pub fn fsqrt_s<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rm: T2)where
Self: FsqrtSEmitter<T0, T1, T2>,
Sourcepub fn fsrm<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FsrmEmitter<T0, T1>,
pub fn fsrm<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: FsrmEmitter<T0, T1>,
Sourcepub fn fsrmi<T0, T1>(&mut self, rd: T0, zimm5: T1)where
Self: FsrmiEmitter<T0, T1>,
pub fn fsrmi<T0, T1>(&mut self, rd: T0, zimm5: T1)where
Self: FsrmiEmitter<T0, T1>,
Sourcepub fn fsub_d<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)where
Self: FsubDEmitter<T0, T1, T2, T3>,
pub fn fsub_d<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)where
Self: FsubDEmitter<T0, T1, T2, T3>,
Sourcepub fn fsub_h<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)where
Self: FsubHEmitter<T0, T1, T2, T3>,
pub fn fsub_h<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)where
Self: FsubHEmitter<T0, T1, T2, T3>,
Sourcepub fn fsub_q<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)where
Self: FsubQEmitter<T0, T1, T2, T3>,
pub fn fsub_q<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)where
Self: FsubQEmitter<T0, T1, T2, T3>,
Sourcepub fn fsub_s<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)where
Self: FsubSEmitter<T0, T1, T2, T3>,
pub fn fsub_s<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, rm: T3)where
Self: FsubSEmitter<T0, T1, T2, T3>,
Single-precision floating-point subtraction
Do the single-precision floating-point subtraction of fs2 from fs1 and store the result in fd. rm is the dynamic Rounding Mode.
§Forms
Assembly: fsub.s fd, fs1, fs2, rm
Rust: fsub_s(rd, rs1, rs2, rm)
§Arguments
rd— Destination register.rs1— Source register.rs2— Source register.rm— Rounding mode.
Sourcepub fn fsw<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: FswEmitter<T0, T1, T2>,
pub fn fsw<T0, T1, T2>(&mut self, rs1: T0, rs2: T1, imm: T2)where
Self: FswEmitter<T0, T1, T2>,
Single-precision floating-point store
The fsw instruction stores a single-precision floating-point value in fs2 to memory at address rs1 + imm.
fsw does not modify the bits being transferred; in particular, the payloads of non-canonical NaNs are preserved.
§Forms
Assembly: fsw fs2, xs1, imm
Rust: fsw(rs1, rs2, imm)
§Arguments
rs1— Memory base register.rs2— Source register.imm— Immediate encoding value.
Sourcepub fn hfence_gvma<T0, T1>(&mut self, rs1: T0, rs2: T1)where
Self: HfenceGvmaEmitter<T0, T1>,
pub fn hfence_gvma<T0, T1>(&mut self, rs1: T0, rs2: T1)where
Self: HfenceGvmaEmitter<T0, T1>,
Sourcepub fn hfence_vvma<T0, T1>(&mut self, rs1: T0, rs2: T1)where
Self: HfenceVvmaEmitter<T0, T1>,
pub fn hfence_vvma<T0, T1>(&mut self, rs1: T0, rs2: T1)where
Self: HfenceVvmaEmitter<T0, T1>,
Sourcepub fn hinval_gvma<T0, T1>(&mut self, rs1: T0, rs2: T1)where
Self: HinvalGvmaEmitter<T0, T1>,
pub fn hinval_gvma<T0, T1>(&mut self, rs1: T0, rs2: T1)where
Self: HinvalGvmaEmitter<T0, T1>,
Invalidate cached address translations
hinval.gvma has the same semantics as sinval.vma except that it combines with
sfence.w.inval and sfence.inval.ir to replace hfence.gvma and uses VMID instead of ASID.
§Forms
Assembly: hinval.gvma xs1, xs2
Rust: hinval_gvma(rs1, rs2)
§Arguments
rs1— Source register.rs2— Source register.
Sourcepub fn hinval_vvma<T0, T1>(&mut self, rs1: T0, rs2: T1)where
Self: HinvalVvmaEmitter<T0, T1>,
pub fn hinval_vvma<T0, T1>(&mut self, rs1: T0, rs2: T1)where
Self: HinvalVvmaEmitter<T0, T1>,
Sourcepub fn hlv_b<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: HlvBEmitter<T0, T1>,
pub fn hlv_b<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: HlvBEmitter<T0, T1>,
Sourcepub fn hlv_bu<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: HlvBuEmitter<T0, T1>,
pub fn hlv_bu<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: HlvBuEmitter<T0, T1>,
Sourcepub fn hlv_d<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: HlvDEmitter<T0, T1>,
pub fn hlv_d<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: HlvDEmitter<T0, T1>,
Sourcepub fn hlv_h<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: HlvHEmitter<T0, T1>,
pub fn hlv_h<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: HlvHEmitter<T0, T1>,
Sourcepub fn hlv_hu<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: HlvHuEmitter<T0, T1>,
pub fn hlv_hu<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: HlvHuEmitter<T0, T1>,
Sourcepub fn hlv_w<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: HlvWEmitter<T0, T1>,
pub fn hlv_w<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: HlvWEmitter<T0, T1>,
Sourcepub fn hlv_wu<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: HlvWuEmitter<T0, T1>,
pub fn hlv_wu<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: HlvWuEmitter<T0, T1>,
Sourcepub fn hlvx_hu<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: HlvxHuEmitter<T0, T1>,
pub fn hlvx_hu<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: HlvxHuEmitter<T0, T1>,
Sourcepub fn hlvx_wu<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: HlvxWuEmitter<T0, T1>,
pub fn hlvx_wu<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: HlvxWuEmitter<T0, T1>,
Sourcepub fn hsv_b<T0, T1>(&mut self, rs1: T0, rs2: T1)where
Self: HsvBEmitter<T0, T1>,
pub fn hsv_b<T0, T1>(&mut self, rs1: T0, rs2: T1)where
Self: HsvBEmitter<T0, T1>,
Sourcepub fn hsv_d<T0, T1>(&mut self, rs1: T0, rs2: T1)where
Self: HsvDEmitter<T0, T1>,
pub fn hsv_d<T0, T1>(&mut self, rs1: T0, rs2: T1)where
Self: HsvDEmitter<T0, T1>,
Sourcepub fn hsv_h<T0, T1>(&mut self, rs1: T0, rs2: T1)where
Self: HsvHEmitter<T0, T1>,
pub fn hsv_h<T0, T1>(&mut self, rs1: T0, rs2: T1)where
Self: HsvHEmitter<T0, T1>,
Sourcepub fn hsv_w<T0, T1>(&mut self, rs1: T0, rs2: T1)where
Self: HsvWEmitter<T0, T1>,
pub fn hsv_w<T0, T1>(&mut self, rs1: T0, rs2: T1)where
Self: HsvWEmitter<T0, T1>,
Sourcepub fn jal<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: JalEmitter<T0, T1>,
pub fn jal<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: JalEmitter<T0, T1>,
Sourcepub fn jal_pseudo<T0>(&mut self, imm: T0)where
Self: JalPseudoEmitter<T0>,
pub fn jal_pseudo<T0>(&mut self, imm: T0)where
Self: JalPseudoEmitter<T0>,
Sourcepub fn jalr<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: JalrEmitter<T0, T1, T2>,
pub fn jalr<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: JalrEmitter<T0, T1, T2>,
Jump and link register
Jump to an address formed by adding rs1 to a signed offset then clearing the least significant bit, and store the return address in rd.
§Forms
Assembly: jalr xd, imm(rs1)
Rust: jalr(rd, rs1, imm)
§Arguments
rd— Destination register.rs1— Source register.imm— Immediate encoding value.
Sourcepub fn jalr_pseudo<T0>(&mut self, rs1: T0)where
Self: JalrPseudoEmitter<T0>,
pub fn jalr_pseudo<T0>(&mut self, rs1: T0)where
Self: JalrPseudoEmitter<T0>,
Sourcepub fn lbu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: LbuEmitter<T0, T1, T2>,
pub fn lbu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: LbuEmitter<T0, T1, T2>,
Sourcepub fn lhu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: LhuEmitter<T0, T1, T2>,
pub fn lhu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: LhuEmitter<T0, T1, T2>,
Sourcepub fn lpad<T0>(&mut self, imm: T0)where
Self: LpadEmitter<T0>,
pub fn lpad<T0>(&mut self, imm: T0)where
Self: LpadEmitter<T0>,
Sourcepub fn lr_d<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, aq: T2, rl: T3)where
Self: LrDEmitter<T0, T1, T2, T3>,
pub fn lr_d<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, aq: T2, rl: T3)where
Self: LrDEmitter<T0, T1, T2, T3>,
Load reserved doubleword
Loads a word from the address in rs1, places the value in rd, and registers a reservation set – a set of bytes that subsumes the bytes in the addressed word.
The address in rs1 must be 8-byte aligned.
If the address is not naturally aligned, a LoadAddressMisaligned exception or an
LoadAccessFault exception will be generated. The access-fault exception can be generated
for a memory access that would otherwise be able to complete except for the misalignment,
if the misaligned access should not be emulated.
An implementation can register an arbitrarily large reservation set on each LR, provided the reservation set includes all bytes of the addressed data word or doubleword. An SC can only pair with the most recent LR in program order. An SC may succeed only if no store from another hart to the reservation set can be observed to have occurred between the LR and the SC, and if there is no other SC between the LR and itself in program order. An SC may succeed only if no write from a device other than a hart to the bytes accessed by the LR instruction can be observed to have occurred between the LR and SC. Note this LR might have had a different effective address and data size, but reserved the SC’s address as part of the reservation set.
§[NOTE]
Following this model, in systems with memory translation, an SC is allowed to succeed if the earlier LR reserved the same location using an alias with a different virtual address, but is also allowed to fail if the virtual address is different.
§To accommodate legacy devices and buses, writes from devices other than RISC-V harts are only required to invalidate reservations when they overlap the bytes accessed by the LR. These writes are not required to invalidate the reservation when they access other bytes in the reservation set.
Software should not set the rl bit on an LR instruction unless the aq bit is also set. LR.rl and SC.aq instructions are not guaranteed to provide any stronger ordering than those with both bits clear, but may result in lower performance.
§Forms
Assembly: lr.d xd, xs1
Rust: lr_d(rd, rs1, aq, rl)
§Arguments
rd— Destination register.rs1— Memory base register.aq— Acquire-order bit.rl— Release-order bit; retained for the existing emitter API.
Sourcepub fn lr_w<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, aq: T2, rl: T3)where
Self: LrWEmitter<T0, T1, T2, T3>,
pub fn lr_w<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, aq: T2, rl: T3)where
Self: LrWEmitter<T0, T1, T2, T3>,
Load reserved word
Loads a word from the address in rs1, places the sign-extended value in rd, and registers a reservation set – a set of bytes that subsumes the bytes in the addressed word.
<%- if XLEN == 64 -%> The 32-bit load result is sign-extended to 64-bits. <%- end -%>
The address in rs1 must be naturally aligned to the size of the operand (i.e., eight-byte aligned for doublewords and four-byte aligned for words).
If the address is not naturally aligned, a LoadAddressMisaligned exception or an
LoadAccessFault exception will be generated. The access-fault exception can be generated
for a memory access that would otherwise be able to complete except for the misalignment,
if the misaligned access should not be emulated.
An implementation can register an arbitrarily large reservation set on each LR, provided the reservation set includes all bytes of the addressed data word or doubleword. An SC can only pair with the most recent LR in program order. An SC may succeed only if no store from another hart to the reservation set can be observed to have occurred between the LR and the SC, and if there is no other SC between the LR and itself in program order. An SC may succeed only if no write from a device other than a hart to the bytes accessed by the LR instruction can be observed to have occurred between the LR and SC. Note this LR might have had a different effective address and data size, but reserved the SC’s address as part of the reservation set.
§[NOTE]
Following this model, in systems with memory translation, an SC is allowed to succeed if the earlier LR reserved the same location using an alias with a different virtual address, but is also allowed to fail if the virtual address is different.
§To accommodate legacy devices and buses, writes from devices other than RISC-V harts are only required to invalidate reservations when they overlap the bytes accessed by the LR. These writes are not required to invalidate the reservation when they access other bytes in the reservation set.
Software should not set the rl bit on an LR instruction unless the aq bit is also set. LR.rl and SC.aq instructions are not guaranteed to provide any stronger ordering than those with both bits clear, but may result in lower performance.
§Forms
Assembly: lr.w xd, xs1
Rust: lr_w(rd, rs1, aq, rl)
§Arguments
rd— Destination register.rs1— Memory base register.aq— Acquire-order bit.rl— Release-order bit; retained for the existing emitter API.
Sourcepub fn lui<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: LuiEmitter<T0, T1>,
pub fn lui<T0, T1>(&mut self, rd: T0, imm: T1)where
Self: LuiEmitter<T0, T1>,
Sourcepub fn lwu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: LwuEmitter<T0, T1, T2>,
pub fn lwu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: LwuEmitter<T0, T1, T2>,
Sourcepub fn max<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: MaxEmitter<T0, T1, T2>,
pub fn max<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: MaxEmitter<T0, T1, T2>,
Maximum
This instruction returns the larger of two signed integers.
.Software Hint
[NOTE]
Calculating the absolute value of a signed integer can be performed using the
following sequence: neg rD,rS followed by `max rD,rS,rD. When using this
common sequence, it is suggested that they are scheduled with no intervening
instructions so that implementations that are so optimized can fuse them
together.
§Forms
Assembly: max xd, xs1, xs2
Rust: max(rd, rs1, rs2)
§Arguments
rd— Destination register.rs1— Source register.rs2— Source register.
Sourcepub fn maxu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: MaxuEmitter<T0, T1, T2>,
pub fn maxu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: MaxuEmitter<T0, T1, T2>,
Sourcepub fn min<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: MinEmitter<T0, T1, T2>,
pub fn min<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: MinEmitter<T0, T1, T2>,
Sourcepub fn minu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: MinuEmitter<T0, T1, T2>,
pub fn minu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: MinuEmitter<T0, T1, T2>,
Sourcepub fn mnret(&mut self)where
Self: MnretEmitter,
pub fn mnret(&mut self)where
Self: MnretEmitter,
Sourcepub fn mop_r_0<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR0Emitter<T0, T1>,
pub fn mop_r_0<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR0Emitter<T0, T1>,
Sourcepub fn mop_r_1<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR1Emitter<T0, T1>,
pub fn mop_r_1<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR1Emitter<T0, T1>,
Sourcepub fn mop_r_10<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR10Emitter<T0, T1>,
pub fn mop_r_10<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR10Emitter<T0, T1>,
Sourcepub fn mop_r_11<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR11Emitter<T0, T1>,
pub fn mop_r_11<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR11Emitter<T0, T1>,
Sourcepub fn mop_r_12<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR12Emitter<T0, T1>,
pub fn mop_r_12<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR12Emitter<T0, T1>,
Sourcepub fn mop_r_13<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR13Emitter<T0, T1>,
pub fn mop_r_13<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR13Emitter<T0, T1>,
Sourcepub fn mop_r_14<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR14Emitter<T0, T1>,
pub fn mop_r_14<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR14Emitter<T0, T1>,
Sourcepub fn mop_r_15<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR15Emitter<T0, T1>,
pub fn mop_r_15<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR15Emitter<T0, T1>,
Sourcepub fn mop_r_16<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR16Emitter<T0, T1>,
pub fn mop_r_16<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR16Emitter<T0, T1>,
Sourcepub fn mop_r_17<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR17Emitter<T0, T1>,
pub fn mop_r_17<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR17Emitter<T0, T1>,
Sourcepub fn mop_r_18<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR18Emitter<T0, T1>,
pub fn mop_r_18<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR18Emitter<T0, T1>,
Sourcepub fn mop_r_19<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR19Emitter<T0, T1>,
pub fn mop_r_19<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR19Emitter<T0, T1>,
Sourcepub fn mop_r_2<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR2Emitter<T0, T1>,
pub fn mop_r_2<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR2Emitter<T0, T1>,
Sourcepub fn mop_r_20<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR20Emitter<T0, T1>,
pub fn mop_r_20<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR20Emitter<T0, T1>,
Sourcepub fn mop_r_21<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR21Emitter<T0, T1>,
pub fn mop_r_21<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR21Emitter<T0, T1>,
Sourcepub fn mop_r_22<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR22Emitter<T0, T1>,
pub fn mop_r_22<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR22Emitter<T0, T1>,
Sourcepub fn mop_r_23<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR23Emitter<T0, T1>,
pub fn mop_r_23<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR23Emitter<T0, T1>,
Sourcepub fn mop_r_24<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR24Emitter<T0, T1>,
pub fn mop_r_24<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR24Emitter<T0, T1>,
Sourcepub fn mop_r_25<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR25Emitter<T0, T1>,
pub fn mop_r_25<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR25Emitter<T0, T1>,
Sourcepub fn mop_r_26<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR26Emitter<T0, T1>,
pub fn mop_r_26<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR26Emitter<T0, T1>,
Sourcepub fn mop_r_27<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR27Emitter<T0, T1>,
pub fn mop_r_27<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR27Emitter<T0, T1>,
Sourcepub fn mop_r_28<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR28Emitter<T0, T1>,
pub fn mop_r_28<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR28Emitter<T0, T1>,
Sourcepub fn mop_r_29<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR29Emitter<T0, T1>,
pub fn mop_r_29<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR29Emitter<T0, T1>,
Sourcepub fn mop_r_3<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR3Emitter<T0, T1>,
pub fn mop_r_3<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR3Emitter<T0, T1>,
Sourcepub fn mop_r_30<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR30Emitter<T0, T1>,
pub fn mop_r_30<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR30Emitter<T0, T1>,
Sourcepub fn mop_r_31<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR31Emitter<T0, T1>,
pub fn mop_r_31<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR31Emitter<T0, T1>,
Sourcepub fn mop_r_4<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR4Emitter<T0, T1>,
pub fn mop_r_4<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR4Emitter<T0, T1>,
Sourcepub fn mop_r_5<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR5Emitter<T0, T1>,
pub fn mop_r_5<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR5Emitter<T0, T1>,
Sourcepub fn mop_r_6<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR6Emitter<T0, T1>,
pub fn mop_r_6<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR6Emitter<T0, T1>,
Sourcepub fn mop_r_7<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR7Emitter<T0, T1>,
pub fn mop_r_7<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR7Emitter<T0, T1>,
Sourcepub fn mop_r_8<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR8Emitter<T0, T1>,
pub fn mop_r_8<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR8Emitter<T0, T1>,
Sourcepub fn mop_r_9<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR9Emitter<T0, T1>,
pub fn mop_r_9<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: MopR9Emitter<T0, T1>,
Sourcepub fn mop_rr_0<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: MopRr0Emitter<T0, T1, T2>,
pub fn mop_rr_0<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: MopRr0Emitter<T0, T1, T2>,
Sourcepub fn mop_rr_1<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: MopRr1Emitter<T0, T1, T2>,
pub fn mop_rr_1<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: MopRr1Emitter<T0, T1, T2>,
Sourcepub fn mop_rr_2<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: MopRr2Emitter<T0, T1, T2>,
pub fn mop_rr_2<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: MopRr2Emitter<T0, T1, T2>,
Sourcepub fn mop_rr_3<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: MopRr3Emitter<T0, T1, T2>,
pub fn mop_rr_3<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: MopRr3Emitter<T0, T1, T2>,
Sourcepub fn mop_rr_4<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: MopRr4Emitter<T0, T1, T2>,
pub fn mop_rr_4<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: MopRr4Emitter<T0, T1, T2>,
Sourcepub fn mop_rr_5<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: MopRr5Emitter<T0, T1, T2>,
pub fn mop_rr_5<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: MopRr5Emitter<T0, T1, T2>,
Sourcepub fn mop_rr_6<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: MopRr6Emitter<T0, T1, T2>,
pub fn mop_rr_6<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: MopRr6Emitter<T0, T1, T2>,
Sourcepub fn mop_rr_7<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: MopRr7Emitter<T0, T1, T2>,
pub fn mop_rr_7<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: MopRr7Emitter<T0, T1, T2>,
Sourcepub fn mret(&mut self)where
Self: MretEmitter,
pub fn mret(&mut self)where
Self: MretEmitter,
Sourcepub fn mul<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: MulEmitter<T0, T1, T2>,
pub fn mul<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: MulEmitter<T0, T1, T2>,
Signed multiply
MUL performs an XLEN-bitxXLEN-bit multiplication of rs1 by rs2 and places the lower
XLEN bits in the destination register.
Any overflow is thrown away.
[NOTE] If both the high and low bits of the same product are required, then the recommended code sequence is: MULH[[S]U] rdh, rs1, rs2; MUL rdl, rs1, rs2 (source register specifiers must be in same order and rdh cannot be the same as rs1 or rs2). Microarchitectures can then fuse these into a single multiply operation instead of performing two separate multiplies.
§Forms
Assembly: mul xd, xs1, xs2
Rust: mul(rd, rs1, rs2)
§Arguments
rd— Destination register.rs1— Source register.rs2— Source register.
Sourcepub fn mulh<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: MulhEmitter<T0, T1, T2>,
pub fn mulh<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: MulhEmitter<T0, T1, T2>,
Signed multiply high
Multiply the signed values in rs1 to rs2, and store the upper half of the result in rd. The lower half is thrown away.
If both the upper and lower halves are needed, it suggested to use the sequence:
§mulh rdh, rs1, rs2 mul rdl, rs1, rs2
Microarchitectures may look for that sequence and fuse the operations.
§Forms
Assembly: mulh xd, xs1, xs2
Rust: mulh(rd, rs1, rs2)
§Arguments
rd— Destination register.rs1— Source register.rs2— Source register.
Sourcepub fn mulhsu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: MulhsuEmitter<T0, T1, T2>,
pub fn mulhsu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: MulhsuEmitter<T0, T1, T2>,
Signed/unsigned multiply high
Multiply the signed value in rs1 by the unsigned value in rs2, and store the upper half of the result in rd. The lower half is thrown away.
If both the upper and lower halves are needed, it suggested to use the sequence:
§mulhsu rdh, rs1, rs2 mul rdl, rs1, rs2
Microarchitectures may look for that sequence and fuse the operations.
§Forms
Assembly: mulhsu xd, xs1, xs2
Rust: mulhsu(rd, rs1, rs2)
§Arguments
rd— Destination register.rs1— Source register.rs2— Source register.
Sourcepub fn mulhu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: MulhuEmitter<T0, T1, T2>,
pub fn mulhu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: MulhuEmitter<T0, T1, T2>,
Unsigned multiply high
Multiply the unsigned values in rs1 to rs2, and store the upper half of the result in rd. The lower half is thrown away.
If both the upper and lower halves are needed, it suggested to use the sequence:
§mulhu rdh, rs1, rs2 mul rdl, rs1, rs2
Microarchitectures may look for that sequence and fuse the operations.
§Forms
Assembly: mulhu xd, xs1, xs2
Rust: mulhu(rd, rs1, rs2)
§Arguments
rd— Destination register.rs1— Source register.rs2— Source register.
Sourcepub fn mulw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: MulwEmitter<T0, T1, T2>,
pub fn mulw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: MulwEmitter<T0, T1, T2>,
Signed 32-bit multiply
Multiplies the lower 32 bits of the source registers, placing the sign-extension of the lower 32 bits of the result into the destination register.
Any overflow is thrown away.
[NOTE] In RV64, MUL can be used to obtain the upper 32 bits of the 64-bit product, but signed arguments must be proper 32-bit signed values, whereas unsigned arguments must have their upper 32 bits clear. If the arguments are not known to be sign- or zero-extended, an alternative is to shift both arguments left by 32 bits, then use MULH[[S]U].
§Forms
Assembly: mulw xd, xs1, xs2
Rust: mulw(rd, rs1, rs2)
§Arguments
rd— Destination register.rs1— Source register.rs2— Source register.
Sourcepub fn neg<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: NegEmitter<T0, T1>,
pub fn neg<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: NegEmitter<T0, T1>,
Sourcepub fn nop(&mut self)where
Self: NopEmitter,
pub fn nop(&mut self)where
Self: NopEmitter,
Sourcepub fn ntl_all(&mut self)where
Self: NtlAllEmitter,
pub fn ntl_all(&mut self)where
Self: NtlAllEmitter,
Sourcepub fn ntl_p1(&mut self)where
Self: NtlP1Emitter,
pub fn ntl_p1(&mut self)where
Self: NtlP1Emitter,
Sourcepub fn ntl_pall(&mut self)where
Self: NtlPallEmitter,
pub fn ntl_pall(&mut self)where
Self: NtlPallEmitter,
Sourcepub fn ntl_s1(&mut self)where
Self: NtlS1Emitter,
pub fn ntl_s1(&mut self)where
Self: NtlS1Emitter,
Sourcepub fn orc_b<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: OrcBEmitter<T0, T1>,
pub fn orc_b<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: OrcBEmitter<T0, T1>,
Bitware OR-combine, byte granule
Combines the bits within each byte using bitwise logical OR. This sets the bits of each byte in the result rd to all zeros if no bit within the respective byte of rs is set, or to all ones if any bit within the respective byte of rs is set.
§Forms
Assembly: orc.b xd, xs1, xs2
Rust: orc_b(rd, rs1)
§Arguments
rd— Destination register.rs1— Source register.
Sourcepub fn ori<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: OriEmitter<T0, T1, T2>,
pub fn ori<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: OriEmitter<T0, T1, T2>,
Sourcepub fn orn<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: OrnEmitter<T0, T1, T2>,
pub fn orn<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: OrnEmitter<T0, T1, T2>,
Sourcepub fn pack<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: PackEmitter<T0, T1, T2>,
pub fn pack<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: PackEmitter<T0, T1, T2>,
Sourcepub fn packh<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: PackhEmitter<T0, T1, T2>,
pub fn packh<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: PackhEmitter<T0, T1, T2>,
Sourcepub fn packw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: PackwEmitter<T0, T1, T2>,
pub fn packw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: PackwEmitter<T0, T1, T2>,
Sourcepub fn pause(&mut self)where
Self: PauseEmitter,
pub fn pause(&mut self)where
Self: PauseEmitter,
Sourcepub fn prefetch_i<T0, T1>(&mut self, rs1: T0, imm: T1)where
Self: PrefetchIEmitter<T0, T1>,
pub fn prefetch_i<T0, T1>(&mut self, rs1: T0, imm: T1)where
Self: PrefetchIEmitter<T0, T1>,
Sourcepub fn prefetch_r<T0, T1>(&mut self, rs1: T0, imm: T1)where
Self: PrefetchREmitter<T0, T1>,
pub fn prefetch_r<T0, T1>(&mut self, rs1: T0, imm: T1)where
Self: PrefetchREmitter<T0, T1>,
Sourcepub fn prefetch_w<T0, T1>(&mut self, rs1: T0, imm: T1)where
Self: PrefetchWEmitter<T0, T1>,
pub fn prefetch_w<T0, T1>(&mut self, rs1: T0, imm: T1)where
Self: PrefetchWEmitter<T0, T1>,
Sourcepub fn rdcycle<T0>(&mut self, rd: T0)where
Self: RdcycleEmitter<T0>,
pub fn rdcycle<T0>(&mut self, rd: T0)where
Self: RdcycleEmitter<T0>,
Sourcepub fn rdcycleh<T0>(&mut self, rd: T0)where
Self: RdcyclehEmitter<T0>,
pub fn rdcycleh<T0>(&mut self, rd: T0)where
Self: RdcyclehEmitter<T0>,
Sourcepub fn rdinstret<T0>(&mut self, rd: T0)where
Self: RdinstretEmitter<T0>,
pub fn rdinstret<T0>(&mut self, rd: T0)where
Self: RdinstretEmitter<T0>,
Sourcepub fn rdinstreth<T0>(&mut self, rd: T0)where
Self: RdinstrethEmitter<T0>,
pub fn rdinstreth<T0>(&mut self, rd: T0)where
Self: RdinstrethEmitter<T0>,
Sourcepub fn rdtime<T0>(&mut self, rd: T0)where
Self: RdtimeEmitter<T0>,
pub fn rdtime<T0>(&mut self, rd: T0)where
Self: RdtimeEmitter<T0>,
Sourcepub fn rdtimeh<T0>(&mut self, rd: T0)where
Self: RdtimehEmitter<T0>,
pub fn rdtimeh<T0>(&mut self, rd: T0)where
Self: RdtimehEmitter<T0>,
Sourcepub fn rem<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: RemEmitter<T0, T1, T2>,
pub fn rem<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: RemEmitter<T0, T1, T2>,
Signed remainder
Calculate the remainder of signed division of rs1 by rs2, and store the result in rd.
If the value in register rs2 is zero, write the value in rs1 into rd;
If the result of the division overflows, write zero into rd;
§Forms
Assembly: rem xd, xs1, xs2
Rust: rem(rd, rs1, rs2)
§Arguments
rd— Destination register.rs1— Source register.rs2— Source register.
Sourcepub fn remu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: RemuEmitter<T0, T1, T2>,
pub fn remu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: RemuEmitter<T0, T1, T2>,
Sourcepub fn remuw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: RemuwEmitter<T0, T1, T2>,
pub fn remuw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: RemuwEmitter<T0, T1, T2>,
Unsigned 32-bit remainder
Calculate the remainder of unsigned division of the 32-bit values in rs1 by rs2, and store the sign-extended result in rd.
If the value in rs2 is zero, rd gets the sign-extended value in rs1.
§Forms
Assembly: remuw xd, xs1, xs2
Rust: remuw(rd, rs1, rs2)
§Arguments
rd— Destination register.rs1— Source register.rs2— Source register.
Sourcepub fn remw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: RemwEmitter<T0, T1, T2>,
pub fn remw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: RemwEmitter<T0, T1, T2>,
Signed 32-bit remainder
Calculate the remainder of signed division of the 32-bit values rs1 by rs2, and store the sign-extended result in rd.
If the value in register rs2 is zero, write the sign-extended 32-bit value in rs1 into rd;
If the result of the division overflows, write zero into rd;
§Forms
Assembly: remw xd, xs1, xs2
Rust: remw(rd, rs1, rs2)
§Arguments
rd— Destination register.rs1— Source register.rs2— Source register.
Sourcepub fn ret(&mut self)where
Self: RetEmitter,
pub fn ret(&mut self)where
Self: RetEmitter,
Sourcepub fn rev8<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: Rev8Emitter<T0, T1>,
pub fn rev8<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: Rev8Emitter<T0, T1>,
Byte-reverse register (RV64 encoding)
This instruction reverses the order of the bytes in rs1.
[NOTE] The rev8 mnemonic corresponds to different instruction encodings in RV32 and RV64.
[NOTE]
The byte-reverse operation is only available for the full register width. To emulate word-sized
and halfword-sized byte-reversal, perform a rev8 rd,rs followed by a srai rd,rd,K, where K
is XLEN-32 and XLEN-16, respectively.
§Forms
Assembly: rev8 xd, xs1
Rust: rev8(rd, rs1)
§Arguments
rd— Destination register.rs1— Source register.
Sourcepub fn rev8_rv32<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: Rev8Rv32Emitter<T0, T1>,
pub fn rev8_rv32<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: Rev8Rv32Emitter<T0, T1>,
Byte-reverse register (RV64 encoding)
This instruction reverses the order of the bytes in rs1.
[NOTE] The rev8 mnemonic corresponds to different instruction encodings in RV32 and RV64.
[NOTE]
The byte-reverse operation is only available for the full register width. To emulate word-sized
and halfword-sized byte-reversal, perform a rev8 rd,rs followed by a srai rd,rd,K, where K
is XLEN-32 and XLEN-16, respectively.
§Forms
Assembly: rev8.rv32 xd, xs1
Rust: rev8_rv32(rd, rs1)
§Arguments
rd— Destination register.rs1— Source register.
Sourcepub fn rol<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: RolEmitter<T0, T1, T2>,
pub fn rol<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: RolEmitter<T0, T1, T2>,
Sourcepub fn rolw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: RolwEmitter<T0, T1, T2>,
pub fn rolw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: RolwEmitter<T0, T1, T2>,
Rotate left word (Register)
This instruction performs a rotate left of the least-significant word of rs1 by the amount in least-significant 5 bits of rs2. The resulting word value is sign-extended by copying bit 31 to all of the more-significant bits.
§Forms
Assembly: rolw xd, xs1, xs2
Rust: rolw(rd, rs1, rs2)
§Arguments
rd— Destination register.rs1— Source register.rs2— Source register.
Sourcepub fn ror<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: RorEmitter<T0, T1, T2>,
pub fn ror<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: RorEmitter<T0, T1, T2>,
Sourcepub fn rori<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtd: T2)where
Self: RoriEmitter<T0, T1, T2>,
pub fn rori<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtd: T2)where
Self: RoriEmitter<T0, T1, T2>,
Rotate right (Immediate)
This instruction performs a rotate right of rs1 by the amount in the least-significant log2(XLEN) bits of shamt. For RV32, the encodings corresponding to shamt[5]=1 are reserved.
§Forms
Assembly: rori xd, xs1, shamt
Rust: rori(rd, rs1, shamtd)
§Arguments
rd— Destination register.rs1— Source register.shamtd— Immediate encoding value.
Sourcepub fn rori_rv32<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtw: T2)where
Self: RoriRv32Emitter<T0, T1, T2>,
pub fn rori_rv32<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtw: T2)where
Self: RoriRv32Emitter<T0, T1, T2>,
Rotate right (Immediate)
This instruction performs a rotate right of rs1 by the amount in the least-significant log2(XLEN) bits of shamt. For RV32, the encodings corresponding to shamt[5]=1 are reserved.
§Forms
Assembly: rori.rv32 xd, xs1, shamt
Rust: rori_rv32(rd, rs1, shamtw)
§Arguments
rd— Destination register.rs1— Source register.shamtw— Immediate encoding value.
Sourcepub fn roriw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtw: T2)where
Self: RoriwEmitter<T0, T1, T2>,
pub fn roriw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtw: T2)where
Self: RoriwEmitter<T0, T1, T2>,
Rotate right word (Immediate)
This instruction performs a rotate right on the least-significant word of rs1 by the amount in the least-significant log2(XLEN) bits of shamt. The resulting word value is sign-extended by copying bit 31 to all of the more-significant bits.
§Forms
Assembly: roriw xd, xs1, shamt
Rust: roriw(rd, rs1, shamtw)
§Arguments
rd— Destination register.rs1— Source register.shamtw— Immediate encoding value.
Sourcepub fn rorw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: RorwEmitter<T0, T1, T2>,
pub fn rorw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: RorwEmitter<T0, T1, T2>,
Rotate right word (Register)
This instruction performs a rotate right on the least-significant word of rs1 by the amount in least-significant 5 bits of rs2. The resultant word is sign-extended by copying bit 31 to all of the more-significant bits.
§Forms
Assembly: rorw xd, xs1, xs2
Rust: rorw(rd, rs1, rs2)
§Arguments
rd— Destination register.rs1— Source register.rs2— Source register.
Sourcepub fn sbreak(&mut self)where
Self: SbreakEmitter,
pub fn sbreak(&mut self)where
Self: SbreakEmitter,
Sourcepub fn sc_d<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: ScDEmitter<T0, T1, T2, T3, T4>,
pub fn sc_d<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: ScDEmitter<T0, T1, T2, T3, T4>,
Store conditional doubleword
sc.d conditionally writes a doubleword in rs2 to the address in rs1:
the sc.d succeeds only if the reservation is still valid and the
reservation set contains the bytes being written. If the sc.d succeeds,
the instruction writes the doubleword in rs2 to memory, and it writes zero to rd.
If the sc.d fails, the instruction does not write to memory, and it writes a
nonzero value to rd. For the purposes of memory protection, a failed sc.d
may be treated like a store. Regardless of success or failure, executing an
sc.d instruction invalidates any reservation held by this hart.
The failure code with value 1 encodes an unspecified failure. Other failure codes are reserved at this time. Portable software should only assume the failure code will be non-zero.
The address held in rs1 must be naturally aligned to the size of the operand (i.e., eight-byte aligned). If the address is not naturally aligned, an address-misaligned exception or an access-fault exception will be generated. The access-fault exception can be generated for a memory access that would otherwise be able to complete except for the misalignment, if the misaligned access should not be emulated.
§[NOTE]
Emulating misaligned LR/SC sequences is impractical in most systems.
§Misaligned LR/SC sequences also raise the possibility of accessing multiple reservation sets at once, which present definitions do not provide for.
An implementation can register an arbitrarily large reservation set on each LR, provided the reservation set includes all bytes of the addressed data word or doubleword. An SC can only pair with the most recent LR in program order. An SC may succeed only if no store from another hart to the reservation set can be observed to have occurred between the LR and the SC, and if there is no other SC between the LR and itself in program order. An SC may succeed only if no write from a device other than a hart to the bytes accessed by the LR instruction can be observed to have occurred between the LR and SC. Note this LR might have had a different effective address and data size, but reserved the SC’s address as part of the reservation set.
§[NOTE]
Following this model, in systems with memory translation, an SC is allowed to succeed if the earlier LR reserved the same location using an alias with a different virtual address, but is also allowed to fail if the virtual address is different.
§To accommodate legacy devices and buses, writes from devices other than RISC-V harts are only required to invalidate reservations when they overlap the bytes accessed by the LR. These writes are not required to invalidate the reservation when they access other bytes in the reservation set.
The SC must fail if the address is not within the reservation set of the most recent LR in program order. The SC must fail if a store to the reservation set from another hart can be observed to occur between the LR and SC. The SC must fail if a write from some other device to the bytes accessed by the LR can be observed to occur between the LR and SC. (If such a device writes the reservation set but does not write the bytes accessed by the LR, the SC may or may not fail.) An SC must fail if there is another SC (to any address) between the LR and the SC in program order. The precise statement of the atomicity requirements for successful LR/SC sequences is defined by the Atomicity Axiom of the memory model.
§[NOTE]
The platform should provide a means to determine the size and shape of the reservation set.
A platform specification may constrain the size and shape of the reservation set.
A store-conditional instruction to a scratch word of memory should be used to forcibly invalidate any existing load reservation:
- during a preemptive context switch, and
- if necessary when changing virtual to physical address mappings, such as when migrating pages that might contain an active reservation.
§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.
An SC instruction can never be observed by another RISC-V hart before the LR instruction that established the reservation.
§[NOTE]
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.
§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.
Software should not set the rl bit on an LR instruction unless the aq bit is also set. LR.rl and SC.aq instructions are not guaranteed to provide any stronger ordering than those with both bits clear, but may result in lower performance.
§Forms
Assembly: sc.d xd, xs2, xs1
Rust: sc_d(rd, rs1, rs2, aq, rl)
§Arguments
rd— Destination register.rs1— Memory base register.rs2— Source register.aq— Acquire-order bit.rl— Release-order bit; retained for the existing emitter API.
Sourcepub fn sc_w<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: ScWEmitter<T0, T1, T2, T3, T4>,
pub fn sc_w<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: ScWEmitter<T0, T1, T2, T3, T4>,
Store conditional word
sc.w conditionally writes a word in rs2 to the address in rs1:
the sc.w succeeds only if the reservation is still valid and the
reservation set contains the bytes being written. If the sc.w succeeds,
the instruction writes the word in rs2 to memory, and it writes zero to rd.
If the sc.w fails, the instruction does not write to memory, and it writes a
nonzero value to rd. For the purposes of memory protection, a failed sc.w
may be treated like a store. Regardless of success or failure, executing an
sc.w instruction invalidates any reservation held by this hart.
<%- if XLEN == 64 -%>
[NOTE]
If a value other than 0 or 1 is defined as a result for sc.w, the value will before
sign-extended into rd.
<%- end -%>
The failure code with value 1 encodes an unspecified failure. Other failure codes are reserved at this time. Portable software should only assume the failure code will be non-zero.
The address held in rs1 must be naturally aligned to the size of the operand (i.e., eight-byte aligned for doublewords and four-byte aligned for words). If the address is not naturally aligned, an address-misaligned exception or an access-fault exception will be generated. The access-fault exception can be generated for a memory access that would otherwise be able to complete except for the misalignment, if the misaligned access should not be emulated.
§[NOTE]
Emulating misaligned LR/SC sequences is impractical in most systems.
§Misaligned LR/SC sequences also raise the possibility of accessing multiple reservation sets at once, which present definitions do not provide for.
An implementation can register an arbitrarily large reservation set on each LR, provided the reservation set includes all bytes of the addressed data word or doubleword. An SC can only pair with the most recent LR in program order. An SC may succeed only if no store from another hart to the reservation set can be observed to have occurred between the LR and the SC, and if there is no other SC between the LR and itself in program order. An SC may succeed only if no write from a device other than a hart to the bytes accessed by the LR instruction can be observed to have occurred between the LR and SC. Note this LR might have had a different effective address and data size, but reserved the SC’s address as part of the reservation set.
§[NOTE]
Following this model, in systems with memory translation, an SC is allowed to succeed if the earlier LR reserved the same location using an alias with a different virtual address, but is also allowed to fail if the virtual address is different.
§To accommodate legacy devices and buses, writes from devices other than RISC-V harts are only required to invalidate reservations when they overlap the bytes accessed by the LR. These writes are not required to invalidate the reservation when they access other bytes in the reservation set.
The SC must fail if the address is not within the reservation set of the most recent LR in program order. The SC must fail if a store to the reservation set from another hart can be observed to occur between the LR and SC. The SC must fail if a write from some other device to the bytes accessed by the LR can be observed to occur between the LR and SC. (If such a device writes the reservation set but does not write the bytes accessed by the LR, the SC may or may not fail.) An SC must fail if there is another SC (to any address) between the LR and the SC in program order. The precise statement of the atomicity requirements for successful LR/SC sequences is defined by the Atomicity Axiom of the memory model.
§[NOTE]
The platform should provide a means to determine the size and shape of the reservation set.
A platform specification may constrain the size and shape of the reservation set.
A store-conditional instruction to a scratch word of memory should be used to forcibly invalidate any existing load reservation:
- during a preemptive context switch, and
- if necessary when changing virtual to physical address mappings, such as when migrating pages that might contain an active reservation.
§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.
An SC instruction can never be observed by another RISC-V hart before the LR instruction that established the reservation.
§[NOTE]
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.
§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.
Software should not set the rl bit on an LR instruction unless the aq bit is also set. LR.rl and SC.aq instructions are not guaranteed to provide any stronger ordering than those with both bits clear, but may result in lower performance.
§Forms
Assembly: sc.w xd, xs2, xs1
Rust: sc_w(rd, rs1, rs2, aq, rl)
§Arguments
rd— Destination register.rs1— Memory base register.rs2— Source register.aq— Acquire-order bit.rl— Release-order bit; retained for the existing emitter API.
Sourcepub fn scall(&mut self)where
Self: ScallEmitter,
pub fn scall(&mut self)where
Self: ScallEmitter,
Sourcepub fn sctrclr(&mut self)where
Self: SctrclrEmitter,
pub fn sctrclr(&mut self)where
Self: SctrclrEmitter,
Sourcepub fn seqz<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: SeqzEmitter<T0, T1>,
pub fn seqz<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: SeqzEmitter<T0, T1>,
Sourcepub fn sext_b<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: SextBEmitter<T0, T1>,
pub fn sext_b<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: SextBEmitter<T0, T1>,
Sign-extend byte
This instruction sign-extends the least-significant byte in the source to XLEN by copying the most-significant bit in the byte (i.e., bit 7) to all of the more-significant bits.
§Forms
Assembly: sext.b xd, xs1
Rust: sext_b(rd, rs1)
§Arguments
rd— Destination register.rs1— Source register.
Sourcepub fn sext_h<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: SextHEmitter<T0, T1>,
pub fn sext_h<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: SextHEmitter<T0, T1>,
Sign-extend halfword
This instruction sign-extends the least-significant halfword in the source to XLEN by copying the most-significant bit in the halfword (i.e., bit 15) to all of the more-significant bits.
§Forms
Assembly: sext.h xd, xs1
Rust: sext_h(rd, rs1)
§Arguments
rd— Destination register.rs1— Source register.
Sourcepub fn sext_w<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: SextWEmitter<T0, T1>,
pub fn sext_w<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: SextWEmitter<T0, T1>,
Sourcepub fn sfence_inval_ir(&mut self)where
Self: SfenceInvalIrEmitter,
pub fn sfence_inval_ir(&mut self)where
Self: SfenceInvalIrEmitter,
Order implicit page table reads after invalidation
The sfence.inval.ir instruction guarantees that any previous sinval.vma
instructions executed by the current hart are ordered before subsequent implicit references by
that hart to the memory-management data structures.
§Forms
Assembly: sfence.inval.ir ""
Rust: sfence_inval_ir()
§Arguments
Sourcepub fn sfence_vma<T0, T1>(&mut self, rs1: T0, rs2: T1)where
Self: SfenceVmaEmitter<T0, T1>,
pub fn sfence_vma<T0, T1>(&mut self, rs1: T0, rs2: T1)where
Self: SfenceVmaEmitter<T0, T1>,
Supervisor memory-management fence
The supervisor memory-management fence instruction SFENCE.VMA is used to
synchronize updates to in-memory memory-management data structures with
current execution. Instruction execution causes implicit reads and
writes to these data structures; however, these implicit references are
ordinarily not ordered with respect to explicit loads and stores.
Executing an SFENCE.VMA instruction guarantees that any previous stores
already visible to the current RISC-V hart are ordered before certain
implicit references by subsequent instructions in that hart to the
memory-management data structures. The specific set of operations
ordered by SFENCE.VMA is determined by rs1 and rs2, as described
below. SFENCE.VMA is also used to invalidate entries in the
address-translation cache associated with a hart (see <<sv32algorithm>>). Further details on the behavior of this instruction are described in <<virt-control>> and <<pmp-vmem>>.
§[NOTE]
§The SFENCE.VMA is used to flush any local hardware caches related to address translation. It is specified as a fence rather than a TLB flush to provide cleaner semantics with respect to which instructions are affected by the flush operation and to support a wider variety of dynamic caching structures and memory-management schemes. SFENCE.VMA is also used by higher privilege levels to synchronize page table writes and the address translation hardware.
SFENCE.VMA orders only the local hart’s implicit references to the memory-management data structures.
§[NOTE]
§Consequently, other harts must be notified separately when the memory-management data structures have been modified. One approach is to use 1) a local data fence to ensure local writes are visible globally, then 2) an interprocessor interrupt to the other thread, then 3) a local SFENCE.VMA in the interrupt handler of the remote thread, and finally 4) signal back to originating thread that operation is complete. This is, of course, the RISC-V analog to a TLB shootdown.
For the common case that the translation data structures have only been modified for a single address mapping (i.e., one page or superpage), rs1 can specify a virtual address within that mapping to effect a translation fence for that mapping only. Furthermore, for the common case that the translation data structures have only been modified for a single address-space identifier, rs2 can specify the address space. The behavior of SFENCE.VMA depends on rs1 and rs2 as follows:
- If rs1=
x0and rs2=x0, the fence orders all reads and writes made to any level of the page tables, for all address spaces. The fence also invalidates all address-translation cache entries, for all address spaces. - If rs1=
x0and rs2≠x0, the fence orders all reads and writes made to any level of the page tables, but only for the address space identified by integer register rs2. Accesses to global mappings (see <<translation>>) are not ordered. The fence also invalidates all address-translation cache entries matching the address space identified by integer register rs2, except for entries containing global mappings. - If rs1≠
x0and rs2=x0, the fence orders only reads and writes made to leaf page table entries corresponding to the virtual address in rs1, for all address spaces. The fence also invalidates all address-translation cache entries that contain leaf page table entries corresponding to the virtual address in rs1, for all address spaces. - If rs1≠
x0and rs2≠x0, the fence orders only reads and writes made to leaf page table entries corresponding to the virtual address in rs1, for the address space identified by integer register rs2. Accesses to global mappings are not ordered. The fence also invalidates all address-translation cache entries that contain leaf page table entries corresponding to the virtual address in rs1 and that match the address space identified by integer register rs2, except for entries containing global mappings.
If the value held in rs1 is not a valid virtual address, then the SFENCE.VMA instruction has no effect. No exception is raised in this case.
When rs2≠x0, bits SXLEN-1:ASIDMAX of the value held
in rs2 are reserved for future standard use. Until their use is
defined by a standard extension, they should be zeroed by software and
ignored by current implementations. Furthermore, if
ASIDLEN<ASIDMAX, the implementation shall ignore bits
ASIDMAX-1:ASIDLEN of the value held in rs2.
§[NOTE]
§It is always legal to over-fence, e.g., by fencing only based on a
subset of the bits in rs1 and/or rs2, and/or by simply treating all
SFENCE.VMA instructions as having rs1=x0 and/or rs2=x0. For
example, simpler implementations can ignore the virtual address in rs1
and the ASID value in rs2 and always perform a global fence. The
choice not to raise an exception when an invalid virtual address is held
in rs1 facilitates this type of simplification.
An implicit read of the memory-management data structures may return any translation for an address that was valid at any time since the most recent SFENCE.VMA that subsumes that address. The ordering implied by SFENCE.VMA does not place implicit reads and writes to the memory-management data structures into the global memory order in a way that interacts cleanly with the standard RVWMO ordering rules. In particular, even though an SFENCE.VMA orders prior explicit accesses before subsequent implicit accesses, and those implicit accesses are ordered before their associated explicit accesses, SFENCE.VMA does not necessarily place prior explicit accesses before subsequent explicit accesses in the global memory order. These implicit loads also need not otherwise obey normal program order semantics with respect to prior loads or stores to the same address.
§[NOTE]
A consequence of this specification is that an implementation may use any translation for an address that was valid at any time since the most recent SFENCE.VMA that subsumes that address. In particular, if a leaf PTE is modified but a subsuming SFENCE.VMA is not executed, either the old translation or the new translation will be used, but the choice is unpredictable. The behavior is otherwise well-defined.
In a conventional TLB design, it is possible for multiple entries to
match a single address if, for example, a page is upgraded to a
superpage without first clearing the original non-leaf PTE’s valid bit
and executing an SFENCE.VMA with rs1=x0. In this case, a similar
remark applies: it is unpredictable whether the old non-leaf PTE or the
new leaf PTE is used, but the behavior is otherwise well defined.
Another consequence of this specification is that it is generally unsafe to update a PTE using a set of stores of a width less than the width of the PTE, as it is legal for the implementation to read the PTE at any time, including when only some of the partial stores have taken effect.
§This specification permits the caching of PTEs whose V (Valid) bit is clear. Operating systems must be written to cope with this possibility, but implementers are reminded that eagerly caching invalid PTEs will reduce performance by causing additional page faults.
Implementations must only perform implicit reads of the translation data
structures pointed to by the current contents of the satp register or
a subsequent valid (V=1) translation data structure entry, and must only
raise exceptions for implicit accesses that are generated as a result of
instruction execution, not those that are performed speculatively.
Changes to the sstatus fields SUM and MXR take effect immediately,
without the need to execute an SFENCE.VMA instruction. Changing
satp.MODE from Bare to other modes and vice versa also takes effect
immediately, without the need to execute an SFENCE.VMA instruction.
Likewise, changes to satp.ASID take effect immediately.
§[TIP]
The following common situations typically require executing an SFENCE.VMA instruction:
- When software recycles an ASID (i.e., reassociates it with a different
page table), it should first change
satpto point to the new page table using the recycled ASID, then execute SFENCE.VMA with rs1=x0and rs2 set to the recycled ASID. Alternatively, software can execute the same SFENCE.VMA instruction while a different ASID is loaded intosatp, provided the next timesatpis loaded with the recycled ASID, it is simultaneously loaded with the new page table. - If the implementation does not provide ASIDs, or software chooses to
always use ASID 0, then after every
satpwrite, software should execute SFENCE.VMA with rs1=x0. In the common case that no global translations have been modified, rs2 should be set to a register other thanx0but which contains the value zero, so that global translations are not flushed. - If software modifies a non-leaf PTE, it should execute SFENCE.VMA with
rs1=
x0. If any PTE along the traversal path had its G bit set, rs2 must bex0; otherwise, rs2 should be set to the ASID for which the translation is being modified. - If software modifies a leaf PTE, it should execute SFENCE.VMA with
rs1 set to a virtual address within the page. If any PTE along the
traversal path had its G bit set, rs2 must be
x0; otherwise, rs2 should be set to the ASID for which the translation is being modified. - For the special cases of increasing the permissions on a leaf PTE and changing an invalid PTE to a valid leaf, software may choose to execute the SFENCE.VMA lazily. After modifying the PTE but before executing SFENCE.VMA, either the new or old permissions will be used. In the latter case, a page-fault exception might occur, at which point software should execute SFENCE.VMA in accordance with the previous bullet point. ====
If a hart employs an address-translation cache, that cache must appear to be private to that hart. In particular, the meaning of an ASID is local to a hart; software may choose to use the same ASID to refer to different address spaces on different harts.
§[NOTE]
§A future extension could redefine ASIDs to be global across the SEE, enabling such options as shared translation caches and hardware support for broadcast TLB shootdown. However, as OSes have evolved to significantly reduce the scope of TLB shootdowns using novel ASID-management techniques, we expect the local-ASID scheme to remain attractive for its simplicity and possibly better scalability.
For implementations that make satp.MODE read-only zero (always Bare),
attempts to execute an SFENCE.VMA instruction might raise an
illegal-instruction exception.
§Forms
Assembly: sfence.vma xs1, xs2
Rust: sfence_vma(rs1, rs2)
§Arguments
rs1— Source register.rs2— Source register.
Sourcepub fn sfence_w_inval(&mut self)where
Self: SfenceWInvalEmitter,
pub fn sfence_w_inval(&mut self)where
Self: SfenceWInvalEmitter,
Sourcepub fn sgtz<T0, T1>(&mut self, rd: T0, rs2: T1)where
Self: SgtzEmitter<T0, T1>,
pub fn sgtz<T0, T1>(&mut self, rd: T0, rs2: T1)where
Self: SgtzEmitter<T0, T1>,
Sourcepub fn sh1add<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Sh1AddEmitter<T0, T1, T2>,
pub fn sh1add<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Sh1AddEmitter<T0, T1, T2>,
Sourcepub fn sh1add_uw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Sh1AddUwEmitter<T0, T1, T2>,
pub fn sh1add_uw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Sh1AddUwEmitter<T0, T1, T2>,
Shift unsigned word left by 1 and add
This instruction performs an XLEN-wide addition of two addends. The first addend is rs2. The second addend is the unsigned value formed by extracting the least-significant word of rs1 and shifting it left by 1 place.
§Forms
Assembly: sh1add.uw xd, xs1, xs2
Rust: sh1add_uw(rd, rs1, rs2)
§Arguments
rd— Destination register.rs1— Source register.rs2— Source register.
Sourcepub fn sh2add<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Sh2AddEmitter<T0, T1, T2>,
pub fn sh2add<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Sh2AddEmitter<T0, T1, T2>,
Sourcepub fn sh2add_uw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Sh2AddUwEmitter<T0, T1, T2>,
pub fn sh2add_uw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Sh2AddUwEmitter<T0, T1, T2>,
Shift unsigned word left by 2 and add
This instruction performs an XLEN-wide addition of two addends. The first addend is rs2. The second addend is the unsigned value formed by extracting the least-significant word of rs1 and shifting it left by 2 places.
§Forms
Assembly: sh2add.uw xd, xs1, xs2
Rust: sh2add_uw(rd, rs1, rs2)
§Arguments
rd— Destination register.rs1— Source register.rs2— Source register.
Sourcepub fn sh3add<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Sh3AddEmitter<T0, T1, T2>,
pub fn sh3add<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Sh3AddEmitter<T0, T1, T2>,
Sourcepub fn sh3add_uw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Sh3AddUwEmitter<T0, T1, T2>,
pub fn sh3add_uw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Sh3AddUwEmitter<T0, T1, T2>,
Shift unsigned word left by 3 and add
This instruction performs an XLEN-wide addition of two addends. The first addend is rs2. The second addend is the unsigned value formed by extracting the least-significant word of rs1 and shifting it left by 3 places.
§Forms
Assembly: sh3add.uw xd, xs1, xs2
Rust: sh3add_uw(rd, rs1, rs2)
§Arguments
rd— Destination register.rs1— Source register.rs2— Source register.
Sourcepub fn sha256sig0<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: Sha256Sig0Emitter<T0, T1>,
pub fn sha256sig0<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: Sha256Sig0Emitter<T0, T1>,
Sourcepub fn sha256sig1<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: Sha256Sig1Emitter<T0, T1>,
pub fn sha256sig1<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: Sha256Sig1Emitter<T0, T1>,
Sourcepub fn sha256sum0<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: Sha256Sum0Emitter<T0, T1>,
pub fn sha256sum0<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: Sha256Sum0Emitter<T0, T1>,
Sourcepub fn sha256sum1<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: Sha256Sum1Emitter<T0, T1>,
pub fn sha256sum1<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: Sha256Sum1Emitter<T0, T1>,
Sourcepub fn sha512sig0<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: Sha512Sig0Emitter<T0, T1>,
pub fn sha512sig0<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: Sha512Sig0Emitter<T0, T1>,
Sourcepub fn sha512sig0h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Sha512Sig0HEmitter<T0, T1, T2>,
pub fn sha512sig0h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Sha512Sig0HEmitter<T0, T1, T2>,
Sourcepub fn sha512sig0l<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Sha512Sig0LEmitter<T0, T1, T2>,
pub fn sha512sig0l<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Sha512Sig0LEmitter<T0, T1, T2>,
Sourcepub fn sha512sig1<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: Sha512Sig1Emitter<T0, T1>,
pub fn sha512sig1<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: Sha512Sig1Emitter<T0, T1>,
Sourcepub fn sha512sig1h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Sha512Sig1HEmitter<T0, T1, T2>,
pub fn sha512sig1h<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Sha512Sig1HEmitter<T0, T1, T2>,
Sourcepub fn sha512sig1l<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Sha512Sig1LEmitter<T0, T1, T2>,
pub fn sha512sig1l<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Sha512Sig1LEmitter<T0, T1, T2>,
Sourcepub fn sha512sum0<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: Sha512Sum0Emitter<T0, T1>,
pub fn sha512sum0<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: Sha512Sum0Emitter<T0, T1>,
Sourcepub fn sha512sum0r<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Sha512Sum0REmitter<T0, T1, T2>,
pub fn sha512sum0r<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Sha512Sum0REmitter<T0, T1, T2>,
Sourcepub fn sha512sum1<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: Sha512Sum1Emitter<T0, T1>,
pub fn sha512sum1<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: Sha512Sum1Emitter<T0, T1>,
Sourcepub fn sha512sum1r<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Sha512Sum1REmitter<T0, T1, T2>,
pub fn sha512sum1r<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Sha512Sum1REmitter<T0, T1, T2>,
Sourcepub fn sinval_vma<T0, T1>(&mut self, rs1: T0, rs2: T1)where
Self: SinvalVmaEmitter<T0, T1>,
pub fn sinval_vma<T0, T1>(&mut self, rs1: T0, rs2: T1)where
Self: SinvalVmaEmitter<T0, T1>,
Sourcepub fn sll<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: SllEmitter<T0, T1, T2>,
pub fn sll<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: SllEmitter<T0, T1, T2>,
Sourcepub fn slli<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtd: T2)where
Self: SlliEmitter<T0, T1, T2>,
pub fn slli<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtd: T2)where
Self: SlliEmitter<T0, T1, T2>,
Sourcepub fn slli_rv32<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtw: T2)where
Self: SlliRv32Emitter<T0, T1, T2>,
pub fn slli_rv32<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtw: T2)where
Self: SlliRv32Emitter<T0, T1, T2>,
Sourcepub fn slli_uw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtd: T2)where
Self: SlliUwEmitter<T0, T1, T2>,
pub fn slli_uw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtd: T2)where
Self: SlliUwEmitter<T0, T1, T2>,
Shift left unsigned word (Immediate)
This instruction takes the least-significant word of rs1, zero-extends it, and shifts it left by the immediate.
[NOTE]
This instruction is the same as slli with zext.w performed on rs1 before shifting.
§Forms
Assembly: slli.uw xd, xs1, shamt
Rust: slli_uw(rd, rs1, shamtd)
§Arguments
rd— Destination register.rs1— Source register.shamtd— Immediate encoding value.
Sourcepub fn slliw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtw: T2)where
Self: SlliwEmitter<T0, T1, T2>,
pub fn slliw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtw: T2)where
Self: SlliwEmitter<T0, T1, T2>,
Sourcepub fn sllw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: SllwEmitter<T0, T1, T2>,
pub fn sllw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: SllwEmitter<T0, T1, T2>,
Sourcepub fn slt<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: SltEmitter<T0, T1, T2>,
pub fn slt<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: SltEmitter<T0, T1, T2>,
Set on less than
Places the value 1 in register rd if register rs1 is less than the value in register rs2, where
both sources are treated as signed numbers, else 0 is written to rd.
§Forms
Assembly: slt xd, xs1, rs2
Rust: slt(rd, rs1, rs2)
§Arguments
rd— Destination register.rs1— Source register.rs2— Source register.
Sourcepub fn slti<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: SltiEmitter<T0, T1, T2>,
pub fn slti<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: SltiEmitter<T0, T1, T2>,
Set on less than immediate
Places the value 1 in register rd if register rs1 is less than the sign-extended immediate
when both are treated as signed numbers, else 0 is written to rd.
§Forms
Assembly: slti xd, xs1, imm
Rust: slti(rd, rs1, imm)
§Arguments
rd— Destination register.rs1— Source register.imm— Immediate encoding value.
Sourcepub fn sltiu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: SltiuEmitter<T0, T1, T2>,
pub fn sltiu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: SltiuEmitter<T0, T1, T2>,
Set on less than immediate unsigned
Places the value 1 in register rd if register rs1 is less than the sign-extended immediate
when both are treated as unsigned numbers (i.e., the immediate is first sign-extended to
XLEN bits then treated as an unsigned number), else 0 is written to rd.
NOTE: sltiu rd, rs1, 1 sets rd to 1 if rs1 equals zero, otherwise sets rd to 0
(assembler pseudoinstruction SEQZ rd, rs).
§Forms
Assembly: sltiu xd, xs1, imm
Rust: sltiu(rd, rs1, imm)
§Arguments
rd— Destination register.rs1— Source register.imm— Immediate encoding value.
Sourcepub fn sltu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: SltuEmitter<T0, T1, T2>,
pub fn sltu<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: SltuEmitter<T0, T1, T2>,
Set on less than unsigned
Places the value 1 in register rd if register rs1 is less than the value in register rs2, where
both sources are treated as unsigned numbers, else 0 is written to rd.
§Forms
Assembly: sltu xd, xs1, xs2
Rust: sltu(rd, rs1, rs2)
§Arguments
rd— Destination register.rs1— Source register.rs2— Source register.
Sourcepub fn sltz<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: SltzEmitter<T0, T1>,
pub fn sltz<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: SltzEmitter<T0, T1>,
Sourcepub fn sm3p0<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: Sm3P0Emitter<T0, T1>,
pub fn sm3p0<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: Sm3P0Emitter<T0, T1>,
Sourcepub fn sm3p1<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: Sm3P1Emitter<T0, T1>,
pub fn sm3p1<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: Sm3P1Emitter<T0, T1>,
Sourcepub fn sm4ed<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, bs: T3)where
Self: Sm4EdEmitter<T0, T1, T2, T3>,
pub fn sm4ed<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, bs: T3)where
Self: Sm4EdEmitter<T0, T1, T2, T3>,
Sourcepub fn sm4ks<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, bs: T3)where
Self: Sm4KsEmitter<T0, T1, T2, T3>,
pub fn sm4ks<T0, T1, T2, T3>(&mut self, rd: T0, rs1: T1, rs2: T2, bs: T3)where
Self: Sm4KsEmitter<T0, T1, T2, T3>,
Sourcepub fn snez<T0, T1>(&mut self, rd: T0, rs2: T1)where
Self: SnezEmitter<T0, T1>,
pub fn snez<T0, T1>(&mut self, rd: T0, rs2: T1)where
Self: SnezEmitter<T0, T1>,
Sourcepub fn sra<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: SraEmitter<T0, T1, T2>,
pub fn sra<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: SraEmitter<T0, T1, T2>,
Sourcepub fn srai<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtd: T2)where
Self: SraiEmitter<T0, T1, T2>,
pub fn srai<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtd: T2)where
Self: SraiEmitter<T0, T1, T2>,
Shift right arithmetic immediate
Arithmetic shift (the original sign bit is copied into the vacated upper bits) the value in rs1 right by shamt, and store the result in rd.
§Forms
Assembly: srai xd, xs1, shamt
Rust: srai(rd, rs1, shamtd)
§Arguments
rd— Destination register.rs1— Source register.shamtd— Immediate encoding value.
Sourcepub fn srai_rv32<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtw: T2)where
Self: SraiRv32Emitter<T0, T1, T2>,
pub fn srai_rv32<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtw: T2)where
Self: SraiRv32Emitter<T0, T1, T2>,
Shift right arithmetic immediate
Arithmetic shift (the original sign bit is copied into the vacated upper bits) the value in rs1 right by shamt, and store the result in rd.
§Forms
Assembly: srai.rv32 xd, xs1, shamt
Rust: srai_rv32(rd, rs1, shamtw)
§Arguments
rd— Destination register.rs1— Source register.shamtw— Immediate encoding value.
Sourcepub fn sraiw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtw: T2)where
Self: SraiwEmitter<T0, T1, T2>,
pub fn sraiw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtw: T2)where
Self: SraiwEmitter<T0, T1, T2>,
Shift right arithmetic immediate word
Arithmetic shift (the original sign bit is copied into the vacated upper bits) the 32-bit value in rs1 right by shamt, and store the sign-extended result in rd.
§Forms
Assembly: sraiw xd, xs1, shamt
Rust: sraiw(rd, rs1, shamtw)
§Arguments
rd— Destination register.rs1— Source register.shamtw— Immediate encoding value.
Sourcepub fn sraw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: SrawEmitter<T0, T1, T2>,
pub fn sraw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: SrawEmitter<T0, T1, T2>,
Shift right arithmetic word
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.
§Forms
Assembly: sraw xd, xs1, xs2
Rust: sraw(rd, rs1, rs2)
§Arguments
rd— Destination register.rs1— Source register.rs2— Source register.
Sourcepub fn sret(&mut self)where
Self: SretEmitter,
pub fn sret(&mut self)where
Self: SretEmitter,
Supervisor Exception Return
Returns from an exception.
When sret is allowed to execute, its behavior depends on whether or not the current privilege
mode is virtualized.
When the current privilege mode is (H)S-mode or M-mode
sret sets hstatus.HPV = 0, mstatus.SPP = 0,
mstatus.SIE = mstatus.SPIE, and mstatus.SPIE = 1,
changes the privilege mode according to the table below,
and then jumps to the address in sepc.
.Next privilege mode following an sret in (H)S-mode or M-mode
[%autowidth]
|===
| [.rotate]#mstatus.SPP# | [.rotate]#hstatus.SPV# .>| Mode after sret
| 0 | 0 | U-mode | 0 | 1 | VU-mode | 1 | 0 | (H)S-mode | 1 | 1 | VS-mode |===
When the current privilege mode is VS-mode
sret sets
vsstatus.SPP = 0, vsstatus.SIE = vstatus.SPIE, and vsstatus.SPIE = 1,
changes the privilege mode according to the table below,
and then jumps to the address in vsepc.
.Next privilege mode following an sret in (H)S-mode or M-mode
[%autowidth]
|===
| [.rotate]#vsstatus.SPP# .>| Mode after sret
| 0 | VU-mode | 1 | VS-mode |===
§Forms
Assembly: sret ""
Rust: sret()
§Arguments
Sourcepub fn srl<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: SrlEmitter<T0, T1, T2>,
pub fn srl<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: SrlEmitter<T0, T1, T2>,
Sourcepub fn srli<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtd: T2)where
Self: SrliEmitter<T0, T1, T2>,
pub fn srli<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtd: T2)where
Self: SrliEmitter<T0, T1, T2>,
Sourcepub fn srli_rv32<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtw: T2)where
Self: SrliRv32Emitter<T0, T1, T2>,
pub fn srli_rv32<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtw: T2)where
Self: SrliRv32Emitter<T0, T1, T2>,
Sourcepub fn srliw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtw: T2)where
Self: SrliwEmitter<T0, T1, T2>,
pub fn srliw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, shamtw: T2)where
Self: SrliwEmitter<T0, T1, T2>,
Sourcepub fn srlw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: SrlwEmitter<T0, T1, T2>,
pub fn srlw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: SrlwEmitter<T0, T1, T2>,
Sourcepub fn ssamoswap_d<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: SsamoswapDEmitter<T0, T1, T2, T3, T4>,
pub fn ssamoswap_d<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: SsamoswapDEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn ssamoswap_w<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: SsamoswapWEmitter<T0, T1, T2, T3, T4>,
pub fn ssamoswap_w<T0, T1, T2, T3, T4>(
&mut self,
rd: T0,
rs1: T1,
rs2: T2,
aq: T3,
rl: T4,
)where
Self: SsamoswapWEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn sspopchk_x1(&mut self)where
Self: SspopchkX1Emitter,
pub fn sspopchk_x1(&mut self)where
Self: SspopchkX1Emitter,
Sourcepub fn sspopchk_x5(&mut self)where
Self: SspopchkX5Emitter,
pub fn sspopchk_x5(&mut self)where
Self: SspopchkX5Emitter,
Sourcepub fn sspush_x1(&mut self)where
Self: SspushX1Emitter,
pub fn sspush_x1(&mut self)where
Self: SspushX1Emitter,
Sourcepub fn sspush_x5(&mut self)where
Self: SspushX5Emitter,
pub fn sspush_x5(&mut self)where
Self: SspushX5Emitter,
Sourcepub fn ssrdp<T0>(&mut self, rd: T0)where
Self: SsrdpEmitter<T0>,
pub fn ssrdp<T0>(&mut self, rd: T0)where
Self: SsrdpEmitter<T0>,
Sourcepub fn sub<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: SubEmitter<T0, T1, T2>,
pub fn sub<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: SubEmitter<T0, T1, T2>,
Sourcepub fn subw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: SubwEmitter<T0, T1, T2>,
pub fn subw<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: SubwEmitter<T0, T1, T2>,
Sourcepub fn unzip<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: UnzipEmitter<T0, T1>,
pub fn unzip<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: UnzipEmitter<T0, T1>,
Bit deinterleave
This instruction gathers bits from the high and low halves of the source word into odd/even bit positions in the destination word. It is the inverse of the zip instruction. This instruction is available only on RV32.
§Forms
Assembly: unzip xd, xs1
Rust: unzip(rd, rs1)
§Arguments
rd— Destination register.rs1— Source register.
Sourcepub fn vaadd_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VaaddVvEmitter<T0, T1, T2, T3>,
pub fn vaadd_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VaaddVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vaadd_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VaaddVxEmitter<T0, T1, T2, T3>,
pub fn vaadd_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VaaddVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vaaddu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VaadduVvEmitter<T0, T1, T2, T3>,
pub fn vaaddu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VaadduVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vaaddu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VaadduVxEmitter<T0, T1, T2, T3>,
pub fn vaaddu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VaadduVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vadc_vim<T0, T1, T2>(&mut self, vd: T0, vs2: T1, simm5: T2)where
Self: VadcVimEmitter<T0, T1, T2>,
pub fn vadc_vim<T0, T1, T2>(&mut self, vd: T0, vs2: T1, simm5: T2)where
Self: VadcVimEmitter<T0, T1, T2>,
Sourcepub fn vadc_vvm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: VadcVvmEmitter<T0, T1, T2>,
pub fn vadc_vvm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: VadcVvmEmitter<T0, T1, T2>,
Sourcepub fn vadc_vxm<T0, T1, T2>(&mut self, vd: T0, rs1: T1, vs2: T2)where
Self: VadcVxmEmitter<T0, T1, T2>,
pub fn vadc_vxm<T0, T1, T2>(&mut self, vd: T0, rs1: T1, vs2: T2)where
Self: VadcVxmEmitter<T0, T1, T2>,
Sourcepub fn vadd_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)where
Self: VaddViEmitter<T0, T1, T2, T3>,
pub fn vadd_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)where
Self: VaddViEmitter<T0, T1, T2, T3>,
Sourcepub fn vadd_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VaddVvEmitter<T0, T1, T2, T3>,
pub fn vadd_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VaddVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vadd_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VaddVxEmitter<T0, T1, T2, T3>,
pub fn vadd_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VaddVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vaesdf_vs<T0, T1>(&mut self, vd: T0, vs2: T1)where
Self: VaesdfVsEmitter<T0, T1>,
pub fn vaesdf_vs<T0, T1>(&mut self, vd: T0, vs2: T1)where
Self: VaesdfVsEmitter<T0, T1>,
Sourcepub fn vaesdf_vv<T0, T1>(&mut self, vd: T0, vs2: T1)where
Self: VaesdfVvEmitter<T0, T1>,
pub fn vaesdf_vv<T0, T1>(&mut self, vd: T0, vs2: T1)where
Self: VaesdfVvEmitter<T0, T1>,
Sourcepub fn vaesdm_vs<T0, T1>(&mut self, vd: T0, vs2: T1)where
Self: VaesdmVsEmitter<T0, T1>,
pub fn vaesdm_vs<T0, T1>(&mut self, vd: T0, vs2: T1)where
Self: VaesdmVsEmitter<T0, T1>,
Sourcepub fn vaesdm_vv<T0, T1>(&mut self, vd: T0, vs2: T1)where
Self: VaesdmVvEmitter<T0, T1>,
pub fn vaesdm_vv<T0, T1>(&mut self, vd: T0, vs2: T1)where
Self: VaesdmVvEmitter<T0, T1>,
Sourcepub fn vaesef_vs<T0, T1>(&mut self, vd: T0, vs2: T1)where
Self: VaesefVsEmitter<T0, T1>,
pub fn vaesef_vs<T0, T1>(&mut self, vd: T0, vs2: T1)where
Self: VaesefVsEmitter<T0, T1>,
Sourcepub fn vaesef_vv<T0, T1>(&mut self, vd: T0, vs2: T1)where
Self: VaesefVvEmitter<T0, T1>,
pub fn vaesef_vv<T0, T1>(&mut self, vd: T0, vs2: T1)where
Self: VaesefVvEmitter<T0, T1>,
Sourcepub fn vaesem_vs<T0, T1>(&mut self, vd: T0, vs2: T1)where
Self: VaesemVsEmitter<T0, T1>,
pub fn vaesem_vs<T0, T1>(&mut self, vd: T0, vs2: T1)where
Self: VaesemVsEmitter<T0, T1>,
Sourcepub fn vaesem_vv<T0, T1>(&mut self, vd: T0, vs2: T1)where
Self: VaesemVvEmitter<T0, T1>,
pub fn vaesem_vv<T0, T1>(&mut self, vd: T0, vs2: T1)where
Self: VaesemVvEmitter<T0, T1>,
Sourcepub fn vaeskf1_vi<T0, T1, T2>(&mut self, vd: T0, vs2: T1, zimm5: T2)where
Self: Vaeskf1ViEmitter<T0, T1, T2>,
pub fn vaeskf1_vi<T0, T1, T2>(&mut self, vd: T0, vs2: T1, zimm5: T2)where
Self: Vaeskf1ViEmitter<T0, T1, T2>,
Sourcepub fn vaeskf2_vi<T0, T1, T2>(&mut self, vd: T0, vs2: T1, zimm5: T2)where
Self: Vaeskf2ViEmitter<T0, T1, T2>,
pub fn vaeskf2_vi<T0, T1, T2>(&mut self, vd: T0, vs2: T1, zimm5: T2)where
Self: Vaeskf2ViEmitter<T0, T1, T2>,
Sourcepub fn vaesz_vs<T0, T1>(&mut self, vd: T0, vs2: T1)where
Self: VaeszVsEmitter<T0, T1>,
pub fn vaesz_vs<T0, T1>(&mut self, vd: T0, vs2: T1)where
Self: VaeszVsEmitter<T0, T1>,
Sourcepub fn vand_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)where
Self: VandViEmitter<T0, T1, T2, T3>,
pub fn vand_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)where
Self: VandViEmitter<T0, T1, T2, T3>,
Sourcepub fn vand_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VandVvEmitter<T0, T1, T2, T3>,
pub fn vand_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VandVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vand_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VandVxEmitter<T0, T1, T2, T3>,
pub fn vand_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VandVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vandn_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VandnVvEmitter<T0, T1, T2, T3>,
pub fn vandn_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VandnVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vandn_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VandnVxEmitter<T0, T1, T2, T3>,
pub fn vandn_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VandnVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vasub_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VasubVvEmitter<T0, T1, T2, T3>,
pub fn vasub_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VasubVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vasub_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VasubVxEmitter<T0, T1, T2, T3>,
pub fn vasub_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VasubVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vasubu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VasubuVvEmitter<T0, T1, T2, T3>,
pub fn vasubu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VasubuVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vasubu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VasubuVxEmitter<T0, T1, T2, T3>,
pub fn vasubu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VasubuVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vbrev8_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: Vbrev8VEmitter<T0, T1, T2>,
pub fn vbrev8_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: Vbrev8VEmitter<T0, T1, T2>,
Sourcepub fn vbrev_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VbrevVEmitter<T0, T1, T2>,
pub fn vbrev_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VbrevVEmitter<T0, T1, T2>,
Sourcepub fn vclmul_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VclmulVvEmitter<T0, T1, T2, T3>,
pub fn vclmul_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VclmulVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vclmul_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VclmulVxEmitter<T0, T1, T2, T3>,
pub fn vclmul_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VclmulVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vclmulh_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VclmulhVvEmitter<T0, T1, T2, T3>,
pub fn vclmulh_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VclmulhVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vclmulh_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VclmulhVxEmitter<T0, T1, T2, T3>,
pub fn vclmulh_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VclmulhVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vclz_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VclzVEmitter<T0, T1, T2>,
pub fn vclz_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VclzVEmitter<T0, T1, T2>,
Sourcepub fn vcompress_vm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: VcompressVmEmitter<T0, T1, T2>,
pub fn vcompress_vm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: VcompressVmEmitter<T0, T1, T2>,
Sourcepub fn vcpop_m<T0, T1, T2>(&mut self, rd: T0, vs2: T1, vm: T2)where
Self: VcpopMEmitter<T0, T1, T2>,
pub fn vcpop_m<T0, T1, T2>(&mut self, rd: T0, vs2: T1, vm: T2)where
Self: VcpopMEmitter<T0, T1, T2>,
Sourcepub fn vcpop_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VcpopVEmitter<T0, T1, T2>,
pub fn vcpop_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VcpopVEmitter<T0, T1, T2>,
Sourcepub fn vctz_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VctzVEmitter<T0, T1, T2>,
pub fn vctz_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VctzVEmitter<T0, T1, T2>,
Sourcepub fn vdiv_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VdivVvEmitter<T0, T1, T2, T3>,
pub fn vdiv_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VdivVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vdiv_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VdivVxEmitter<T0, T1, T2, T3>,
pub fn vdiv_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VdivVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vdivu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VdivuVvEmitter<T0, T1, T2, T3>,
pub fn vdivu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VdivuVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vdivu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VdivuVxEmitter<T0, T1, T2, T3>,
pub fn vdivu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VdivuVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vfadd_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfaddVfEmitter<T0, T1, T2, T3>,
pub fn vfadd_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfaddVfEmitter<T0, T1, T2, T3>,
Sourcepub fn vfadd_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfaddVvEmitter<T0, T1, T2, T3>,
pub fn vfadd_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfaddVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vfclass_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfclassVEmitter<T0, T1, T2>,
pub fn vfclass_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfclassVEmitter<T0, T1, T2>,
Sourcepub fn vfcvt_f_x_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfcvtFXVEmitter<T0, T1, T2>,
pub fn vfcvt_f_x_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfcvtFXVEmitter<T0, T1, T2>,
Sourcepub fn vfcvt_f_xu_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfcvtFXuVEmitter<T0, T1, T2>,
pub fn vfcvt_f_xu_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfcvtFXuVEmitter<T0, T1, T2>,
Sourcepub fn vfcvt_rtz_x_f_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfcvtRtzXFVEmitter<T0, T1, T2>,
pub fn vfcvt_rtz_x_f_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfcvtRtzXFVEmitter<T0, T1, T2>,
Sourcepub fn vfcvt_rtz_xu_f_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfcvtRtzXuFVEmitter<T0, T1, T2>,
pub fn vfcvt_rtz_xu_f_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfcvtRtzXuFVEmitter<T0, T1, T2>,
Sourcepub fn vfcvt_x_f_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfcvtXFVEmitter<T0, T1, T2>,
pub fn vfcvt_x_f_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfcvtXFVEmitter<T0, T1, T2>,
Sourcepub fn vfcvt_xu_f_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfcvtXuFVEmitter<T0, T1, T2>,
pub fn vfcvt_xu_f_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfcvtXuFVEmitter<T0, T1, T2>,
Sourcepub fn vfdiv_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfdivVfEmitter<T0, T1, T2, T3>,
pub fn vfdiv_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfdivVfEmitter<T0, T1, T2, T3>,
Sourcepub fn vfdiv_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfdivVvEmitter<T0, T1, T2, T3>,
pub fn vfdiv_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfdivVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vfirst_m<T0, T1, T2>(&mut self, rd: T0, vs2: T1, vm: T2)where
Self: VfirstMEmitter<T0, T1, T2>,
pub fn vfirst_m<T0, T1, T2>(&mut self, rd: T0, vs2: T1, vm: T2)where
Self: VfirstMEmitter<T0, T1, T2>,
Sourcepub fn vfmacc_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfmaccVfEmitter<T0, T1, T2, T3>,
pub fn vfmacc_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfmaccVfEmitter<T0, T1, T2, T3>,
Sourcepub fn vfmacc_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfmaccVvEmitter<T0, T1, T2, T3>,
pub fn vfmacc_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfmaccVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vfmadd_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfmaddVfEmitter<T0, T1, T2, T3>,
pub fn vfmadd_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfmaddVfEmitter<T0, T1, T2, T3>,
Sourcepub fn vfmadd_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfmaddVvEmitter<T0, T1, T2, T3>,
pub fn vfmadd_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfmaddVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vfmax_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfmaxVfEmitter<T0, T1, T2, T3>,
pub fn vfmax_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfmaxVfEmitter<T0, T1, T2, T3>,
Sourcepub fn vfmax_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfmaxVvEmitter<T0, T1, T2, T3>,
pub fn vfmax_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfmaxVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vfmerge_vfm<T0, T1, T2>(&mut self, vd: T0, rs1: T1, vs2: T2)where
Self: VfmergeVfmEmitter<T0, T1, T2>,
pub fn vfmerge_vfm<T0, T1, T2>(&mut self, vd: T0, rs1: T1, vs2: T2)where
Self: VfmergeVfmEmitter<T0, T1, T2>,
Sourcepub fn vfmin_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfminVfEmitter<T0, T1, T2, T3>,
pub fn vfmin_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfminVfEmitter<T0, T1, T2, T3>,
Sourcepub fn vfmin_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfminVvEmitter<T0, T1, T2, T3>,
pub fn vfmin_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfminVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vfmsac_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfmsacVfEmitter<T0, T1, T2, T3>,
pub fn vfmsac_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfmsacVfEmitter<T0, T1, T2, T3>,
Sourcepub fn vfmsac_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfmsacVvEmitter<T0, T1, T2, T3>,
pub fn vfmsac_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfmsacVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vfmsub_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfmsubVfEmitter<T0, T1, T2, T3>,
pub fn vfmsub_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfmsubVfEmitter<T0, T1, T2, T3>,
Sourcepub fn vfmsub_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfmsubVvEmitter<T0, T1, T2, T3>,
pub fn vfmsub_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfmsubVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vfmul_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfmulVfEmitter<T0, T1, T2, T3>,
pub fn vfmul_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfmulVfEmitter<T0, T1, T2, T3>,
Sourcepub fn vfmul_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfmulVvEmitter<T0, T1, T2, T3>,
pub fn vfmul_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfmulVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vfmv_f_s<T0, T1>(&mut self, rd: T0, vs2: T1)where
Self: VfmvFSEmitter<T0, T1>,
pub fn vfmv_f_s<T0, T1>(&mut self, rd: T0, vs2: T1)where
Self: VfmvFSEmitter<T0, T1>,
Sourcepub fn vfmv_s_f<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: VfmvSFEmitter<T0, T1>,
pub fn vfmv_s_f<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: VfmvSFEmitter<T0, T1>,
Sourcepub fn vfmv_v_f<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: VfmvVFEmitter<T0, T1>,
pub fn vfmv_v_f<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: VfmvVFEmitter<T0, T1>,
Sourcepub fn vfncvt_f_f_w<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfncvtFFWEmitter<T0, T1, T2>,
pub fn vfncvt_f_f_w<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfncvtFFWEmitter<T0, T1, T2>,
Sourcepub fn vfncvt_f_x_w<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfncvtFXWEmitter<T0, T1, T2>,
pub fn vfncvt_f_x_w<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfncvtFXWEmitter<T0, T1, T2>,
Sourcepub fn vfncvt_f_xu_w<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfncvtFXuWEmitter<T0, T1, T2>,
pub fn vfncvt_f_xu_w<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfncvtFXuWEmitter<T0, T1, T2>,
Sourcepub fn vfncvt_rod_f_f_w<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfncvtRodFFWEmitter<T0, T1, T2>,
pub fn vfncvt_rod_f_f_w<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfncvtRodFFWEmitter<T0, T1, T2>,
Sourcepub fn vfncvt_rtz_x_f_w<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfncvtRtzXFWEmitter<T0, T1, T2>,
pub fn vfncvt_rtz_x_f_w<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfncvtRtzXFWEmitter<T0, T1, T2>,
Sourcepub fn vfncvt_rtz_xu_f_w<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfncvtRtzXuFWEmitter<T0, T1, T2>,
pub fn vfncvt_rtz_xu_f_w<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfncvtRtzXuFWEmitter<T0, T1, T2>,
Sourcepub fn vfncvt_x_f_w<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfncvtXFWEmitter<T0, T1, T2>,
pub fn vfncvt_x_f_w<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfncvtXFWEmitter<T0, T1, T2>,
Sourcepub fn vfncvt_xu_f_w<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfncvtXuFWEmitter<T0, T1, T2>,
pub fn vfncvt_xu_f_w<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfncvtXuFWEmitter<T0, T1, T2>,
Sourcepub fn vfncvtbf16_f_f_w<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: Vfncvtbf16FFWEmitter<T0, T1, T2>,
pub fn vfncvtbf16_f_f_w<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: Vfncvtbf16FFWEmitter<T0, T1, T2>,
Sourcepub fn vfnmacc_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfnmaccVfEmitter<T0, T1, T2, T3>,
pub fn vfnmacc_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfnmaccVfEmitter<T0, T1, T2, T3>,
Sourcepub fn vfnmacc_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfnmaccVvEmitter<T0, T1, T2, T3>,
pub fn vfnmacc_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfnmaccVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vfnmadd_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfnmaddVfEmitter<T0, T1, T2, T3>,
pub fn vfnmadd_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfnmaddVfEmitter<T0, T1, T2, T3>,
Sourcepub fn vfnmadd_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfnmaddVvEmitter<T0, T1, T2, T3>,
pub fn vfnmadd_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfnmaddVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vfnmsac_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfnmsacVfEmitter<T0, T1, T2, T3>,
pub fn vfnmsac_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfnmsacVfEmitter<T0, T1, T2, T3>,
Sourcepub fn vfnmsac_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfnmsacVvEmitter<T0, T1, T2, T3>,
pub fn vfnmsac_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfnmsacVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vfnmsub_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfnmsubVfEmitter<T0, T1, T2, T3>,
pub fn vfnmsub_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfnmsubVfEmitter<T0, T1, T2, T3>,
Sourcepub fn vfnmsub_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfnmsubVvEmitter<T0, T1, T2, T3>,
pub fn vfnmsub_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfnmsubVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vfrdiv_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfrdivVfEmitter<T0, T1, T2, T3>,
pub fn vfrdiv_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfrdivVfEmitter<T0, T1, T2, T3>,
Sourcepub fn vfrec7_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: Vfrec7VEmitter<T0, T1, T2>,
pub fn vfrec7_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: Vfrec7VEmitter<T0, T1, T2>,
Sourcepub fn vfredmax_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfredmaxVsEmitter<T0, T1, T2, T3>,
pub fn vfredmax_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfredmaxVsEmitter<T0, T1, T2, T3>,
Sourcepub fn vfredmin_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfredminVsEmitter<T0, T1, T2, T3>,
pub fn vfredmin_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfredminVsEmitter<T0, T1, T2, T3>,
Sourcepub fn vfredosum_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfredosumVsEmitter<T0, T1, T2, T3>,
pub fn vfredosum_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfredosumVsEmitter<T0, T1, T2, T3>,
Sourcepub fn vfredsum_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfredsumVsEmitter<T0, T1, T2, T3>,
pub fn vfredsum_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfredsumVsEmitter<T0, T1, T2, T3>,
Sourcepub fn vfredusum_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfredusumVsEmitter<T0, T1, T2, T3>,
pub fn vfredusum_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfredusumVsEmitter<T0, T1, T2, T3>,
Sourcepub fn vfrsqrt7_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: Vfrsqrt7VEmitter<T0, T1, T2>,
pub fn vfrsqrt7_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: Vfrsqrt7VEmitter<T0, T1, T2>,
Sourcepub fn vfrsub_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfrsubVfEmitter<T0, T1, T2, T3>,
pub fn vfrsub_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfrsubVfEmitter<T0, T1, T2, T3>,
Sourcepub fn vfsgnj_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfsgnjVfEmitter<T0, T1, T2, T3>,
pub fn vfsgnj_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfsgnjVfEmitter<T0, T1, T2, T3>,
Sourcepub fn vfsgnj_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfsgnjVvEmitter<T0, T1, T2, T3>,
pub fn vfsgnj_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfsgnjVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vfsgnjn_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfsgnjnVfEmitter<T0, T1, T2, T3>,
pub fn vfsgnjn_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfsgnjnVfEmitter<T0, T1, T2, T3>,
Sourcepub fn vfsgnjn_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfsgnjnVvEmitter<T0, T1, T2, T3>,
pub fn vfsgnjn_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfsgnjnVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vfsgnjx_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfsgnjxVfEmitter<T0, T1, T2, T3>,
pub fn vfsgnjx_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfsgnjxVfEmitter<T0, T1, T2, T3>,
Sourcepub fn vfsgnjx_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfsgnjxVvEmitter<T0, T1, T2, T3>,
pub fn vfsgnjx_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfsgnjxVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vfslide1down_vf<T0, T1, T2, T3>(
&mut self,
vd: T0,
vs2: T1,
rs1: T2,
vm: T3,
)where
Self: Vfslide1DownVfEmitter<T0, T1, T2, T3>,
pub fn vfslide1down_vf<T0, T1, T2, T3>(
&mut self,
vd: T0,
vs2: T1,
rs1: T2,
vm: T3,
)where
Self: Vfslide1DownVfEmitter<T0, T1, T2, T3>,
Sourcepub fn vfslide1up_vf<T0, T1, T2, T3>(
&mut self,
vd: T0,
vs2: T1,
rs1: T2,
vm: T3,
)where
Self: Vfslide1UpVfEmitter<T0, T1, T2, T3>,
pub fn vfslide1up_vf<T0, T1, T2, T3>(
&mut self,
vd: T0,
vs2: T1,
rs1: T2,
vm: T3,
)where
Self: Vfslide1UpVfEmitter<T0, T1, T2, T3>,
Sourcepub fn vfsqrt_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfsqrtVEmitter<T0, T1, T2>,
pub fn vfsqrt_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfsqrtVEmitter<T0, T1, T2>,
Sourcepub fn vfsub_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfsubVfEmitter<T0, T1, T2, T3>,
pub fn vfsub_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfsubVfEmitter<T0, T1, T2, T3>,
Sourcepub fn vfsub_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfsubVvEmitter<T0, T1, T2, T3>,
pub fn vfsub_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfsubVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vfwadd_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfwaddVfEmitter<T0, T1, T2, T3>,
pub fn vfwadd_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfwaddVfEmitter<T0, T1, T2, T3>,
Sourcepub fn vfwadd_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfwaddVvEmitter<T0, T1, T2, T3>,
pub fn vfwadd_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfwaddVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vfwadd_wf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfwaddWfEmitter<T0, T1, T2, T3>,
pub fn vfwadd_wf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfwaddWfEmitter<T0, T1, T2, T3>,
Sourcepub fn vfwadd_wv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfwaddWvEmitter<T0, T1, T2, T3>,
pub fn vfwadd_wv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfwaddWvEmitter<T0, T1, T2, T3>,
Sourcepub fn vfwcvt_f_f_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfwcvtFFVEmitter<T0, T1, T2>,
pub fn vfwcvt_f_f_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfwcvtFFVEmitter<T0, T1, T2>,
Sourcepub fn vfwcvt_f_x_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfwcvtFXVEmitter<T0, T1, T2>,
pub fn vfwcvt_f_x_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfwcvtFXVEmitter<T0, T1, T2>,
Sourcepub fn vfwcvt_f_xu_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfwcvtFXuVEmitter<T0, T1, T2>,
pub fn vfwcvt_f_xu_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfwcvtFXuVEmitter<T0, T1, T2>,
Sourcepub fn vfwcvt_rtz_x_f_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfwcvtRtzXFVEmitter<T0, T1, T2>,
pub fn vfwcvt_rtz_x_f_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfwcvtRtzXFVEmitter<T0, T1, T2>,
Sourcepub fn vfwcvt_rtz_xu_f_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfwcvtRtzXuFVEmitter<T0, T1, T2>,
pub fn vfwcvt_rtz_xu_f_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfwcvtRtzXuFVEmitter<T0, T1, T2>,
Sourcepub fn vfwcvt_x_f_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfwcvtXFVEmitter<T0, T1, T2>,
pub fn vfwcvt_x_f_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfwcvtXFVEmitter<T0, T1, T2>,
Sourcepub fn vfwcvt_xu_f_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfwcvtXuFVEmitter<T0, T1, T2>,
pub fn vfwcvt_xu_f_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VfwcvtXuFVEmitter<T0, T1, T2>,
Sourcepub fn vfwcvtbf16_f_f_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: Vfwcvtbf16FFVEmitter<T0, T1, T2>,
pub fn vfwcvtbf16_f_f_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: Vfwcvtbf16FFVEmitter<T0, T1, T2>,
Sourcepub fn vfwmacc_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfwmaccVfEmitter<T0, T1, T2, T3>,
pub fn vfwmacc_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfwmaccVfEmitter<T0, T1, T2, T3>,
Sourcepub fn vfwmacc_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfwmaccVvEmitter<T0, T1, T2, T3>,
pub fn vfwmacc_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfwmaccVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vfwmaccbf16_vf<T0, T1, T2, T3>(
&mut self,
vd: T0,
vs2: T1,
rs1: T2,
vm: T3,
)where
Self: Vfwmaccbf16VfEmitter<T0, T1, T2, T3>,
pub fn vfwmaccbf16_vf<T0, T1, T2, T3>(
&mut self,
vd: T0,
vs2: T1,
rs1: T2,
vm: T3,
)where
Self: Vfwmaccbf16VfEmitter<T0, T1, T2, T3>,
Sourcepub fn vfwmaccbf16_vv<T0, T1, T2, T3>(
&mut self,
vd: T0,
vs1: T1,
vs2: T2,
vm: T3,
)where
Self: Vfwmaccbf16VvEmitter<T0, T1, T2, T3>,
pub fn vfwmaccbf16_vv<T0, T1, T2, T3>(
&mut self,
vd: T0,
vs1: T1,
vs2: T2,
vm: T3,
)where
Self: Vfwmaccbf16VvEmitter<T0, T1, T2, T3>,
Sourcepub fn vfwmsac_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfwmsacVfEmitter<T0, T1, T2, T3>,
pub fn vfwmsac_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfwmsacVfEmitter<T0, T1, T2, T3>,
Sourcepub fn vfwmsac_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfwmsacVvEmitter<T0, T1, T2, T3>,
pub fn vfwmsac_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfwmsacVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vfwmul_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfwmulVfEmitter<T0, T1, T2, T3>,
pub fn vfwmul_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfwmulVfEmitter<T0, T1, T2, T3>,
Sourcepub fn vfwmul_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfwmulVvEmitter<T0, T1, T2, T3>,
pub fn vfwmul_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfwmulVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vfwnmacc_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfwnmaccVfEmitter<T0, T1, T2, T3>,
pub fn vfwnmacc_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfwnmaccVfEmitter<T0, T1, T2, T3>,
Sourcepub fn vfwnmacc_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfwnmaccVvEmitter<T0, T1, T2, T3>,
pub fn vfwnmacc_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfwnmaccVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vfwnmsac_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfwnmsacVfEmitter<T0, T1, T2, T3>,
pub fn vfwnmsac_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfwnmsacVfEmitter<T0, T1, T2, T3>,
Sourcepub fn vfwnmsac_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfwnmsacVvEmitter<T0, T1, T2, T3>,
pub fn vfwnmsac_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfwnmsacVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vfwredosum_vs<T0, T1, T2, T3>(
&mut self,
vd: T0,
vs1: T1,
vs2: T2,
vm: T3,
)where
Self: VfwredosumVsEmitter<T0, T1, T2, T3>,
pub fn vfwredosum_vs<T0, T1, T2, T3>(
&mut self,
vd: T0,
vs1: T1,
vs2: T2,
vm: T3,
)where
Self: VfwredosumVsEmitter<T0, T1, T2, T3>,
Sourcepub fn vfwredsum_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfwredsumVsEmitter<T0, T1, T2, T3>,
pub fn vfwredsum_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfwredsumVsEmitter<T0, T1, T2, T3>,
Sourcepub fn vfwredusum_vs<T0, T1, T2, T3>(
&mut self,
vd: T0,
vs1: T1,
vs2: T2,
vm: T3,
)where
Self: VfwredusumVsEmitter<T0, T1, T2, T3>,
pub fn vfwredusum_vs<T0, T1, T2, T3>(
&mut self,
vd: T0,
vs1: T1,
vs2: T2,
vm: T3,
)where
Self: VfwredusumVsEmitter<T0, T1, T2, T3>,
Sourcepub fn vfwsub_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfwsubVfEmitter<T0, T1, T2, T3>,
pub fn vfwsub_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfwsubVfEmitter<T0, T1, T2, T3>,
Sourcepub fn vfwsub_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfwsubVvEmitter<T0, T1, T2, T3>,
pub fn vfwsub_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfwsubVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vfwsub_wf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfwsubWfEmitter<T0, T1, T2, T3>,
pub fn vfwsub_wf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VfwsubWfEmitter<T0, T1, T2, T3>,
Sourcepub fn vfwsub_wv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfwsubWvEmitter<T0, T1, T2, T3>,
pub fn vfwsub_wv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VfwsubWvEmitter<T0, T1, T2, T3>,
Sourcepub fn vghsh_vv<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: VghshVvEmitter<T0, T1, T2>,
pub fn vghsh_vv<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: VghshVvEmitter<T0, T1, T2>,
Sourcepub fn vgmul_vv<T0, T1>(&mut self, vd: T0, vs2: T1)where
Self: VgmulVvEmitter<T0, T1>,
pub fn vgmul_vv<T0, T1>(&mut self, vd: T0, vs2: T1)where
Self: VgmulVvEmitter<T0, T1>,
Sourcepub fn vid_v<T0, T1>(&mut self, vd: T0, vm: T1)where
Self: VidVEmitter<T0, T1>,
pub fn vid_v<T0, T1>(&mut self, vd: T0, vm: T1)where
Self: VidVEmitter<T0, T1>,
Sourcepub fn viota_m<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: ViotaMEmitter<T0, T1, T2>,
pub fn viota_m<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: ViotaMEmitter<T0, T1, T2>,
Sourcepub fn vl1r_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl1RVEmitter<T0, T1>,
pub fn vl1r_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl1RVEmitter<T0, T1>,
Sourcepub fn vl1re16_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl1Re16VEmitter<T0, T1>,
pub fn vl1re16_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl1Re16VEmitter<T0, T1>,
Sourcepub fn vl1re32_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl1Re32VEmitter<T0, T1>,
pub fn vl1re32_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl1Re32VEmitter<T0, T1>,
Sourcepub fn vl1re64_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl1Re64VEmitter<T0, T1>,
pub fn vl1re64_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl1Re64VEmitter<T0, T1>,
Sourcepub fn vl1re8_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl1Re8VEmitter<T0, T1>,
pub fn vl1re8_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl1Re8VEmitter<T0, T1>,
Sourcepub fn vl2r_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl2RVEmitter<T0, T1>,
pub fn vl2r_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl2RVEmitter<T0, T1>,
Sourcepub fn vl2re16_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl2Re16VEmitter<T0, T1>,
pub fn vl2re16_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl2Re16VEmitter<T0, T1>,
Sourcepub fn vl2re32_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl2Re32VEmitter<T0, T1>,
pub fn vl2re32_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl2Re32VEmitter<T0, T1>,
Sourcepub fn vl2re64_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl2Re64VEmitter<T0, T1>,
pub fn vl2re64_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl2Re64VEmitter<T0, T1>,
Sourcepub fn vl2re8_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl2Re8VEmitter<T0, T1>,
pub fn vl2re8_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl2Re8VEmitter<T0, T1>,
Sourcepub fn vl4r_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl4RVEmitter<T0, T1>,
pub fn vl4r_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl4RVEmitter<T0, T1>,
Sourcepub fn vl4re16_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl4Re16VEmitter<T0, T1>,
pub fn vl4re16_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl4Re16VEmitter<T0, T1>,
Sourcepub fn vl4re32_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl4Re32VEmitter<T0, T1>,
pub fn vl4re32_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl4Re32VEmitter<T0, T1>,
Sourcepub fn vl4re64_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl4Re64VEmitter<T0, T1>,
pub fn vl4re64_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl4Re64VEmitter<T0, T1>,
Sourcepub fn vl4re8_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl4Re8VEmitter<T0, T1>,
pub fn vl4re8_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl4Re8VEmitter<T0, T1>,
Sourcepub fn vl8r_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl8RVEmitter<T0, T1>,
pub fn vl8r_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl8RVEmitter<T0, T1>,
Sourcepub fn vl8re16_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl8Re16VEmitter<T0, T1>,
pub fn vl8re16_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl8Re16VEmitter<T0, T1>,
Sourcepub fn vl8re32_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl8Re32VEmitter<T0, T1>,
pub fn vl8re32_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl8Re32VEmitter<T0, T1>,
Sourcepub fn vl8re64_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl8Re64VEmitter<T0, T1>,
pub fn vl8re64_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl8Re64VEmitter<T0, T1>,
Sourcepub fn vl8re8_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl8Re8VEmitter<T0, T1>,
pub fn vl8re8_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vl8Re8VEmitter<T0, T1>,
Sourcepub fn vle16_v<T0, T1, T2, T3>(&mut self, vd: T0, rs1: T1, vm: T2, nf: T3)where
Self: Vle16VEmitter<T0, T1, T2, T3>,
pub fn vle16_v<T0, T1, T2, T3>(&mut self, vd: T0, rs1: T1, vm: T2, nf: T3)where
Self: Vle16VEmitter<T0, T1, T2, T3>,
Sourcepub fn vle16ff_v<T0, T1, T2, T3>(&mut self, vd: T0, rs1: T1, vm: T2, nf: T3)where
Self: Vle16FfVEmitter<T0, T1, T2, T3>,
pub fn vle16ff_v<T0, T1, T2, T3>(&mut self, vd: T0, rs1: T1, vm: T2, nf: T3)where
Self: Vle16FfVEmitter<T0, T1, T2, T3>,
Sourcepub fn vle1_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vle1VEmitter<T0, T1>,
pub fn vle1_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: Vle1VEmitter<T0, T1>,
Sourcepub fn vle32_v<T0, T1, T2, T3>(&mut self, vd: T0, rs1: T1, vm: T2, nf: T3)where
Self: Vle32VEmitter<T0, T1, T2, T3>,
pub fn vle32_v<T0, T1, T2, T3>(&mut self, vd: T0, rs1: T1, vm: T2, nf: T3)where
Self: Vle32VEmitter<T0, T1, T2, T3>,
Sourcepub fn vle32ff_v<T0, T1, T2, T3>(&mut self, vd: T0, rs1: T1, vm: T2, nf: T3)where
Self: Vle32FfVEmitter<T0, T1, T2, T3>,
pub fn vle32ff_v<T0, T1, T2, T3>(&mut self, vd: T0, rs1: T1, vm: T2, nf: T3)where
Self: Vle32FfVEmitter<T0, T1, T2, T3>,
Sourcepub fn vle64_v<T0, T1, T2, T3>(&mut self, vd: T0, rs1: T1, vm: T2, nf: T3)where
Self: Vle64VEmitter<T0, T1, T2, T3>,
pub fn vle64_v<T0, T1, T2, T3>(&mut self, vd: T0, rs1: T1, vm: T2, nf: T3)where
Self: Vle64VEmitter<T0, T1, T2, T3>,
Sourcepub fn vle64ff_v<T0, T1, T2, T3>(&mut self, vd: T0, rs1: T1, vm: T2, nf: T3)where
Self: Vle64FfVEmitter<T0, T1, T2, T3>,
pub fn vle64ff_v<T0, T1, T2, T3>(&mut self, vd: T0, rs1: T1, vm: T2, nf: T3)where
Self: Vle64FfVEmitter<T0, T1, T2, T3>,
Sourcepub fn vle8_v<T0, T1, T2, T3>(&mut self, vd: T0, rs1: T1, vm: T2, nf: T3)where
Self: Vle8VEmitter<T0, T1, T2, T3>,
pub fn vle8_v<T0, T1, T2, T3>(&mut self, vd: T0, rs1: T1, vm: T2, nf: T3)where
Self: Vle8VEmitter<T0, T1, T2, T3>,
Sourcepub fn vle8ff_v<T0, T1, T2, T3>(&mut self, vd: T0, rs1: T1, vm: T2, nf: T3)where
Self: Vle8FfVEmitter<T0, T1, T2, T3>,
pub fn vle8ff_v<T0, T1, T2, T3>(&mut self, vd: T0, rs1: T1, vm: T2, nf: T3)where
Self: Vle8FfVEmitter<T0, T1, T2, T3>,
Sourcepub fn vlm_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: VlmVEmitter<T0, T1>,
pub fn vlm_v<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: VlmVEmitter<T0, T1>,
Sourcepub fn vloxei16_v<T0, T1, T2, T3, T4>(
&mut self,
vd: T0,
rs1: T1,
vs2: T2,
vm: T3,
nf: T4,
)where
Self: Vloxei16VEmitter<T0, T1, T2, T3, T4>,
pub fn vloxei16_v<T0, T1, T2, T3, T4>(
&mut self,
vd: T0,
rs1: T1,
vs2: T2,
vm: T3,
nf: T4,
)where
Self: Vloxei16VEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn vloxei32_v<T0, T1, T2, T3, T4>(
&mut self,
vd: T0,
rs1: T1,
vs2: T2,
vm: T3,
nf: T4,
)where
Self: Vloxei32VEmitter<T0, T1, T2, T3, T4>,
pub fn vloxei32_v<T0, T1, T2, T3, T4>(
&mut self,
vd: T0,
rs1: T1,
vs2: T2,
vm: T3,
nf: T4,
)where
Self: Vloxei32VEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn vloxei64_v<T0, T1, T2, T3, T4>(
&mut self,
vd: T0,
rs1: T1,
vs2: T2,
vm: T3,
nf: T4,
)where
Self: Vloxei64VEmitter<T0, T1, T2, T3, T4>,
pub fn vloxei64_v<T0, T1, T2, T3, T4>(
&mut self,
vd: T0,
rs1: T1,
vs2: T2,
vm: T3,
nf: T4,
)where
Self: Vloxei64VEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn vloxei8_v<T0, T1, T2, T3, T4>(
&mut self,
vd: T0,
rs1: T1,
vs2: T2,
vm: T3,
nf: T4,
)where
Self: Vloxei8VEmitter<T0, T1, T2, T3, T4>,
pub fn vloxei8_v<T0, T1, T2, T3, T4>(
&mut self,
vd: T0,
rs1: T1,
vs2: T2,
vm: T3,
nf: T4,
)where
Self: Vloxei8VEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn vlse16_v<T0, T1, T2, T3, T4>(
&mut self,
vd: T0,
rs1: T1,
rs2: T2,
vm: T3,
nf: T4,
)where
Self: Vlse16VEmitter<T0, T1, T2, T3, T4>,
pub fn vlse16_v<T0, T1, T2, T3, T4>(
&mut self,
vd: T0,
rs1: T1,
rs2: T2,
vm: T3,
nf: T4,
)where
Self: Vlse16VEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn vlse32_v<T0, T1, T2, T3, T4>(
&mut self,
vd: T0,
rs1: T1,
rs2: T2,
vm: T3,
nf: T4,
)where
Self: Vlse32VEmitter<T0, T1, T2, T3, T4>,
pub fn vlse32_v<T0, T1, T2, T3, T4>(
&mut self,
vd: T0,
rs1: T1,
rs2: T2,
vm: T3,
nf: T4,
)where
Self: Vlse32VEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn vlse64_v<T0, T1, T2, T3, T4>(
&mut self,
vd: T0,
rs1: T1,
rs2: T2,
vm: T3,
nf: T4,
)where
Self: Vlse64VEmitter<T0, T1, T2, T3, T4>,
pub fn vlse64_v<T0, T1, T2, T3, T4>(
&mut self,
vd: T0,
rs1: T1,
rs2: T2,
vm: T3,
nf: T4,
)where
Self: Vlse64VEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn vlse8_v<T0, T1, T2, T3, T4>(
&mut self,
vd: T0,
rs1: T1,
rs2: T2,
vm: T3,
nf: T4,
)where
Self: Vlse8VEmitter<T0, T1, T2, T3, T4>,
pub fn vlse8_v<T0, T1, T2, T3, T4>(
&mut self,
vd: T0,
rs1: T1,
rs2: T2,
vm: T3,
nf: T4,
)where
Self: Vlse8VEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn vluxei16_v<T0, T1, T2, T3, T4>(
&mut self,
vd: T0,
rs1: T1,
vs2: T2,
vm: T3,
nf: T4,
)where
Self: Vluxei16VEmitter<T0, T1, T2, T3, T4>,
pub fn vluxei16_v<T0, T1, T2, T3, T4>(
&mut self,
vd: T0,
rs1: T1,
vs2: T2,
vm: T3,
nf: T4,
)where
Self: Vluxei16VEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn vluxei32_v<T0, T1, T2, T3, T4>(
&mut self,
vd: T0,
rs1: T1,
vs2: T2,
vm: T3,
nf: T4,
)where
Self: Vluxei32VEmitter<T0, T1, T2, T3, T4>,
pub fn vluxei32_v<T0, T1, T2, T3, T4>(
&mut self,
vd: T0,
rs1: T1,
vs2: T2,
vm: T3,
nf: T4,
)where
Self: Vluxei32VEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn vluxei64_v<T0, T1, T2, T3, T4>(
&mut self,
vd: T0,
rs1: T1,
vs2: T2,
vm: T3,
nf: T4,
)where
Self: Vluxei64VEmitter<T0, T1, T2, T3, T4>,
pub fn vluxei64_v<T0, T1, T2, T3, T4>(
&mut self,
vd: T0,
rs1: T1,
vs2: T2,
vm: T3,
nf: T4,
)where
Self: Vluxei64VEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn vluxei8_v<T0, T1, T2, T3, T4>(
&mut self,
vd: T0,
rs1: T1,
vs2: T2,
vm: T3,
nf: T4,
)where
Self: Vluxei8VEmitter<T0, T1, T2, T3, T4>,
pub fn vluxei8_v<T0, T1, T2, T3, T4>(
&mut self,
vd: T0,
rs1: T1,
vs2: T2,
vm: T3,
nf: T4,
)where
Self: Vluxei8VEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn vmacc_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmaccVvEmitter<T0, T1, T2, T3>,
pub fn vmacc_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmaccVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vmacc_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmaccVxEmitter<T0, T1, T2, T3>,
pub fn vmacc_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmaccVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vmadc_vi<T0, T1, T2>(&mut self, vd: T0, vs2: T1, simm5: T2)where
Self: VmadcViEmitter<T0, T1, T2>,
pub fn vmadc_vi<T0, T1, T2>(&mut self, vd: T0, vs2: T1, simm5: T2)where
Self: VmadcViEmitter<T0, T1, T2>,
Sourcepub fn vmadc_vim<T0, T1, T2>(&mut self, vd: T0, vs2: T1, simm5: T2)where
Self: VmadcVimEmitter<T0, T1, T2>,
pub fn vmadc_vim<T0, T1, T2>(&mut self, vd: T0, vs2: T1, simm5: T2)where
Self: VmadcVimEmitter<T0, T1, T2>,
Sourcepub fn vmadc_vv<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: VmadcVvEmitter<T0, T1, T2>,
pub fn vmadc_vv<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: VmadcVvEmitter<T0, T1, T2>,
Sourcepub fn vmadc_vvm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: VmadcVvmEmitter<T0, T1, T2>,
pub fn vmadc_vvm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: VmadcVvmEmitter<T0, T1, T2>,
Sourcepub fn vmadc_vx<T0, T1, T2>(&mut self, vd: T0, rs1: T1, vs2: T2)where
Self: VmadcVxEmitter<T0, T1, T2>,
pub fn vmadc_vx<T0, T1, T2>(&mut self, vd: T0, rs1: T1, vs2: T2)where
Self: VmadcVxEmitter<T0, T1, T2>,
Sourcepub fn vmadc_vxm<T0, T1, T2>(&mut self, vd: T0, rs1: T1, vs2: T2)where
Self: VmadcVxmEmitter<T0, T1, T2>,
pub fn vmadc_vxm<T0, T1, T2>(&mut self, vd: T0, rs1: T1, vs2: T2)where
Self: VmadcVxmEmitter<T0, T1, T2>,
Sourcepub fn vmadd_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmaddVvEmitter<T0, T1, T2, T3>,
pub fn vmadd_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmaddVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vmadd_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmaddVxEmitter<T0, T1, T2, T3>,
pub fn vmadd_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmaddVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vmand_mm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: VmandMmEmitter<T0, T1, T2>,
pub fn vmand_mm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: VmandMmEmitter<T0, T1, T2>,
Sourcepub fn vmandn_mm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: VmandnMmEmitter<T0, T1, T2>,
pub fn vmandn_mm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: VmandnMmEmitter<T0, T1, T2>,
Sourcepub fn vmandnot_mm<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmandnotMmEmitter<T0, T1, T2, T3>,
pub fn vmandnot_mm<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmandnotMmEmitter<T0, T1, T2, T3>,
Sourcepub fn vmax_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmaxVvEmitter<T0, T1, T2, T3>,
pub fn vmax_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmaxVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vmax_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmaxVxEmitter<T0, T1, T2, T3>,
pub fn vmax_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmaxVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vmaxu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmaxuVvEmitter<T0, T1, T2, T3>,
pub fn vmaxu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmaxuVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vmaxu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmaxuVxEmitter<T0, T1, T2, T3>,
pub fn vmaxu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmaxuVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vmerge_vim<T0, T1, T2>(&mut self, vd: T0, vs2: T1, simm5: T2)where
Self: VmergeVimEmitter<T0, T1, T2>,
pub fn vmerge_vim<T0, T1, T2>(&mut self, vd: T0, vs2: T1, simm5: T2)where
Self: VmergeVimEmitter<T0, T1, T2>,
Sourcepub fn vmerge_vvm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: VmergeVvmEmitter<T0, T1, T2>,
pub fn vmerge_vvm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: VmergeVvmEmitter<T0, T1, T2>,
Sourcepub fn vmerge_vxm<T0, T1, T2>(&mut self, vd: T0, rs1: T1, vs2: T2)where
Self: VmergeVxmEmitter<T0, T1, T2>,
pub fn vmerge_vxm<T0, T1, T2>(&mut self, vd: T0, rs1: T1, vs2: T2)where
Self: VmergeVxmEmitter<T0, T1, T2>,
Sourcepub fn vmfeq_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmfeqVfEmitter<T0, T1, T2, T3>,
pub fn vmfeq_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmfeqVfEmitter<T0, T1, T2, T3>,
Sourcepub fn vmfeq_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmfeqVvEmitter<T0, T1, T2, T3>,
pub fn vmfeq_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmfeqVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vmfge_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmfgeVfEmitter<T0, T1, T2, T3>,
pub fn vmfge_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmfgeVfEmitter<T0, T1, T2, T3>,
Sourcepub fn vmfgt_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmfgtVfEmitter<T0, T1, T2, T3>,
pub fn vmfgt_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmfgtVfEmitter<T0, T1, T2, T3>,
Sourcepub fn vmfle_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmfleVfEmitter<T0, T1, T2, T3>,
pub fn vmfle_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmfleVfEmitter<T0, T1, T2, T3>,
Sourcepub fn vmfle_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmfleVvEmitter<T0, T1, T2, T3>,
pub fn vmfle_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmfleVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vmflt_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmfltVfEmitter<T0, T1, T2, T3>,
pub fn vmflt_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmfltVfEmitter<T0, T1, T2, T3>,
Sourcepub fn vmflt_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmfltVvEmitter<T0, T1, T2, T3>,
pub fn vmflt_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmfltVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vmfne_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmfneVfEmitter<T0, T1, T2, T3>,
pub fn vmfne_vf<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmfneVfEmitter<T0, T1, T2, T3>,
Sourcepub fn vmfne_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmfneVvEmitter<T0, T1, T2, T3>,
pub fn vmfne_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmfneVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vmin_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VminVvEmitter<T0, T1, T2, T3>,
pub fn vmin_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VminVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vmin_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VminVxEmitter<T0, T1, T2, T3>,
pub fn vmin_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VminVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vminu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VminuVvEmitter<T0, T1, T2, T3>,
pub fn vminu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VminuVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vminu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VminuVxEmitter<T0, T1, T2, T3>,
pub fn vminu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VminuVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vmnand_mm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: VmnandMmEmitter<T0, T1, T2>,
pub fn vmnand_mm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: VmnandMmEmitter<T0, T1, T2>,
Sourcepub fn vmnor_mm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: VmnorMmEmitter<T0, T1, T2>,
pub fn vmnor_mm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: VmnorMmEmitter<T0, T1, T2>,
Sourcepub fn vmor_mm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: VmorMmEmitter<T0, T1, T2>,
pub fn vmor_mm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: VmorMmEmitter<T0, T1, T2>,
Sourcepub fn vmorn_mm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: VmornMmEmitter<T0, T1, T2>,
pub fn vmorn_mm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: VmornMmEmitter<T0, T1, T2>,
Sourcepub fn vmornot_mm<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmornotMmEmitter<T0, T1, T2, T3>,
pub fn vmornot_mm<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmornotMmEmitter<T0, T1, T2, T3>,
Sourcepub fn vmsbc_vv<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: VmsbcVvEmitter<T0, T1, T2>,
pub fn vmsbc_vv<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: VmsbcVvEmitter<T0, T1, T2>,
Sourcepub fn vmsbc_vvm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: VmsbcVvmEmitter<T0, T1, T2>,
pub fn vmsbc_vvm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: VmsbcVvmEmitter<T0, T1, T2>,
Sourcepub fn vmsbc_vx<T0, T1, T2>(&mut self, vd: T0, rs1: T1, vs2: T2)where
Self: VmsbcVxEmitter<T0, T1, T2>,
pub fn vmsbc_vx<T0, T1, T2>(&mut self, vd: T0, rs1: T1, vs2: T2)where
Self: VmsbcVxEmitter<T0, T1, T2>,
Sourcepub fn vmsbc_vxm<T0, T1, T2>(&mut self, vd: T0, rs1: T1, vs2: T2)where
Self: VmsbcVxmEmitter<T0, T1, T2>,
pub fn vmsbc_vxm<T0, T1, T2>(&mut self, vd: T0, rs1: T1, vs2: T2)where
Self: VmsbcVxmEmitter<T0, T1, T2>,
Sourcepub fn vmsbf_m<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VmsbfMEmitter<T0, T1, T2>,
pub fn vmsbf_m<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VmsbfMEmitter<T0, T1, T2>,
Sourcepub fn vmseq_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)where
Self: VmseqViEmitter<T0, T1, T2, T3>,
pub fn vmseq_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)where
Self: VmseqViEmitter<T0, T1, T2, T3>,
Sourcepub fn vmseq_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmseqVvEmitter<T0, T1, T2, T3>,
pub fn vmseq_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmseqVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vmseq_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmseqVxEmitter<T0, T1, T2, T3>,
pub fn vmseq_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmseqVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vmsgt_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)where
Self: VmsgtViEmitter<T0, T1, T2, T3>,
pub fn vmsgt_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)where
Self: VmsgtViEmitter<T0, T1, T2, T3>,
Sourcepub fn vmsgt_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmsgtVxEmitter<T0, T1, T2, T3>,
pub fn vmsgt_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmsgtVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vmsgtu_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)where
Self: VmsgtuViEmitter<T0, T1, T2, T3>,
pub fn vmsgtu_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)where
Self: VmsgtuViEmitter<T0, T1, T2, T3>,
Sourcepub fn vmsgtu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmsgtuVxEmitter<T0, T1, T2, T3>,
pub fn vmsgtu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmsgtuVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vmsif_m<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VmsifMEmitter<T0, T1, T2>,
pub fn vmsif_m<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VmsifMEmitter<T0, T1, T2>,
Sourcepub fn vmsle_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)where
Self: VmsleViEmitter<T0, T1, T2, T3>,
pub fn vmsle_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)where
Self: VmsleViEmitter<T0, T1, T2, T3>,
Sourcepub fn vmsle_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmsleVvEmitter<T0, T1, T2, T3>,
pub fn vmsle_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmsleVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vmsle_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmsleVxEmitter<T0, T1, T2, T3>,
pub fn vmsle_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmsleVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vmsleu_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)where
Self: VmsleuViEmitter<T0, T1, T2, T3>,
pub fn vmsleu_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)where
Self: VmsleuViEmitter<T0, T1, T2, T3>,
Sourcepub fn vmsleu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmsleuVvEmitter<T0, T1, T2, T3>,
pub fn vmsleu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmsleuVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vmsleu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmsleuVxEmitter<T0, T1, T2, T3>,
pub fn vmsleu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmsleuVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vmslt_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmsltVvEmitter<T0, T1, T2, T3>,
pub fn vmslt_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmsltVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vmslt_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmsltVxEmitter<T0, T1, T2, T3>,
pub fn vmslt_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmsltVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vmsltu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmsltuVvEmitter<T0, T1, T2, T3>,
pub fn vmsltu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmsltuVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vmsltu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmsltuVxEmitter<T0, T1, T2, T3>,
pub fn vmsltu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmsltuVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vmsne_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)where
Self: VmsneViEmitter<T0, T1, T2, T3>,
pub fn vmsne_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)where
Self: VmsneViEmitter<T0, T1, T2, T3>,
Sourcepub fn vmsne_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmsneVvEmitter<T0, T1, T2, T3>,
pub fn vmsne_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmsneVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vmsne_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmsneVxEmitter<T0, T1, T2, T3>,
pub fn vmsne_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmsneVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vmsof_m<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VmsofMEmitter<T0, T1, T2>,
pub fn vmsof_m<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VmsofMEmitter<T0, T1, T2>,
Sourcepub fn vmul_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmulVvEmitter<T0, T1, T2, T3>,
pub fn vmul_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmulVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vmul_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmulVxEmitter<T0, T1, T2, T3>,
pub fn vmul_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmulVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vmulh_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmulhVvEmitter<T0, T1, T2, T3>,
pub fn vmulh_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmulhVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vmulh_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmulhVxEmitter<T0, T1, T2, T3>,
pub fn vmulh_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmulhVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vmulhsu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmulhsuVvEmitter<T0, T1, T2, T3>,
pub fn vmulhsu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmulhsuVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vmulhsu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmulhsuVxEmitter<T0, T1, T2, T3>,
pub fn vmulhsu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmulhsuVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vmulhu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmulhuVvEmitter<T0, T1, T2, T3>,
pub fn vmulhu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VmulhuVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vmulhu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmulhuVxEmitter<T0, T1, T2, T3>,
pub fn vmulhu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VmulhuVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vmv1r_v<T0, T1>(&mut self, vd: T0, vs2: T1)where
Self: Vmv1RVEmitter<T0, T1>,
pub fn vmv1r_v<T0, T1>(&mut self, vd: T0, vs2: T1)where
Self: Vmv1RVEmitter<T0, T1>,
Sourcepub fn vmv2r_v<T0, T1>(&mut self, vd: T0, vs2: T1)where
Self: Vmv2RVEmitter<T0, T1>,
pub fn vmv2r_v<T0, T1>(&mut self, vd: T0, vs2: T1)where
Self: Vmv2RVEmitter<T0, T1>,
Sourcepub fn vmv4r_v<T0, T1>(&mut self, vd: T0, vs2: T1)where
Self: Vmv4RVEmitter<T0, T1>,
pub fn vmv4r_v<T0, T1>(&mut self, vd: T0, vs2: T1)where
Self: Vmv4RVEmitter<T0, T1>,
Sourcepub fn vmv8r_v<T0, T1>(&mut self, vd: T0, vs2: T1)where
Self: Vmv8RVEmitter<T0, T1>,
pub fn vmv8r_v<T0, T1>(&mut self, vd: T0, vs2: T1)where
Self: Vmv8RVEmitter<T0, T1>,
Sourcepub fn vmv_s_x<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: VmvSXEmitter<T0, T1>,
pub fn vmv_s_x<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: VmvSXEmitter<T0, T1>,
Sourcepub fn vmv_v_i<T0, T1>(&mut self, vd: T0, simm5: T1)where
Self: VmvVIEmitter<T0, T1>,
pub fn vmv_v_i<T0, T1>(&mut self, vd: T0, simm5: T1)where
Self: VmvVIEmitter<T0, T1>,
Sourcepub fn vmv_v_v<T0, T1>(&mut self, vd: T0, vs1: T1)where
Self: VmvVVEmitter<T0, T1>,
pub fn vmv_v_v<T0, T1>(&mut self, vd: T0, vs1: T1)where
Self: VmvVVEmitter<T0, T1>,
Sourcepub fn vmv_v_x<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: VmvVXEmitter<T0, T1>,
pub fn vmv_v_x<T0, T1>(&mut self, vd: T0, rs1: T1)where
Self: VmvVXEmitter<T0, T1>,
Sourcepub fn vmv_x_s<T0, T1>(&mut self, rd: T0, vs2: T1)where
Self: VmvXSEmitter<T0, T1>,
pub fn vmv_x_s<T0, T1>(&mut self, rd: T0, vs2: T1)where
Self: VmvXSEmitter<T0, T1>,
Sourcepub fn vmxnor_mm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: VmxnorMmEmitter<T0, T1, T2>,
pub fn vmxnor_mm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: VmxnorMmEmitter<T0, T1, T2>,
Sourcepub fn vmxor_mm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: VmxorMmEmitter<T0, T1, T2>,
pub fn vmxor_mm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: VmxorMmEmitter<T0, T1, T2>,
Sourcepub fn vnclip_wi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3)where
Self: VnclipWiEmitter<T0, T1, T2, T3>,
pub fn vnclip_wi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3)where
Self: VnclipWiEmitter<T0, T1, T2, T3>,
Sourcepub fn vnclip_wv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VnclipWvEmitter<T0, T1, T2, T3>,
pub fn vnclip_wv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VnclipWvEmitter<T0, T1, T2, T3>,
Sourcepub fn vnclip_wx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VnclipWxEmitter<T0, T1, T2, T3>,
pub fn vnclip_wx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VnclipWxEmitter<T0, T1, T2, T3>,
Sourcepub fn vnclipu_wi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3)where
Self: VnclipuWiEmitter<T0, T1, T2, T3>,
pub fn vnclipu_wi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3)where
Self: VnclipuWiEmitter<T0, T1, T2, T3>,
Sourcepub fn vnclipu_wv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VnclipuWvEmitter<T0, T1, T2, T3>,
pub fn vnclipu_wv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VnclipuWvEmitter<T0, T1, T2, T3>,
Sourcepub fn vnclipu_wx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VnclipuWxEmitter<T0, T1, T2, T3>,
pub fn vnclipu_wx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VnclipuWxEmitter<T0, T1, T2, T3>,
Sourcepub fn vnmsac_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VnmsacVvEmitter<T0, T1, T2, T3>,
pub fn vnmsac_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VnmsacVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vnmsac_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VnmsacVxEmitter<T0, T1, T2, T3>,
pub fn vnmsac_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VnmsacVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vnmsub_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VnmsubVvEmitter<T0, T1, T2, T3>,
pub fn vnmsub_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VnmsubVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vnmsub_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VnmsubVxEmitter<T0, T1, T2, T3>,
pub fn vnmsub_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VnmsubVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vnsra_wi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3)where
Self: VnsraWiEmitter<T0, T1, T2, T3>,
pub fn vnsra_wi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3)where
Self: VnsraWiEmitter<T0, T1, T2, T3>,
Sourcepub fn vnsra_wv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VnsraWvEmitter<T0, T1, T2, T3>,
pub fn vnsra_wv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VnsraWvEmitter<T0, T1, T2, T3>,
Sourcepub fn vnsra_wx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VnsraWxEmitter<T0, T1, T2, T3>,
pub fn vnsra_wx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VnsraWxEmitter<T0, T1, T2, T3>,
Sourcepub fn vnsrl_wi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3)where
Self: VnsrlWiEmitter<T0, T1, T2, T3>,
pub fn vnsrl_wi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3)where
Self: VnsrlWiEmitter<T0, T1, T2, T3>,
Sourcepub fn vnsrl_wv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VnsrlWvEmitter<T0, T1, T2, T3>,
pub fn vnsrl_wv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VnsrlWvEmitter<T0, T1, T2, T3>,
Sourcepub fn vnsrl_wx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VnsrlWxEmitter<T0, T1, T2, T3>,
pub fn vnsrl_wx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VnsrlWxEmitter<T0, T1, T2, T3>,
Sourcepub fn vor_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)where
Self: VorViEmitter<T0, T1, T2, T3>,
pub fn vor_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)where
Self: VorViEmitter<T0, T1, T2, T3>,
Sourcepub fn vor_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VorVvEmitter<T0, T1, T2, T3>,
pub fn vor_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VorVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vor_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VorVxEmitter<T0, T1, T2, T3>,
pub fn vor_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VorVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vpopc_m<T0, T1, T2>(&mut self, rd: T0, vs2: T1, vm: T2)where
Self: VpopcMEmitter<T0, T1, T2>,
pub fn vpopc_m<T0, T1, T2>(&mut self, rd: T0, vs2: T1, vm: T2)where
Self: VpopcMEmitter<T0, T1, T2>,
Sourcepub fn vredand_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VredandVsEmitter<T0, T1, T2, T3>,
pub fn vredand_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VredandVsEmitter<T0, T1, T2, T3>,
Sourcepub fn vredmax_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VredmaxVsEmitter<T0, T1, T2, T3>,
pub fn vredmax_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VredmaxVsEmitter<T0, T1, T2, T3>,
Sourcepub fn vredmaxu_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VredmaxuVsEmitter<T0, T1, T2, T3>,
pub fn vredmaxu_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VredmaxuVsEmitter<T0, T1, T2, T3>,
Sourcepub fn vredmin_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VredminVsEmitter<T0, T1, T2, T3>,
pub fn vredmin_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VredminVsEmitter<T0, T1, T2, T3>,
Sourcepub fn vredminu_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VredminuVsEmitter<T0, T1, T2, T3>,
pub fn vredminu_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VredminuVsEmitter<T0, T1, T2, T3>,
Sourcepub fn vredor_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VredorVsEmitter<T0, T1, T2, T3>,
pub fn vredor_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VredorVsEmitter<T0, T1, T2, T3>,
Sourcepub fn vredsum_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VredsumVsEmitter<T0, T1, T2, T3>,
pub fn vredsum_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VredsumVsEmitter<T0, T1, T2, T3>,
Sourcepub fn vredxor_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VredxorVsEmitter<T0, T1, T2, T3>,
pub fn vredxor_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VredxorVsEmitter<T0, T1, T2, T3>,
Sourcepub fn vrem_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VremVvEmitter<T0, T1, T2, T3>,
pub fn vrem_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VremVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vrem_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VremVxEmitter<T0, T1, T2, T3>,
pub fn vrem_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VremVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vremu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VremuVvEmitter<T0, T1, T2, T3>,
pub fn vremu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VremuVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vremu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VremuVxEmitter<T0, T1, T2, T3>,
pub fn vremu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VremuVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vrev8_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: Vrev8VEmitter<T0, T1, T2>,
pub fn vrev8_v<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: Vrev8VEmitter<T0, T1, T2>,
Sourcepub fn vrgather_vi<T0, T1, T2, T3>(
&mut self,
vd: T0,
vs2: T1,
zimm5: T2,
vm: T3,
)where
Self: VrgatherViEmitter<T0, T1, T2, T3>,
pub fn vrgather_vi<T0, T1, T2, T3>(
&mut self,
vd: T0,
vs2: T1,
zimm5: T2,
vm: T3,
)where
Self: VrgatherViEmitter<T0, T1, T2, T3>,
Sourcepub fn vrgather_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VrgatherVvEmitter<T0, T1, T2, T3>,
pub fn vrgather_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VrgatherVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vrgather_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VrgatherVxEmitter<T0, T1, T2, T3>,
pub fn vrgather_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VrgatherVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vrgatherei16_vv<T0, T1, T2, T3>(
&mut self,
vd: T0,
vs1: T1,
vs2: T2,
vm: T3,
)where
Self: Vrgatherei16VvEmitter<T0, T1, T2, T3>,
pub fn vrgatherei16_vv<T0, T1, T2, T3>(
&mut self,
vd: T0,
vs1: T1,
vs2: T2,
vm: T3,
)where
Self: Vrgatherei16VvEmitter<T0, T1, T2, T3>,
Sourcepub fn vrol_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VrolVvEmitter<T0, T1, T2, T3>,
pub fn vrol_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VrolVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vrol_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VrolVxEmitter<T0, T1, T2, T3>,
pub fn vrol_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VrolVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vror_vi<T0, T1, T2, T3>(
&mut self,
vd: T0,
vs2: T1,
zimm6lohi: T2,
vm: T3,
)where
Self: VrorViEmitter<T0, T1, T2, T3>,
pub fn vror_vi<T0, T1, T2, T3>(
&mut self,
vd: T0,
vs2: T1,
zimm6lohi: T2,
vm: T3,
)where
Self: VrorViEmitter<T0, T1, T2, T3>,
Sourcepub fn vror_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VrorVvEmitter<T0, T1, T2, T3>,
pub fn vror_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VrorVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vror_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VrorVxEmitter<T0, T1, T2, T3>,
pub fn vror_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VrorVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vrsub_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)where
Self: VrsubViEmitter<T0, T1, T2, T3>,
pub fn vrsub_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)where
Self: VrsubViEmitter<T0, T1, T2, T3>,
Sourcepub fn vrsub_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VrsubVxEmitter<T0, T1, T2, T3>,
pub fn vrsub_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VrsubVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vs1r_v<T0, T1>(&mut self, vs3: T0, rs1: T1)where
Self: Vs1RVEmitter<T0, T1>,
pub fn vs1r_v<T0, T1>(&mut self, vs3: T0, rs1: T1)where
Self: Vs1RVEmitter<T0, T1>,
Sourcepub fn vs2r_v<T0, T1>(&mut self, vs3: T0, rs1: T1)where
Self: Vs2RVEmitter<T0, T1>,
pub fn vs2r_v<T0, T1>(&mut self, vs3: T0, rs1: T1)where
Self: Vs2RVEmitter<T0, T1>,
Sourcepub fn vs4r_v<T0, T1>(&mut self, vs3: T0, rs1: T1)where
Self: Vs4RVEmitter<T0, T1>,
pub fn vs4r_v<T0, T1>(&mut self, vs3: T0, rs1: T1)where
Self: Vs4RVEmitter<T0, T1>,
Sourcepub fn vs8r_v<T0, T1>(&mut self, vs3: T0, rs1: T1)where
Self: Vs8RVEmitter<T0, T1>,
pub fn vs8r_v<T0, T1>(&mut self, vs3: T0, rs1: T1)where
Self: Vs8RVEmitter<T0, T1>,
Sourcepub fn vsadd_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)where
Self: VsaddViEmitter<T0, T1, T2, T3>,
pub fn vsadd_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)where
Self: VsaddViEmitter<T0, T1, T2, T3>,
Sourcepub fn vsadd_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VsaddVvEmitter<T0, T1, T2, T3>,
pub fn vsadd_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VsaddVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vsadd_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VsaddVxEmitter<T0, T1, T2, T3>,
pub fn vsadd_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VsaddVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vsaddu_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)where
Self: VsadduViEmitter<T0, T1, T2, T3>,
pub fn vsaddu_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)where
Self: VsadduViEmitter<T0, T1, T2, T3>,
Sourcepub fn vsaddu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VsadduVvEmitter<T0, T1, T2, T3>,
pub fn vsaddu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VsadduVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vsaddu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VsadduVxEmitter<T0, T1, T2, T3>,
pub fn vsaddu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VsadduVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vsbc_vvm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: VsbcVvmEmitter<T0, T1, T2>,
pub fn vsbc_vvm<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: VsbcVvmEmitter<T0, T1, T2>,
Sourcepub fn vsbc_vxm<T0, T1, T2>(&mut self, vd: T0, rs1: T1, vs2: T2)where
Self: VsbcVxmEmitter<T0, T1, T2>,
pub fn vsbc_vxm<T0, T1, T2>(&mut self, vd: T0, rs1: T1, vs2: T2)where
Self: VsbcVxmEmitter<T0, T1, T2>,
Sourcepub fn vse16_v<T0, T1, T2, T3>(&mut self, vs3: T0, rs1: T1, vm: T2, nf: T3)where
Self: Vse16VEmitter<T0, T1, T2, T3>,
pub fn vse16_v<T0, T1, T2, T3>(&mut self, vs3: T0, rs1: T1, vm: T2, nf: T3)where
Self: Vse16VEmitter<T0, T1, T2, T3>,
Sourcepub fn vse1_v<T0, T1>(&mut self, vs3: T0, rs1: T1)where
Self: Vse1VEmitter<T0, T1>,
pub fn vse1_v<T0, T1>(&mut self, vs3: T0, rs1: T1)where
Self: Vse1VEmitter<T0, T1>,
Sourcepub fn vse32_v<T0, T1, T2, T3>(&mut self, vs3: T0, rs1: T1, vm: T2, nf: T3)where
Self: Vse32VEmitter<T0, T1, T2, T3>,
pub fn vse32_v<T0, T1, T2, T3>(&mut self, vs3: T0, rs1: T1, vm: T2, nf: T3)where
Self: Vse32VEmitter<T0, T1, T2, T3>,
Sourcepub fn vse64_v<T0, T1, T2, T3>(&mut self, vs3: T0, rs1: T1, vm: T2, nf: T3)where
Self: Vse64VEmitter<T0, T1, T2, T3>,
pub fn vse64_v<T0, T1, T2, T3>(&mut self, vs3: T0, rs1: T1, vm: T2, nf: T3)where
Self: Vse64VEmitter<T0, T1, T2, T3>,
Sourcepub fn vse8_v<T0, T1, T2, T3>(&mut self, vs3: T0, rs1: T1, vm: T2, nf: T3)where
Self: Vse8VEmitter<T0, T1, T2, T3>,
pub fn vse8_v<T0, T1, T2, T3>(&mut self, vs3: T0, rs1: T1, vm: T2, nf: T3)where
Self: Vse8VEmitter<T0, T1, T2, T3>,
Sourcepub fn vsetivli<T0, T1, T2>(&mut self, rd: T0, zimm5: T1, zimm10: T2)where
Self: VsetivliEmitter<T0, T1, T2>,
pub fn vsetivli<T0, T1, T2>(&mut self, rd: T0, zimm5: T1, zimm10: T2)where
Self: VsetivliEmitter<T0, T1, T2>,
Sourcepub fn vsetvl<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: VsetvlEmitter<T0, T1, T2>,
pub fn vsetvl<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: VsetvlEmitter<T0, T1, T2>,
Sourcepub fn vsetvli<T0, T1, T2>(&mut self, rd: T0, rs1: T1, zimm11: T2)where
Self: VsetvliEmitter<T0, T1, T2>,
pub fn vsetvli<T0, T1, T2>(&mut self, rd: T0, rs1: T1, zimm11: T2)where
Self: VsetvliEmitter<T0, T1, T2>,
Sourcepub fn vsext_vf2<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VsextVf2Emitter<T0, T1, T2>,
pub fn vsext_vf2<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VsextVf2Emitter<T0, T1, T2>,
Sourcepub fn vsext_vf4<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VsextVf4Emitter<T0, T1, T2>,
pub fn vsext_vf4<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VsextVf4Emitter<T0, T1, T2>,
Sourcepub fn vsext_vf8<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VsextVf8Emitter<T0, T1, T2>,
pub fn vsext_vf8<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VsextVf8Emitter<T0, T1, T2>,
Sourcepub fn vsha2ch_vv<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: Vsha2ChVvEmitter<T0, T1, T2>,
pub fn vsha2ch_vv<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: Vsha2ChVvEmitter<T0, T1, T2>,
Sourcepub fn vsha2cl_vv<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: Vsha2ClVvEmitter<T0, T1, T2>,
pub fn vsha2cl_vv<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: Vsha2ClVvEmitter<T0, T1, T2>,
Sourcepub fn vsha2ms_vv<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: Vsha2MsVvEmitter<T0, T1, T2>,
pub fn vsha2ms_vv<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: Vsha2MsVvEmitter<T0, T1, T2>,
Sourcepub fn vslide1down_vx<T0, T1, T2, T3>(
&mut self,
vd: T0,
vs2: T1,
rs1: T2,
vm: T3,
)where
Self: Vslide1DownVxEmitter<T0, T1, T2, T3>,
pub fn vslide1down_vx<T0, T1, T2, T3>(
&mut self,
vd: T0,
vs2: T1,
rs1: T2,
vm: T3,
)where
Self: Vslide1DownVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vslide1up_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: Vslide1UpVxEmitter<T0, T1, T2, T3>,
pub fn vslide1up_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: Vslide1UpVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vslidedown_vi<T0, T1, T2, T3>(
&mut self,
vd: T0,
vs2: T1,
zimm5: T2,
vm: T3,
)where
Self: VslidedownViEmitter<T0, T1, T2, T3>,
pub fn vslidedown_vi<T0, T1, T2, T3>(
&mut self,
vd: T0,
vs2: T1,
zimm5: T2,
vm: T3,
)where
Self: VslidedownViEmitter<T0, T1, T2, T3>,
Sourcepub fn vslidedown_vx<T0, T1, T2, T3>(
&mut self,
vd: T0,
vs2: T1,
rs1: T2,
vm: T3,
)where
Self: VslidedownVxEmitter<T0, T1, T2, T3>,
pub fn vslidedown_vx<T0, T1, T2, T3>(
&mut self,
vd: T0,
vs2: T1,
rs1: T2,
vm: T3,
)where
Self: VslidedownVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vslideup_vi<T0, T1, T2, T3>(
&mut self,
vd: T0,
vs2: T1,
zimm5: T2,
vm: T3,
)where
Self: VslideupViEmitter<T0, T1, T2, T3>,
pub fn vslideup_vi<T0, T1, T2, T3>(
&mut self,
vd: T0,
vs2: T1,
zimm5: T2,
vm: T3,
)where
Self: VslideupViEmitter<T0, T1, T2, T3>,
Sourcepub fn vslideup_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VslideupVxEmitter<T0, T1, T2, T3>,
pub fn vslideup_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VslideupVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vsll_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3)where
Self: VsllViEmitter<T0, T1, T2, T3>,
pub fn vsll_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3)where
Self: VsllViEmitter<T0, T1, T2, T3>,
Sourcepub fn vsll_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VsllVvEmitter<T0, T1, T2, T3>,
pub fn vsll_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VsllVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vsll_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VsllVxEmitter<T0, T1, T2, T3>,
pub fn vsll_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VsllVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vsm3c_vi<T0, T1, T2>(&mut self, vd: T0, vs2: T1, zimm5: T2)where
Self: Vsm3CViEmitter<T0, T1, T2>,
pub fn vsm3c_vi<T0, T1, T2>(&mut self, vd: T0, vs2: T1, zimm5: T2)where
Self: Vsm3CViEmitter<T0, T1, T2>,
Sourcepub fn vsm3me_vv<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: Vsm3MeVvEmitter<T0, T1, T2>,
pub fn vsm3me_vv<T0, T1, T2>(&mut self, vd: T0, vs1: T1, vs2: T2)where
Self: Vsm3MeVvEmitter<T0, T1, T2>,
Sourcepub fn vsm4k_vi<T0, T1, T2>(&mut self, vd: T0, vs2: T1, zimm5: T2)where
Self: Vsm4KViEmitter<T0, T1, T2>,
pub fn vsm4k_vi<T0, T1, T2>(&mut self, vd: T0, vs2: T1, zimm5: T2)where
Self: Vsm4KViEmitter<T0, T1, T2>,
Sourcepub fn vsm4r_vs<T0, T1>(&mut self, vd: T0, vs2: T1)where
Self: Vsm4RVsEmitter<T0, T1>,
pub fn vsm4r_vs<T0, T1>(&mut self, vd: T0, vs2: T1)where
Self: Vsm4RVsEmitter<T0, T1>,
Sourcepub fn vsm4r_vv<T0, T1>(&mut self, vd: T0, vs2: T1)where
Self: Vsm4RVvEmitter<T0, T1>,
pub fn vsm4r_vv<T0, T1>(&mut self, vd: T0, vs2: T1)where
Self: Vsm4RVvEmitter<T0, T1>,
Sourcepub fn vsm_v<T0, T1>(&mut self, vs3: T0, rs1: T1)where
Self: VsmVEmitter<T0, T1>,
pub fn vsm_v<T0, T1>(&mut self, vs3: T0, rs1: T1)where
Self: VsmVEmitter<T0, T1>,
Sourcepub fn vsmul_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VsmulVvEmitter<T0, T1, T2, T3>,
pub fn vsmul_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VsmulVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vsmul_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VsmulVxEmitter<T0, T1, T2, T3>,
pub fn vsmul_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VsmulVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vsoxei16_v<T0, T1, T2, T3, T4>(
&mut self,
vs3: T0,
rs1: T1,
vs2: T2,
vm: T3,
nf: T4,
)where
Self: Vsoxei16VEmitter<T0, T1, T2, T3, T4>,
pub fn vsoxei16_v<T0, T1, T2, T3, T4>(
&mut self,
vs3: T0,
rs1: T1,
vs2: T2,
vm: T3,
nf: T4,
)where
Self: Vsoxei16VEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn vsoxei32_v<T0, T1, T2, T3, T4>(
&mut self,
vs3: T0,
rs1: T1,
vs2: T2,
vm: T3,
nf: T4,
)where
Self: Vsoxei32VEmitter<T0, T1, T2, T3, T4>,
pub fn vsoxei32_v<T0, T1, T2, T3, T4>(
&mut self,
vs3: T0,
rs1: T1,
vs2: T2,
vm: T3,
nf: T4,
)where
Self: Vsoxei32VEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn vsoxei64_v<T0, T1, T2, T3, T4>(
&mut self,
vs3: T0,
rs1: T1,
vs2: T2,
vm: T3,
nf: T4,
)where
Self: Vsoxei64VEmitter<T0, T1, T2, T3, T4>,
pub fn vsoxei64_v<T0, T1, T2, T3, T4>(
&mut self,
vs3: T0,
rs1: T1,
vs2: T2,
vm: T3,
nf: T4,
)where
Self: Vsoxei64VEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn vsoxei8_v<T0, T1, T2, T3, T4>(
&mut self,
vs3: T0,
rs1: T1,
vs2: T2,
vm: T3,
nf: T4,
)where
Self: Vsoxei8VEmitter<T0, T1, T2, T3, T4>,
pub fn vsoxei8_v<T0, T1, T2, T3, T4>(
&mut self,
vs3: T0,
rs1: T1,
vs2: T2,
vm: T3,
nf: T4,
)where
Self: Vsoxei8VEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn vsra_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3)where
Self: VsraViEmitter<T0, T1, T2, T3>,
pub fn vsra_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3)where
Self: VsraViEmitter<T0, T1, T2, T3>,
Sourcepub fn vsra_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VsraVvEmitter<T0, T1, T2, T3>,
pub fn vsra_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VsraVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vsra_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VsraVxEmitter<T0, T1, T2, T3>,
pub fn vsra_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VsraVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vsrl_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3)where
Self: VsrlViEmitter<T0, T1, T2, T3>,
pub fn vsrl_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3)where
Self: VsrlViEmitter<T0, T1, T2, T3>,
Sourcepub fn vsrl_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VsrlVvEmitter<T0, T1, T2, T3>,
pub fn vsrl_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VsrlVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vsrl_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VsrlVxEmitter<T0, T1, T2, T3>,
pub fn vsrl_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VsrlVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vsse16_v<T0, T1, T2, T3, T4>(
&mut self,
vs3: T0,
rs1: T1,
rs2: T2,
vm: T3,
nf: T4,
)where
Self: Vsse16VEmitter<T0, T1, T2, T3, T4>,
pub fn vsse16_v<T0, T1, T2, T3, T4>(
&mut self,
vs3: T0,
rs1: T1,
rs2: T2,
vm: T3,
nf: T4,
)where
Self: Vsse16VEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn vsse32_v<T0, T1, T2, T3, T4>(
&mut self,
vs3: T0,
rs1: T1,
rs2: T2,
vm: T3,
nf: T4,
)where
Self: Vsse32VEmitter<T0, T1, T2, T3, T4>,
pub fn vsse32_v<T0, T1, T2, T3, T4>(
&mut self,
vs3: T0,
rs1: T1,
rs2: T2,
vm: T3,
nf: T4,
)where
Self: Vsse32VEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn vsse64_v<T0, T1, T2, T3, T4>(
&mut self,
vs3: T0,
rs1: T1,
rs2: T2,
vm: T3,
nf: T4,
)where
Self: Vsse64VEmitter<T0, T1, T2, T3, T4>,
pub fn vsse64_v<T0, T1, T2, T3, T4>(
&mut self,
vs3: T0,
rs1: T1,
rs2: T2,
vm: T3,
nf: T4,
)where
Self: Vsse64VEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn vsse8_v<T0, T1, T2, T3, T4>(
&mut self,
vs3: T0,
rs1: T1,
rs2: T2,
vm: T3,
nf: T4,
)where
Self: Vsse8VEmitter<T0, T1, T2, T3, T4>,
pub fn vsse8_v<T0, T1, T2, T3, T4>(
&mut self,
vs3: T0,
rs1: T1,
rs2: T2,
vm: T3,
nf: T4,
)where
Self: Vsse8VEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn vssra_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3)where
Self: VssraViEmitter<T0, T1, T2, T3>,
pub fn vssra_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3)where
Self: VssraViEmitter<T0, T1, T2, T3>,
Sourcepub fn vssra_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VssraVvEmitter<T0, T1, T2, T3>,
pub fn vssra_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VssraVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vssra_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VssraVxEmitter<T0, T1, T2, T3>,
pub fn vssra_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VssraVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vssrl_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3)where
Self: VssrlViEmitter<T0, T1, T2, T3>,
pub fn vssrl_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3)where
Self: VssrlViEmitter<T0, T1, T2, T3>,
Sourcepub fn vssrl_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VssrlVvEmitter<T0, T1, T2, T3>,
pub fn vssrl_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VssrlVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vssrl_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VssrlVxEmitter<T0, T1, T2, T3>,
pub fn vssrl_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VssrlVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vssub_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VssubVvEmitter<T0, T1, T2, T3>,
pub fn vssub_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VssubVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vssub_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VssubVxEmitter<T0, T1, T2, T3>,
pub fn vssub_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VssubVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vssubu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VssubuVvEmitter<T0, T1, T2, T3>,
pub fn vssubu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VssubuVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vssubu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VssubuVxEmitter<T0, T1, T2, T3>,
pub fn vssubu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VssubuVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vsub_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VsubVvEmitter<T0, T1, T2, T3>,
pub fn vsub_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VsubVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vsub_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VsubVxEmitter<T0, T1, T2, T3>,
pub fn vsub_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VsubVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vsuxei16_v<T0, T1, T2, T3, T4>(
&mut self,
vs3: T0,
rs1: T1,
vs2: T2,
vm: T3,
nf: T4,
)where
Self: Vsuxei16VEmitter<T0, T1, T2, T3, T4>,
pub fn vsuxei16_v<T0, T1, T2, T3, T4>(
&mut self,
vs3: T0,
rs1: T1,
vs2: T2,
vm: T3,
nf: T4,
)where
Self: Vsuxei16VEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn vsuxei32_v<T0, T1, T2, T3, T4>(
&mut self,
vs3: T0,
rs1: T1,
vs2: T2,
vm: T3,
nf: T4,
)where
Self: Vsuxei32VEmitter<T0, T1, T2, T3, T4>,
pub fn vsuxei32_v<T0, T1, T2, T3, T4>(
&mut self,
vs3: T0,
rs1: T1,
vs2: T2,
vm: T3,
nf: T4,
)where
Self: Vsuxei32VEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn vsuxei64_v<T0, T1, T2, T3, T4>(
&mut self,
vs3: T0,
rs1: T1,
vs2: T2,
vm: T3,
nf: T4,
)where
Self: Vsuxei64VEmitter<T0, T1, T2, T3, T4>,
pub fn vsuxei64_v<T0, T1, T2, T3, T4>(
&mut self,
vs3: T0,
rs1: T1,
vs2: T2,
vm: T3,
nf: T4,
)where
Self: Vsuxei64VEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn vsuxei8_v<T0, T1, T2, T3, T4>(
&mut self,
vs3: T0,
rs1: T1,
vs2: T2,
vm: T3,
nf: T4,
)where
Self: Vsuxei8VEmitter<T0, T1, T2, T3, T4>,
pub fn vsuxei8_v<T0, T1, T2, T3, T4>(
&mut self,
vs3: T0,
rs1: T1,
vs2: T2,
vm: T3,
nf: T4,
)where
Self: Vsuxei8VEmitter<T0, T1, T2, T3, T4>,
Sourcepub fn vwadd_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VwaddVvEmitter<T0, T1, T2, T3>,
pub fn vwadd_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VwaddVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vwadd_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VwaddVxEmitter<T0, T1, T2, T3>,
pub fn vwadd_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VwaddVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vwadd_wv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VwaddWvEmitter<T0, T1, T2, T3>,
pub fn vwadd_wv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VwaddWvEmitter<T0, T1, T2, T3>,
Sourcepub fn vwadd_wx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VwaddWxEmitter<T0, T1, T2, T3>,
pub fn vwadd_wx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VwaddWxEmitter<T0, T1, T2, T3>,
Sourcepub fn vwaddu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VwadduVvEmitter<T0, T1, T2, T3>,
pub fn vwaddu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VwadduVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vwaddu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VwadduVxEmitter<T0, T1, T2, T3>,
pub fn vwaddu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VwadduVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vwaddu_wv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VwadduWvEmitter<T0, T1, T2, T3>,
pub fn vwaddu_wv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VwadduWvEmitter<T0, T1, T2, T3>,
Sourcepub fn vwaddu_wx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VwadduWxEmitter<T0, T1, T2, T3>,
pub fn vwaddu_wx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VwadduWxEmitter<T0, T1, T2, T3>,
Sourcepub fn vwmacc_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VwmaccVvEmitter<T0, T1, T2, T3>,
pub fn vwmacc_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VwmaccVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vwmacc_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VwmaccVxEmitter<T0, T1, T2, T3>,
pub fn vwmacc_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VwmaccVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vwmaccsu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VwmaccsuVvEmitter<T0, T1, T2, T3>,
pub fn vwmaccsu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VwmaccsuVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vwmaccsu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VwmaccsuVxEmitter<T0, T1, T2, T3>,
pub fn vwmaccsu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VwmaccsuVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vwmaccu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VwmaccuVvEmitter<T0, T1, T2, T3>,
pub fn vwmaccu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VwmaccuVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vwmaccu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VwmaccuVxEmitter<T0, T1, T2, T3>,
pub fn vwmaccu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VwmaccuVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vwmaccus_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VwmaccusVxEmitter<T0, T1, T2, T3>,
pub fn vwmaccus_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VwmaccusVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vwmul_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VwmulVvEmitter<T0, T1, T2, T3>,
pub fn vwmul_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VwmulVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vwmul_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VwmulVxEmitter<T0, T1, T2, T3>,
pub fn vwmul_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VwmulVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vwmulsu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VwmulsuVvEmitter<T0, T1, T2, T3>,
pub fn vwmulsu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VwmulsuVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vwmulsu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VwmulsuVxEmitter<T0, T1, T2, T3>,
pub fn vwmulsu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VwmulsuVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vwmulu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VwmuluVvEmitter<T0, T1, T2, T3>,
pub fn vwmulu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VwmuluVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vwmulu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VwmuluVxEmitter<T0, T1, T2, T3>,
pub fn vwmulu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VwmuluVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vwredsum_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VwredsumVsEmitter<T0, T1, T2, T3>,
pub fn vwredsum_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VwredsumVsEmitter<T0, T1, T2, T3>,
Sourcepub fn vwredsumu_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VwredsumuVsEmitter<T0, T1, T2, T3>,
pub fn vwredsumu_vs<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VwredsumuVsEmitter<T0, T1, T2, T3>,
Sourcepub fn vwsll_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3)where
Self: VwsllViEmitter<T0, T1, T2, T3>,
pub fn vwsll_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, zimm5: T2, vm: T3)where
Self: VwsllViEmitter<T0, T1, T2, T3>,
Sourcepub fn vwsll_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VwsllVvEmitter<T0, T1, T2, T3>,
pub fn vwsll_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VwsllVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vwsll_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VwsllVxEmitter<T0, T1, T2, T3>,
pub fn vwsll_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VwsllVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vwsub_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VwsubVvEmitter<T0, T1, T2, T3>,
pub fn vwsub_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VwsubVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vwsub_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VwsubVxEmitter<T0, T1, T2, T3>,
pub fn vwsub_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VwsubVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vwsub_wv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VwsubWvEmitter<T0, T1, T2, T3>,
pub fn vwsub_wv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VwsubWvEmitter<T0, T1, T2, T3>,
Sourcepub fn vwsub_wx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VwsubWxEmitter<T0, T1, T2, T3>,
pub fn vwsub_wx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VwsubWxEmitter<T0, T1, T2, T3>,
Sourcepub fn vwsubu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VwsubuVvEmitter<T0, T1, T2, T3>,
pub fn vwsubu_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VwsubuVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vwsubu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VwsubuVxEmitter<T0, T1, T2, T3>,
pub fn vwsubu_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VwsubuVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vwsubu_wv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VwsubuWvEmitter<T0, T1, T2, T3>,
pub fn vwsubu_wv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VwsubuWvEmitter<T0, T1, T2, T3>,
Sourcepub fn vwsubu_wx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VwsubuWxEmitter<T0, T1, T2, T3>,
pub fn vwsubu_wx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VwsubuWxEmitter<T0, T1, T2, T3>,
Sourcepub fn vxor_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)where
Self: VxorViEmitter<T0, T1, T2, T3>,
pub fn vxor_vi<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, simm5: T2, vm: T3)where
Self: VxorViEmitter<T0, T1, T2, T3>,
Sourcepub fn vxor_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VxorVvEmitter<T0, T1, T2, T3>,
pub fn vxor_vv<T0, T1, T2, T3>(&mut self, vd: T0, vs1: T1, vs2: T2, vm: T3)where
Self: VxorVvEmitter<T0, T1, T2, T3>,
Sourcepub fn vxor_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VxorVxEmitter<T0, T1, T2, T3>,
pub fn vxor_vx<T0, T1, T2, T3>(&mut self, vd: T0, vs2: T1, rs1: T2, vm: T3)where
Self: VxorVxEmitter<T0, T1, T2, T3>,
Sourcepub fn vzext_vf2<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VzextVf2Emitter<T0, T1, T2>,
pub fn vzext_vf2<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VzextVf2Emitter<T0, T1, T2>,
Sourcepub fn vzext_vf4<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VzextVf4Emitter<T0, T1, T2>,
pub fn vzext_vf4<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VzextVf4Emitter<T0, T1, T2>,
Sourcepub fn vzext_vf8<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VzextVf8Emitter<T0, T1, T2>,
pub fn vzext_vf8<T0, T1, T2>(&mut self, vd: T0, vs2: T1, vm: T2)where
Self: VzextVf8Emitter<T0, T1, T2>,
Sourcepub fn wfi(&mut self)where
Self: WfiEmitter,
pub fn wfi(&mut self)where
Self: WfiEmitter,
Wait for interrupt
Can causes the processor to enter a low-power state until the next interrupt occurs.
<%- if ext?(:H) -%>
The behavior of wfi is affected by the mstatus.TW
and hstatus.VTW bits, as summarized below.
[%autowidth,%footer]
|===
.2+| [.rotate]#mstatus.TW# .2+| [.rotate]#hstatus.VTW# 4+^.>| wfi behavior
h| HS-mode h| U-mode h| VS-mode h| in VU-mode
| 0 | 0 | Wait | Trap (I) | Wait | Trap (V) | 0 | 1 | Wait | Trap (I) | Trap (V) | Trap (V) | 1 | - | Trap (I) | Trap (I) | Trap (I) | Trap (I)
6+| Trap (I) - Trap with Illegal Instruction code +
Trap (V) - Trap with Virtual Instruction code
|===
<%- else -%>
The wfi instruction is also affected by mstatus.TW, as shown below:
[%autowidth,%footer]
|===
.2+| [.rotate]#mstatus.TW# 2+^.>| wfi behavior
h| S-mode h| U-mode
| 0 | Wait | Trap (I) | 1 | Trap (I) | Trap (I)
3+| Trap (I) - Trap with Illegal Instruction code
|===
<%- end -%>
When wfi is marked as causing a trap above, the implementation is allowed to wait
for an unspecified period of time to see if an interrupt occurs before raising the trap.
That period of time can be zero (i.e., wfi always causes a trap in the cases identified
above).
§Forms
Assembly: wfi ""
Rust: wfi()
§Arguments
Sourcepub fn wrs_nto(&mut self)where
Self: WrsNtoEmitter,
pub fn wrs_nto(&mut self)where
Self: WrsNtoEmitter,
Sourcepub fn wrs_sto(&mut self)where
Self: WrsStoEmitter,
pub fn wrs_sto(&mut self)where
Self: WrsStoEmitter,
Sourcepub fn xnor<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: XnorEmitter<T0, T1, T2>,
pub fn xnor<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: XnorEmitter<T0, T1, T2>,
Sourcepub fn xor<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: XorEmitter<T0, T1, T2>,
pub fn xor<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: XorEmitter<T0, T1, T2>,
Sourcepub fn xori<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: XoriEmitter<T0, T1, T2>,
pub fn xori<T0, T1, T2>(&mut self, rd: T0, rs1: T1, imm: T2)where
Self: XoriEmitter<T0, T1, T2>,
Sourcepub fn xperm4<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Xperm4Emitter<T0, T1, T2>,
pub fn xperm4<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Xperm4Emitter<T0, T1, T2>,
Crossbar permutation (nibbles)
The xperm4 instruction operates on nibbles. The rs1 register contains a vector of XLEN/4 4-bit elements. The rs2 register contains a vector of XLEN/4 4-bit indexes. The result is each element in rs2 replaced by the indexed element in rs1, or zero if the index into rs2 is out of bounds.
§Forms
Assembly: xperm4 xd, xs1, xs2
Rust: xperm4(rd, rs1, rs2)
§Arguments
rd— Destination register.rs1— Source register.rs2— Source register.
Sourcepub fn xperm8<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Xperm8Emitter<T0, T1, T2>,
pub fn xperm8<T0, T1, T2>(&mut self, rd: T0, rs1: T1, rs2: T2)where
Self: Xperm8Emitter<T0, T1, T2>,
Crossbar permutation (bytes)
The xperm8 instruction operates on bytes. The rs1 register contains a vector of XLEN/8 8-bit elements. The rs2 register contains a vector of XLEN/8 8-bit indexes. The result is each element in rs2 replaced by the indexed element in rs1, or zero if the index into rs2 is out of bounds.
§Forms
Assembly: xperm8 xd, xs1, xs2
Rust: xperm8(rd, rs1, rs2)
§Arguments
rd— Destination register.rs1— Source register.rs2— Source register.
Sourcepub fn zext_b<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: ZextBEmitter<T0, T1>,
pub fn zext_b<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: ZextBEmitter<T0, T1>,
Sourcepub fn zext_h<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: ZextHEmitter<T0, T1>,
pub fn zext_h<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: ZextHEmitter<T0, T1>,
Zero-extend halfword
This instruction zero-extends the least-significant halfword of the source to XLEN by inserting 0’s into all of the bits more significant than 15.
[NOTE]
The zext.h instruction is a pseudo-op for pack when Zbkb is implemented and XLEN == 32.
[NOTE]
The zext.h instruction is a pseudo-op for packw when Zbkb is implemented and XLEN == 64.
§Forms
Assembly: zext.h xd, xs1
Rust: zext_h(rd, rs1)
§Arguments
rd— Destination register.rs1— Source register.
Sourcepub fn zext_h_rv32<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: ZextHRv32Emitter<T0, T1>,
pub fn zext_h_rv32<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: ZextHRv32Emitter<T0, T1>,
Zero-extend halfword
This instruction zero-extends the least-significant halfword of the source to XLEN by inserting 0’s into all of the bits more significant than 15.
[NOTE]
The zext.h instruction is a pseudo-op for pack when Zbkb is implemented and XLEN == 32.
[NOTE]
The zext.h instruction is a pseudo-op for packw when Zbkb is implemented and XLEN == 64.
§Forms
Assembly: zext.h.rv32 xd, xs1
Rust: zext_h_rv32(rd, rs1)
§Arguments
rd— Destination register.rs1— Source register.
Sourcepub fn zext_w<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: ZextWEmitter<T0, T1>,
pub fn zext_w<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: ZextWEmitter<T0, T1>,
Sourcepub fn zip<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: ZipEmitter<T0, T1>,
pub fn zip<T0, T1>(&mut self, rd: T0, rs1: T1)where
Self: ZipEmitter<T0, T1>,
Bit interleave
This instruction scatters all of the odd and even bits of a source word into the high and low halves of a destination word. It is the inverse of the unzip instruction. This instruction is available only on RV32.
§Forms
Assembly: zip xd, xs1
Rust: zip(rd, rs1)
§Arguments
rd— Destination register.rs1— Source register.