Browse Source

Add test for avx2 support using cpu unit function avx2support

Pierre Muller 2 years ago
parent
commit
d38c24fee7

+ 20 - 12
tests/test/cg/tbzhi1.pp

@@ -4,6 +4,9 @@
 
 program tbzhi1;
 
+uses
+  cpu;
+
 function MaskOut(Input: LongInt; Index: Byte): LongInt; noinline;
 begin
   MaskOut := Input and ((1 shl Index) - 1);
@@ -24,16 +27,21 @@ var
   Y: Integer;
   Output: LongInt;
 begin
-  for Y := Low(Inputs) to High(Inputs) do
-    for X := 0 to 31 do
-      begin
-        Output := MaskOut(Inputs[Y], X);
-        if Output <> Expected[Y][X] then
-          begin
-            WriteLn('FAIL: $', HexStr(Inputs[Y], 8), ' and ((1 shl ', X, ') - 1) returned $', HexStr(Output, 8), '; expected $', HexStr(Expected[Y][X], 8));
-            Halt(1);
-          end;
-      end;
+  if avx2support then
+    begin
+      for Y := Low(Inputs) to High(Inputs) do
+	for X := 0 to 31 do
+	  begin
+	    Output := MaskOut(Inputs[Y], X);
+	    if Output <> Expected[Y][X] then
+	      begin
+		WriteLn('FAIL: $', HexStr(Inputs[Y], 8), ' and ((1 shl ', X, ') - 1) returned $', HexStr(Output, 8), '; expected $', HexStr(Expected[Y][X], 8));
+		Halt(1);
+	      end;
+	  end;
 
-  WriteLn('ok');
-end.
+      WriteLn('ok');
+    end
+  else
+    writeln('CPU does not support AVX2 extension');
+end.

+ 20 - 12
tests/test/cg/tbzhi1a.pp

@@ -4,6 +4,9 @@
 
 program tbzhi1a;
 
+uses
+  cpu;
+
 function MaskOut(Input, Index: LongInt): LongInt; noinline;
 begin
   MaskOut := Input and ((1 shl Index) - 1);
@@ -24,16 +27,21 @@ var
   Y: Integer;
   Output: LongInt;
 begin
-  for Y := Low(Inputs) to High(Inputs) do
-    for X := 0 to 31 do
-      begin
-        Output := MaskOut(Inputs[Y], X);
-        if Output <> Expected[Y][X] then
-          begin
-            WriteLn('FAIL: $', HexStr(Inputs[Y], 8), ' and ((1 shl ', X, ') - 1) returned $', HexStr(Output, 8), '; expected $', HexStr(Expected[Y][X], 8));
-            Halt(1);
-          end;
-      end;
+  if avx2support then
+    begin
+      for Y := Low(Inputs) to High(Inputs) do
+	for X := 0 to 31 do
+	  begin
+	    Output := MaskOut(Inputs[Y], X);
+	    if Output <> Expected[Y][X] then
+	      begin
+		WriteLn('FAIL: $', HexStr(Inputs[Y], 8), ' and ((1 shl ', X, ') - 1) returned $', HexStr(Output, 8), '; expected $', HexStr(Expected[Y][X], 8));
+		Halt(1);
+	      end;
+	  end;
 
-  WriteLn('ok');
-end.
+      WriteLn('ok');
+    end
+  else
+    writeln('CPU does not support AVX2 extension');
+end.

+ 20 - 12
tests/test/cg/tbzhi1b.pp

@@ -4,6 +4,9 @@
 
 program tbzhi1b;
 
+uses
+  cpu;
+
 function MaskOut(var Input: LongInt; Index: Byte): LongInt; noinline;
 begin
   MaskOut := Input and ((1 shl Index) - 1);
@@ -24,16 +27,21 @@ var
   Y: Integer;
   Output: LongInt;
 begin
