🔬This is a nightly-only experimental API. (
riscv_ext_intrinsics
#114544)Available on RISC-V RV32 only.
Expand description
Platform-specific intrinsics for the riscv32
platform.
See the module documentation for more details.
Functions§
- add8
Experimental Adds packed 8-bit signed numbers, discarding overflow bits - add16
Experimental Adds packed 16-bit signed numbers, discarding overflow bits - aes32dsi⚠
Experimental zknd
AES final round decryption instruction for RV32. - aes32dsmi⚠
Experimental zknd
AES middle round decryption instruction for RV32. - aes32esi⚠
Experimental zkne
AES final round encryption instruction for RV32. - aes32esmi⚠
Experimental zkne
AES middle round encryption instruction for RV32 with. - clmul⚠
Experimental zbc
Carry-less multiply (low-part) - clmulh⚠
Experimental zbc
Carry-less multiply (high-part) - clmulr⚠
Experimental zbc
Carry-less multiply (reversed) - clrs8
Experimental Count the number of redundant sign bits of the packed 8-bit elements - clrs16
Experimental Count the number of redundant sign bits of the packed 16-bit elements - clrs32
Experimental Count the number of redundant sign bits of the packed 32-bit elements - clz8
Experimental Count the number of leading zero bits of the packed 8-bit elements - clz16
Experimental Count the number of leading zero bits of the packed 16-bit elements - clz32
Experimental Count the number of leading zero bits of the packed 32-bit elements - cmpeq8
Experimental Compare equality for packed 8-bit elements - cmpeq16
Experimental Compare equality for packed 16-bit elements - cras16
Experimental Cross adds and subtracts packed 16-bit signed numbers, discarding overflow bits - crsa16
Experimental Cross subtracts and adds packed 16-bit signed numbers, discarding overflow bits - fence_i⚠
Experimental Generates theFENCE.I
instruction - frrm
Experimental Reads the floating-point rounding mode registerfrm
- hfence_
gvma ⚠Experimental Hypervisor memory management fence for guest physical address and virtual machine - hfence_
gvma_ ⚠all Experimental Hypervisor memory management fence for all virtual machines and guest physical addresses - hfence_
gvma_ ⚠gaddr Experimental Hypervisor memory management fence for guest physical address - hfence_
gvma_ ⚠vmid Experimental Hypervisor memory management fence for given virtual machine - hfence_
vvma ⚠Experimental Hypervisor memory management fence for given guest virtual address and guest address space - hfence_
vvma_ ⚠all Experimental Hypervisor memory management fence for all guest address spaces and guest virtual addresses - hfence_
vvma_ ⚠asid Experimental Hypervisor memory management fence for given guest address space - hfence_
vvma_ ⚠vaddr Experimental Hypervisor memory management fence for given guest virtual address - hinval_
gvma ⚠Experimental Invalidate hypervisor translation cache for guest physical address and virtual machine - hinval_
gvma_ ⚠all Experimental Invalidate hypervisor translation cache for all virtual machines and guest physical addresses - hinval_
gvma_ ⚠gaddr Experimental Invalidate hypervisor translation cache for guest physical address - hinval_
gvma_ ⚠vmid Experimental Invalidate hypervisor translation cache for given virtual machine - hinval_
vvma ⚠Experimental Invalidate hypervisor translation cache for given guest virtual address and guest address space - hinval_
vvma_ ⚠all Experimental Invalidate hypervisor translation cache for all guest address spaces and guest virtual addresses - hinval_
vvma_ ⚠asid Experimental Invalidate hypervisor translation cache for given guest address space - hinval_
vvma_ ⚠vaddr Experimental Invalidate hypervisor translation cache for given guest virtual address - hlv_b⚠
Experimental Loads virtual machine memory by signed byte integer - hlv_bu⚠
Experimental Loads virtual machine memory by unsigned byte integer - hlv_h⚠
Experimental Loads virtual machine memory by signed half integer - hlv_hu⚠
Experimental Loads virtual machine memory by unsigned half integer - hlv_w⚠
Experimental Loads virtual machine memory by signed word integer - hlvx_hu⚠
Experimental Accesses virtual machine instruction by unsigned half integer - hlvx_wu⚠
Experimental Accesses virtual machine instruction by unsigned word integer - hsv_b⚠
Experimental Stores virtual machine memory by byte integer - hsv_h⚠
Experimental Stores virtual machine memory by half integer - hsv_w⚠
Experimental Stores virtual machine memory by word integer - kabs8
Experimental Compute the absolute value of packed 8-bit signed integers - kabs16
Experimental Compute the absolute value of packed 16-bit signed integers - kadd8
Experimental Adds packed 8-bit signed numbers, saturating at the numeric bounds - kadd16
Experimental Adds packed 16-bit signed numbers, saturating at the numeric bounds - kaddh
Experimental Adds signed lower 16-bit content of two registers with Q15 saturation - kcras16
Experimental Cross adds and subtracts packed 16-bit signed numbers, saturating at the numeric bounds - kcrsa16
Experimental Cross subtracts and adds packed 16-bit signed numbers, saturating at the numeric bounds - ksll8
Experimental Logical left shift packed 8-bit elements, saturating at the numeric bounds - ksll16
Experimental Logical left shift packed 16-bit elements, saturating at the numeric bounds - kslra8
Experimental Logical saturating left then arithmetic right shift packed 8-bit elements - kslra8u
Experimental Logical saturating left then arithmetic right shift packed 8-bit elements - kslra16
Experimental Logical saturating left then arithmetic right shift packed 16-bit elements - kslra16u
Experimental Logical saturating left then arithmetic right shift packed 16-bit elements - kstas16
Experimental Straight adds and subtracts packed 16-bit signed numbers, saturating at the numeric bounds - kstsa16
Experimental Straight subtracts and adds packed 16-bit signed numbers, saturating at the numeric bounds - ksub8
Experimental Subtracts packed 8-bit signed numbers, saturating at the numeric bounds - ksub16
Experimental Subtracts packed 16-bit signed numbers, saturating at the numeric bounds - ksubh
Experimental Subtracts signed lower 16-bit content of two registers with Q15 saturation - nop
Experimental Generates theNOP
instruction - orc_b⚠
Experimental zbb
Bitwise OR-Combine, byte granule - pause
Experimental Generates thePAUSE
instruction - pbsad
Experimental Calculate the sum of absolute difference of unsigned 8-bit data elements - pbsada
Experimental Calculate and accumulate the sum of absolute difference of unsigned 8-bit data elements - pkbt16
Experimental Pack two 16-bit data from bottom and top half from 32-bit chunks - pktb16
Experimental Pack two 16-bit data from top and bottom half from 32-bit chunks - radd8
Experimental Halves the sum of packed 8-bit signed numbers, dropping least bits - radd16
Experimental Halves the sum of packed 16-bit signed numbers, dropping least bits - rcras16
Experimental Cross halves of adds and subtracts packed 16-bit signed numbers, dropping least bits - rcrsa16
Experimental Cross halves of subtracts and adds packed 16-bit signed numbers, dropping least bits - rstas16
Experimental Straight halves of adds and subtracts packed 16-bit signed numbers, dropping least bits - rstsa16
Experimental Straight halves of subtracts and adds packed 16-bit signed numbers, dropping least bits - rsub8
Experimental Halves the subtraction result of packed 8-bit signed numbers, dropping least bits - rsub16
Experimental Halves the subtraction result of packed 16-bit signed numbers, dropping least bits - scmple8
Experimental Compare whether 8-bit packed signed integers are less than or equal to the others - scmple16
Experimental Compare whether 16-bit packed signed integers are less than or equal to the others - scmplt8
Experimental Compare whether 8-bit packed signed integers are less than the others - scmplt16
Experimental Compare whether 16-bit packed signed integers are less than the others - sfence_
inval_ ⚠ir Experimental Generates theSFENCE.INVAL.IR
instruction - sfence_
vma ⚠Experimental Supervisor memory management fence for given virtual address and address space - sfence_
vma_ ⚠all Experimental Supervisor memory management fence for all address spaces and virtual addresses - sfence_
vma_ ⚠asid Experimental Supervisor memory management fence for given address space - sfence_
vma_ ⚠vaddr Experimental Supervisor memory management fence for given virtual address - sfence_
w_ ⚠inval Experimental Generates theSFENCE.W.INVAL
instruction - sha256sig0⚠
Experimental zknh
Implements the Sigma0 transformation function as used in the SHA2-256 hash function [49] (Section 4.1.2). - sha256sig1⚠
Experimental zknh
Implements the Sigma1 transformation function as used in the SHA2-256 hash function [49] (Section 4.1.2). - sha256sum0⚠
Experimental zknh
Implements the Sum0 transformation function as used in the SHA2-256 hash function [49] (Section 4.1.2). - sha256sum1⚠
Experimental zknh
Implements the Sum1 transformation function as used in the SHA2-256 hash function [49] (Section 4.1.2). - sha512sig0h⚠
Experimental zknh
Implements the high half of the Sigma0 transformation, as used in the SHA2-512 hash function [49] (Section 4.1.3). - sha512sig0l⚠
Experimental zknh
Implements the low half of the Sigma0 transformation, as used in the SHA2-512 hash function [49] (Section 4.1.3). - sha512sig1h⚠
Experimental zknh
Implements the high half of the Sigma1 transformation, as used in the SHA2-512 hash function [49] (Section 4.1.3). - sha512sig1l⚠
Experimental zknh
Implements the low half of the Sigma1 transformation, as used in the SHA2-512 hash function [49] (Section 4.1.3). - sha512sum0r⚠
Experimental zknh
Implements the Sum0 transformation, as used in the SHA2-512 hash function [49] (Section 4.1.3). - sha512sum1r⚠
Experimental zknh
Implements the Sum1 transformation, as used in the SHA2-512 hash function [49] (Section 4.1.3). - sinval_
vma ⚠Experimental Invalidate supervisor translation cache for given virtual address and address space - sinval_
vma_ ⚠all Experimental Invalidate supervisor translation cache for all address spaces and virtual addresses - sinval_
vma_ ⚠asid Experimental Invalidate supervisor translation cache for given address space - sinval_
vma_ ⚠vaddr Experimental Invalidate supervisor translation cache for given virtual address - sll8
Experimental Logical left shift packed 8-bit elements, discarding overflow bits - sll16
Experimental Logical left shift packed 16-bit elements, discarding overflow bits - sm3p0⚠
Experimental zksh
Implements the P0 transformation function as used in the SM3 hash function [4, 30]. - sm3p1⚠
Experimental zksh
Implements the P1 transformation function as used in the SM3 hash function [4, 30]. - sm4ed⚠
Experimental zksed
Accelerates the block encrypt/decrypt operation of the SM4 block cipher [5, 31]. - sm4ks⚠
Experimental zksed
Accelerates the Key Schedule operation of the SM4 block cipher [5, 31] withbs=0
. - smaqa
Experimental Multiply signed 8-bit elements and add 16-bit elements on results for packed 32-bit chunks - smaqasu
Experimental Multiply signed to unsigned 8-bit and add 16-bit elements on results for packed 32-bit chunks - smax8
Experimental Get maximum values from 8-bit packed signed integers - smax16
Experimental Get maximum values from 16-bit packed signed integers - smin8
Experimental Get minimum values from 8-bit packed signed integers - smin16
Experimental Get minimum values from 16-bit packed signed integers - sra8
Experimental Arithmetic right shift packed 8-bit elements without rounding up - sra8u
Experimental Arithmetic right shift packed 8-bit elements with rounding up - sra16
Experimental Arithmetic right shift packed 16-bit elements without rounding up - sra16u
Experimental Arithmetic right shift packed 16-bit elements with rounding up - srl8
Experimental Logical right shift packed 8-bit elements without rounding up - srl8u
Experimental Logical right shift packed 8-bit elements with rounding up - srl16
Experimental Logical right shift packed 16-bit elements without rounding up - srl16u
Experimental Logical right shift packed 16-bit elements with rounding up - stas16
Experimental Straight adds and subtracts packed 16-bit signed numbers, discarding overflow bits - stsa16
Experimental Straight subtracts and adds packed 16-bit signed numbers, discarding overflow bits - sub8
Experimental Subtracts packed 8-bit signed numbers, discarding overflow bits - sub16
Experimental Subtracts packed 16-bit signed numbers, discarding overflow bits - sunpkd810
Experimental Unpack first and zeroth into two 16-bit signed halfwords in each 32-bit chunk - sunpkd820
Experimental Unpack second and zeroth into two 16-bit signed halfwords in each 32-bit chunk - sunpkd830
Experimental Unpack third and zeroth into two 16-bit signed halfwords in each 32-bit chunk - sunpkd831
Experimental Unpack third and first into two 16-bit signed halfwords in each 32-bit chunk - sunpkd832
Experimental Unpack third and second into two 16-bit signed halfwords in each 32-bit chunk - swap8
Experimental Swap the 8-bit bytes within each 16-bit halfword of a register. - swap16
Experimental Swap the 16-bit halfwords within each 32-bit word of a register - ucmple8
Experimental Compare whether 8-bit packed unsigned integers are less than or equal to the others - ucmple16
Experimental Compare whether 16-bit packed unsigned integers are less than or equal to the others - ucmplt8
Experimental Compare whether 8-bit packed unsigned integers are less than the others - ucmplt16
Experimental Compare whether 16-bit packed unsigned integers are less than the others - ukadd8
Experimental Adds packed 8-bit unsigned numbers, saturating at the numeric bounds - ukadd16
Experimental Adds packed 16-bit unsigned numbers, saturating at the numeric bounds - ukaddh
Experimental Adds signed lower 16-bit content of two registers with U16 saturation - ukcras16
Experimental Cross adds and subtracts packed 16-bit unsigned numbers, saturating at the numeric bounds - ukcrsa16
Experimental Cross subtracts and adds packed 16-bit unsigned numbers, saturating at the numeric bounds - ukstas16
Experimental Straight adds and subtracts packed 16-bit unsigned numbers, saturating at the numeric bounds - ukstsa16
Experimental Straight subtracts and adds packed 16-bit unsigned numbers, saturating at the numeric bounds - uksub8
Experimental Subtracts packed 8-bit unsigned numbers, saturating at the numeric bounds - uksub16
Experimental Subtracts packed 16-bit unsigned numbers, saturating at the numeric bounds - uksubh
Experimental Subtracts signed lower 16-bit content of two registers with U16 saturation - umaqa
Experimental Multiply unsigned 8-bit elements and add 16-bit elements on results for packed 32-bit chunks - umax8
Experimental Get maximum values from 8-bit packed unsigned integers - umax16
Experimental Get maximum values from 16-bit packed unsigned integers - umin8
Experimental Get minimum values from 8-bit packed unsigned integers - umin16
Experimental Get minimum values from 16-bit packed unsigned integers - unzip⚠
Experimental zbkb
Place odd and even bits of the source word into upper/lower halves of the destination. - uradd8
Experimental Halves the sum of packed 8-bit unsigned numbers, dropping least bits - uradd16
Experimental Halves the sum of packed 16-bit unsigned numbers, dropping least bits - urcras16
Experimental Cross halves of adds and subtracts packed 16-bit unsigned numbers, dropping least bits - urcrsa16
Experimental Cross halves of subtracts and adds packed 16-bit unsigned numbers, dropping least bits - urstas16
Experimental Straight halves of adds and subtracts packed 16-bit unsigned numbers, dropping least bits - urstsa16
Experimental Straight halves of subtracts and adds packed 16-bit unsigned numbers, dropping least bits - ursub8
Experimental Halves the subtraction result of packed 8-bit unsigned numbers, dropping least bits - ursub16
Experimental Halves the subtraction result of packed 16-bit unsigned numbers, dropping least bits - wfi⚠
Experimental Generates theWFI
instruction - xperm4⚠
Experimental zbkx
Nibble-wise lookup of indicies into a vector. - xperm8⚠
Experimental zbkx
Byte-wise lookup of indicies into a vector in registers. - zip⚠
Experimental zbkb
Place upper/lower halves of the source register into odd/even bits of the destination respectivley. - zunpkd810
Experimental Unpack first and zeroth into two 16-bit unsigned halfwords in each 32-bit chunk - zunpkd820
Experimental Unpack second and zeroth into two 16-bit unsigned halfwords in each 32-bit chunk - zunpkd830
Experimental Unpack third and zeroth into two 16-bit unsigned halfwords in each 32-bit chunk - zunpkd831
Experimental Unpack third and first into two 16-bit unsigned halfwords in each 32-bit chunk - zunpkd832
Experimental Unpack third and second into two 16-bit unsigned halfwords in each 32-bit chunk