]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
Correct assembler version checking in perlasm scripts
authorIgor Ustinov <igus68@gmail.com>
Tue, 14 Oct 2025 18:30:49 +0000 (20:30 +0200)
committerTomas Mraz <tomas@openssl.org>
Thu, 16 Oct 2025 13:47:50 +0000 (15:47 +0200)
Fixes #20520

Reviewed-by: Richard Levitte <levitte@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/28901)

crypto/aes/asm/aesni-xts-avx512.pl
crypto/bn/asm/rsaz-2k-avx512.pl
crypto/bn/asm/rsaz-2k-avxifma.pl
crypto/bn/asm/rsaz-3k-avx512.pl
crypto/bn/asm/rsaz-4k-avx512.pl
crypto/bn/asm/rsaz-x86_64.pl
crypto/bn/asm/x86_64-mont5.pl
crypto/chacha/asm/chacha-x86.pl
crypto/chacha/asm/chacha-x86_64.pl
crypto/modes/asm/aesni-gcm-x86_64.pl

index 2e20a6e6b855289b5da9b11f9870064645baa678..d89564112e31352cba0c8afb26b9a11390800383 100644 (file)
@@ -35,13 +35,15 @@ $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
 die "can't locate x86_64-xlate.pl";
 
 if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
-        =~ /GNU assembler version ([2-9]\.[0-9]+)/) {
-    $avx512vaes = ($1>=2.30);
+        =~ /GNU assembler version ([0-9]+)\.([0-9]+)/) {
+    my $ver = $1 + $2/100.0; # 3.1->3.01, 3.10->3.10
+    $avx512vaes = ($ver >= 2.30);
 }
 
 if (!$avx512vaes && $win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) &&
-       `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)(?:\.([0-9]+))?/) {
-    $avx512vaes = ($1==2.11 && $2>=8) + ($1>=2.12);
+       `nasm -v 2>&1` =~ /NASM version ([0-9]+)\.([0-9]+)(?:\.([0-9]+))?/) {
+    my $ver = $1 + $2/100.0 + $3/10000.0; # 3.1.0->3.01, 3.10.1->3.1001
+    $avx512vaes = ($ver >= 2.1108);
 }
 
 if (!$avx512vaes && `$ENV{CC} -v 2>&1`
index 131e315324c12c3b8add9ca3082c727dae92d80a..27f2e9b4b9385b01a7b89fb6ea4a9e87fba30eb4 100644 (file)
@@ -40,13 +40,15 @@ $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
 die "can't locate x86_64-xlate.pl";
 
 if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
-        =~ /GNU assembler version ([2-9]\.[0-9]+)/) {
-    $avx512ifma = ($1>=2.26);
+        =~ /GNU assembler version ([0-9]+)\.([0-9]+)/) {
+    my $ver = $1 + $2/100.0; # 3.1->3.01, 3.10->3.10
+    $avx512ifma = ($ver >= 2.26);
 }
 
 if (!$avx512ifma && $win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) &&
-       `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)(?:\.([0-9]+))?/) {
-    $avx512ifma = ($1==2.11 && $2>=8) + ($1>=2.12);
+       `nasm -v 2>&1` =~ /NASM version ([0-9]+)\.([0-9]+)(?:\.([0-9]+))?/) {
+    my $ver = $1 + $2/100.0 + $3/10000.0; # 3.1.0->3.01, 3.10.1->3.1001
+    $avx512ifma = ($ver >= 2.1108);
 }
 
 if (!$avx512ifma && `$ENV{CC} -v 2>&1`
index 0c962f248dd939232ccfc4cd38c69c85d53cbe2c..ea45d2051a70cabade4d5500e494391791aea504 100644 (file)
@@ -28,8 +28,9 @@ $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
 die "can't locate x86_64-xlate.pl";
 
 if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
-        =~ /GNU assembler version ([2-9]\.[0-9]+)/) {
-    $avxifma = ($1>=2.40);
+        =~ /GNU assembler version ([0-9]+)\.([0-9]+)/) {
+    my $ver = $1 + $2/100.0;   # 3.1->3.01, 3.10->3.10
+    $avxifma = ($ver >= 2.40);
 }
 
 if (!$avxifma && `$ENV{CC} -v 2>&1`
@@ -39,8 +40,9 @@ if (!$avxifma && `$ENV{CC} -v 2>&1`
 }
 
 if ($win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) &&
-       `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)(?:\.([0-9]+))?(rc[0-9]+)?/) {
-    $avxifma = ($1>2.16) + ($1==2.16 && ((!defined($2) && !defined($3)) || (defined($2))));
+       `nasm -v 2>&1` =~ /NASM version ([0-9]+)\.([0-9]+)(?:\.([0-9]+))?(rc[0-9]+)?/) {
+    my $ver = $1 + $2/100.0 + $3/10000.0; # 3.1.0->3.01, 3.10.1->3.1001
+    $avxifma = ($ver > 2.16) + ($ver == 2.16 && !defined($4));
 }
 
 open OUT,"| \"$^X\" \"$xlate\" $flavour \"$output\""
index 235268a68ad70c1b7a3b63842515d371e8fe4524..b2ed3e8ca7cfd475a17d80ad2f1919f77eb66f24 100644 (file)
@@ -39,13 +39,15 @@ $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
 die "can't locate x86_64-xlate.pl";
 
 if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
-        =~ /GNU assembler version ([2-9]\.[0-9]+)/) {
-    $avx512ifma = ($1>=2.26);
+        =~ /GNU assembler version ([0-9]+)\.([0-9]+)/) {
+    my $ver = $1 + $2/100.0; # 3.1->3.01, 3.10->3.10
+    $avx512ifma = ($ver >= 2.26);
 }
 
 if (!$avx512ifma && $win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) &&
-       `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)(?:\.([0-9]+))?/) {
-    $avx512ifma = ($1==2.11 && $2>=8) + ($1>=2.12);
+       `nasm -v 2>&1` =~ /NASM version ([0-9]+)\.([0-9]+)(?:\.([0-9]+))?/) {
+    my $ver = $1 + $2/100.0 + $3/10000.0; # 3.1.0->3.01, 3.10.1->3.1001
+    $avx512ifma = ($ver >= 2.1108);
 }
 
 if (!$avx512ifma && `$ENV{CC} -v 2>&1`
index e39374362b6eb79ef1bfa6eae729ca66e74eb0d7..b76ab5904c88798c69f0e923b64070a7ca8b0096 100644 (file)
@@ -39,13 +39,15 @@ $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
 die "can't locate x86_64-xlate.pl";
 
 if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
-        =~ /GNU assembler version ([2-9]\.[0-9]+)/) {
-    $avx512ifma = ($1>=2.26);
+        =~ /GNU assembler version ([0-9]+)\.([0-9]+)/) {
+    my $ver = $1 + $2/100.0; # 3.1->3.01, 3.10->3.10
+    $avx512ifma = ($ver >= 2.26);
 }
 
 if (!$avx512ifma && $win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) &&
