[openssl-users] PerlASM for x64

Gisle Vanem gisle.vanem at gmail.com
Fri Dec 21 14:45:23 UTC 2018


I'm trying to understand how the generation of ASM-files
are done on x64. (I have no problems on x86).

With the generated Nmake makefile from a
   perl Configure VC-WIN64A-ONECORE

when doing a:
   nmake crypto\aes\libcrypto-lib-aesni-x86_64.obj

seems to do this:
   set ASM=nasm
   "f:/util/StrawberryPerl/perl/bin/perl.exe" "crypto\aes\asm\aesni-x86_64.pl" auto crypto\aes\aesni-x86_64.asm
   nasm -Ox -f win64 -DNEAR -g -o crypto\aes\libcrypto-lib-aesni-x86_64.obj "crypto\aes\aesni-x86_64.asm"

Except for some warnings, nasm generates a valid libcrypto-lib-aesni-x86_64.obj.

BUT, doing the same on the cmd-line:
   set ASM=nasm
   f:\util\StrawberryPerl\perl\bin\perl crypto\aes\asm\aesni-x86_64.pl auto tmp-file.s

Generates a totally invalid 'tmp-file.s' file:

--- tmp-file.s                  2018-12-21 13:12:19
+++ crypto/aes/aesni-x86_64.asm 2018-12-21 13:11:47
@@ -1,4432 +1,5051 @@
-.text
+default        rel
+%define XMMWORD
+%define YMMWORD
+%define ZMMWORD
+section        .text code align=64

-.globl aesni_encrypt
-.type  aesni_encrypt, at function
-.align 16
+EXTERN OPENSSL_ia32cap_P
+global aesni_encrypt
+

What is going on here? Some other exported env-var playing
tricks?

I experimented some more. I figured the "auto" does not work.
But this works:
   perl crypto\aes\asm\aesni-x86_64.pl nasm > tmp-file.s
   diff tmp-file.s crypto\aes\aesni-x86_64.asm

No diffs.

Why does the the generation of .asm-files be so damn hard to
figure out? Some cmd-line help to show what "auto" does would
be nice.


-- 
--gv


More information about the openssl-users mailing list