The return address label goes after the jump to the called function, before the code for the next VM statement.
// call Sys.error 1
@RIP$123
D=A
code to push D on the stack
code to build the stack frame
@Sys.error
0;JMP
(RIP$123)
// pop temp 0
@SP
One of the tricky things to watch out for is that when a function with no parameters returns, argument 0 and the RIP are at the same location on the stack. Don't clobber the RIP when you preposition the return value.
--Mark