-  for Y := Low(Inputs) to High(Inputs) do
-    for X := 0 to 31 do
-      begin
-        Output := MaskOut(Inputs[Y], X);
-        if Output <> Expected[Y][X] then
-          begin
-            WriteLn('FAIL: $', HexStr(Inputs[Y], 8), ' and ((1 shl ', X, ') - 1) returned $', HexStr(Output, 8), '; expected $', HexStr(Expected[Y][X], 8));
-            Halt(1);
-          end;
-      end;
+  if avx2support then
+    begin
+      for Y := Low(Inputs) to High(Inputs) do
+	for X := 0 to 31 do
+	  begin
+	    Output := MaskOut(Inputs[Y], X);
+	    if Output <> Expected[Y][X] then
+	      begin
+		WriteLn('FAIL: $', HexStr(Inputs[Y], 8), ' and ((1 shl ', X, ') - 1) returned $', HexStr(Output, 8), '; expected $', HexStr(Expected[Y][X], 8));
+		Halt(1);
+	      end;
+	  end;
 
-  WriteLn('ok');
-end.
+      WriteLn('ok');
+    end
+  else
+    writeln('CPU does not support AVX2 extension');
+end.

+ 21 - 13
tests/test/cg/tbzhi1c.pp

@@ -4,6 +4,9 @@
 
 program tbzhi1c;
 
+uses
+  cpu;
+
 procedure MaskOut(var InOut: LongInt; Index: Byte); noinline;
 begin
   InOut := InOut and ((1 shl Index) - 1);
@@ -24,17 +27,22 @@ var
   Y: Integer;
   Output: LongInt;
 begin
-  for Y := Low(Inputs) to High(Inputs) do
-    for X := 0 to 31 do
-      begin
-        Output := Inputs[Y];
-        MaskOut(Output, X);
-        if Output <> Expected[Y][X] then
-          begin
-            WriteLn('FAIL: $', HexStr(Inputs[Y], 8), ' and ((1 shl ', X, ') - 1) returned $', HexStr(Output, 8), '; expected $', HexStr(Expected[Y][X], 8));
-            Halt(1);
-          end;
-      end;
+  if avx2support then
+    begin
+      for Y := Low(Inputs) to High(Inputs) do
+	for X := 0 to 31 do
+	  begin
+	    Output := Inputs[Y];
+	    MaskOut(Output, X);
+	    if Output <> Expected[Y][X] then
+	      begin
+		WriteLn('FAIL: $', HexStr(Inputs[Y], 8), ' and ((1 shl ', X, ') - 1) returned $', HexStr(Output, 8), '; expected $', HexStr(Expected[Y][X], 8));
+		Halt(1);
+	      end;
+	  end;
 
-  WriteLn('ok');
-end.
+      WriteLn('ok');
+    end
+  else
+    writeln('CPU does not support AVX2 extension');
+end.

+ 21 - 13
tests/test/cg/tbzhi1d.pp

@@ -4,6 +4,9 @@
 
 program tbzhi1c;
 
+uses
+  cpu;
+
 procedure MaskOut(var InOut: LongInt; Index: LongInt); noinline;
 begin
   InOut := InOut and ((1 shl Index) - 1);
@@ -24,17 +27,22 @@ var
   Y: Integer;
   Output: LongInt;
 begin
-  for Y := Low(Inputs) to High(Inputs) do
-    for X := 0 to 31 do
-      begin
-        Output := Inputs[Y];
-        MaskOut(Output, X);
-        if Output <> Expected[Y][X] then
-          begin
-            WriteLn('FAIL: $', HexStr(Inputs[Y], 8), ' and ((1 shl ', X, ') - 1) returned $', HexStr(Output, 8), '; expected $', HexStr(Expected[Y][X], 8));
-            Halt(1);
-          end;
-      end;
+  if avx2support then
+    begin
+      for Y := Low(Inputs) to High(Inputs) do
+	for X := 0 to 31 do
+	  begin
+	    Output := Inputs[Y];
+	    MaskOut(Output, X);
+	    if Output <> Expected[Y][X] then
+	      begin
+		WriteLn('FAIL: $', HexStr(Inputs[Y], 8), ' and ((1 shl ', X, ') - 1) returned $', HexStr(Output, 8), '; expected $', HexStr(Expected[Y][X], 8));
+		Halt(1);
+	      end;
+	  end;
 
-  WriteLn('ok');
-end.
+      WriteLn('ok');
+    end
+  else
+    writeln('CPU does not support AVX2 extension');
+end.

+ 20 - 12
tests/test/cg/tbzhi1e.pp

@@ -4,6 +4,9 @@
 
 program tbzhi1e;
 
+uses
+  cpu;
+
 function MaskOut(Input: LongInt; Index: Int64): LongInt; noinline;
 begin
   MaskOut := Input and ((1 shl Index) - 1);