-       `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)(?:\.([0-9]+))?/) {
-    $avx512ifma = ($1==2.11 && $2>=8) + ($1>=2.12);
+       `nasm -v 2>&1` =~ /NASM version ([0-9]+)\.([0-9]+)(?:\.([0-9]+))?/) {
+    my $ver = $1 + $2/100.0 + $3/10000.0; # 3.1.0->3.01, 3.10.1->3.1001
+    $avx512ifma = ($ver >= 2.1108);
 }
 
 if (!$avx512ifma && `$ENV{CC} -v 2>&1`
index f255925a81378f5d264dccdf772b57b747224374..ebb4762b635a94185f2ddc824bb7de0eb8526b49 100755 (executable)
@@ -69,13 +69,15 @@ open OUT,"| \"$^X\" \"$xlate\" $flavour \"$output\""
 *STDOUT=*OUT;
 
 if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
-               =~ /GNU assembler version ([2-9]\.[0-9]+)/) {
-       $addx = ($1>=2.23);
+               =~ /GNU assembler version ([0-9]+)\.([0-9]+)/) {
+       my $ver = $1 + $2/100.0;        # 3.1->3.01, 3.10->3.10
+       $addx = ($ver >= 2.23);
 }
 
 if (!$addx && $win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) &&
-           `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)/) {
-       $addx = ($1>=2.10);
+           `nasm -v 2>&1` =~ /NASM version ([0-9]+)\.([0-9]+)/) {
+       my $ver = $1 + $2/100.0;        # 3.1->3.01, 3.10->3.10
+       $addx = ($ver >= 2.10);
 }
 
 if (!$addx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) &&
index be2c7b4da45ce05a044c6400c6bafda64df67892..6b40f789b397368fa031b388d2b1451b00d2db4b 100755 (executable)
@@ -48,13 +48,15 @@ open OUT,"| \"$^X\" \"$xlate\" $flavour \"$output\""
 *STDOUT=*OUT;
 
 if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
