P32A 001000 |
rt |
size |
ac |
11 |
011 |
001 |
111 |
111 |
6 |
5 |
5 |
2 |
2 |
3 |
3 |
3 |
3 |
EXTPDP rt, ac, size |
DSP |
Extract Fixed Bitfield From Arbitrary Position in Accumulator to GPR and Decrement Pos |
Extract Fixed Bitfield From Arbitrary Position in Accumulator to GPR and Decrement Pos
Extract size+1 contiguous bits from a 64-bit accumulator from a position specified in the DSPControl register, writing the bits to a GPR with zero-extension and modifying the extraction position.
rt = zero_extend(acpos..pos-size) ; DSPControlpos:5..0 -= (size+1)
A set of size+1 contiguous bits are extracted from an arbitrary position in accumulator ac, zero-extended to 32 bits, then written to register rt.
The bit position, start_pos, of the first bit of the contiguous set to extract is specified by the pos field in bits 0 through
5 of the DSPControl register. The position of the last bit in the extracted set is start_pos - size, where the size argument is specified in the instruction.
The value of ac can range from 0 to 3. When ac=0, this refers to the original HI/LO register pair of the MIPS32 architecture. After the execution of this instruction, accumulator ac remains unmodified.
If start_possize, the extraction is valid and the value of the pos field in the DSPControl register is decre–(1+)1–>= mented by size+1. Otherwise, the extraction is invalid and is said to have failed. The value of the destination register is UNPREDICTABLE when the extraction is invalid, and the value of the pos field in the DSPControl register (bits 0 through 5) is not modified.
Upon an invalid extraction this instruction writes a 1 to bit 14, the Extract Failed Indicator (EFI) bit of the DSPControl register, and 0 otherwise.
No data-dependent exceptions are possible.
The operands must be values in the specified format. If they are not, the results are UNPREDICTABLE and the values of the operand vectors become UNPREDICTABLE.
ValidateAccessToDSPResources() start_pos5..0 = DSPControlpos:5..0 if ( start_pos - (size+1) >= -1 ) then tempsize..0 = ( HI[ac]31..0 || LO[ac]31..0 )start_pos..start_pos-size GPR[rt] = 0(GPRLEN-(size+1)) || tempsize..0 DSPControlpos:5..0 = DSPControlpos:5..0 - (size + 1) DSPControlEFI:14 = 0 else DSPControlEFI:14 = 1 GPR[rt] = UNPREDICTABLE endif
Reserved Instruction, DSP Disabled