FP is a translated to a varying offset to SP depending on where in the program you are. arguments on the stack are padded to 8 bytes on amd64, the first argument is not passed on the stack on function entry, but passed in BP register (RARG is an alias for that), however the slot on the stack for first arg is still reserved so we have a save place to splill it. so 0(FP) is first function argument on the stack, 8(FP) second argument 16(FP) third ect...
-- cinap