@@ -24,16 +27,21 @@ var
   Y: Integer;
   Output: LongInt;
 begin
-  for Y := Low(Inputs) to High(Inputs) do
-    for X := 0 to 31 do
-      begin
-        Output := MaskOut(Inputs[Y], X);
-        if Output <> Expected[Y][X] then
-          begin
-            WriteLn('FAIL: $', HexStr(Inputs[Y], 8), ' and ((1 shl ', X, ') - 1) returned $', HexStr(Output, 8), '; expected $', HexStr(Expected[Y][X], 8));
-            Halt(1);
-          end;
-      end;
+  if avx2support then
+    begin
+      for Y := Low(Inputs) to High(Inputs) do
+	for X := 0 to 31 do
+	  begin
+	    Output := MaskOut(Inputs[Y], X);
+	    if Output <> Expected[Y][X] then
+	      begin
+		WriteLn('FAIL: $', HexStr(Inputs[Y], 8), ' and ((1 shl ', X, ') - 1) returned $', HexStr(Output, 8), '; expected $', HexStr(Expected[Y][X], 8));
+		Halt(1);
+	      end;
+	  end;
 
-  WriteLn('ok');
-end.
+      WriteLn('ok');
+    end
+  else
+    writeln('CPU does not support AVX2 extension');
+end.

+ 20 - 12
tests/test/cg/tbzhi1f.pp

@@ -4,6 +4,9 @@
 
 program tbzhi1f;
 
+uses
+  cpu;
+
 function MaskOut(var Input: LongInt; Index: Int64): LongInt; noinline;
 begin
   MaskOut := Input and ((1 shl Index) - 1);
@@ -24,16 +27,21 @@ var
   Y: Integer;
   Output: LongInt;
 begin
-  for Y := Low(Inputs) to High(Inputs) do
-    for X := 0 to 31 do
-      begin
-        Output := MaskOut(Inputs[Y], X);
-        if Output <> Expected[Y][X] then
-          begin
-            WriteLn('FAIL: $', HexStr(Inputs[Y], 8), ' and ((1 shl ', X, ') - 1) returned $', HexStr(Output, 8), '; expected $', HexStr(Expected[Y][X], 8));
-            Halt(1);
-          end;
-      end;
+  if avx2support then
+    begin
+      for Y := Low(Inputs) to High(Inputs) do
+	for X := 0 to 31 do
+	  begin
+	    Output := MaskOut(Inputs[Y], X);
+	    if Output <> Expected[Y][X] then
+	      begin
+		WriteLn('FAIL: $', HexStr(Inputs[Y], 8), ' and ((1 shl ', X, ') - 1) returned $', HexStr(Output, 8), '; expected $', HexStr(Expected[Y][X], 8));
+		Halt(1);
+	      end;
+	  end;
 
-  WriteLn('ok');
-end.
+      WriteLn('ok');
+    end
+  else
+    writeln('CPU does not support AVX2 extension');
+end.

+ 21 - 13
tests/test/cg/tbzhi1g.pp

@@ -4,6 +4,9 @@
 
 program tbzhi1g;
 
+uses
+  cpu;
+
 procedure MaskOut(var InOut: LongInt; Index: Int64); noinline;
 begin
   InOut := InOut and ((1 shl Index) - 1);
@@ -24,17 +27,22 @@ var
   Y: Integer;
   Output: LongInt;
 begin
-  for Y := Low(Inputs) to High(Inputs) do
-    for X := 0 to 31 do
-      begin
-        Output := Inputs[Y];
-        MaskOut(Output, X);
-        if Output <> Expected[Y][X] then
-          begin
-            WriteLn('FAIL: $', HexStr(Inputs[Y], 8), ' and ((1 shl ', X, ') - 1) returned $', HexStr(Output, 8), '; expected $', HexStr(Expected[Y][X], 8));
-            Halt(1);
-          end;
-      end;
+  if avx2support then
+    begin
+      for Y := Low(Inputs) to High(Inputs) do
+	for X := 0 to 31 do
+	  begin
+	    Output := Inputs[Y];
+	    MaskOut(Output, X);
+	    if Output <> Expected[Y][X] then
+	      begin
+		WriteLn('FAIL: $', HexStr(Inputs[Y], 8), ' and ((1 shl ', X, ') - 1) returned $', HexStr(Output, 8), '; expected $', HexStr(Expected[Y][X], 8));
+		Halt(1);
+	      end;
+	  end;
 
