SIMD 8-bit Unpacking Instructions
- __STATIC_FORCEINLINE unsigned long __RV_SUNPKD810 (unsigned long a)
- __STATIC_FORCEINLINE unsigned long __RV_SUNPKD820 (unsigned long a)
- __STATIC_FORCEINLINE unsigned long __RV_SUNPKD830 (unsigned long a)
- __STATIC_FORCEINLINE unsigned long __RV_SUNPKD831 (unsigned long a)
- __STATIC_FORCEINLINE unsigned long __RV_SUNPKD832 (unsigned long a)
- __STATIC_FORCEINLINE unsigned long __RV_ZUNPKD810 (unsigned long a)
- __STATIC_FORCEINLINE unsigned long __RV_ZUNPKD820 (unsigned long a)
- __STATIC_FORCEINLINE unsigned long __RV_ZUNPKD830 (unsigned long a)
- __STATIC_FORCEINLINE unsigned long __RV_ZUNPKD831 (unsigned long a)
- __STATIC_FORCEINLINE unsigned long __RV_ZUNPKD832 (unsigned long a)
- group NMSIS_Core_DSP_Intrinsic_SIMD_8B_UNPACK
SIMD 8-bit Unpacking Instructions.
there are 8 SIMD 8-bit Unpacking instructions.
Functions
- __STATIC_FORCEINLINE unsigned long __RV_SUNPKD810 (unsigned long a)
SUNPKD810 (Signed Unpacking Bytes 1 & 0)
Type: DSP
Syntax:
SUNPKD8xy Rd, Rs1 xy = {10, 20, 30, 31, 32}
Purpose
:
Unpack byte
x and byte y of 32-bit chunks in a register into two 16-bit signed halfwords of 32-bit chunks in a register.Description
:
For the
SUNPKD8(x)(*y*)
instruction, it unpacks byte x and byte y of 32-bit chunks in Rs1 into two 16-bit signed halfwords and writes the results to the top part and the bottom part of 32-bit chunks in Rd.Operations:
Rd.W[m].H[1] = SE16(Rs1.W[m].B[x]) Rd.W[m].H[0] = SE16(Rs1.W[m].B[y]) // SUNPKD810, x=1,y=0 // SUNPKD820, x=2,y=0 // SUNPKD830, x=3,y=0 // SUNPKD831, x=3,y=1 // SUNPKD832, x=3,y=2 for RV32: m=0, for RV64: m=1...0
- Parameters
a – [in] unsigned long type of value stored in a
- Returns
value stored in unsigned long type
- __STATIC_FORCEINLINE unsigned long __RV_SUNPKD820 (unsigned long a)
SUNPKD820 (Signed Unpacking Bytes 2 & 0)
Type: DSP
Syntax:
SUNPKD8xy Rd, Rs1 xy = {10, 20, 30, 31, 32}
Purpose
:
Unpack byte
x and byte y of 32-bit chunks in a register into two 16-bit signed halfwords of 32-bit chunks in a register.Description
:
For the
SUNPKD8(x)(*y*)
instruction, it unpacks byte x and byte y of 32-bit chunks in Rs1 into two 16-bit signed halfwords and writes the results to the top part and the bottom part of 32-bit chunks in Rd.Operations:
Rd.W[m].H[1] = SE16(Rs1.W[m].B[x]) Rd.W[m].H[0] = SE16(Rs1.W[m].B[y]) // SUNPKD810, x=1,y=0 // SUNPKD820, x=2,y=0 // SUNPKD830, x=3,y=0 // SUNPKD831, x=3,y=1 // SUNPKD832, x=3,y=2 for RV32: m=0, for RV64: m=1...0
- Parameters
a – [in] unsigned long type of value stored in a
- Returns
value stored in unsigned long type
- __STATIC_FORCEINLINE unsigned long __RV_SUNPKD830 (unsigned long a)
SUNPKD830 (Signed Unpacking Bytes 3 & 0)
Type: DSP
Syntax:
SUNPKD8xy Rd, Rs1 xy = {10, 20, 30, 31, 32}
Purpose
:
Unpack byte
x and byte y of 32-bit chunks in a register into two 16-bit signed halfwords of 32-bit chunks in a register.Description
:
For the
SUNPKD8(x)(*y*)
instruction, it unpacks byte x and byte y of 32-bit chunks in Rs1 into two 16-bit signed halfwords and writes the results to the top part and the bottom part of 32-bit chunks in Rd.Operations:
Rd.W[m].H[1] = SE16(Rs1.W[m].B[x]) Rd.W[m].H[0] = SE16(Rs1.W[m].B[y]) // SUNPKD810, x=1,y=0 // SUNPKD820, x=2,y=0 // SUNPKD830, x=3,y=0 // SUNPKD831, x=3,y=1 // SUNPKD832, x=3,y=2 for RV32: m=0, for RV64: m=1...0
- Parameters
a – [in] unsigned long type of value stored in a
- Returns
value stored in unsigned long type
- __STATIC_FORCEINLINE unsigned long __RV_SUNPKD831 (unsigned long a)
SUNPKD831 (Signed Unpacking Bytes 3 & 1)
Type: DSP
Syntax:
SUNPKD8xy Rd, Rs1 xy = {10, 20, 30, 31, 32}
Purpose
:
Unpack byte
x and byte y of 32-bit chunks in a register into two 16-bit signed halfwords of 32-bit chunks in a register.Description
:
For the
SUNPKD8(x)(*y*)
instruction, it unpacks byte x and byte y of 32-bit chunks in Rs1 into two 16-bit signed halfwords and writes the results to the top part and the bottom part of 32-bit chunks in Rd.Operations:
Rd.W[m].H[1] = SE16(Rs1.W[m].B[x]) Rd.W[m].H[0] = SE16(Rs1.W[m].B[y]) // SUNPKD810, x=1,y=0 // SUNPKD820, x=2,y=0 // SUNPKD830, x=3,y=0 // SUNPKD831, x=3,y=1 // SUNPKD832, x=3,y=2 for RV32: m=0, for RV64: m=1...0
- Parameters
a – [in] unsigned long type of value stored in a
- Returns
value stored in unsigned long type
- __STATIC_FORCEINLINE unsigned long __RV_SUNPKD832 (unsigned long a)
SUNPKD832 (Signed Unpacking Bytes 3 & 2)
Type: DSP
Syntax:
SUNPKD8xy Rd, Rs1 xy = {10, 20, 30, 31, 32}
Purpose
:
Unpack byte
x and byte y of 32-bit chunks in a register into two 16-bit signed halfwords of 32-bit chunks in a register.Description
:
For the
SUNPKD8(x)(*y*)
instruction, it unpacks byte x and byte y of 32-bit chunks in Rs1 into two 16-bit signed halfwords and writes the results to the top part and the bottom part of 32-bit chunks in Rd.Operations:
Rd.W[m].H[1] = SE16(Rs1.W[m].B[x]) Rd.W[m].H[0] = SE16(Rs1.W[m].B[y]) // SUNPKD810, x=1,y=0 // SUNPKD820, x=2,y=0 // SUNPKD830, x=3,y=0 // SUNPKD831, x=3,y=1 // SUNPKD832, x=3,y=2 for RV32: m=0, for RV64: m=1...0
- Parameters
a – [in] unsigned long type of value stored in a
- Returns
value stored in unsigned long type
- __STATIC_FORCEINLINE unsigned long __RV_ZUNPKD810 (unsigned long a)
ZUNPKD810 (Unsigned Unpacking Bytes 1 & 0)
Type: DSP
Syntax:
ZUNPKD8xy Rd, Rs1 xy = {10, 20, 30, 31, 32}
Purpose
:
Unpack byte x and byte y of 32-bit chunks in a register into two 16-bit unsigned halfwords of 32-bit chunks in a register.
Description
:
For the
ZUNPKD8(x)(*y*)
instruction, it unpacks byte x and byte y of 32-bit chunks in Rs1 into two 16-bit unsigned halfwords and writes the results to the top part and the bottom part of 32-bit chunks in Rd.Operations:
Rd.W[m].H[1] = ZE16(Rs1.W[m].B[x]) Rd.W[m].H[0] = ZE16(Rs1.W[m].B[y]) // ZUNPKD810, x=1,y=0 // ZUNPKD820, x=2,y=0 // ZUNPKD830, x=3,y=0 // ZUNPKD831, x=3,y=1 // ZUNPKD832, x=3,y=2 for RV32: m=0, for RV64: m=1...0
- Parameters
a – [in] unsigned long type of value stored in a
- Returns
value stored in unsigned long type
- __STATIC_FORCEINLINE unsigned long __RV_ZUNPKD820 (unsigned long a)
ZUNPKD820 (Unsigned Unpacking Bytes 2 & 0)
Type: DSP
Syntax:
ZUNPKD8xy Rd, Rs1 xy = {10, 20, 30, 31, 32}
Purpose
:
Unpack byte x and byte y of 32-bit chunks in a register into two 16-bit unsigned halfwords of 32-bit chunks in a register.
Description
:
For the
ZUNPKD8(x)(*y*)
instruction, it unpacks byte x and byte y of 32-bit chunks in Rs1 into two 16-bit unsigned halfwords and writes the results to the top part and the bottom part of 32-bit chunks in Rd.Operations:
Rd.W[m].H[1] = ZE16(Rs1.W[m].B[x]) Rd.W[m].H[0] = ZE16(Rs1.W[m].B[y]) // ZUNPKD810, x=1,y=0 // ZUNPKD820, x=2,y=0 // ZUNPKD830, x=3,y=0 // ZUNPKD831, x=3,y=1 // ZUNPKD832, x=3,y=2 for RV32: m=0, for RV64: m=1...0
- Parameters
a – [in] unsigned long type of value stored in a
- Returns
value stored in unsigned long type
- __STATIC_FORCEINLINE unsigned long __RV_ZUNPKD830 (unsigned long a)
ZUNPKD830 (Unsigned Unpacking Bytes 3 & 0)
Type: DSP
Syntax:
ZUNPKD8xy Rd, Rs1 xy = {10, 20, 30, 31, 32}
Purpose
:
Unpack byte x and byte y of 32-bit chunks in a register into two 16-bit unsigned halfwords of 32-bit chunks in a register.
Description
:
For the
ZUNPKD8(x)(*y*)
instruction, it unpacks byte x and byte y of 32-bit chunks in Rs1 into two 16-bit unsigned halfwords and writes the results to the top part and the bottom part of 32-bit chunks in Rd.Operations:
Rd.W[m].H[1] = ZE16(Rs1.W[m].B[x]) Rd.W[m].H[0] = ZE16(Rs1.W[m].B[y]) // ZUNPKD810, x=1,y=0 // ZUNPKD820, x=2,y=0 // ZUNPKD830, x=3,y=0 // ZUNPKD831, x=3,y=1 // ZUNPKD832, x=3,y=2 for RV32: m=0, for RV64: m=1...0
- Parameters
a – [in] unsigned long type of value stored in a
- Returns
value stored in unsigned long type
- __STATIC_FORCEINLINE unsigned long __RV_ZUNPKD831 (unsigned long a)
ZUNPKD831 (Unsigned Unpacking Bytes 3 & 1)
Type: DSP
Syntax:
ZUNPKD8xy Rd, Rs1 xy = {10, 20, 30, 31, 32}
Purpose
:
Unpack byte x and byte y of 32-bit chunks in a register into two 16-bit unsigned halfwords of 32-bit chunks in a register.
Description
:
For the
ZUNPKD8(x)(*y*)
instruction, it unpacks byte x and byte y of 32-bit chunks in Rs1 into two 16-bit unsigned halfwords and writes the results to the top part and the bottom part of 32-bit chunks in Rd.Operations:
Rd.W[m].H[1] = ZE16(Rs1.W[m].B[x]) Rd.W[m].H[0] = ZE16(Rs1.W[m].B[y]) // ZUNPKD810, x=1,y=0 // ZUNPKD820, x=2,y=0 // ZUNPKD830, x=3,y=0 // ZUNPKD831, x=3,y=1 // ZUNPKD832, x=3,y=2 for RV32: m=0, for RV64: m=1...0
- Parameters
a – [in] unsigned long type of value stored in a
- Returns
value stored in unsigned long type
- __STATIC_FORCEINLINE unsigned long __RV_ZUNPKD832 (unsigned long a)
ZUNPKD832 (Unsigned Unpacking Bytes 3 & 2)
Type: DSP
Syntax:
ZUNPKD8xy Rd, Rs1 xy = {10, 20, 30, 31, 32}
Purpose
:
Unpack byte x and byte y of 32-bit chunks in a register into two 16-bit unsigned halfwords of 32-bit chunks in a register.
Description
:
For the
ZUNPKD8(x)(*y*)
instruction, it unpacks byte x and byte y of 32-bit chunks in Rs1 into two 16-bit unsigned halfwords and writes the results to the top part and the bottom part of 32-bit chunks in Rd.Operations:
Rd.W[m].H[1] = ZE16(Rs1.W[m].B[x]) Rd.W[m].H[0] = ZE16(Rs1.W[m].B[y]) // ZUNPKD810, x=1,y=0 // ZUNPKD820, x=2,y=0 // ZUNPKD830, x=3,y=0 // ZUNPKD831, x=3,y=1 // ZUNPKD832, x=3,y=2 for RV32: m=0, for RV64: m=1...0
- Parameters
a – [in] unsigned long type of value stored in a
- Returns
value stored in unsigned long type