Assembly:

MOVE.BALC rd, rt, address

nanoMIPS, not available in NMS

Move and Branch and Link, Compact

Purpose:

Move and Branch and Link, Compact. Copy value of register $rt to register $rd, and performan unconditional PC relative branch to address, placing the return address in register $31.

Availability:

nanoMIPS, not available in NMS

Format:

000010

rtz4[3]

rd1

rtz4[2:0]

s[20:1]

s[21]

6

1

1

3

20

1

Operation:

if C0.Config5.NMS == 1:
    raise exception('RI')
rd = decode_gpr(rd1, 'gpr1')
rt = decode_gpr(rtz4[3] @ rtz4[2:0], 'gpr4.zero')
offset = sign_extend(s, from_nbits=22)
address = effective_address(CPU.next_pc, offset)
GPR[rd] = GPR[rt]
GPR[31] = CPU.next_pc
CPU.next_pc = address

Although this instruction is called MOVE.BALC, the order of the updates to PC, $31 and $rd is invisible to software, and an implementation may choose any order for carring out these steps.

Exceptions:

Reserved Instruction on NMS cores.