diff --git a/src/internal/mips/syscall.s b/src/internal/mips/syscall.s index 285754087872ed1325cbee01b17c000adc22aa60..e18a382e24225b673693268f01f3bbc8786fff3d 100644 --- a/src/internal/mips/syscall.s +++ b/src/internal/mips/syscall.s @@ -3,17 +3,20 @@ .global __syscall .type __syscall,@function __syscall: - move $25, $4 + move $2, $4 move $4, $5 move $5, $6 move $6, $7 lw $7, 16($sp) lw $8, 20($sp) lw $9, 24($sp) + lw $10,28($sp) subu $sp, $sp, 32 sw $8, 16($sp) sw $9, 20($sp) - move $2, $25 + sw $10,24($sp) + sw $2 ,28($sp) + lw $2, 28($sp) syscall beq $7, $0, 1f addu $sp, $sp, 32 diff --git a/src/internal/syscall.h b/src/internal/syscall.h index ffaf640ae081ca8650ad8960b23f16ab08453f3c..50409ef8168db07e6ef458fefb0ec2b553797bbc 100644 --- a/src/internal/syscall.h +++ b/src/internal/syscall.h @@ -14,9 +14,10 @@ long __syscall_cp(long, long, long, long, long, long, long); #define __syscall4(n,a,b,c,d) __syscall4(n,(long)(a),(long)(b),(long)(c),(long)(d)) #define __syscall5(n,a,b,c,d,e) __syscall5(n,(long)(a),(long)(b),(long)(c),(long)(d),(long)(e)) #define __syscall6(n,a,b,c,d,e,f) __syscall6(n,(long)(a),(long)(b),(long)(c),(long)(d),(long)(e),(long)(f)) +#define __syscall7(n,a,b,c,d,e,f,g) (__syscall)(n,(long)(a),(long)(b),(long)(c),(long)(d),(long)(e),(long)(f),(long)g) -#define __SYSCALL_NARGS_X(a,b,c,d,e,f,g,n,...) n -#define __SYSCALL_NARGS(...) __SYSCALL_NARGS_X(__VA_ARGS__,6,5,4,3,2,1,0) +#define __SYSCALL_NARGS_X(a,b,c,d,e,f,g,h,n,...) n +#define __SYSCALL_NARGS(...) __SYSCALL_NARGS_X(__VA_ARGS__,7,6,5,4,3,2,1,0) #define __SYSCALL_CONCAT_X(a,b) a##b #define __SYSCALL_CONCAT(a,b) __SYSCALL_CONCAT_X(a,b) #define __SYSCALL_DISP(b,...) __SYSCALL_CONCAT(b,__SYSCALL_NARGS(__VA_ARGS__))(__VA_ARGS__)