Answer from cs61c-ee (Michael Shen 15963205) for Question 3 The purpose of the add unit is to add the 16 bit offset to the PC+4 to give the absolute branch address. You have to use two ALU's in the datapath for branch condition because you need to generate the branch target and the signal to branch at the same time. If, you need to branch, it's wasteful to wait an additional clock cycle to get the address to branch to. Thus, you need 2 ALU's to perform the calculation of the branch address and the decision to branch so that things run efficiently.