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 |
.global __syscall |
||||
.type __syscall,@function |
.type __syscall,@function |
||||
__syscall: |
__syscall: |
||||
pushl %ebx |
lea 24(%esp),%eax |
||||
pushl %esi |
push %esi |
||||
pushl %edi |
push %edi |
||||
pushl %ebp |
push %eax |
||||
movl 20(%esp),%eax |
mov 16(%esp),%eax |
||||
movl 24(%esp),%ebx |
mov 20(%esp),%edx |
||||
movl 28(%esp),%ecx |
mov 24(%esp),%ecx |
||||
movl 32(%esp),%edx |
mov 28(%esp),%edi |
||||
movl 36(%esp),%esi |
mov 32(%esp),%esi |
||||
movl 40(%esp),%edi |
call __vsyscall6 |
||||
movl 44(%esp),%ebp |
pop %edi |
||||
int $128 |
pop %edi |
||||
popl %ebp |
pop %esi |
||||
popl %edi |
|
||||
popl %esi |
|
||||
popl %ebx |
|
||||
ret |
ret |
||||
|
|||||
Loading…
Reference in new issue