Changeset a21e3cd8


Ignore:
Timestamp:
Sep 29, 2014 1:05:38 PM (6 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
bfd51097
Parents:
0f298cf
Message:

CPUID:

  • Fix main() model and family calculation
  • Add model string fetch from processor
  • AMD model string tweaks
Location:
core/java/src/freenet/support/CPUInformation
Files:
3 edited

Legend:

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

    r0f298cf ra21e3cd8  
    365365        // APUs
    366366        // http://en.wikipedia.org/wiki/List_of_AMD_Accelerated_Processing_Unit_microprocessors
     367        // 1st gen Llano high perf / Brazos low power
     368        // 2nd gen Trinity high perf / Brazos 2 low power
     369        // 3rd gen Kaveri high perf / Kabini/Temash low power
    367370          case 18: {
    368371            isK6Compatible = true;
     
    372375            isAthlon64Compatible = true;
    373376            isX64 = true;
    374             modelString = "AMD Llano/Trinity/Brazos model " + model;
     377            modelString = "AMD APU model " + model;
    375378          }
    376379          break;
     
    389392                // Case 3 is uncertain but most likely a Bobcat APU
    390393                case 3:
    391                     modelString = "Bobcat APU";
    392                     break;
    393                 default:
    394                     modelString = "AMD Bobcat model " + model;
     394                    modelString = "AMD Bobcat APU";
     395                    break;
     396                default:
     397                    modelString = "AMD Bobcat APU model " + model;
    395398                    break;
    396399            }
     
    409412            isX64 = true;
    410413            switch (model) {
     414                // 32 nm
    411415                case 1:                   
    412                     modelString = "Bulldozer FX-6000/8000";
     416                    modelString = "Bulldozer FX-6100/8100";
     417                    break;
     418                // 32 nm
     419                case 2:                   
     420                    modelString = "Bulldozer FX-6300/8300";
     421                    break;
     422                // 28 nm ?
     423                case 3:                   
     424                    modelString = "Bulldozer FX-6500/8500";
    413425                    break;
    414426                default:
     
    428440            isBobcatCompatible = true;
    429441            isX64 = true;
    430             modelString = "AMD Jaguar model " + model;
     442            switch (model) {
     443                case 0:                   
     444                    modelString = "Athlon 5350 APU";
     445                    break;
     446                default:
     447                    modelString = "AMD Jaguar APU model " + model;
     448                    break;
     449            }
    431450          }
    432451          break;
  • core/java/src/freenet/support/CPUInformation/CPUID.java

    r0f298cf ra21e3cd8  
    8080        loadNative();
    8181    }
    82     //A class that can (amongst other things I assume) represent the state of the
    83     //different CPU registers after a call to the CPUID assembly method
     82
     83    /**
     84     *  A class that can (amongst other things I assume) represent the state of the
     85     *  different CPU registers after a call to the CPUID assembly method
     86     */
    8487    protected static class CPUIDResult {
    8588        final int EAX;
     
    208211
    209212    /**
     213     *  The model name string, up to 48 characters, as reported by
     214     *  the processor itself.
     215     *
     216     *  @return trimmed string, null if unsupported
     217     *  @since 0.9.16
     218     */
     219    static String getCPUModelName() {
     220        CPUIDResult c = doCPUID(0x80000000);
     221        long maxSupported = c.EAX & 0xFFFFFFFFL;
     222        if (maxSupported < 0x80000004L)
     223            return null;
     224        StringBuilder buf = new StringBuilder(48);
     225        int[] regs = new int[4];
     226        for (int fn = 0x80000002; fn <= 0x80000004; fn++) {
     227            c = doCPUID(fn);
     228            regs[0] = c.EAX;
     229            regs[1] = c.EBX;
     230            regs[2] = c.ECX;
     231            regs[3] = c.EDX;
     232            for (int i = 0; i < 4; i++) {
     233                int reg = regs[i];
     234                for (int j = 0; j < 4; j++) {
     235                    char ch = (char) (reg & 0xff);
     236                    if (ch == 0)
     237                        return buf.toString().trim();
     238                    buf.append(ch);
     239                    reg >>= 8;
     240                }
     241            }
     242        }
     243        return buf.toString().trim();
     244    }
     245
     246    /**
    210247     * Returns a CPUInfo item for the current type of CPU
    211248     * If I could I would declare this method in a interface named
     
    238275        }
    239276        System.out.println(" **CPUInfo**");
     277        String mname = getCPUModelName();
     278        if (mname != null)
     279            System.out.println("CPU Model Name: " + mname);
    240280        System.out.println("CPU Vendor: " + getCPUVendorID());
    241         System.out.println("CPU Family: " + getCPUFamily());
    242         System.out.println("CPU Model: " + getCPUModel());
     281        // http://en.wikipedia.org/wiki/Cpuid
     282        int family = getCPUFamily();
     283        int model = getCPUModel();
     284        if (family == 15) {
     285            family += getCPUExtendedFamily();
     286            model += getCPUExtendedModel() << 4;
     287        }
     288        System.out.println("CPU Family: " + family);
     289        System.out.println("CPU Model: " + model);
    243290        System.out.println("CPU Stepping: " + getCPUStepping());
    244291        System.out.println("CPU Flags: 0x" + Integer.toHexString(getEDXCPUFlags()));
     
    254301        System.out.println("CPU has SSE4.2: " + c.hasSSE42());
    255302        System.out.println("CPU has SSE4A: " + c.hasSSE4A());
     303        System.out.println("CPU has AES-NI: " + c.hasAES());
    256304        if(c instanceof IntelCPUInfo){
    257305            System.out.println("\n **Intel-info**");
  • core/java/src/freenet/support/CPUInformation/IntelInfoImpl.java

    r0f298cf ra21e3cd8  
    228228                        modelString = "Core 2 (45nm)";
    229229                        break;
    230                     // Nahalem 45 nm
     230                    // Nehalem 45 nm
    231231                    case 0x1a:
    232232                        isCoreiCompatible = true;
     
    247247                        modelString = "Xeon MP (45nm)";
    248248                        break;
    249                     // Nahalem 45 nm
     249                    // Nehalem 45 nm
    250250                    case 0x1e:
    251251                        isCoreiCompatible = true;
     
    283283                        modelString = "Sandy Bridge EP";
    284284                        break;
    285                     // Nahalem 45 nm
     285                    // Nehalem 45 nm
    286286                    case 0x2e:
    287287                        modelString = "Xeon MP (45nm)";
Note: See TracChangeset for help on using the changeset viewer.