cpucache.inc

来自「pipe类 pipe类 pipe类 pipe类 pipe类」· INC 代码 · 共 486 行 · 第 1/2 页

INC
486
字号
var
  DescriptorsAr:array[0..15] of word;

function cCPUid.FillCacheInfo: boolean;
  var k:integer;
begin
  try
        flevel1.divided:=true;
        flevel1.icache.is_trace:=false;
        flevel2.is_l2_cache:=true;
        if (fCPUdata.extended[0].regEAX>=$80000005)
         and (not (fCPUdata.standart[0].regEAX>=2)) then
          begin
           {with extended info}
           {flevel 1:}
            flevel1.itlb.associativity_4k:=extract_dw(fCPUdata.extended[5].regEBX,8,15);
            flevel1.itlb.associativity_2m:=extract_dw(fCPUdata.extended[5].regEAX,8,15);
            flevel1.itlb.entries_4k:=extract_dw(fCPUdata.extended[5].regEBX,0,7);
            flevel1.itlb.entries_2m:=extract_dw(fCPUdata.extended[5].regEAX,0,7);
            flevel1.dtlb.associativity_4k:=extract_dw(fCPUdata.extended[5].regEBX,24,31);
            flevel1.dtlb.associativity_2m:=extract_dw(fCPUdata.extended[5].regEAX,24,31);
            flevel1.dtlb.entries_4k:=extract_dw(fCPUdata.extended[5].regEBX,16,23);
            flevel1.dtlb.entries_2m:=extract_dw(fCPUdata.extended[5].regEAX,16,23);
            flevel1.icache.size:=extract_dw(fCPUdata.extended[5].regEDX,24,31);
            flevel1.icache.associativity:=extract_dw(fCPUdata.extended[5].regEDX,16,23);
            flevel1.icache.linesize:=extract_dw(fCPUdata.extended[5].regEDX,0,7);
            flevel1.icache.linespertag:=extract_dw(fCPUdata.extended[5].regEDX,8,15);
            flevel1.dcache.size:=extract_dw(fCPUdata.extended[5].regECX,24,31);
            flevel1.dcache.associativity:=extract_dw(fCPUdata.extended[5].regECX,16,23);
            flevel1.dcache.linesize:=extract_dw(fCPUdata.extended[5].regECX,0,7);
            flevel1.dcache.linespertag:=extract_dw(fCPUdata.extended[5].regECX,8,15);
           {flevel 2:}
           if (fCPUdata.extended[0].regEAX>=$80000006) then
           begin 
            flevel2.itlb.entries_4k:=extract_dw(fCPUdata.extended[6].regEBX,0,11);
            flevel2.itlb.entries_2m:=extract_dw(fCPUdata.extended[6].regEAX,0,11);
            flevel2.dtlb.entries_4k:=extract_dw(fCPUdata.extended[6].regEBX,16,27);
            flevel2.dtlb.entries_2m:=extract_dw(fCPUdata.extended[6].regEAX,16,27);
            flevel2.cache.linesize:=extract_dw(fCPUdata.extended[6].regECX,0,7);
            case extract_dw(fCPUdata.extended[6].regEAX,28,31) of
              0: flevel2.dtlb.associativity_2m:=0;
              1: flevel2.dtlb.associativity_2m:=1;
              2: flevel2.dtlb.associativity_2m:=2;
              4: flevel2.dtlb.associativity_2m:=4;
              6: flevel2.dtlb.associativity_2m:=8;
              8: flevel2.dtlb.associativity_2m:=16;
             15: flevel2.dtlb.associativity_2m:=255;
            end;
            case extract_dw(fCPUdata.extended[6].regEAX,12,15) of
              0: flevel2.itlb.associativity_2m:=0;
              1: flevel2.itlb.associativity_2m:=1;
              2: flevel2.itlb.associativity_2m:=2;
              4: flevel2.itlb.associativity_2m:=4;
              6: flevel2.itlb.associativity_2m:=8;
              8: flevel2.itlb.associativity_2m:=16;
             15: flevel2.itlb.associativity_2m:=255;
            end;
            case extract_dw(fCPUdata.extended[6].regEBX,28,31) of
              0: flevel2.dtlb.associativity_4k:=0;
              1: flevel2.dtlb.associativity_4k:=1;
              2: flevel2.dtlb.associativity_4k:=2;
              4: flevel2.dtlb.associativity_4k:=4;
              6: flevel2.dtlb.associativity_4k:=8;
              8: flevel2.dtlb.associativity_4k:=16;
             15: flevel2.dtlb.associativity_4k:=255;
            end;
            case extract_dw(fCPUdata.extended[6].regEBX,12,15) of
              0: flevel2.itlb.associativity_4k:=0;
              1: flevel2.itlb.associativity_4k:=1;
              2: flevel2.itlb.associativity_4k:=2;
              4: flevel2.itlb.associativity_4k:=4;
              6: flevel2.itlb.associativity_4k:=8;
              8: flevel2.itlb.associativity_4k:=16;
             15: flevel2.itlb.associativity_4k:=255;
            end;
           {Other specific cases}
            if (fCPUid_m.std_vendor_string='CentaurHauls') and
                 (fCPUid_m.std_family=6) and
                   ((fCPUid_m.std_model=7) or (fCPUid_m.std_model=8))
                  then
                    begin
                     {VIA C3 0670h..068Fh:}
                     flevel2.cache.size:=extract_dw(fCPUdata.extended[6].regECX,24,31);
                     flevel2.cache.associativity:=extract_dw(fCPUdata.extended[6].regECX,16,23);
                     flevel2.cache.linespertag:=extract_dw(fCPUdata.extended[6].regECX,8,15);
                   end
                 else
                   begin
                    {Other:}
                    if ((fCPUid_m.std_vendor_string='AuthenticAMD') and
                       (fCPUid_m.std_family=6) and
                       (fCPUid_m.std_model=3) and
                       (fCPUid_m.std_stepping=0) and
                       (extract_dw(fCPUdata.extended[6].regECX,16,31)=1))
                     then
                       flevel2.cache.size:=64
                     else
                       flevel2.cache.size:=extract_dw(fCPUdata.extended[6].regECX,16,31);
            case extract_dw(fCPUdata.extended[6].regECX,12,15) of
              0: flevel2.cache.associativity:=0;
              1: flevel2.cache.associativity:=1;
              2: flevel2.cache.associativity:=2;
              4: flevel2.cache.associativity:=4;
              6: flevel2.cache.associativity:=8;
              8: flevel2.cache.associativity:=16;
             15: flevel2.cache.associativity:=255;
            end;
            if ((fCPUid_m.std_vendor_string='CentaurHauls') and
                 (fCPUid_m.std_family=6) and
                 (fCPUid_m.std_model=9) and
                (fCPUid_m.std_stepping=1) and
                (extract_dw(fCPUdata.extended[6].regECX,12,15)=0))
              then
                flevel2.cache.associativity:=16;
                flevel2.cache.linespertag:=extract_dw(fCPUdata.extended[6].regECX,8,11);
              end;
        end; // L2 if end
            {/with extended info}
        end
    else
  if (fCPUdata.standart[0].regEAX>=2) and
        (fCPUid_m.std_vendor_string='GenuineIntel') then
       begin
         {standart info only - using descriptors}
         DescriptorsAr[1]:=extract_dw(fCPUdata.standart[2].regEAX,8,15);
         DescriptorsAr[2]:=extract_dw(fCPUdata.standart[2].regEAX,16,23);
         DescriptorsAr[3]:=extract_dw(fCPUdata.standart[2].regEAX,24,31);
         DescriptorsAr[4]:=extract_dw(fCPUdata.standart[2].regEBX,0,7);
         DescriptorsAr[5]:=extract_dw(fCPUdata.standart[2].regEBX,8,15);
         DescriptorsAr[6]:=extract_dw(fCPUdata.standart[2].regEBX,16,23);
         DescriptorsAr[7]:=extract_dw(fCPUdata.standart[2].regEBX,24,31);
         DescriptorsAr[8]:=extract_dw(fCPUdata.standart[2].regECX,0,7);
         DescriptorsAr[9]:=extract_dw(fCPUdata.standart[2].regECX,8,15);
         DescriptorsAr[10]:=extract_dw(fCPUdata.standart[2].regECX,16,23);
         DescriptorsAr[11]:=extract_dw(fCPUdata.standart[2].regECX,24,31);
         DescriptorsAr[12]:=extract_dw(fCPUdata.standart[2].regEDX,0,7);
         DescriptorsAr[13]:=extract_dw(fCPUdata.standart[2].regEDX,8,15);
         DescriptorsAr[14]:=extract_dw(fCPUdata.standart[2].regEDX,16,23);
         DescriptorsAr[15]:=extract_dw(fCPUdata.standart[2].regEDX,24,31);
         for k:=1 to 15 do
           begin
             case DescriptorsAr[k] of
               $01:begin
                 flevel1.itlb.associativity_4k:=4;
                 flevel1.itlb.entries_4k:=32;
               end;
               $02:begin
                 flevel1.itlb.associativity_2m:=255;
                 flevel1.itlb.entries_2m:=2;
               end;
               $03:begin
                 flevel1.dtlb.associativity_4k:=4;
                 flevel1.dtlb.entries_4k:=64;
               end;
               $04:begin
                 flevel1.dtlb.associativity_2m:=4;
                 flevel1.dtlb.entries_2m:=8;
               end;
               $06:begin
                 flevel1.icache.size:=8;
                 flevel1.icache.associativity:=4;
                 flevel1.icache.linesize:=32;
               end;
               $08:begin
                 flevel1.icache.size:=16;
                 flevel1.icache.associativity:=4;
                 flevel1.icache.linesize:=32;
               end;
               $0A:begin
                 flevel1.dcache.size:=8;
                 flevel1.dcache.associativity:=2;
                 flevel1.dcache.linesize:=32;
               end;
               $0C:begin
                 flevel1.dcache.size:=16;
                 flevel1.dcache.associativity:=4;
                 flevel1.dcache.linesize:=32;
               end;
               $10:begin
                 flevel1.dcache.size:=16;
                 flevel1.dcache.associativity:=4;
                 flevel1.dcache.linesize:=32;
               end;
              $15:begin
                 flevel1.icache.size:=16;
                 flevel1.icache.associativity:=4;
                 flevel1.icache.linesize:=32;
              end;
              $1A:begin
                 flevel2.cache.size:=96;
                 flevel2.cache.associativity:=6;
                 flevel2.cache.linesize:=64;
              end;


    $22:  begin
          flevel3.is_l3_cache:=true;
          flevel3.cache.size:=512;
          flevel3.cache.associativity:=4;
          flevel3.cache.linesize:=64;
          flevel3.cache.sectors:=2;
          end;
    $23:  begin
          flevel3.is_l3_cache:=true;
          flevel3.cache.size:=1024;
          flevel3.cache.associativity:=8;
          flevel3.cache.linesize:=64;
          flevel3.cache.sectors:=2;
          end;
    $25:  begin
          flevel3.is_l3_cache:=true;
          flevel3.cache.size:=2048;
          flevel3.cache.associativity:=8;
          flevel3.cache.linesize:=64;
          flevel3.cache.sectors:=2;
          end;
    $29:  begin
          flevel3.is_l3_cache:=true;
          flevel3.cache.size:=4096;
          flevel3.cache.associativity:=8;
          flevel3.cache.linesize:=64;
          flevel3.cache.sectors:=2;
          end;
    $2C:  begin
          flevel1.dcache.size:=32;
          flevel1.dcache.associativity:=8;
          flevel1.dcache.linesize:=64;
          end;
    $30:  begin
          flevel1.icache.size:=32;
          flevel1.icache.associativity:=8;
          flevel1.icache.linesize:=64;
          end;
    $39:  begin
          flevel2.cache.size:=128;
          flevel2.cache.associativity:=4;
          flevel2.cache.linesize:=64;
          end;
    $3B:  begin
          flevel2.cache.size:=128;
          flevel2.cache.associativity:=2;
          flevel2.cache.linesize:=64;
          end;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?