var highTime:dword; lowTime:dword; x:int64; y:int64; function getTime:int64; assembler; asm xor edx, edx xor eax, eax rdtsc mov lowTime, eax mov highTime, edx end; function foo:int64; begin result := 5347234290309; end; function bar:int64; var x:int64; begin asm mov dword ptr result, eax mov dword ptr result+4, edx end; //result := x; end; procedure getRDTSCTime(var x:int64); assembler; asm mov edi, x rdtsc mov [edi], eax mov [edi+4], edx end; procedure foobar(a:int64); begin writeln(a); end; begin // repeat x := getTime(); writeln(highTime, ' : ', lowTime); // write(' '); longlongRec(x).hi := 1245; longLongRec(x).lo := 6789; writeln(x); writeln(longLongRec(x).hi); writeln(longLongRec(x).lo); y := x; writeln(longLongRec(y).hi); writeln(longLongRec(y).lo); if (x <> y) then begin writeln('bad math'); end; if (x <> foo()) then writeln('bad math 2'); if (y <> bar()) then writeln('bad math 3'); y := bar(); writeln('--', y); writeln(longLongRec(y).hi); writeln(longLongRec(y).lo); x := int64(65536) shl 17; writeln(x); foobar(x); x := 2048; if (x <> 0) then writeln('bad math 4'); getRDTSCTime(x); writeln(x); getRDTSCTime(x); writeln(x); // until keypressed; end.