Hi Thomas,
On Wed, Jul 22, 2026 at 3:28 AM Thomas Weißschuh <[email protected]> wrote:
> + * Syscalls for Alpha:
> + * - registers are 64-bit
> + * - syscall number is passed in $0/v0
> + * - the system call is performed by calling callsys
> + * - syscall return comes in $0/v0, error flag in $19/a4
typo in comment ? should be:
syscall return comes in $0/v0, error flag in $19/a3
> + * - arguments are passed in $16/a0 to $21/a5
> + * - GCC does not support symbol register names
> + */
> +#define __nolibc_syscall5(num, arg1, arg2, arg3, arg4, arg5)
> \
> +({
> \
> + register long _num __asm__ ("$0") = (num);
> \
> + register long _err __asm__ ("$19");
> \
> + register long _arg1 __asm__ ("$16") = (long)(arg1);
> \
> + register long _arg2 __asm__ ("$17") = (long)(arg2);
> \
> + register long _arg3 __asm__ ("$18") = (long)(arg3);
> \
> + register long _arg4 __asm__ ("$19") = (long)(arg4);
> \
> + register long _arg5 __asm__ ("$20") = (long)(arg5);
> \
> +
> \
> + __asm__ volatile (
> \
> + "callsys"
> \
> + : "+r"(_num), "=r"(_err)
> \
> + : "r"(_arg1), "r"(_arg2), "r"(_arg3), "r"(_arg4), "r"(_arg5)
> \
> + : _NOLIBC_SYSCALL_CLOBBERLIST, "$21"
> \
> + );
> \
> + _err ? -_num : _num;
> \
> +})
One observation, although I am not an expert on GCC inline-assembly constraints:
in the four- through six-argument wrappers, $19/a3 contains the fourth
argument on
entry and the error indicator on return. Would using a single read/write operand
for $19, similar to the handling of $0, make that transition clearer?
Michael’s successful testing on both XP1000 and ES45 also shows that the current
implementation works correctly on real hardware, so I do not consider
changing the
operand representation a requirement for v3. From my side, addressing the $19/a4
comment typo, together with the "TASK_SIZEi" typo already noted by Willy,
would be sufficient.
Michael’s testing should be sufficient, but I also have access to Alpha hardware
and would be happy to assist with any additional testing if useful.
Thanks alot for taking the time to do this.
Regards,
Magnus