[BACK]Return to locore.S CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / arch / i386 / i386

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/sys/arch/i386/i386/locore.S between version 1.66.6.2 and 1.78.4.1

version 1.66.6.2, 2008/06/02 13:22:15 version 1.78.4.1, 2008/11/17 18:53:54
Line 138  __KERNEL_RCSID(0, "$NetBSD$");
Line 138  __KERNEL_RCSID(0, "$NetBSD$");
   
 #include "opt_compat_oldboot.h"  #include "opt_compat_oldboot.h"
 #include "opt_ddb.h"  #include "opt_ddb.h"
   #include "opt_multiboot.h"
 #include "opt_realmem.h"  #include "opt_realmem.h"
 #include "opt_vm86.h"  #include "opt_vm86.h"
 #include "opt_xen.h"  #include "opt_xen.h"
Line 648  try586: /* Use the `cpuid' instruction. 
Line 649  try586: /* Use the `cpuid' instruction. 
         movl    %cr0,%eax               # get control word          movl    %cr0,%eax               # get control word
                                         # enable paging & NPX emulation                                          # enable paging & NPX emulation
         orl     $(CR0_PE|CR0_PG|CR0_NE|CR0_TS|CR0_EM|CR0_MP),%eax          orl     $(CR0_PE|CR0_PG|CR0_NE|CR0_TS|CR0_EM|CR0_MP),%eax
         movl    %eax,%cr0               # and let's page NOW!          movl    %eax,%cr0               # and page NOW!
   
         pushl   $begin                  # jump to high mem          pushl   $begin                  # jump to high mem
         ret          ret
Line 909  ENTRY(dumpsys)
Line 910  ENTRY(dumpsys)
 END(dumpsys)  END(dumpsys)
   
 /*  /*
  * struct lwp *cpu_switchto(struct lwp *oldlwp, struct newlwp,   * struct lwp *cpu_switchto(struct lwp *oldlwp, struct *newlwp,
  *                          bool returning)   *                          bool returning)
  *   *
  *      1. if (oldlwp != NULL), save its context.   *      1. if (oldlwp != NULL), save its context.
Line 1007  ENTRY(cpu_switchto)
Line 1008  ENTRY(cpu_switchto)
 2:  2:
 #ifndef XEN  #ifndef XEN
         movl    $IPL_IPI,CPUVAR(ILEVEL)          movl    $IPL_IPI,CPUVAR(ILEVEL)
         movl    PCB_CR0(%ebx),%ecx          movl    PCB_CR0(%ebx),%ecx              /* has CR0_TS clear */
         movl    %cr0,%edx          movl    %cr0,%edx
   
         /*          /*
          * If our floating point registers are on a different CPU,           * If our floating point registers are on a different CPU,
          * set CR0_TS so we'll trap rather than reuse bogus state.           * set CR0_TS so we'll trap rather than reuse bogus state.
          */           */
         movl    PCB_FPCPU(%ebx),%eax          cmpl    CPUVAR(FPCURLWP),%edi
         cmpl    CPUVAR(SELF),%eax  
         je      3f          je      3f
         orl     $CR0_TS,%ecx          orl     $CR0_TS,%ecx
   
Line 1227  END(npx586bug1)
Line 1227  END(npx586bug1)
 #endif /* NNPX > 0 */  #endif /* NNPX > 0 */
   
 /*  /*
  * void sse2_zero_page(void *pg)   * void sse2_idlezero_page(void *pg)
  *   *
  * Zero a page without polluting the cache.   * Zero a page without polluting the cache.  Preemption must be
    * disabled by the caller. Abort if a preemption is pending.
  */   */
 ENTRY(sse2_zero_page)  ENTRY(sse2_idlezero_page)
         pushl   %ebp          pushl   %ebp
         movl    %esp,%ebp          movl    %esp,%ebp
         movl    8(%esp), %edx          movl    8(%esp), %edx
         movl    $(PAGE_SIZE/64), %ecx          movl    $(PAGE_SIZE/32), %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 1247  ENTRY(sse2_zero_page)
Line 1250  ENTRY(sse2_zero_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)
         movnti  %eax, 32(%edx)          addl    $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
 END(sse2_zero_page)  2:
   
 /*  
  * 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_copy_page)  END(sse2_idlezero_page)

Legend:
Removed from v.1.66.6.2  
changed lines
  Added in v.1.78.4.1

CVSweb <webmaster@jp.NetBSD.org>