Diff for /src/sys/i386/isa/Attic/npx.c between versions 1.13 and 1.14

version 1.13, 2003/08/26 21:42:19 version 1.14, 2004/04/29 17:25:02
Line 146  static int npx_probe (device_t dev); Line 146  static int npx_probe (device_t dev);
 static  int     npx_probe1      (device_t dev);  static  int     npx_probe1      (device_t dev);
 static  void    fpusave         (union savefpu *);  static  void    fpusave         (union savefpu *);
 static  void    fpurstor        (union savefpu *);  static  void    fpurstor        (union savefpu *);
 #ifdef I586_CPU  
 static  long    timezero        (const char *funcname,  
                                      void (*func)(volatile void *buf, size_t len));  
 #endif /* I586_CPU */  
   
 int     hw_float;               /* XXX currently just alias for npx_exists */  int     hw_float;               /* XXX currently just alias for npx_exists */
   
Line 434  npx_attach(dev) Line 430  npx_attach(dev)
         device_t dev;          device_t dev;
 {  {
         int flags;          int flags;
   #if defined(I586_CPU) || defined(I686_CPU)
           int mmxopt = 1;
   #endif
   
         if (resource_int_value("npx", 0, "flags", &flags) != 0)          if (resource_int_value("npx", 0, "flags", &flags) != 0)
                 flags = 0;                  flags = 0;
Line 470  npx_attach(dev) Line 469  npx_attach(dev)
         }          }
         npxinit(__INITIAL_NPXCW__);          npxinit(__INITIAL_NPXCW__);
   
#ifdef I586_CPU#if defined(I586_CPU) || defined(I686_CPU)
         /*
          * The asm_mmx_*() routines actually use XMM as well, so only 
          * enable them if we have SSE2 and are using FXSR (fxsave/fxrstore).
          */
         TUNABLE_INT_FETCH("kern.mmxopt", &mmxopt);
         if ((cpu_feature & CPUID_MMX) && (cpu_feature & CPUID_SSE) &&
             (cpu_feature & CPUID_SSE2) && 
             npx_ex16 && npx_exists && mmxopt && cpu_fxsr
         ) {
                 if ((flags & NPX_DISABLE_I586_OPTIMIZED_BCOPY) == 0) {
                         bcopy_vector = (void **)asm_xmm_bcopy;
                         ovbcopy_vector = (void **)asm_xmm_bcopy;
                         memcpy_vector = (void **)asm_xmm_memcpy;
                         printf("Using XMM optimized bcopy/copyin/copyout\n");
                 }
                 if ((flags & NPX_DISABLE_I586_OPTIMIZED_BZERO) == 0) {
                         /* XXX */
                 }
         } else if ((cpu_feature & CPUID_MMX) && (cpu_feature & CPUID_SSE) &&
             npx_ex16 && npx_exists && mmxopt && cpu_fxsr
         ) {
                 if ((flags & NPX_DISABLE_I586_OPTIMIZED_BCOPY) == 0) {
                         bcopy_vector = (void **)asm_mmx_bcopy;
                         ovbcopy_vector = (void **)asm_mmx_bcopy;
                         memcpy_vector = (void **)asm_mmx_memcpy;
                         printf("Using MMX optimized bcopy/copyin/copyout\n");
                 }
                 if ((flags & NPX_DISABLE_I586_OPTIMIZED_BZERO) == 0) {
                         /* XXX */
                 }
         }
 #endif
 #if 0
         if (cpu_class == CPUCLASS_586 && npx_ex16 && npx_exists &&          if (cpu_class == CPUCLASS_586 && npx_ex16 && npx_exists &&
             timezero("i586_bzero()", i586_bzero) <              timezero("i586_bzero()", i586_bzero) <
             timezero("bzero()", bzero) * 4 / 5) {              timezero("bzero()", bzero) * 4 / 5) {
Line 486  npx_attach(dev) Line 518  npx_attach(dev)
                 }                  }
         }          }
 #endif  #endif
   
         return (0);             /* XXX unused */          return (0);             /* XXX unused */
 }  }
   
Line 943  fpurstor(addr) Line 974  fpurstor(addr)
                 frstor(addr);                  frstor(addr);
 }  }
   
 #ifdef I586_CPU  
 static long  
 timezero(funcname, func)  
         const char *funcname;  
         void (*func) (volatile void *buf, size_t len);  
   
 {  
         void *buf;  
 #define BUFSIZE         1000000  
         long usec;  
         struct timeval finish, start;  
   
         buf = malloc(BUFSIZE, M_TEMP, M_NOWAIT);  
         if (buf == NULL)  
                 return (BUFSIZE);  
         microtime(&start);  
         (*func)(buf, BUFSIZE);  
         microtime(&finish);  
         usec = 1000000 * (finish.tv_sec - start.tv_sec) +  
             finish.tv_usec - start.tv_usec;  
         if (usec <= 0)  
                 usec = 1;  
         if (bootverbose)  
                 printf("%s bandwidth = %ld bytes/sec\n",  
                     funcname, (long)(BUFSIZE * (int64_t)1000000 / usec));  
         free(buf, M_TEMP);  
         return (usec);  
 }  
 #endif /* I586_CPU */  
   
 static device_method_t npx_methods[] = {  static device_method_t npx_methods[] = {
         /* Device interface */          /* Device interface */
         DEVMETHOD(device_identify,      npx_identify),          DEVMETHOD(device_identify,      npx_identify),

Removed from v.1.13  
changed lines
  Added in v.1.14