|
@@ -0,0 +1,39 @@
|
|
|
+{ %CPU=x86_64 }
|
|
|
+{ %opt=-Cpcoreavx2 -O4 }
|
|
|
+uses
|
|
|
+ cpu;
|
|
|
+
|
|
|
+procedure Verify(const op: string; got, expected: SizeUint);
|
|
|
+begin
|
|
|
+ write('%10101010 ' + op + ' %111 = %' + BinStr(got, 1 + BsrQWord(got or 1)));
|
|
|
+ if got = expected then
|
|
|
+ writeln(' - ok')
|
|
|
+ else
|
|
|
+ begin
|
|
|
+ writeln(' - FAIL, must be %' + BinStr(expected, 1 + BsrQWord(expected or 1)));
|
|
|
+ halt(1);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+var
|
|
|
+ b, nbits: SizeUint;
|
|
|
+
|
|
|
+
|
|
|
+begin
|
|
|
+ if BMI2Support then
|
|
|
+ begin
|
|
|
+ nbits := 3 + random(0);
|
|
|
+
|
|
|
+ b := %10101010 + random(0);
|
|
|
+ b := b or (SizeUint(1) shl nbits - 1);
|
|
|
+ Verify('or', b, %10101111);
|
|
|
+
|
|
|
+ b := %10101010 + random(0);
|
|
|
+ b := b xor (SizeUint(1) shl nbits - 1);
|
|
|
+ Verify('xor', b, %10101101);
|
|
|
+
|
|
|
+ b := %10101010 + random(0);
|
|
|
+ b := b and (SizeUint(1) shl nbits - 1);
|
|
|
+ Verify('and', b, %10);
|
|
|
+ end;
|
|
|
+end.
|