POOL32A 000000 |
rt |
size |
ac |
EXTP 10011001 |
POOL32Axf 111100 |
6 |
5 |
5 |
2 |
8 |
6 |
SPECIAL3 011111 |
size |
rt |
0 000 |
ac |
EXTP 00010 |
EXTR.W 111000 |
6 |
5 |
5 |
3 |
2 |
5 |
6 |
EXTP rt, ac, size |
microMIPSDSP |
Extract Fixed Bitfield From Arbitrary Position in Accumulator to GPR |
Extract Fixed Bitfield From Arbitrary Position in Accumulator to GPR
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.
rt = sign_extend(zero_extend(acpos..pos-size))
A set of size+1 contiguous bits are extracted from an arbitrary position in accumulator ac, zero-extended to 64 bits, and 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; bit 6 of the DSPControl register is ignored. The last bit in the set is start_pos - size, where size 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 MIPS64 architecture. After the execution of this instruction, accumulator ac remains unmodified.
If start_possize, the extraction is valid, otherwise the extraction is invalid and is said to have failed. The-(1+)1->= value of the destination register is UNPREDICTABLE when the extraction is invalid. 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.
Bit 31 of the result is extended into the 32 most-significant bits of the destination register.
The values of bits 0 to 6 in the pos field of the DSPControl register are unchanged by this instruction.
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.
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 temp31..0 = 0(32-(size+1)) || tempsize..0 GPR[rt]63..0 = (temp31)32 || temp31..0 DSPControlEFI:14 = 0 else DSPControlEFI:14 = 1 GPR[rt] = UNPREDICTABLE endif
Reserved Instruction, DSP Disabled