summaryrefslogtreecommitdiff
path: root/fpcsrc/tests/webtbs/tw8199.pp
blob: ebcd6f98bb33ee6f06acf24bb4a8b2aa4bea06ab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
{ %cpu=i386 }
{$APPTYPE CONSOLE}

{$ifdef fpc}
  {$mode delphi}
{$endif}

program AsmDifference;

type
  TnxInt64 = Int64; {64-bit signed Integer}
  TnxValueRelationship = -1..1;

const
  nxSmallerThan = Low(TnxValueRelationship);
  nxEqual = 0;
  nxGreaterThan = High(TnxValueRelationship);

function nxCmpI64(const a, b : TnxInt64) : TnxValueRelationship;
//begin
// if a = b then
// Result := nxEqual
// else if a < b then
// Result := nxSmallerThan
// else
// Result := nxGreaterThan;
//end;
asm
  xor eax, eax
  mov edx, [ebp+20]
  cmp edx, [ebp+12]
  jg @@GT
  jl @@LT
  mov edx, [ebp+16]
  cmp edx, [ebp+8]
  ja @@GT
  je @@EQ
@@LT:
  dec eax
  dec eax
@@GT:
  inc eax
@@EQ:
end;

var
  a, b: TnxInt64;

begin
  a := 12884901889;
  b := 12884901890;

  if nxCmpI64(a, b)<>-1 then
    halt(1);
  writeln('ok');
end.