version 1.47.4.2, 2007/06/17 21:30:36 |
version 1.47.4.3, 2007/07/29 10:18:49 |
Line 942 NENTRY(npx586bug1) |
|
Line 942 NENTRY(npx586bug1) |
|
popl %eax |
popl %eax |
ret |
ret |
#endif /* NNPX > 0 */ |
#endif /* NNPX > 0 */ |
|
|
|
/* |
|
* void sse2_zero_page(void *pg) |
|
* |
|
* Zero a page without polluting the cache. |
|
*/ |
|
ENTRY(sse2_zero_page) |
|
pushl %ebp |
|
movl %esp,%ebp |
|
movl 8(%esp), %edx |
|
movl $PAGE_SIZE, %ecx |
|
xorl %eax, %eax |
|
.align 16 |
|
1: |
|
movnti %eax, 0(%edx) |
|
movnti %eax, 4(%edx) |
|
movnti %eax, 8(%edx) |
|
movnti %eax, 12(%edx) |
|
movnti %eax, 16(%edx) |
|
movnti %eax, 20(%edx) |
|
movnti %eax, 24(%edx) |
|
movnti %eax, 28(%edx) |
|
subl $32, %ecx |
|
leal 32(%edx), %edx |
|
jnz 1b |
|
sfence |
|
pop %ebp |
|
ret |
|
|
|
/* |
|
* void sse2_copy_page(void *src, void *dst) |
|
* |
|
* Copy a page without polluting the cache. |
|
*/ |
|
ENTRY(sse2_copy_page) |
|
pushl %ebp |
|
pushl %esi |
|
pushl %edi |
|
movl 16(%esp), %esi |
|
movl 20(%esp), %edi |
|
movl $4096, %ebp |
|
.align 16 |
|
1: |
|
movl 0(%esi), %eax |
|
movl 4(%esi), %ebx |
|
movl 8(%esi), %ecx |
|
movl 12(%esi), %edx |
|
movnti %eax, 0(%edi) |
|
movnti %ebx, 4(%edi) |
|
movnti %ecx, 8(%edi) |
|
movnti %edx, 12(%edi) |
|
subl $16, %ebp |
|
leal 16(%esi), %esi |
|
leal 16(%edi), %edi |
|
jnz 1b |
|
sfence |
|
popl %edi |
|
popl %esi |
|
popl %ebp |
|
ret |