SIMD 8bit Miscellaneous Instructions
 __STATIC_FORCEINLINE unsigned long __RV_CLRS8 (unsigned long a)
 __STATIC_FORCEINLINE unsigned long __RV_CLO8 (unsigned long a)
 __STATIC_FORCEINLINE unsigned long __RV_CLZ8 (unsigned long a)
 __STATIC_FORCEINLINE unsigned long __RV_KABS8 (unsigned long a)
 __STATIC_FORCEINLINE unsigned long __RV_SMAX8 (unsigned long a, unsigned long b)
 __STATIC_FORCEINLINE unsigned long __RV_SMIN8 (unsigned long a, unsigned long b)
 __STATIC_FORCEINLINE unsigned long __RV_UMAX8 (unsigned long a, unsigned long b)
 __STATIC_FORCEINLINE unsigned long __RV_UMIN8 (unsigned long a, unsigned long b)

__RV_SCLIP8(a, b)

__RV_UCLIP8(a, b)
 group NMSIS_Core_DSP_Intrinsic_SIMD_8B_MISC
SIMD 8bit Miscellaneous Instructions.
there are 10 SIMD 8bit Miscellaneous instructions.
Defines

__RV_SCLIP8(a, b)
SCLIP8 (SIMD 8bit Signed Clip Value)
Type: SIMD
Syntax:
SCLIP8 Rd, Rs1, imm3u[2:0]
Purpose
:
Limit the 8bit signed integer elements of a register into a signed range simultaneously.
Description
:
This instruction limits the 8bit signed integer elements stored in Rs1 into a signed integer range between 2^imm3u1 and 2^imm3u, and writes the limited results to Rd. For example, if imm3u is 3, the 8bit input values should be saturated between 7 and 8. If saturation is performed, set OV bit to 1.
Operations:
src = Rs1.B[x]; if (src > (2^imm3u)1) { src = (2^imm3u)1; OV = 1; } else if (src < 2^imm3u) { src = 2^imm3u; OV = 1; } Rd.B[x] = src for RV32: x=3...0, for RV64: x=7...0
 Parameters
a – [in] unsigned long type of value stored in a
b – [in] unsigned int type of value stored in b
 Returns
value stored in unsigned long type

__RV_UCLIP8(a, b)
UCLIP8 (SIMD 8bit Unsigned Clip Value)
Type: SIMD
Syntax:
UCLIP8 Rt, Ra, imm3u
Purpose
:
Limit the 8bit signed elements of a register into an unsigned range simultaneously.
Description
:
This instruction limits the 8bit signed elements stored in Rs1 into an unsigned integer range between 2^imm3u1 and 0, and writes the limited results to Rd. For example, if imm3u is 3, the 8 bit input values should be saturated between 7 and 0. If saturation is performed, set OV bit to 1.
Operations:
src = Rs1.H[x]; if (src > (2^imm3u)1) { src = (2^imm3u)1; OV = 1; } else if (src < 0) { src = 0; OV = 1; } Rd.H[x] = src; for RV32: x=3...0, for RV64: x=7...0
 Parameters
a – [in] unsigned long type of value stored in a
b – [in] unsigned int type of value stored in b
 Returns
value stored in unsigned long type
Functions
 __STATIC_FORCEINLINE unsigned long __RV_CLRS8 (unsigned long a)
CLRS8 (SIMD 8bit Count Leading Redundant Sign)
Type: SIMD
Syntax:
CLRS8 Rd, Rs1
Purpose
:
Count the number of redundant sign bits of the 8bit elements of a general register.
Description
:
Starting from the bits next to the sign bits of the 8bit elements of Rs1, this instruction counts the number of redundant sign bits and writes the result to the corresponding 8bit elements of Rd.
Operations:
snum[x] = Rs1.B[x]; cnt[x] = 0; for (i = 6 to 0) { if (snum[x](i) == snum[x](7)) { cnt[x] = cnt[x] + 1; } else { break; } } Rd.B[x] = cnt[x]; for RV32: x=3...0 for RV64: x=7...0
 Parameters
a – [in] unsigned long type of value stored in a
 Returns
value stored in unsigned long type
 __STATIC_FORCEINLINE unsigned long __RV_CLO8 (unsigned long a)
CLO8 (SIMD 8bit Count Leading One)
Type: SIMD
Syntax:
CLO8 Rd, Rs1
Purpose
:
Count the number of leading one bits of the 8bit elements of a general register.
Description
:
Starting from the most significant bits of the 8bit elements of Rs1, this instruction counts the number of leading one bits and writes the results to the corresponding 8bit elements of Rd.
Operations:
snum[x] = Rs1.B[x]; cnt[x] = 0; for (i = 7 to 0) { if (snum[x](i) == 1) { cnt[x] = cnt[x] + 1; } else { break; } } Rd.B[x] = cnt[x]; for RV32: x=3...0 for RV64: x=7...0
 Parameters
a – [in] unsigned long type of value stored in a
 Returns
value stored in unsigned long type
 __STATIC_FORCEINLINE unsigned long __RV_CLZ8 (unsigned long a)
