version 1.66.6.3, 2008/06/05 19:14:33 |
version 1.75, 2008/06/01 18:37:12 |
Line 1227 END(npx586bug1) |
|
Line 1227 END(npx586bug1) |
|
#endif /* NNPX > 0 */ |
#endif /* NNPX > 0 */ |
|
|
/* |
/* |
* void sse2_idlezero_page(void *pg) |
* void sse2_zero_page(void *pg) |
* |
* |
* Zero a page without polluting the cache. Preemption must be |
* Zero a page without polluting the cache. |
* disabled by the caller. Abort if a preemption is pending. |
|
*/ |
*/ |
ENTRY(sse2_idlezero_page) |
ENTRY(sse2_zero_page) |
pushl %ebp |
pushl %ebp |
movl %esp,%ebp |
movl %esp,%ebp |
movl 8(%esp), %edx |
movl 8(%esp), %edx |
movl $(PAGE_SIZE/32), %ecx |
movl $(PAGE_SIZE/64), %ecx |
xorl %eax, %eax |
xorl %eax, %eax |
.align 16 |
.align 16 |
1: |
1: |
cmpl $0, CPUVAR(RESCHED) |
|
jnz 2f |
|
movnti %eax, 0(%edx) |
movnti %eax, 0(%edx) |
movnti %eax, 4(%edx) |
movnti %eax, 4(%edx) |
movnti %eax, 8(%edx) |
movnti %eax, 8(%edx) |
Line 1250 ENTRY(sse2_idlezero_page) |
|
Line 1247 ENTRY(sse2_idlezero_page) |
|
movnti %eax, 20(%edx) |
movnti %eax, 20(%edx) |
movnti %eax, 24(%edx) |
movnti %eax, 24(%edx) |
movnti %eax, 28(%edx) |
movnti %eax, 28(%edx) |
addl $32, %edx |
movnti %eax, 32(%edx) |
|
movnti %eax, 36(%edx) |
|
movnti %eax, 40(%edx) |
|
movnti %eax, 44(%edx) |
|
movnti %eax, 48(%edx) |
|
movnti %eax, 52(%edx) |
|
movnti %eax, 56(%edx) |
|
movnti %eax, 60(%edx) |
|
addl $64, %edx |
decl %ecx |
decl %ecx |
jnz 1b |
jnz 1b |
sfence |
sfence |
incl %eax |
|
pop %ebp |
pop %ebp |
ret |
ret |
2: |
END(sse2_zero_page) |
|
|
|
/* |
|
* void sse2_copy_page(void *src, void *dst) |
|
* |
|
* Copy a page without polluting the cache. |
|
*/ |
|
ENTRY(sse2_copy_page) |
|
pushl %ebp |
|
pushl %ebx |
|
pushl %esi |
|
pushl %edi |
|
movl 20(%esp), %esi |
|
movl 24(%esp), %edi |
|
xorl %ebp, %ebp |
|
.align 16 |
|
1: |
|
movl 0(%esi,%ebp), %eax |
|
movl 4(%esi,%ebp), %ebx |
|
movl 8(%esi,%ebp), %ecx |
|
movl 12(%esi,%ebp), %edx |
|
movnti %eax, 0(%edi,%ebp) |
|
movnti %ebx, 4(%edi,%ebp) |
|
movnti %ecx, 8(%edi,%ebp) |
|
movnti %edx, 12(%edi,%ebp) |
|
movl 16(%esi,%ebp), %eax |
|
movl 20(%esi,%ebp), %ebx |
|
movl 24(%esi,%ebp), %ecx |
|
movl 28(%esi,%ebp), %edx |
|
movnti %eax, 16(%edi,%ebp) |
|
movnti %ebx, 20(%edi,%ebp) |
|
movnti %ecx, 24(%edi,%ebp) |
|
movnti %edx, 28(%edi,%ebp) |
|
addl $32, %ebp |
|
cmpl $PAGE_SIZE, %ebp |
|
jne 1b |
sfence |
sfence |
|
popl %edi |
|
popl %esi |
|
popl %ebx |
popl %ebp |
popl %ebp |
ret |
ret |
END(sse2_idlezero_page) |
END(sse2_copy_page) |