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.