-  WriteLn('ok');
-end.
+      WriteLn('ok');
+    end
+  else
+    writeln('CPU does not support AVX2 extension');
+end.

+ 20 - 12
tests/test/cg/tbzhi2.pp

@@ -4,6 +4,9 @@
 
 program tbzhi2;
 
+uses
+  cpu;
+
 function MaskOut(Input: Int64; Index: Byte): Int64; noinline;
 begin
   MaskOut := Input and ((Int64(1) shl Index) - 1);
@@ -24,16 +27,21 @@ var
   Y: Integer;
   Output: Int64;
 begin
-  for Y := Low(Inputs) to High(Inputs) do
-    for X := 0 to 63 do
-      begin
-	    Output := MaskOut(Inputs[Y], X);
-		if Output <> Expected[Y][X] then
-		  begin
-		    WriteLn('FAIL: $', HexStr(Inputs[Y], 16), ' and ((1 shl ', X, ') - 1) returned $', HexStr(Output, 16), '; expected $', HexStr(Expected[Y][X], 16));
-		    Halt(1);
-		  end;
-	  end;
+  if avx2support then
+    begin
+      for Y := Low(Inputs) to High(Inputs) do
+	for X := 0 to 63 do
+	  begin
+		Output := MaskOut(Inputs[Y], X);
+		    if Output <> Expected[Y][X] then
+		      begin
+			WriteLn('FAIL: $', HexStr(Inputs[Y], 16), ' and ((1 shl ', X, ') - 1) returned $', HexStr(Output, 16), '; expected $', HexStr(Expected[Y][X], 16));
+			Halt(1);
+		      end;
+	      end;
 
-  WriteLn('ok');
-end.
+      WriteLn('ok');
+    end
+  else
+    writeln('CPU does not support AVX2 extension');
+end.

+ 20 - 12
tests/test/cg/tbzhi2a.pp

@@ -4,6 +4,9 @@
 
 program tbzhi2a;
 
+uses
+  cpu;
+
 function MaskOut(Input, Index: Int64): Int64; noinline;
 begin
   MaskOut := Input and ((Int64(1) shl Index) - 1);
@@ -24,16 +27,21 @@ var
   Y: Integer;
   Output: Int64;
 begin
-  for Y := Low(Inputs) to High(Inputs) do
-    for X := 0 to 63 do
-      begin
-	    Output := MaskOut(Inputs[Y], X);
-		if Output <> Expected[Y][X] then
-		  begin
-		    WriteLn('FAIL: $', HexStr(Inputs[Y], 16), ' and ((1 shl ', X, ') - 1) returned $', HexStr(Output, 16), '; expected $', HexStr(Expected[Y][X], 16));
-		    Halt(1);
-		  end;
-	  end;
+  if avx2support then
+    begin
+      for Y := Low(Inputs) to High(Inputs) do
+	for X := 0 to 63 do
+	  begin
+		Output := MaskOut(Inputs[Y], X);
+		    if Output <> Expected[Y][X] then
+		      begin
+			WriteLn('FAIL: $', HexStr(Inputs[Y], 16), ' and ((1 shl ', X, ') - 1) returned $', HexStr(Output, 16), '; expected $', HexStr(Expected[Y][X], 16));
+			Halt(1);
+		      end;
+	      end;
 
-  WriteLn('ok');
-end.
+      WriteLn('ok');
+    end
+  else
+    writeln('CPU does not support AVX2 extension');
+end.

+ 20 - 12
tests/test/cg/tbzhi2b.pp

@@ -4,6 +4,9 @@
 
 program tbzhi2b;
 
+uses
+  cpu;
+
 function MaskOut(var InOut: Int64; Index: Byte): Int64; noinline;
 begin
   MaskOut := InOut and ((Int64(1) shl Index) - 1);
@@ -24,16 +27,21 @@ var
   Y: Integer;
   Output: Int64;
 begin
