Halfwords load with lhz
A u16 is two bytes — a halfword. Reading one uses lhz — load halfword and zero — the 16-bit sibling of lbz. It clears the top 16 bits:
lhz r3, 0(r3) # two bytes, zero-extended into r3
blr
Just like the byte case, unsigned means zero-extended, so lhz does the whole job in one instruction. Memorize the family: lbz for unsigned bytes, lhz for unsigned halfwords, lwz for full words.
Your task
Write load_u16 to match the target assembly above.