CLZ8 (SIMD 8bit Count Leading Zero)
Type: SIMD
Syntax:
CLZ8 Rd, Rs1
Purpose
:
Count the number of leading zero bits of the 8bit elements of a general register.
Description
:
Starting from the most significant bits of the 8bit elements of Rs1, this instruction counts the number of leading zero bits and writes the results to the corresponding 8bit elements of Rd.
Operations:
snum[x] = Rs1.B[x]; cnt[x] = 0; for (i = 7 to 0) { if (snum[x](i) == 0) { cnt[x] = cnt[x] + 1; } else { break; } } Rd.B[x] = cnt[x]; for RV32: x=3...0 for RV64: x=7...0
 Parameters
a – [in] unsigned long type of value stored in a
 Returns
value stored in unsigned long type
 __STATIC_FORCEINLINE unsigned long __RV_KABS8 (unsigned long a)
KABS8 (SIMD 8bit Saturating Absolute)
Type: SIMD
Syntax:
KABS8 Rd, Rs1
Purpose
:
Get the absolute value of 8bit signed integer elements simultaneously.
Description
:
This instruction calculates the absolute value of 8bit signed integer elements stored in Rs1 and writes the element results to Rd. If the input number is 0x80, this instruction generates 0x7f as the output and sets the OV bit to 1.
Operations:
src = Rs1.B[x]; if (src == 0x80) { src = 0x7f; OV = 1; } else if (src[7] == 1) src = src; } Rd.B[x] = src; for RV32: x=3...0, for RV64: x=7...0
 Parameters
a – [in] unsigned long type of value stored in a
 Returns
value stored in unsigned long type
 __STATIC_FORCEINLINE unsigned long __RV_SMAX8 (unsigned long a, unsigned long b)
SMAX8 (SIMD 8bit Signed Maximum)
Type: SIMD
Syntax:
SMAX8 Rd, Rs1, Rs2
Purpose
:
Do 8bit signed integer elements finding maximum operations simultaneously.
Description
:
This instruction compares the 8bit signed integer elements in Rs1 with the 8bit signed integer elements in Rs2 and selects the numbers that is greater than the other one. The selected results are written to Rd.
Operations:
Rd.B[x] = (Rs1.B[x] > Rs2.B[x])? Rs1.B[x] : Rs2.B[x]; for RV32: x=3...0, for RV64: x=7...0
 Parameters
a – [in] unsigned long type of value stored in a
b – [in] unsigned long type of value stored in b
 Returns
value stored in unsigned long type
 __STATIC_FORCEINLINE unsigned long __RV_SMIN8 (unsigned long a, unsigned long b)
SMIN8 (SIMD 8bit Signed Minimum)
Type: SIMD
Syntax:
SMIN8 Rd, Rs1, Rs2
Purpose
:
Do 8bit signed integer elements finding minimum operations simultaneously.
Description
:
This instruction compares the 8bit signed integer elements in Rs1 with the 8bit signed integer elements in Rs2 and selects the numbers that is less than the other one. The selected results are written to Rd.
Operations:
Rd.B[x] = (Rs1.B[x] < Rs2.B[x])? Rs1.B[x] : Rs2.B[x]; for RV32: x=3...0, for RV64: x=7...0
 Parameters
a – [in] unsigned long type of value stored in a
b – [in] unsigned long type of value stored in b
 Returns
value stored in unsigned long type
 __STATIC_FORCEINLINE unsigned long __RV_UMAX8 (unsigned long a, unsigned long b)
UMAX8 (SIMD 8bit Unsigned Maximum)
Type: SIMD
Syntax:
UMAX8 Rd, Rs1, Rs2
Purpose
:
Do 8bit unsigned integer elements finding maximum operations simultaneously.
Description
:
This instruction compares the 8bit unsigned integer elements in Rs1 with the four 8 bit unsigned integer elements in Rs2 and selects the numbers that is greater than the other one. The two selected results are written to Rd.
Operations:
Rd.B[x] = (Rs1.B[x] >u Rs2.B[x])? Rs1.B[x] : Rs2.B[x]; for RV32: x=3...0, for RV64: x=7...0
 Parameters
a – [in] unsigned long type of value stored in a
b – [in] unsigned long type of value stored in b
 Returns
value stored in unsigned long type
 __STATIC_FORCEINLINE unsigned long __RV_UMIN8 (unsigned long a, unsigned long b)
UMIN8 (SIMD 8bit Unsigned Minimum)
Type: SIMD
Syntax:
UMIN8 Rd, Rs1, Rs2
Purpose
:
Do 8bit unsigned integer elements finding minimum operations simultaneously.
Description
:
This instruction compares the 8bit unsigned integer elements in Rs1 with the 8bit unsigned integer elements in Rs2 and selects the numbers that is less than the other one. The selected results are written to Rd.
Operations:
Rd.B[x] = (Rs1.B[x] <u Rs2.B[x])? Rs1.B[x] : Rs2.B[x]; for RV32: x=3...0, for RV64: x=7...0
 Parameters
a – [in] unsigned long type of value stored in a
b – [in] unsigned long type of value stored in b
 Returns
value stored in unsigned long type

__RV_SCLIP8(a, b)