mirror of https://git.musl-libc.org/git/musl
Browse Source
this doubles the performance of the fastest syscalls on the atom I tested it on; improvement is reportedly much more dramatic on worst-case cpus. cannot be used for cancellable syscalls.rs-1.0
4 changed files with 69 additions and 82 deletions
@ -1,20 +1,62 @@ |
|||
.hidden __sysinfo |
|||
|
|||
.global __vsyscall |
|||
.type __vsyscall,@function |
|||
__vsyscall: |
|||
push %edi |
|||
push %ebx |
|||
mov %edx,%ebx |
|||
mov %edi,%edx |
|||
mov 12(%esp),%edi |
|||
push %eax |
|||
call 1f |
|||
2: pop %ebx |
|||
pop %ebx |
|||
pop %edi |
|||
ret |
|||
|
|||
1: mov (%esp),%eax |
|||
add $[__sysinfo-2b],%eax |
|||
mov (%eax),%eax |
|||
test %eax,%eax |
|||
jz 1f |
|||
push %eax |
|||
mov 8(%esp),%eax |
|||
ret |
|||
1: mov 4(%esp),%eax |
|||
int $128 |
|||
ret |
|||
|
|||
.global __vsyscall6 |
|||
.type __vsyscall6,@function |
|||
__vsyscall6: |
|||
push %ebp |
|||
push %eax |
|||
mov 12(%esp), %ebp |
|||
mov (%ebp), %eax |
|||
mov 4(%ebp), %ebp |
|||
push %eax |
|||
mov 4(%esp),%eax |
|||
call __vsyscall |
|||
pop %ebp |
|||
pop %ebp |
|||
pop %ebp |
|||
ret |
|||
|
|||
.global __syscall |
|||
.type __syscall,@function |
|||
__syscall: |
|||
pushl %ebx |
|||
pushl %esi |
|||
pushl %edi |
|||
pushl %ebp |
|||
movl 20(%esp),%eax |
|||
movl 24(%esp),%ebx |
|||
movl 28(%esp),%ecx |
|||
movl 32(%esp),%edx |
|||
movl 36(%esp),%esi |
|||
movl 40(%esp),%edi |
|||
movl 44(%esp),%ebp |
|||
int $128 |
|||
popl %ebp |
|||
popl %edi |
|||
popl %esi |
|||
popl %ebx |
|||
lea 24(%esp),%eax |
|||
push %esi |
|||
push %edi |
|||
push %eax |
|||
mov 16(%esp),%eax |
|||
mov 20(%esp),%edx |
|||
mov 24(%esp),%ecx |
|||
mov 28(%esp),%edi |
|||
mov 32(%esp),%esi |
|||
call __vsyscall6 |
|||
pop %edi |
|||
pop %edi |
|||
pop %esi |
|||
ret |
|||
|
|||
Loading…
Reference in new issue