-               =~ /GNU assembler version ([2-9]\.[0-9]+)/) {
-       $addx = ($1>=2.23);
+               =~ /GNU assembler version ([0-9]+)\.([0-9]+)/) {
+       my $ver = $1 + $2/100.0;        # 3.1->3.01, 3.10->3.10
+       $addx = ($ver >= 2.23);
 }
 
 if (!$addx && $win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) &&
-           `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)/) {
-       $addx = ($1>=2.10);
+           `nasm -v 2>&1` =~ /NASM version ([0-9]+)\.([0-9]+)/) {
+       my $ver = $1 + $2/100.0;        # 3.1->3.01, 3.10->3.10
+       $addx = ($ver >= 2.10);
 }
 
 if (!$addx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) &&
index b53ceac1dc57176fdeed94638dbe73545a9e3baf..9cda820ff07c466c7971754cdc992178eeff6da6 100755 (executable)
@@ -49,12 +49,12 @@ for (@ARGV) { $xmm=1 if (/-DOPENSSL_IA32_SSE2/); }
 
 $ymm=1 if ($xmm &&
                `$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
-                       =~ /GNU assembler version ([2-9]\.[0-9]+)/ &&
-               ($gasver=$1)>=2.19);    # first version supporting AVX
+                       =~ /GNU assembler version ([0-9]+)\.([0-9]+)/ &&
+               ($gasver = $1 + $2/100.0) >= 2.19);     # first version supporting AVX
 
 $ymm=1 if ($xmm && !$ymm && $ARGV[0] eq "win32n" &&
-               `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)/ &&
-               $1>=2.03);      # first version supporting AVX
+               `nasm -v 2>&1` =~ /NASM version ([0-9]+)\.([0-9]+)/ &&
+               $1 + $2/100.0 >= 2.03); # first version supporting AVX
 
 $ymm=1 if ($xmm && !$ymm && $ARGV[0] eq "win32" &&
                `ml 2>&1` =~ /Version ([0-9]+)\./ &&
index bd287fa66cb690aca4596b09e3c9ea7f2c8f3b47..9e5e1ba1e178bba19f2c1778e5357ffa39865316 100755 (executable)
@@ -71,14 +71,15 @@ $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
 die "can't locate x86_64-xlate.pl";
 
 if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
-               =~ /GNU assembler version ([2-9]\.[0-9]+)/) {
-       $avx = ($1>=2.19) + ($1>=2.22) + ($1>=2.25);
+               =~ /GNU assembler version ([0-9]+)\.([0-9]+)/) {
+       my $ver = $1 + $2/100.0; # 3.1->3.01, 3.10->3.10
+       $avx = ($ver >= 2.19) + ($ver >= 2.22) + ($ver >= 2.25);
 }
 
 if (!$avx && $win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) &&
-          `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)(?:\.([0-9]+))?/) {
-       $avx = ($1>=2.09) + ($1>=2.10) + ($1>=2.12);
-       $avx += 1 if ($1==2.11 && $2>=8);
+          `nasm -v 2>&1` =~ /NASM version ([0-9]+)\.([0-9]+)(?:\.([0-9]+))?/) {
+       my $ver = $1 + $2/100.0 + $3/10000.0; # 3.1.0->3.01, 3.10.1->3.1001
+       $avx = ($ver >= 2.09) + ($ver >= 2.10) + ($ver >= 2.1108);
 }
 
 if (!$avx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) &&
index 8cc98e41f845f0b416afb30ec34d6e6e7fbaf3a3..a2b3d853640112c9b3bb0d4f4d19958829254af0 100644 (file)
@@ -53,13 +53,15 @@ $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
 die "can't locate x86_64-xlate.pl";
 
 if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
-               =~ /GNU assembler version ([2-9]\.[0-9]+)/) {
-       $avx = ($1>=2.20) + ($1>=2.22);
+               =~ /GNU assembler version ([0-9]+)\.([0-9]+)/) {
+       my $ver = $1 + $2/100.0; # 3.1->3.01, 3.10->3.10
+       $avx = ($ver >= 2.20) + ($ver >= 2.22);
 }
 
 if (!$avx && $win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) &&
-           `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)/) {
-       $avx = ($1>=2.09) + ($1>=2.10);
+           `nasm -v 2>&1` =~ /NASM version ([0-9]+)\.([0-9]+)/) {
+       my $ver = $1 + $2/100.0; # 3.1->3.01, 3.10->3.10
+       $avx = ($ver >= 2.09) + ($ver >= 2.10);
 }
 
 if (!$avx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) &&