Encoding:

COP1

010001

BC1EQZ

01001

ft

offset

COP1

010001

BC1NEZ

01101

ft

offset

6

5

5

16

Format:

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

Purpose:

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

Description:

BC1EQZ:  if FPR[ft] & 1 = 0 then branch
BC1NEZ:  if FPR[ft] & 1 != 0 then branch

The condition is evaluated on FPU register ft.

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.

Restrictions:

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.

Availability and Compatibility:

These instructions are introduced by and required as of Release 6.

Exceptions:

Coprocessor Unusable1

Operation:

   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

Programming Notes:

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.