COP1 010001 |
BC1EQZ 01001 |
ft |
offset |
COP1 010001 |
BC1NEZ 01101 |
ft |
offset |
6 |
5 |
5 |
16 |
BC1EQZ BC1NEZ |
Branch if Coprocessor 1 (FPU) Register Bit 0 is Equal to Zero | |
BC1EQZ ft, offset |
MIPS32 Release 6 |
Branch if Coprocessor 1 (FPU) Register Bit 0 is Equal to Zero |
BC1NEZ ft, offset |
MIPS32 Release 6 |
Branch if Coprocessor 1 (FPR) Register Bit 0 is Not Equal to Zero |
Branch if Coprocessor 1 (FPU) Register Bit 0 Equal/Not Equal to Zero
BC1EQZ: Branch if Coprocessor 1 (FPU) Register Bit 0 is Equal to Zero
BC1NEZ: Branch if Coprocessor 1 (FPR) Register Bit 0 is Not Equal to Zero
BC1EQZ: if FPR[ft] & 1 = 0 then branch BC1NEZ: if FPR[ft] & 1 != 0 then branch
The condition is evaluated on FPU register ft.
For BC1EQZ, the condition is true if and only if bit 0 of the FPU register ft is zero.
For BC1NEZ, the condition is true if and only if bit 0 of the FPU register ft is non-zero.
If the condition is false, the branch is not taken, and execution continues with the next instruction.
A 18-bit signed offset (the 16-bit offset field shifted left 2 bits) is added to the address of the instruction following the branch (not the branch itself), to form a PC-relative effective target address. Execute the instruction in the delay slot before the instruction at the target.
If access to Coprocessor 1 is not enabled, a Coprocessor Unusable Exception is signaled.
Because these instructions BC1EQZ and BC1NEZ do not depend on a particular floating point data type, they operate whenever Coprocessor 1 is enabled.
Control Transfer Instructions (CTIs) should not be placed in branch delay slots or Release 6 forbidden slots. CTIs
include all branches and jumps, NAL, ERET, ERETNC, DERET, WAIT, and PAUSE.
If a control transfer instruction (CTI) is executed in the delay slot of a branch or jump, Release 6 implementations are required to signal a Reserved Instruction exception.
These instructions are introduced by and required as of Release 6.
Coprocessor Unusable1
tmp = ValueFPR(ft, UNINTERPRETED_WORD) BC1EQZ: cond = tmp & 1 = 0 BC1NEZ: cond = tmp & 1 != 0 if cond then I: target_PC = ( PC+4 + sign_extend( offset << 2 ) I+1: PC = target_PC
Release 6: These instructions, BC1EQZ and BC1NEZ, replace the pre-Release 6 instructions BC1F and BC1T. These
Release 6 FPU branches depend on bit 0 of the scalar FPU register.
Note: BC1EQZ and BC1NEZ do not have a format or data type width. The same instructions are used for branches based on conditions involving any format, including 32-bit S (single precision) and W (word) format, and 64-bit D
(double precision) and L (longword) format, as well as 128-bit MSA. The FPU scalar comparison instructions
CMP.condn fmt produce an all ones or all zeros truth mask of their format width with the upper bits (where applicable) UNPREDICTABLE. BC1EQZ and BC1NEZ consume only bit 0 of the CMP.condn fmt output value, and therefore operate correctly independent of fmt.