Changeset 6cf1591


Ignore:
Timestamp:
Jun 9, 2011 3:00:30 PM (9 years ago)
Author:
dev <dev@…>
Branches:
master
Children:
747d1f45
Parents:
562cabf
Message:

Large but simple refactor of CPUInfo interfaces and CPUInfoImpl classes.
Added interface and class for VIA cpus.
Added support for VIA c5 cpus and some Via nano cpus (a few might be missing).

Location:
core/java/src
Files:
5 added
6 edited

Legend:

Unmodified
Added
Removed
  • core/java/src/freenet/support/CPUInformation/AMDCPUInfo.java

    r562cabf r6cf1591  
    1717public interface AMDCPUInfo extends CPUInfo {
    1818    /**
    19      * @return true iff the CPU present in the machine is at least an 'k6' CPU
     19     * @return true if the CPU present in the machine is at least an 'k6' CPU
    2020     */
    2121    public boolean IsK6Compatible();
    2222    /**
    23      * @return true iff the CPU present in the machine is at least an 'k6-2' CPU
     23     * @return true if the CPU present in the machine is at least an 'k6-2' CPU
    2424     */
    2525    public boolean IsK6_2_Compatible();
    2626    /**
    27      * @return true iff the CPU present in the machine is at least an 'k6-3' CPU
     27     * @return true if the CPU present in the machine is at least an 'k6-3' CPU
    2828     */
    2929    public boolean IsK6_3_Compatible();
    3030
    3131    /**
    32      * @return true iff the CPU present in the machine is at least an 'k7' CPU (Atlhon, Duron etc. and better)
     32     * @return true if the CPU present in the machine is at least an 'k7' CPU (Atlhon, Duron etc. and better)
    3333     */
    3434    public boolean IsAthlonCompatible();
    3535    /**
    36      * @return true iff the CPU present in the machine is at least an 'k8' CPU (Atlhon 64, Opteron etc. and better)
     36     * @return true if the CPU present in the machine is at least an 'k8' CPU (Atlhon 64, Opteron etc. and better)
    3737     */
    3838    public boolean IsAthlon64Compatible();
     39    /**
     40     * @return true if the CPU present in the machine is at least an 'k8' CPU (Atlhon 64, Opteron etc. and better)
     41     */
     42        public boolean IsBobcatCompatible();
    3943}
  • core/java/src/freenet/support/CPUInformation/CPUID.java

    r562cabf r6cf1591  
    9999
    100100
    101     private static String getCPUVendorID()
     101    public static String getCPUVendorID()
    102102    {
    103103        CPUIDResult c = doCPUID(0);
     
    120120        return sb.toString();
    121121    }
    122     private static int getCPUFamily()
     122    public static int getCPUFamily()
    123123    {
    124124        CPUIDResult c = doCPUID(1);
    125125        return (c.EAX >> 8) & 0xf;
    126126    }
    127     private static int getCPUModel()
     127    public static int getCPUModel()
    128128    {
    129129        CPUIDResult c = doCPUID(1);
    130130        return (c.EAX >> 4) & 0xf;
    131131    }
    132     private static int getCPUExtendedModel()
     132    public static int getCPUExtendedModel()
    133133    {
    134134        CPUIDResult c = doCPUID(1);
    135135        return (c.EAX >> 16) & 0xf;
    136136    }
    137     private static int getCPUType()
     137    public static int getCPUType()
    138138    {
    139139        CPUIDResult c = doCPUID(1);
    140140        return (c.EAX >> 12) & 0xf;
    141141    }
    142     private static int getCPUExtendedFamily()
     142    public static int getCPUExtendedFamily()
    143143    {
    144144        CPUIDResult c = doCPUID(1);
    145145        return (c.EAX >> 20) & 0xff;
    146146    }
    147     private static int getCPUStepping()
     147    public static int getCPUStepping()
    148148    {
    149149        CPUIDResult c = doCPUID(1);
    150150        return c.EAX & 0xf;
    151151    }
    152     private static int getEDXCPUFlags()
     152    public static int getEDXCPUFlags()
    153153    {
    154154        CPUIDResult c = doCPUID(1);
    155155        return c.EDX;
    156156    }
    157     private static int getECXCPUFlags()
     157    public static int getECXCPUFlags()
    158158    {
    159159        CPUIDResult c = doCPUID(1);
    160160        return c.ECX;
    161161    }
    162     private static int getExtendedEBXCPUFlags()
     162    public static int getExtendedEBXCPUFlags()
    163163    {
    164164        CPUIDResult c = doCPUID(0x80000001);
    165165        return c.EBX;   
    166166    }
    167     private static int getExtendedECXCPUFlags()
     167    public static int getExtendedECXCPUFlags()
    168168    {
    169169        CPUIDResult c = doCPUID(0x80000001);
    170170        return c.ECX;
    171171    }
    172     private static int getExtendedEDXCPUFlags()
     172    public static int getExtendedEDXCPUFlags()
    173173    {
    174174        CPUIDResult c = doCPUID(0x80000001);
     
    187187            throw new UnknownCPUException("Failed to read CPU information from the system. Please verify the existence of the jcpuid dll/so.");
    188188        if(getCPUVendorID().equals("CentaurHauls"))
    189             return new VIAC3Impl();
     189            return new VIAInfoImpl();
    190190        if(!isX86)
    191191            throw new UnknownCPUException("Failed to read CPU information from the system. The CPUID instruction exists on x86 CPU's only");
     
    197197    }
    198198   
    199     protected abstract static class CPUIDCPUInfo
    200     {
    201         protected static boolean isX64 = false;       
    202                
    203         public String getVendor()
    204         {
    205             return getCPUVendorID();
    206         }
    207         public boolean hasMMX()
    208         {
    209             return (getEDXCPUFlags() & 0x800000) >0; //EDX Bit 23
    210         }
    211         public boolean hasSSE(){
    212             return (getEDXCPUFlags() & 0x2000000) >0; //EDX Bit 25
    213         }
    214         public boolean hasSSE2()
    215         {
    216             return (getEDXCPUFlags() & 0x4000000) >0; //EDX Bit 26
    217         }
    218         public boolean hasSSE3()
    219         {
    220             return (getEDXCPUFlags() & 0x1) >0; //ECX Bit 0
    221         }
    222         public boolean hasSSE41()
    223         {
    224             return (getEDXCPUFlags() & 0x80000) >0; //ECX Bit 19
    225         }
    226         public boolean hasSSE42()
    227         {
    228             return (getEDXCPUFlags() & 0x100000) >0; //ECX Bit 20
    229         }
    230         public boolean hasSSE4A()
    231         {
    232             return (getExtendedECXCPUFlags() & 0x40) >0; //Extended ECX Bit 6
    233         }
    234         public boolean IsC3Compatible() { return false; }
    235         public boolean hasX64(){ return isX64; }
    236     }
    237 
    238     protected static class VIAC3Impl extends CPUIDCPUInfo implements CPUInfo {
    239         @Override
    240         public boolean IsC3Compatible() { return true; }
    241         public String getCPUModelString() { return "VIA C3"; }
    242     }
    243 
    244     protected static class AMDInfoImpl extends CPUIDCPUInfo implements AMDCPUInfo
    245     {
    246         protected static boolean isK6Compatible = false;
    247         protected static boolean isK6_2_Compatible = false;
    248         protected static boolean isK6_3_Compatible = false;
    249         protected static boolean isAthlonCompatible = false;
    250         protected static boolean isAthlon64Compatible = false;
    251         protected static boolean isBobcatCompatible = false;
    252 
    253         // If modelString != null, the cpu is considered correctly identified.
    254         protected static String modelString = null;
    255         protected static boolean hasBeenIdentified = false;
    256 
    257         public boolean IsK6Compatible(){ return isK6Compatible; }
    258         public boolean IsK6_2_Compatible(){ return isK6_2_Compatible; }
    259         public boolean IsK6_3_Compatible(){ return isK6_3_Compatible; }
    260         public boolean IsAthlonCompatible(){ return isAthlonCompatible; }
    261         public boolean IsAthlon64Compatible(){ return isAthlon64Compatible; }
    262         public boolean IsBobcatCompatible(){ return isBobcatCompatible; }
    263 
    264                 static
    265                 {
    266                         identifyCPU();
    267                 }       
    268 
    269         public String getCPUModelString() throws UnknownCPUException
    270         {
    271             if (modelString != null)
    272                 return modelString;
    273             throw new UnknownCPUException("Unknown AMD CPU; Family="+(getCPUFamily() + getCPUExtendedFamily())+", Model="+(getCPUModel() + getCPUExtendedModel()));
    274         }
    275        
    276 
    277         private synchronized static void identifyCPU()
    278         {
    279         //AMD-family = getCPUFamily()+getCPUExtendedFamily()
    280         //AMD-model = getCPUModel()+getCPUExtendedModel()
    281         //i486 class (Am486, 5x86)
    282             if(getCPUFamily() + getCPUExtendedFamily() == 4){
    283                 switch(getCPUModel() + getCPUExtendedModel()){
    284                     case 3:
    285                         modelString = "486 DX/2";
    286                         break;
    287                     case 7:
    288                         modelString = "486 DX/2-WB";
    289                         break;
    290                     case 8:
    291                         modelString = "486 DX/4";
    292                         break;
    293                     case 9:
    294                         modelString = "486 DX/4-WB";
    295                         break;
    296                     case 14:
    297                         modelString = "Am5x86-WT";
    298                         break;
    299                     case 15:
    300                         modelString = "Am5x86-WB";
    301                         break;
    302                 }
    303             }
    304             //i586 class (K5/K6/K6-2/K6-III)
    305             if(getCPUFamily() + getCPUExtendedFamily() == 5){
    306                 isK6Compatible = true;
    307                 switch(getCPUModel() + getCPUExtendedModel()){
    308                     case 0:
    309                         modelString = "K5/SSA5";
    310                         break;
    311                     case 1:
    312                         modelString = "K5";
    313                         break;
    314                     case 2:
    315                         modelString = "K5";
    316                         break;
    317                     case 3:
    318                         modelString = "K5";
    319                         break;
    320                     case 6:
    321                         modelString = "K6";
    322                         break;
    323                     case 7:
    324                         modelString = "K6";
    325                         break;
    326                     case 8:
    327                         isK6_2_Compatible = true;
    328                         modelString = "K6-2";
    329                         break;
    330                     case 9:
    331                         isK6_2_Compatible = true;
    332                         isK6_3_Compatible = true;
    333                         modelString = "K6-3";
    334                         break;
    335                     case 13:
    336                         isK6_2_Compatible = true;
    337                         modelString = "K6-2+ or K6-III+";
    338                         break;
    339                 }
    340             }
    341             //i686 class (Athlon/Athlon XP/Duron/K7 Sempron)
    342             if(getCPUFamily() + getCPUExtendedFamily() == 6){
    343                 isK6Compatible = true;
    344                 isK6_2_Compatible = true;
    345                 isK6_3_Compatible = true;
    346                 isAthlonCompatible = true;
    347                 switch(getCPUModel() + getCPUExtendedModel()){
    348                     case 0:
    349                         modelString = "Athlon (250 nm)";
    350                         break;
    351                     case 1:
    352                         modelString = "Athlon (250 nm)";
    353                         break;
    354                     case 2:
    355                         modelString = "Athlon (180 nm)";
    356                         break;
    357                     case 3:
    358                         modelString = "Duron";
    359                         break;
    360                     case 4:
    361                         modelString = "Athlon (Thunderbird)";
    362                         break;
    363                     case 6:
    364                         modelString = "Athlon (Palamino)";
    365                         break;
    366                     case 7:
    367                         modelString = "Duron (Morgan)";
    368                         break;
    369                     case 8:
    370                         modelString = "Athlon (Thoroughbred)";
    371                         break;
    372                     case 10:
    373                         modelString = "Athlon (Barton)";
    374                         break;
    375                 }
    376             }
    377             //AMD64 class (A64/Opteron/A64 X2/K8 Sempron/Turion/Second-Generation Opteron/Athlon Neo)
    378            if(getCPUFamily() + getCPUExtendedFamily() == 15){
    379                 isK6Compatible = true;
    380                 isK6_2_Compatible = true;
    381                 isK6_3_Compatible = true;
    382                 isAthlonCompatible = true;
    383                 isAthlon64Compatible = true;
    384                 isX64 = true;
    385                 switch(getCPUModel() + getCPUExtendedModel()){
    386                     case 4:
    387                         modelString = "Athlon 64/Mobile XP-M";
    388                     case 5:
    389                         modelString = "Athlon 64 FX Opteron";
    390                         break;
    391                     case 7:
    392                         modelString = "Athlon 64 FX (Sledgehammer S939, 130 nm)";
    393                         break;
    394                     case 8:
    395                         modelString = "Mobile A64/Sempron/XP-M";
    396                         break;
    397                     case 11:
    398                         modelString = "Athlon 64 (Clawhammer S939, 130 nm)";
    399                         break;
    400                     case 12:
    401                         modelString = "Athlon 64/Sempron (Newcastle S754, 130 nm)";
    402                         break;
    403                     case 14:
    404                         modelString = "Athlon 64/Sempron (Newcastle S754, 130 nm)";
    405                         break;
    406                     case 15:
    407                         modelString = "Athlon 64/Sempron (Clawhammer S939, 130 nm)";
    408                         break;                   
    409                     case 18:
    410                         modelString = "Sempron (Palermo, 90 nm)";
    411                         break;
    412                     case 20:
    413                         modelString = "Athlon 64 (Winchester S754, 90 nm)";
    414                         break;
    415                     case 23:
    416                         modelString = "Athlon 64 (Winchester S939, 90 nm)";
    417                         break;
    418                     case 24:
    419                         modelString = "Mobile A64/Sempron/XP-M (Winchester S754, 90 nm)";
    420                         break;
    421                     case 26:
    422                         modelString = "Athlon 64 (Winchester S939, 90 nm)";
    423                         break;
    424                     case 27:
    425                         modelString = "Athlon 64/Sempron (Winchester/Palermo 90 nm)";
    426                         break;
    427                     case 28:
    428                         modelString = "Sempron (Palermo, 90 nm)";
    429                         break;
    430                     case 31:
    431                         modelString = "Athlon 64/Sempron (Winchester/Palermo, 90 nm)";
    432                         break;
    433                     case 33:
    434                         modelString = "Dual-Core Opteron (Italy-Egypt S940, 90 nm)";
    435                         break;
    436                     case 35:
    437                         modelString = "Athlon 64 X2/A64 FX/Opteron (Toledo/Denmark S939, 90 nm)";
    438                         break;
    439                     case 36:
    440                         modelString = "Mobile A64/Turion (Lancaster/Richmond/Newark, 90 nm)";
    441                         break;
    442                     case 37:
    443                         modelString = "Opteron (Troy/Athens S940, 90 nm)";
    444                         break;
    445                     case 39:
    446                         modelString = "Athlon 64 (San Diego, 90 nm)";
    447                         break;
    448                     case 43:
    449                         modelString = "Athlon 64 X2 (Manchester, 90 nm)";
    450                         break;
    451                     case 44:
    452                         modelString = "Sempron/mobile Sempron (Palermo/Albany/Roma S754, 90 nm)";
    453                         break;
    454                     case 47:
    455                         modelString = "Athlon 64/Sempron (Venice/Palermo S939, 90 nm)";
    456                         break;
    457                     case 65:
    458                         modelString = "Second-Generaton Opteron (Santa Rosa S1207, 90 nm)";
    459                         break;
    460                     case 67:
    461                         modelString = "Athlon 64 X2/2nd-gen Opteron (Windsor/Santa Rosa, 90 nm)";
    462                         break;
    463                     case 72:
    464                         modelString = "Athlon 64 X2/Turion 64 X2 (Windsor/Taylor/Trinidad, 90 nm)";
    465                         break;
    466                     case 75:
    467                         modelString = "Athlon 64 X2 (Windsor, 90 nm)";
    468                         break;
    469                     case 76:
    470                         modelString = "Mobile A64/mobile Sempron/Turion (Keene/Trinidad/Taylor, 90 nm)";
    471                         break;
    472                     case 79:
    473                         modelString = "Athlon 64/Sempron (Orleans/Manila AM2, 90 nm)";
    474                         break;
    475                     case 93:
    476                         modelString = "Opteron Gen 2 (Santa Rosa, 90 nm)";
    477                         break;
    478                     case 95:
    479                         modelString = "A64/Sempron/mobile Sempron (Orleans/Manila/Keene, 90 nm)";
    480                         break;
    481                     case 104:
    482                         modelString = "Turion 64 X2 (Tyler S1, 65 nm)";
    483                         break;
    484                     case 107:
    485                         modelString = "Athlon 64 X2/Sempron X2/Athlon Neo X2 (Brisbane/Huron, 65 nm)";
    486                         break;
    487                     case 108:
    488                         modelString = "A64/Athlon Neo/Sempron/Mobile Sempron (Lima/Huron/Sparta/Sherman, 65 nm)";
    489                         break;
    490                     case 111:
    491                         modelString = "Neo/Sempron/mobile Sempron (Huron/Sparta/Sherman, 65 nm)";
    492                         break;
    493                     case 124:
    494                         modelString = "Athlon/Sempron/mobile Sempron (Lima/Sparta/Sherman, 65 nm)";
    495                         break;
    496                     case 127:
    497                         modelString = "A64/Athlon Neo/Sempron/mobile Sempron (Lima/Huron/Sparta/Sherman, 65 nm)";
    498                         break;
    499                     case 193:
    500                         modelString = "Athlon 64 FX (Windsor S1207 90 nm)";
    501                         break;
    502                     default: // is this safe?
    503                         modelString = "Athlon 64 (unknown)";
    504                         break;
    505                 }
    506             }
    507             //Stars (Phenom II/Athlon II/Third-Generation Opteron/Opteron 4100 & 6100/Sempron 1xx)
    508             if(getCPUFamily() + getCPUExtendedFamily() == 16){
    509                 isK6Compatible = true;
    510                 isK6_2_Compatible = true;
    511                 isK6_3_Compatible = true;
    512                 isAthlonCompatible = true;
    513                 isAthlon64Compatible = true;
    514                 isX64 = true;
    515                 switch(getCPUModel() + getCPUExtendedModel()){
    516                     case 2:
    517                         modelString = "Phenom / Athlon / Opteron Gen 3 (Barcelona/Agena/Toliman/Kuma, 65 nm)";
    518                         break;
    519                     case 4:
    520                         modelString = "Phenom II / Opteron Gen 3 (Shanghai/Deneb/Heka/Callisto, 45 nm)";
    521                         break;
    522                     case 5:
    523                         modelString = "Athlon II X2/X3/X4 (Regor/Rana/Propus AM3, 45 nm)";
    524                         break;
    525                     case 6:
    526                         modelString = "Mobile Athlon II/Turion II/Phenom II/Sempron/V-series (Regor/Caspian/Champlain, 45 nm)";
    527                         break;
    528                     case 8:
    529                         modelString = "Six-Core Opteron/Opteron 4100 series (Istanbul/Lisbon, 45 nm)";
    530                         break;
    531                     case 9:
    532                         modelString = "Opteron 6100 series (Magny-Cours G34, 45 nm)";
    533                         break;
    534                     case 10:
    535                         modelString = "Phenom II X4/X6 (Zosma/Thuban AM3, 45 nm)";
    536                         break;
    537                 }
    538             }
    539             //K8 mobile+HT3 (Turion X2/Athlon X2/Sempron)
    540             if(getCPUFamily() + getCPUExtendedFamily() == 17){
    541                 isK6Compatible = true;
    542                 isK6_2_Compatible = true;
    543                 isK6_3_Compatible = true;
    544                 isAthlonCompatible = true;
    545                 isAthlon64Compatible = true;
    546                 isX64 = true;
    547                 switch(getCPUModel() + getCPUExtendedModel()){
    548                     case 3:
    549                         modelString = "AMD Turion X2/Athlon X2/Sempron (Lion/Sable, 65 nm)";
    550                         break;
    551                 }
    552             }
    553             //Bobcat
    554             if(getCPUFamily() + getCPUExtendedFamily() == 20){
    555                 isK6Compatible = true;
    556                 isK6_2_Compatible = true;
    557                 isK6_3_Compatible = true;
    558                 isAthlonCompatible = true;
    559                 isAthlon64Compatible = true;
    560                 isBobcatCompatible = true;
    561                 isX64 = true;
    562                 switch(getCPUModel() + getCPUExtendedModel()){
    563                     case 1:                   
    564                         modelString = "Bobcat APU";
    565                         break;
    566                     // Case 3 is uncertain but most likely a Bobcat APU
    567                     case 3:
    568                         modelString = "Bobcat APU";
    569                         break;
    570                 }
    571             }
    572         }
    573     }
    574 
    575     protected static class IntelInfoImpl extends CPUIDCPUInfo implements IntelCPUInfo
    576     {
    577         protected static boolean isPentiumCompatible = false;
    578         protected static boolean isPentiumMMXCompatible = false;
    579         protected static boolean isPentium2Compatible = false;
    580         protected static boolean isPentium3Compatible = false;
    581         protected static boolean isPentium4Compatible = false;
    582         protected static boolean isPentiumMCompatible = false;
    583         protected static boolean isAtomCompatible = false;
    584         protected static boolean isCore2Compatible = false;
    585         protected static boolean isCoreiCompatible = false;
    586        
    587         // If modelString != null, the cpu is considered correctly identified.
    588         protected static String modelString = null;
    589        
    590         public boolean IsPentiumCompatible(){ return isPentiumCompatible; }
    591         public boolean IsPentiumMMXCompatible(){ return isPentiumMMXCompatible; }
    592         public boolean IsPentium2Compatible(){ return isPentium2Compatible; }
    593         public boolean IsPentium3Compatible(){ return isPentium3Compatible; }
    594         public boolean IsPentium4Compatible(){ return isPentium4Compatible; }
    595         public boolean IsPentiumMCompatible(){ return isPentiumMCompatible; }
    596         public boolean IsAtomCompatible(){ return isAtomCompatible; }
    597         public boolean IsCore2Compatible(){ return isCore2Compatible; }
    598         public boolean IsCoreiCompatible(){ return isCoreiCompatible; }   
    599                
    600                 static
    601                 {
    602                         identifyCPU();
    603                 }
    604 
    605         public String getCPUModelString() throws UnknownCPUException
    606         {
    607             if (modelString != null)
    608                 return modelString;
    609             throw new UnknownCPUException("Unknown Intel CPU; Family="+getCPUFamily()+", Model="+getCPUModel());
    610         }
    611        
    612         private synchronized static void identifyCPU()
    613         {
    614             if (getCPUExtendedModel() == 0){
    615                 if(getCPUFamily() == 4){
    616                     switch(getCPUModel()){
    617                         case 0:
    618                             modelString = "486 DX-25/33";
    619                             break;
    620                         case 1:
    621                             modelString = "486 DX-50";
    622                             break;
    623                         case 2:
    624                             modelString = "486 SX";
    625                             break;
    626                         case 3:
    627                             modelString = "486 DX/2";
    628                             break;
    629                         case 4:
    630                             modelString = "486 SL";
    631                             break;
    632                         case 5:
    633                             modelString = "486 SX/2";
    634                             break;
    635                         case 7:
    636                             modelString = "486 DX/2-WB";
    637                             break;
    638                         case 8:
    639                             modelString = "486 DX/4";
    640                             break;
    641                         case 9:
    642                             modelString = "486 DX/4-WB";
    643                             break;
    644                     }
    645                 }
    646             }
    647             if (getCPUExtendedModel() == 0){
    648                 if(getCPUFamily() == 5){
    649                     isPentiumCompatible = true;
    650                     switch(getCPUModel()){
    651                         case 0:
    652                             modelString = "Pentium 60/66 A-step";
    653                             break;
    654                         case 1:
    655                             modelString = "Pentium 60/66";
    656                             break;
    657                         case 2:
    658                             modelString = "Pentium 75 - 200";
    659                             break;
    660                         case 3:
    661                             modelString = "OverDrive PODP5V83";
    662                             break;
    663                         case 4:
    664                             isPentiumMMXCompatible = true;
    665                             modelString = "Pentium MMX";
    666                             break;
    667                         case 7:
    668                             modelString = "Mobile Pentium 75 - 200";
    669                             break;
    670                         case 8:
    671                             isPentiumMMXCompatible = true;
    672                             modelString = "Mobile Pentium MMX";
    673                             break;
    674                     }
    675                 }
    676             }
    677             if(getCPUFamily() == 6){
    678                 if (getCPUExtendedModel() == 0){
    679                     isPentiumCompatible = true;
    680                     isPentiumMMXCompatible = true;
    681                     switch(getCPUModel()){
    682                         case 0:
    683                             modelString = "Pentium Pro A-step";
    684                             break;
    685                         case 1:
    686                             modelString = "Pentium Pro";
    687                             break;
    688                         case 3:
    689                             isPentium2Compatible = true;
    690                             modelString = "Pentium II (Klamath)";
    691                             break;
    692                         case 5:
    693                             isPentium2Compatible = true;
    694                             modelString = "Pentium II (Deschutes), Celeron (Covington), Mobile Pentium II (Dixon)";
    695                             break;
    696                         case 6:
    697                             isPentium2Compatible = true;
    698                             modelString = "Mobile Pentium II, Celeron (Mendocino)";
    699                             break;
    700                         case 7:
    701                             isPentium2Compatible = true;
    702                             isPentium3Compatible = true;
    703                             modelString = "Pentium III (Katmai)";
    704                             break;
    705                         case 8:
    706                             isPentium2Compatible = true;
    707                             isPentium3Compatible = true;
    708                             modelString = "Pentium III (Coppermine), Celeron w/SSE";
    709                             break;
    710                         case 9:
    711                             isPentium2Compatible = true;
    712                             isPentium3Compatible = true;
    713                                                         isPentiumMCompatible = true;
    714                             isX64 = true;
    715                             modelString = "Pentium M (Banias)";
    716                             break;
    717                         case 10:
    718                             isPentium2Compatible = true;
    719                             isPentium3Compatible = true;
    720                             modelString = "Pentium III Xeon (Cascades)";
    721                             break;
    722                         case 11:
    723                             isPentium2Compatible = true;
    724                             isPentium3Compatible = true;
    725                                                         isPentiumMCompatible = true;
    726                             modelString = "Pentium III (130 nm)";
    727                             break;
    728                         case 13:
    729                             isPentium2Compatible = true;
    730                             isPentium3Compatible = true;
    731                                                         isPentiumMCompatible = true;
    732                             isX64 = true;
    733                             modelString = "Core (Yonah)";
    734                             break;
    735                         case 14:
    736                             isPentium2Compatible = true;
    737                             isPentium3Compatible = true;
    738                                                         isPentiumMCompatible = true;
    739                             isCore2Compatible = true;
    740                             isX64 = true;
    741                             modelString = "Core 2 (Conroe)";
    742                             break;
    743                         case 15:
    744                             isPentium2Compatible = true;
    745                             isPentium3Compatible = true;
    746                                                         isPentiumMCompatible = true;
    747                             isCore2Compatible = true;
    748                             isX64 = true;
    749                             modelString = "Core 2 (Conroe)";
    750                             break;
    751                     }
    752                 } else if (getCPUExtendedModel() == 1){
    753                     isPentiumCompatible = true;
    754                     isPentiumMMXCompatible = true;
    755                     isPentium2Compatible = true;
    756                     isPentium3Compatible = true;
    757                     isPentium4Compatible = true;
    758                                         isPentiumMCompatible = true;
    759                     isCore2Compatible = true;
    760                     isX64 = true;
    761                     switch(getCPUModel()){
    762                         case 6:
    763                             modelString = "Celeron";
    764                             break;
    765                          case 10:
    766                             isCoreiCompatible = true;
    767                              modelString = "Core i7 (45nm)";
    768                             break;
    769                          case 12:
    770                             isAtomCompatible = true;
    771                             isCore2Compatible = false;
    772                             isPentium4Compatible = false;
    773                             isX64 = true;
    774                             modelString = "Atom";
    775                             break;
    776                          case 13:
    777                             isCoreiCompatible = true;
    778                             modelString = "Xeon MP (45nm)";
    779                             break;
    780                         case 14:
    781                             isCoreiCompatible = true;
    782                             modelString = "Core i5/i7 (45nm)";
    783                             break;
    784                     }
    785                 } else if (getCPUExtendedModel() == 2){
    786                     isPentiumCompatible = true;
    787                     isPentiumMMXCompatible = true;
    788                     isPentium2Compatible = true;
    789                     isPentium3Compatible = true;
    790                     isPentium4Compatible = true;
    791                                         isPentiumMCompatible = true;
    792                     isCore2Compatible = true;
    793                     isCoreiCompatible = true;
    794                     isX64 = true;
    795                     switch(getCPUModel()){
    796                         case 5:
    797                             modelString = "Core i3 or i5/i7 mobile (32nm)";
    798                             break;
    799                         case 10:
    800                             modelString = "Core i7/i5 (32nm)";
    801                             break;
    802                         case 12:
    803                             modelString = "Core i7 (32nm)";
    804                             break;
    805                         case 14:
    806                             modelString = "Xeon MP (45nm)";
    807                             break;
    808                         case 15:
    809                             modelString = "Xeon MP (32nm)";
    810                             break;
    811                     }               
    812                 }
    813             }
    814             if(getCPUFamily() == 7){
    815                 switch(getCPUModel()){
    816                     //Itanium..  TODO
    817                 }
    818             }
    819             if(getCPUFamily() == 15){
    820                 if(getCPUExtendedFamily() == 0){
    821                     isPentiumCompatible = true;
    822                     isPentiumMMXCompatible = true;
    823                     isPentium2Compatible = true;
    824                     isPentium3Compatible = true;
    825                     isPentium4Compatible = true;
    826                     switch(getCPUModel()){
    827                         case 0:
    828                             modelString = "Pentium IV (180 nm)";
    829                             break;
    830                         case 1:
    831                             modelString = "Pentium IV (180 nm)";
    832                             break;
    833                         case 2:
    834                             modelString = "Pentium IV (130 nm)";
    835                             break;
    836                         case 3:
    837                             modelString = "Pentium IV (90 nm)";
    838                             break;
    839                         case 4:
    840                             isX64 = true;
    841                             modelString = "Pentium IV (90 nm)";
    842                             break;
    843                         case 6:
    844                             isX64 = true;
    845                             modelString = "Pentium IV (65 nm)";
    846                             break;
    847                     }
    848                 }
    849                 if(getCPUExtendedFamily() == 1){
    850                     switch(getCPUModel()){
    851                         //    Itanium 2.. TODO
    852                     }   
    853                 }
    854             }
    855         }
    856     }
    857199
    858200    public static void main(String args[])
  • core/java/src/freenet/support/CPUInformation/CPUInfo.java

    r562cabf r6cf1591  
    6262     */
    6363    public boolean hasSSE4A();
    64 
    65     public boolean IsC3Compatible();
    6664}
  • core/java/src/freenet/support/CPUInformation/IntelCPUInfo.java

    r562cabf r6cf1591  
    1717public interface IntelCPUInfo extends CPUInfo {
    1818    /**
    19      * @return true iff the CPU is at least a Pentium CPU.
     19     * @return true if the CPU is at least a Pentium CPU.
    2020     */
    2121    public boolean IsPentiumCompatible();
    2222    /**
    23      * @return true iff the CPU is at least a Pentium which implements the MMX instruction/feature set.
     23     * @return true if the CPU is at least a Pentium which implements the MMX instruction/feature set.
    2424     */
    2525    public boolean IsPentiumMMXCompatible();
    2626    /**
    27      * @return true iff the CPU implements at least the p6 instruction set (Pentium II or better).
     27     * @return true if the CPU implements at least the p6 instruction set (Pentium II or better).
    2828     * Please note that an PentimPro CPU causes/should cause this method to return false (due to that CPU using a
    2929     * very early implementation of the p6 instruction set. No MMX etc.)
     
    3131    public boolean IsPentium2Compatible();
    3232    /**
    33      * @return true iff the CPU implements at least a Pentium III level of the p6 instruction/feature set.
     33     * @return true if the CPU implements at least a Pentium III level of the p6 instruction/feature set.
    3434     */
    3535    public boolean IsPentium3Compatible();
    3636    /**
    37      * @return true iff the CPU implements at least a Pentium IV level instruction/feature set.
     37     * @return true if the CPU implements at least a Pentium IV level instruction/feature set.
    3838     */
    3939    public boolean IsPentium4Compatible();
    4040    /**
    41      * @return true iff the CPU implements at least a Atom level instruction/feature set.
     41     * @return true if the CPU implements at least a Pentium M level instruction/feature set.
     42     */
     43    public boolean IsPentiumMCompatible();     
     44    /**
     45     * @return true if the CPU implements at least a Atom level instruction/feature set.
    4246     */
    4347    public boolean IsAtomCompatible();
    4448    /**
    45      * @return true iff the CPU implements at least a Core2 level instruction/feature set.
     49     * @return true if the CPU implements at least a Core2 level instruction/feature set.
    4650     */
    4751    public boolean IsCore2Compatible();
    4852    /**
    49      * @return true iff the CPU implements at least a Corei level instruction/feature set.
     53     * @return true if the CPU implements at least a Corei level instruction/feature set.
    5054     */
    51     public boolean IsCoreiCompatible(); 
     55    public boolean IsCoreiCompatible();
    5256}
  • core/java/src/freenet/support/CPUInformation/UnknownCPUException.java

    r562cabf r6cf1591  
    99 */
    1010public class UnknownCPUException extends RuntimeException {
    11     public UnknownCPUException() {
     11    /**
     12         *
     13         */
     14        private static final long serialVersionUID = 5166144274582583742L;
     15
     16        public UnknownCPUException() {
    1217        super();
    1318    }
  • core/java/src/net/i2p/util/NativeBigInteger.java

    r562cabf r6cf1591  
    2525import freenet.support.CPUInformation.CPUInfo;
    2626import freenet.support.CPUInformation.IntelCPUInfo;
     27import freenet.support.CPUInformation.VIACPUInfo;
    2728import freenet.support.CPUInformation.UnknownCPUException;
    2829
     
    189190                _cpuModel = c.getCPUModelString();
    190191            } catch (UnknownCPUException e) {}
    191             if (c.IsC3Compatible())
    192                 return JBIGI_OPTIMIZATION_VIAC3;
    193             if (c instanceof AMDCPUInfo) {
     192            if (c instanceof VIACPUInfo){
     193                VIACPUInfo viacpu = (VIACPUInfo) c;
     194                if (viacpu.IsNanoCompatible())
     195                        return JBIGI_OPTIMIZATION_NANO;
     196                if (viacpu.IsNanoCompatible())
     197                        return JBIGI_OPTIMIZATION_VIAC3;
     198            } else if(c instanceof AMDCPUInfo) {
    194199                AMDCPUInfo amdcpu = (AMDCPUInfo) c;
    195200                if (amdcpu.IsAthlon64Compatible())
Note: See TracChangeset for help on using the changeset viewer.