-  for Y := Low(Inputs) to High(Inputs) do
-    for X := 0 to 63 do
-      begin
-	    Output := MaskOut(Inputs[Y], X);
-		if Output <> Expected[Y][X] then
-		  begin
-		    WriteLn('FAIL: $', HexStr(Inputs[Y], 16), ' and ((1 shl ', X, ') - 1) returned $', HexStr(Output, 16), '; expected $', HexStr(Expected[Y][X], 16));
-		    Halt(1);
-		  end;
-	  end;
+  if avx2support then
+    begin
+      for Y := Low(Inputs) to High(Inputs) do
+	for X := 0 to 63 do
+	  begin
+		Output := MaskOut(Inputs[Y], X);
+		    if Output <> Expected[Y][X] then
+		      begin
+			WriteLn('FAIL: $', HexStr(Inputs[Y], 16), ' and ((1 shl ', X, ') - 1) returned $', HexStr(Output, 16), '; expected $', HexStr(Expected[Y][X], 16));
+			Halt(1);
+		      end;
+	      end;
 
-  WriteLn('ok');
-end.
+      WriteLn('ok');
+    end
+  else
+    writeln('CPU does not support AVX2 extension');
+end.

+ 21 - 13
tests/test/cg/tbzhi2c.pp

@@ -4,6 +4,9 @@
 
 program tbzhi2d;
 
+uses
+  cpu;
+
 procedure MaskOut(var InOut: Int64; Index: Byte); noinline;
 begin
   InOut := InOut and ((Int64(1) shl Index) - 1);
@@ -24,17 +27,22 @@ var
   Y: Integer;
   Output: Int64;
 begin
-  for Y := Low(Inputs) to High(Inputs) do
-    for X := 0 to 63 do
-      begin
-	    Output := Inputs[Y];
-		MaskOut(Output, X);
-		if Output <> Expected[Y][X] then
-		  begin
-		    WriteLn('FAIL: $', HexStr(Inputs[Y], 16), ' and ((1 shl ', X, ') - 1) returned $', HexStr(Output, 16), '; expected $', HexStr(Expected[Y][X], 16));
-		    Halt(1);
-		  end;
-	  end;
+  if avx2support then
+    begin
+      for Y := Low(Inputs) to High(Inputs) do
+	for X := 0 to 63 do
+	  begin
+		Output := Inputs[Y];
+		    MaskOut(Output, X);
+		    if Output <> Expected[Y][X] then
+		      begin
+			WriteLn('FAIL: $', HexStr(Inputs[Y], 16), ' and ((1 shl ', X, ') - 1) returned $', HexStr(Output, 16), '; expected $', HexStr(Expected[Y][X], 16));
+			Halt(1);
+		      end;
+	      end;
 
-  WriteLn('ok');
-end.
+      WriteLn('ok');
+    end
+  else
+    writeln('CPU does not support AVX2 extension');
+end.

+ 21 - 13
tests/test/cg/tbzhi2d.pp

@@ -4,6 +4,9 @@
 
 program tbzhi2d;
 
+uses
+  cpu;
+
 procedure MaskOut(var InOut: Int64; Index: Int64); noinline;
 begin
   InOut := InOut and ((Int64(1) shl Index) - 1);
@@ -24,17 +27,22 @@ var
   Y: Integer;
   Output: Int64;
 begin
-  for Y := Low(Inputs) to High(Inputs) do
-    for X := 0 to 63 do
-      begin
-	    Output := Inputs[Y];
-		MaskOut(Output, X);
-		if Output <> Expected[Y][X] then
-		  begin
-		    WriteLn('FAIL: $', HexStr(Inputs[Y], 16), ' and ((1 shl ', X, ') - 1) returned $', HexStr(Output, 16), '; expected $', HexStr(Expected[Y][X], 16));
-		    Halt(1);
-		  end;
-	  end;
+  if avx2support then
+    begin
+      for Y := Low(Inputs) to High(Inputs) do
+	for X := 0 to 63 do
+	  begin
+		Output := Inputs[Y];
+		    MaskOut(Output, X);
+		    if Output <> Expected[Y][X] then
+		      begin
+			WriteLn('FAIL: $', HexStr(Inputs[Y], 16), ' and ((1 shl ', X, ') - 1) returned $', HexStr(Output, 16), '; expected $', HexStr(Expected[Y][X], 16));
+			Halt(1);
+		      end;
+	      end;
 
-  WriteLn('ok');
-end.
+      WriteLn('ok');
+    end
+  else
+    writeln('CPU does not support AVX2 extension');
+end.