Found a work-around for the 3 arg syscall... but it is not pretty.
The problem is that the ABI specifies the 4th arg (we add in spdid as the 1st) to be %r10 for the kernel interface (syscalls), and %rcx for user level.
The syscall uses %rcx as the return pointer, so we must save it. The user level function, when called, assumes that the 4th arg is in %rcx.
This should not be the case, since regparm(0) is specified...