]> 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:49:48 +0000 (15:49 +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)

(cherry picked from commit 9820582da330151a1238a33e5c6e23ed31324164)

crypto/bn/asm/rsaz-2k-avx512.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 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 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 36bf229477aa10ec199ce91e2a441cfbe12db607..64acf8f0d84d5cca76629db44f2a94c1cc4d326f 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 07dd40d9228c8bb38ce496f1d5d6b85618ea6ec7..e06d13d74aeae10301cdf42a84c1384fbb61eba4 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 d0e83d88cec3b78a26dcefe90c404761ac1b9312..a1ea4ea461b06cf1d4a6aa42cf4a27b21cc0fb44 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 5506e33fa2d096d68fd156e0004d50f23516d39d..d46bc03b3eec2d536e5eeb0d5655349cfffa7236 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 872e13f8f1a1ddafdd2ef2f07584a4b75191f58c..c63570bae42f669b19ca975bdd0c945ef462ee32 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/) &&