Newer
Older
ubixfs-2 / timetest.pas
@flameshadow flameshadow on 10 Jun 2005 1 KB UbixFS
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.