Answer from cs61c-ck (Allen Lee 16583554) for Question 3 The purpose of the adder is to compute the branch target address - it adds the sign extended immediate field of the instruction after 2 left shifts to the incremented PC. The ALU does the comparison for the branch and outputs 0 or 1 accordingly. It's probably possible for a single ALU to do both functions since ALUs can do any arithmetic operations, but we would probably have to add delays and extra registers to make it work because everything is timed by the clock. It's probably better to have things happen almost simultaneously.