8bit Multiply with 32bit Add InstructionsΒΆ

__STATIC_FORCEINLINE long __RV_SMAQA(long t, unsigned long a, unsigned long b)

__STATIC_FORCEINLINE long __RV_SMAQA_SU(long t, unsigned long a, unsigned long b)

__STATIC_FORCEINLINE unsigned long __RV_UMAQA(unsigned long t, unsigned long a, unsigned long b)

group
NMSIS_Core_DSP_Intrinsic_8B_MULT_32B_ADD
8bit Multiply with 32bit Add Instructions
there are 3 8bit Multiply with 32bit Add Instructions
Functions

__STATIC_FORCEINLINE long __RV_SMAQA(long t, unsigned long a, unsigned long b)
SMAQA (Signed Multiply Four Bytes with 32bit Adds)
Type: PartialSIMD (Reduction)
Syntax:
SMAQA Rd, Rs1, Rs2
Purpose:
Do four signed 8bit multiplications from 32bit chunks of two registers; and then adds the four 16bit results and the content of corresponding 32bit chunks of a third register together.
Description:
This instruction multiplies the four signed 8bit elements of 32bit chunks of Rs1 with the four signed 8bit elements of 32bit chunks of Rs2 and then adds the four results together with the signed content of the corresponding 32bit chunks of Rd. The final results are written back to the corresponding 32bit chunks in Rd.
Operations:
res[x] = Rd.W[x] + (Rs1.W[x].B[3] s* Rs2.W[x].B[3]) + (Rs1.W[x].B[2] s* Rs2.W[x].B[2]) + (Rs1.W[x].B[1] s* Rs2.W[x].B[1]) + (Rs1.W[x].B[0] s* Rs2.W[x].B[0]); Rd.W[x] = res[x]; for RV32: x=0, for RV64: x=1,0
 Return
value stored in long type
 Parameters
[in] t
: long type of value stored in t[in] a
: unsigned long type of value stored in a[in] b
: unsigned long type of value stored in b

__STATIC_FORCEINLINE long __RV_SMAQA_SU(long t, unsigned long a, unsigned long b)
SMAQA.SU (Signed and Unsigned Multiply Four Bytes with 32bit Adds)
Type: PartialSIMD (Reduction)
Syntax:
SMAQA.SU Rd, Rs1, Rs2
Purpose:
Do four
signed x unsigned
8bit multiplications from 32bit chunks of two registers; and then adds the four 16bit results and the content of corresponding 32bit chunks of a third register together.Description:
This instruction multiplies the four signed 8bit elements of 32bit chunks of Rs1 with the four unsigned 8bit elements of 32bit chunks of Rs2 and then adds the four results together with the signed content of the corresponding 32bit chunks of Rd. The final results are written back to the corresponding 32bit chunks in Rd.
Operations:
res[x] = Rd.W[x] + (Rs1.W[x].B[3] su* Rs2.W[x].B[3]) + (Rs1.W[x].B[2] su* Rs2.W[x].B[2]) + (Rs1.W[x].B[1] su* Rs2.W[x].B[1]) + (Rs1.W[x].B[0] su* Rs2.W[x].B[0]); Rd.W[x] = res[x]; for RV32: x=0, for RV64: x=1...0
 Return
value stored in long type
 Parameters
[in] t
: long type of value stored in t[in] a
: unsigned long type of value stored in a[in] b
: unsigned long type of value stored in b

__STATIC_FORCEINLINE unsigned long __RV_UMAQA(unsigned long t, unsigned long a, unsigned long b)
UMAQA (Unsigned Multiply Four Bytes with 32 bit Adds)
Type: DSP
Syntax:
UMAQA Rd, Rs1, Rs2
Purpose:
Do four unsigned 8bit multiplications from 32bit chunks of two registers; and then adds the four 16bit results and the content of corresponding 32bit chunks of a third register together.
Description:
This instruction multiplies the four unsigned 8bit elements of 32bit chunks of Rs1 with the four unsigned 8bit elements of 32bit chunks of Rs2 and then adds the four results together with the unsigned content of the corresponding 32bit chunks of Rd. The final results are written back to the corresponding 32bit chunks in Rd.
Operations:
res[x] = Rd.W[x] + (Rs1.W[x].B[3] u* Rs2.W[x].B[3]) + (Rs1.W[x].B[2] u* Rs2.W[x].B[2]) + (Rs1.W[x].B[1] u* Rs2.W[x].B[1]) + (Rs1.W[x].B[0] u* Rs2.W[x].B[0]); Rd.W[x] = res[x]; for RV32: x=0, for RV64: x=1...0
 Return
value stored in unsigned long type
 Parameters
[in] t
: unsigned long type of value stored in t[in] a
: unsigned long type of value stored in a[in] b
: unsigned long type of value stored in b
