Einzelnen Beitrag anzeigen

gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#1

Tokyo 10.2.3 Community Edition: Bug in Math-Unit?

  Alt 20. Jul 2018, 10:59
Delphi-Version: 10.2 Tokyo
Hallo,
ich habe gestern die Tokyo Community Edition installiert und dann (natürlich) ziemlich bald den Quellcode der Math-Unit angeschaut, und denke da ist ein Bug drin:
Delphi-Quellcode:
function GetSSEType: Cardinal;
...
{$ELSEIF Defined(CPUX86)}
asm
        PUSH EBX
        MOV EAX, 1
        CPUID
        XOR EAX, EAX
        TEST EDX, $02000000 // EDX 25 bits - SSE bit
        JZ @@CheckSSE2
        OR EAX, seSSE
...
@@CheckSSE42:
        TEST ECX, $00100000 // ECX 20 bits - SSSE4.2 bit
        JZ @@CheckPOPCNT
        OR EAX, seSSE42
@@CheckPOPCNT:
        TEST ECX, $00800000 // ECX 23 bits - POPCNT bit
        JZ @@CheckAESNI
        OR EAX, sePOPCNT
@@CheckAESNI:
        TEST ECX, $02000000 // ECX 25 bits - AESNI bit
        JZ @@CheckPCLMULQDQ
        OR EAX, sePOPCNT
@@CheckPCLMULQDQ:
        TEST ECX, $00000002 // ECX 1 bits - PCLMULQDQ bit
        JZ @@Exit
        OR EAX, sePCLMULQDQ
@@Exit:
        POP EBX
end;
Und ähnlich für CPUX64. Ich glaube, da hat jemand einen Copy/Paste-Fehler gemacht und es sollte so aussehen:
Delphi-Quellcode:
@@CheckAESNI:
        TEST ECX, $02000000 // ECX 25 bits - AESNI bit
        JZ @@CheckPCLMULQDQ
        OR EAX, seAESNI
Leider hat mein I3 laut CPU-Z keine Advanced Encryption Standard Instructions (AES-NI), so das ich natürlich auch von Delphi kein AES-NI (seAESNI = $0080) sehen kann. Das folgende Program
Delphi-Quellcode:
{$apptype console}
uses
  system.sysutils, system.math;
begin
  writeln(IntToHex(TestSSE,16));
end.
gibt 000000000000017F aus sowohl für 32- als auch 64-Bit und es fehlt das $80-Bit. Kann jemand mit AES-NI-Processor-Feature das als Bug bestätigen (d.h. fehlt auch bei ihm das $80-Bit)?
  Mit Zitat antworten Zitat