Changeset 7330e5f


Ignore:
Timestamp:
Jan 8, 2011 6:24:16 PM (9 years ago)
Author:
dev <dev@…>
Branches:
master
Children:
4c17276
Parents:
6cfb2ba
Message:

Added support for new Intel family/model names.
Added proper support for using Core2 machines as P4.
Added support for identifying SSE ¾.¼.2/4A support on CPU.

Location:
core/java/src/freenet/support/CPUInformation
Files:
2 edited

Legend:

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

    r6cfb2ba r7330e5f  
    11/*
    22 * Created on Jul 14, 2004
     3 * Updated on Jan 8, 2011
    34 */
    45package freenet.support.CPUInformation;
     
    130131        return c.EAX & 0xf;
    131132    }
    132     private static int getCPUFlags()
     133    private static int getEDXCPUFlags()
    133134    {
    134135        CPUIDResult c = doCPUID(1);
    135136        return c.EDX;
     137    }
     138    private static int getECXCPUFlags()
     139    {
     140        CPUIDResult c = doCPUID(1);
     141        return c.ECX;
     142    }
     143    private static int getExtendedEDXCPUFlags()
     144    {
     145        CPUIDResult c = doCPUID(0x80000001);
     146        return c.EDX;
     147    }
     148    private static int getExtendedECXCPUFlags()
     149    {
     150        CPUIDResult c = doCPUID(0x80000001);
     151        return c.ECX;
    136152    }
    137153   
     
    164180        }
    165181        public boolean hasMMX(){
    166             return (getCPUFlags() & 0x800000) >0; //Bit 23
     182            return (getEDXCPUFlags() & 0x800000) >0; //EDX Bit 23
    167183        }
    168184        public boolean hasSSE(){
    169             return (getCPUFlags() & 0x2000000) >0; //Bit 25
     185            return (getEDXCPUFlags() & 0x2000000) >0; //EDX Bit 25
    170186        }
    171187        public boolean hasSSE2(){
    172             return (getCPUFlags() & 0x4000000) >0; //Bit 26
     188            return (getEDXCPUFlags() & 0x4000000) >0; //EDX Bit 26
     189        }
     190        public boolean hasSSE3(){
     191            return (getEDXCPUFlags() & 0x1) >0; //ECX Bit 0
     192        }
     193        public boolean hasSSE41(){
     194            return (getEDXCPUFlags() & 0x80000) >0; //ECX Bit 19
     195        }
     196        public boolean hasSSE42(){
     197            return (getEDXCPUFlags() & 0x100000) >0; //ECX Bit 20
     198        }
     199        public boolean hasSSE4A(){
     200            return (getExtendedECXCPUFlags() & 0x40) >0; //Extended ECX Bit 6
    173201        }
    174202        public boolean IsC3Compatible() { return false; }
     
    302330        public boolean IsPentium4Compatible()
    303331        {
    304             return getCPUFamily() >= 15;
     332                if (getCPUFamily() >= 15){
     333                        return true;
     334                } else if (getCPUExtendedModel() == 1 && (getCPUFamily() == 6 && (getCPUModel() == 10 || getCPUModel() == 13))){
     335                        return true;
     336                } else if (getCPUExtendedModel() == 1 && getCPUFamily() == 6 && getCPUModel() == 10){
     337                        return true;
     338                } else {
     339                        return false;
     340                }
    305341        }
    306342        public String getCPUModelString() throws UnknownCPUException {
    307             if(getCPUFamily() == 4){
    308                 switch(getCPUModel()){
    309                     case 0:
    310                         return "486 DX-25/33";
    311                     case 1:
    312                         return "486 DX-50";
    313                     case 2:
    314                         return "486 SX";
    315                     case 3:
    316                         return "486 DX/2";
    317                     case 4:
    318                         return "486 SL";
    319                     case 5:
    320                         return "486 SX/2";
    321                     case 7:
    322                         return "486 DX/2-WB";
    323                     case 8:
    324                         return "486 DX/4";
    325                     case 9:
    326                         return "486 DX/4-WB";
    327                 }
    328             }
    329             if(getCPUFamily() == 5){
    330                 switch(getCPUModel()){
    331                     case 0:
    332                         return "Pentium 60/66 A-step";
    333                     case 1:
    334                         return "Pentium 60/66";
    335                     case 2:
    336                         return "Pentium 75 - 200";
    337                     case 3:
    338                         return "OverDrive PODP5V83";
    339                     case 4:
    340                         return "Pentium MMX";
    341                     case 7:
    342                         return "Mobile Pentium 75 - 200";
    343                     case 8:
    344                         return "Mobile Pentium MMX";
    345                 }
     343                if (getCPUExtendedModel() == 0){
     344                    if(getCPUFamily() == 4){
     345                        switch(getCPUModel()){
     346                            case 0:
     347                                return "486 DX-25/33";
     348                            case 1:
     349                                return "486 DX-50";
     350                            case 2:
     351                                return "486 SX";
     352                            case 3:
     353                                return "486 DX/2";
     354                            case 4:
     355                                return "486 SL";
     356                            case 5:
     357                                return "486 SX/2";
     358                            case 7:
     359                                return "486 DX/2-WB";
     360                            case 8:
     361                                return "486 DX/4";
     362                            case 9:
     363                                return "486 DX/4-WB";
     364                        }
     365                    }
     366                }
     367            if (getCPUExtendedModel() == 0){
     368                    if(getCPUFamily() == 5){
     369                        switch(getCPUModel()){
     370                            case 0:
     371                                return "Pentium 60/66 A-step";
     372                            case 1:
     373                                return "Pentium 60/66";
     374                            case 2:
     375                                return "Pentium 75 - 200";
     376                            case 3:
     377                                return "OverDrive PODP5V83";
     378                            case 4:
     379                                return "Pentium MMX";
     380                            case 7:
     381                                return "Mobile Pentium 75 - 200";
     382                            case 8:
     383                                return "Mobile Pentium MMX";
     384                        }
     385                    }
    346386            }
    347387            if(getCPUFamily() == 6){
    348                 switch(getCPUModel()){
    349                     case 0:
    350                         return "Pentium Pro A-step";
    351                     case 1:
    352                         return "Pentium Pro";
    353                     case 3:
    354                         return "Pentium II (Klamath)";
    355                     case 5:
    356                         return "Pentium II (Deschutes), Celeron (Covington), Mobile Pentium II (Dixon)";
    357                     case 6:
    358                         return "Mobile Pentium II, Celeron (Mendocino)";
    359                     case 7:
    360                         return "Pentium III (Katmai)";
    361                     case 8:
    362                         return "Pentium III (Coppermine), Celeron w/SSE";
    363                     case 9:
    364                         return "Mobile Pentium III";
    365                     case 10:
    366                         return "Pentium III Xeon (Cascades)";
    367                     case 11:
    368                         return "Pentium III (130 nm)";
    369                 }
     388                if (getCPUExtendedModel() == 0){
     389                        switch(getCPUModel()){
     390                            case 0:
     391                                return "Pentium Pro A-step";
     392                            case 1:
     393                                return "Pentium Pro";
     394                            case 3:
     395                                return "Pentium II (Klamath)";
     396                            case 5:
     397                                return "Pentium II (Deschutes), Celeron (Covington), Mobile Pentium II (Dixon)";
     398                            case 6:
     399                                return "Mobile Pentium II, Celeron (Mendocino)";
     400                            case 7:
     401                                return "Pentium III (Katmai)";
     402                            case 8:
     403                                return "Pentium III (Coppermine), Celeron w/SSE";
     404                            case 9:
     405                                return "Mobile Pentium III (Banias)";
     406                            case 10:
     407                                return "Pentium III Xeon (Cascades)";
     408                            case 11:
     409                                return "Pentium III (130 nm)";
     410                            case 13:
     411                                return "Mobile Pentium III (Dothan)";
     412                            case 14:
     413                                return "Mobile Core (Yonah)";
     414                            case 15:
     415                                return "Core 2 (Conroe)";
     416                        }
     417                }
     418                if (getCPUExtendedModel() == 1){
     419                         switch(getCPUModel()){
     420                                case 10:
     421                                        return "Core i7";
     422                                case 12:
     423                                        return "Atom";
     424                                case 13:
     425                                        return "Xeon MP";
     426                         }
     427                }
    370428            }
    371429            if(getCPUFamily() == 7){
     
    385443                        case 3:
    386444                            return "Pentium IV (90 nm)";
     445                        case 4:
     446                            return "Pentium IV (90 nm)";
     447                        case 6:
     448                            return "Pentium IV (65 nm)";
    387449                    }
    388450                }
     
    408470        System.out.println("CPU Model: " + getCPUModel());
    409471        System.out.println("CPU Stepping: " + getCPUStepping());
    410         System.out.println("CPU Flags: " + getCPUFlags());
     472        System.out.println("CPU Flags: " + getEDXCPUFlags());
    411473       
    412474        CPUInfo c = getInfo();
     
    416478        System.out.println(" CPU has SSE: " + c.hasSSE());
    417479        System.out.println(" CPU has SSE2: " + c.hasSSE2());
     480        System.out.println(" CPU has SSE3: " + c.hasSSE3());
     481        System.out.println(" CPU has SSE4.1: " + c.hasSSE41());
     482        System.out.println(" CPU has SSE4.2: " + c.hasSSE42());
     483        System.out.println(" CPU has SSE4A: " + c.hasSSE4A());
    418484        if(c instanceof IntelCPUInfo){
    419485            System.out.println("  **Intel-info**");
  • core/java/src/freenet/support/CPUInformation/CPUInfo.java

    r6cfb2ba r7330e5f  
    11/*
    2  * Created on Jul 16, 2004
    3  *
     2 * Created on Jul 14, 2004
     3 * Updated on Jan 8, 2011
    44 */
    55package freenet.support.CPUInformation;
     
    4343    public boolean hasSSE2();
    4444
     45    /**
     46     * @return true iff the CPU support the SSE3 instruction set.
     47     */
     48    public boolean hasSSE3();
     49   
     50    /**
     51     * @return true iff the CPU support the SSE4.1 instruction set.
     52     */
     53    public boolean hasSSE41();
     54
     55    /**
     56     * @return true iff the CPU support the SSE4.2 instruction set.
     57     */
     58    public boolean hasSSE42();
     59
     60    /**
     61     * @return true iff the CPU support the SSE4A instruction set.
     62     */
     63    public boolean hasSSE4A();
     64
    4565    public boolean IsC3Compatible();
    4666}
Note: See TracChangeset for help on using the changeset viewer.