]> 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:50:34 +0000 (15:50 +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 7ee02778df5553c725517dac226ea04d08756865..4dab65a301d00312e739edbe275f2807b6070b70 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 8ed5496479b2243295bc825e0f28dce06c186978..3a686049b29a73e5f973cc9de05e5fe1e17fe74c 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 8c59b77f7787ccf64eba8d102dc9c1d2c111e695..5a0dc84ba4b0b8e60eb1f94824caca9e7afe50b3 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 5c7d526fa37a8d9b983359dbc505413c53f5d07d..f673d4ba420b24be57ffbaa45090e0d0269cf646 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 1faea0bcf89723774a0e3c3719e1430c9497a9f5..eef5a99c4070bedf73276d121b98b05a6050fb76 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 cdb900c037fd4717f5b779195d956ebbacdf2b6d..c8dd88096611a47e737a3c0d521d6349fb4fc7d6 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 eaf4d9c755fbb2566bde0e3d636ff86149a03027..c54992a40ca952e25692c065cff53f15255e7fdd 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/) &&