This is PDP-11 code mixing C and assembly. In the below, u.u_rsav is an array pointer,
savu(u.u_rsav);
The assembly code for this function is
_savu: bis $340,PS
mov (sp)+,r1
mov (sp),r0
mov sp,(r0)+
mov r5,(r0)+
bic $340,PS
jmp (r1)
It seems like before it enters the procedure, it first pushes the argument, then pushes the return point PC value. So, r1 stores PC and r0 stores the argument. My puzzle is sp (stack pointer) does not restore to the original value before the assembly code jumps back to the calling point. It still points to the position where the argument was stored in the stack.