Browse Source

* New test for extended CMOVcc optimisations

J. Gareth "Curious Kit" Moreton 2 years ago
parent
commit
891723111c
1 changed files with 56 additions and 0 deletions
  1. 56 0
      tests/test/cg/tcond1.pp

+ 56 - 0
tests/test/cg/tcond1.pp

@@ -0,0 +1,56 @@
+{ %CPU=i386,x86_64 }
+{ %OPT=-a -O2 -CpCOREI }
+
+{ This test evaluates OptPass2Jcc's ability to create CMOV instructions with
+  constants while ensuring correct code is still generated. }
+  
+program tcond1;
+
+uses
+  CPU;
+
+const
+  Expected: array[0..3] of array[0..2] of LongInt =
+    ((-10, 3, 2), (-10, 4, 2), (0, 0, -10), (0, 0, -10));
+
+function TestInput(Input, TestAns: LongInt): Boolean;
+  var
+    O1, O2, O3: LongInt;
+  begin
+    if Input < 2 then 
+      begin
+        O1 := -10;
+        O2 := TestAns;
+        O3 := 2;
+      end
+    else
+      begin
+        O1 := 0;
+        O2 := 0;
+        O3 := -10;
+      end;
+
+    TestInput :=
+      (O1 = Expected[Input][0]) and
+      (O2 = Expected[Input][1]) and
+      (O3 = Expected[Input][2]);
+  end;
+
+var
+  X: LongInt;
+  
+begin
+  if not CMOVSupport then
+    begin
+      WriteLn('unsupported');
+      Halt(0);
+    end;      
+
+  for X := 0 to 3 do
+    begin
+      if not TestInput(X, X + 3) then
+        Halt(1);
+    end;
+    
+  WriteLn('ok');
+end.