summaryrefslogtreecommitdiff
path: root/cipher/blowfish-amd64.S
Commit message (Collapse)AuthorAgeFilesLines
* amd64-asm: align functions to 16 bytes for cipher algosJussi Kivilinna2023-01-191-9/+9
| | | | | | | | | | | | | | | | | | | | | | | | * cipher/blowfish-amd64.S: Align functions to 16 bytes. * cipher/camellia-aesni-avx-amd64.S: Likewise. * cipher/camellia-aesni-avx2-amd64.h: Likewise. * cipher/camellia-gfni-avx512-amd64.S: Likewise. * cipher/cast5-amd64.S: Likewise. * cipher/chacha20-amd64-avx2.S: Likewise. * cipher/chacha20-amd64-ssse3.S: Likewise. * cipher/des-amd64.s: Likewise. * cipher/rijndael-amd64.S: Likewise. * cipher/rijndael-ssse3-amd64-asm.S: Likewise. * cipher/salsa20-amd64.S: Likewise. * cipher/serpent-avx2-amd64.S: Likewise. * cipher/serpent-sse2-amd64.S: Likewise. * cipher/sm4-aesni-avx-amd64.S: Likewise. * cipher/sm4-aesni-avx2-amd64.S: Likewise. * cipher/sm4-gfni-avx2-amd64.S: Likewise. * cipher/twofish-amd64.S: Likewise. * cipher/twofish-avx2-amd64.S: Likewise. -- Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* Add straight-line speculation hardening for amd64 and i386 assemblyJussi Kivilinna2022-01-111-9/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * cipher/asm-common-amd64.h (ret_spec_stop): New. * cipher/arcfour-amd64.S: Use 'ret_spec_stop' for 'ret' instruction. * cipher/blake2b-amd64-avx2.S: Likewise. * cipher/blake2s-amd64-avx.S: Likewise. * cipher/blowfish-amd64.S: Likewise. * cipher/camellia-aesni-avx-amd64.S: Likewise. * cipher/camellia-aesni-avx2-amd64.h: Likewise. * cipher/cast5-amd64.S: Likewise. * cipher/chacha20-amd64-avx2.S: Likewise. * cipher/chacha20-amd64-ssse3.S: Likewise. * cipher/des-amd64.S: Likewise. * cipher/rijndael-aarch64.S: Likewise. * cipher/rijndael-amd64.S: Likewise. * cipher/rijndael-ssse3-amd64-asm.S: Likewise. * cipher/rijndael-vaes-avx2-amd64.S: Likewise. * cipher/salsa20-amd64.S: Likewise. * cipher/serpent-avx2-amd64.S: Likewise. * cipher/serpent-sse2-amd64.S: Likewise. * cipher/sha1-avx-amd64.S: Likewise. * cipher/sha1-avx-bmi2-amd64.S: Likewise. * cipher/sha1-avx2-bmi2-amd64.S: Likewise. * cipher/sha1-ssse3-amd64.S: Likewise. * cipher/sha256-avx-amd64.S: Likewise. * cipher/sha256-avx2-bmi2-amd64.S: Likewise. * cipher/sha256-ssse3-amd64.S: Likewise. * cipher/sha512-avx-amd64.S: Likewise. * cipher/sha512-avx2-bmi2-amd64.S: Likewise. * cipher/sha512-ssse3-amd64.S: Likewise. * cipher/sm3-avx-bmi2-amd64.S: Likewise. * cipher/sm4-aesni-avx-amd64.S: Likewise. * cipher/sm4-aesni-avx2-amd64.S: Likewise. * cipher/twofish-amd64.S: Likewise. * cipher/twofish-avx2-amd64.S: Likewise. * cipher/whirlpool-sse2-amd64.S: Likewise. * mpi/amd64/func_abi.h (CFI_*): Remove, include from "asm-common-amd64.h" instead. (FUNC_EXIT): Use 'ret_spec_stop' for 'ret' instruction. * mpi/asm-common-amd64.h: New. * mpi/i386/mpih-add1.S: Use 'ret_spec_stop' for 'ret' instruction. * mpi/i386/mpih-lshift.S: Likewise. * mpi/i386/mpih-mul1.S: Likewise. * mpi/i386/mpih-mul2.S: Likewise. * mpi/i386/mpih-mul3.S: Likewise. * mpi/i386/mpih-rshift.S: Likewise. * mpi/i386/mpih-sub1.S: Likewise. * mpi/i386/syntax.h (ret_spec_stop): New. -- Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* Add CFI unwind assembly directives for AMD64 assemblyJussi Kivilinna2019-04-161-0/+46
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * configure.ac (gcry_cv_gcc_asm_cfi_directives): New. * cipher/asm-common-amd64.h (ADD_RIP, CFI_STARTPROC, CFI_ENDPROC) (CFI_REMEMBER_STATE, CFI_RESTORE_STATE, CFI_ADJUST_CFA_OFFSET) (CFI_REL_OFFSET, CFI_DEF_CFA_REGISTER, CFI_REGISTER, CFI_RESTORE) (CFI_PUSH, CFI_POP, CFI_POP_TMP_REG, CFI_LEAVE, DW_REGNO) (DW_SLEB128_7BIT, DW_SLEB128_28BIT, CFI_CFA_ON_STACK) (CFI_REG_ON_STACK): New. (ENTER_SYSV_FUNCPARAMS_0_4, EXIT_SYSV_FUNC): Add CFI directives. * cipher/arcfour-amd64.S: Add CFI directives. * cipher/blake2b-amd64-avx2.S: Add CFI directives. * cipher/blake2s-amd64-avx.S: Add CFI directives. * cipher/blowfish-amd64.S: Add CFI directives. * cipher/camellia-aesni-avx-amd64.S: Add CFI directives; Use 'asm-common-amd64.h'. * cipher/camellia-aesni-avx2-amd64.S: Add CFI directives; Use 'asm-common-amd64.h'. * cipher/cast5-amd64.S: Add CFI directives. * cipher/chacha20-amd64-avx2.S: Add CFI directives. * cipher/chacha20-amd64-ssse3.S: Add CFI directives. * cipher/des-amd64.S: Add CFI directives. * cipher/rijndael-amd64.S: Add CFI directives. * cipher/rijndael-ssse3-amd64-asm.S: Add CFI directives. * cipher/salsa20-amd64.S: Add CFI directives; Use 'asm-common-amd64.h'. * cipher/serpent-avx2-amd64.S: Add CFI directives; Use 'asm-common-amd64.h'. * cipher/serpent-sse2-amd64.S: Add CFI directives; Use 'asm-common-amd64.h'. * cipher/sha1-avx-amd64.S: Add CFI directives; Use 'asm-common-amd64.h'. * cipher/sha1-avx-bmi2-amd64.S: Add CFI directives; Use 'asm-common-amd64.h'. * cipher/sha1-avx2-bmi2-amd64.S: Add CFI directives; Use 'asm-common-amd64.h'. * cipher/sha1-ssse3-amd64.S: Add CFI directives; Use 'asm-common-amd64.h'. * cipher/sha256-avx-amd64.S: Add CFI directives; Use 'asm-common-amd64.h'. * cipher/sha256-avx2-bmi2-amd64.S: Add CFI directives; Use 'asm-common-amd64.h'. * cipher/sha256-ssse3-amd64.S: Add CFI directives; Use 'asm-common-amd64.h'. * cipher/sha512-avx-amd64.S: Add CFI directives; Use 'asm-common-amd64.h'. * cipher/sha512-avx2-bmi2-amd64.S: Add CFI directives; Use 'asm-common-amd64.h'. * cipher/sha512-ssse3-amd64.S: Add CFI directives; Use 'asm-common-amd64.h'. * cipher/twofish-amd64.S: Add CFI directives. * cipher/twofish-avx2-amd64.S: Add CFI directives; Use 'asm-common-amd64.h'. * cipher/whirlpool-sse2-amd64.S: Add CFI directives; Use 'asm-common-amd64.h'. * mpi/amd64/func_abi.h: Include 'config.h'. (CFI_STARTPROC, CFI_ENDPROC, CFI_ADJUST_CFA_OFFSET, CFI_REL_OFFSET) (CFI_RESTORE, CFI_PUSH, CFI_POP): New. (FUNC_ENTRY, FUNC_EXIT): Add CFI directives. -- This commit adds CFI directives that add DWARF unwinding information for debugger to backtrace when executing code from AMD64 assembly files. Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* Move AMD64 MS to SysV calling convention conversion to assembly sideJussi Kivilinna2018-01-091-5/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | * cipher/Makefile.am: Add 'asm-common-amd64.h'. * cipher/asm-common-amd64.h: New. * cipher/blowfish-amd64.S: Add ENTER_SYSV_FUNC_* and EXIT_SYSV_FUNC for each global function from 'asm-common-amd64.h'. * cipher/cast5-amd64.S: Ditto. * cipher/des-amd64.S: Ditto. * cipher/rijndael-amd64.S: Ditto. * cipher/twofish-amd64.S: Ditto. * cipher/arcfour-amd64.S: Ditto. * cipher/blowfish.c [HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS] (call_sysv_fn): Remove. * cipher/cast5.c [HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS] (call_sysv_fn): Remove. * cipher/twofish.c [HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS] (call_sysv_fn, call_sysv_fn5, call_sysv_fn6): Remove. * cipher/rijndael.c (do_encrypt, do_decrypt) [HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS]: Remove assembly block for calling SysV ABI function. * cipher/arcfour.c [USE_AMD64_ASM] (encrypt_stream): Ditto. -- Old approach was to convert MS ABI to SysV ABI calling convention for AMD64 assembly functions at caller side. This patch moves calling convention conversion to assembly/callee side. Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* Enable AMD64 Blowfish implementation on WIN64Jussi Kivilinna2015-05-141-19/+27
| | | | | | | | | | | | | | | | | | * cipher/blowfish-amd64.S: Enable when HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined. (ELF): New macro to mask lines with ELF specific commands. * cipher/blowfish.c (USE_AMD64_ASM): Enable when HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined. [HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS] (call_sysv_fn): New. (do_encrypt, do_encrypt_block, do_decrypt_block) [HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS]: Call assembly function through 'call_sysv_fn'. (blowfish_amd64_ctr_enc, blowfish_amd64_cbc_dec) (blowfish_amd64_cfb_dec): New wrapper functions for bulk assembly functions. .. Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* Change utf-8 copyright characters to '(C)'Jussi Kivilinna2013-12-181-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | cipher/blowfish-amd64.S: Change utf-8 encoded copyright character to '(C)'. cipher/blowfish-arm.S: Ditto. cipher/bufhelp.h: Ditto. cipher/camellia-aesni-avx-amd64.S: Ditto. cipher/camellia-aesni-avx2-amd64.S: Ditto. cipher/camellia-arm.S: Ditto. cipher/cast5-amd64.S: Ditto. cipher/cast5-arm.S: Ditto. cipher/cipher-ccm.c: Ditto. cipher/cipher-cmac.c: Ditto. cipher/cipher-gcm.c: Ditto. cipher/cipher-selftest.c: Ditto. cipher/cipher-selftest.h: Ditto. cipher/mac-cmac.c: Ditto. cipher/mac-gmac.c: Ditto. cipher/mac-hmac.c: Ditto. cipher/mac-internal.h: Ditto. cipher/mac.c: Ditto. cipher/rijndael-amd64.S: Ditto. cipher/rijndael-arm.S: Ditto. cipher/salsa20-amd64.S: Ditto. cipher/salsa20-armv7-neon.S: Ditto. cipher/serpent-armv7-neon.S: Ditto. cipher/serpent-avx2-amd64.S: Ditto. cipher/serpent-sse2-amd64.S: Ditto. -- Avoid use of '©' for easier parsing of source for copyright information. Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* Check if assembler is compatible with AMD64 assembly implementationscipher-amd64-optimizationsJussi Kivilinna2013-06-201-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | * cipher/blowfish-amd64.S: Enable only if HAVE_COMPATIBLE_GCC_AMD64_PLATFORM_AS is defined. * cipher/camellia-aesni-avx-amd64.S: Ditto. * cipher/camellia-aesni-avx2-amd64.S: Ditto. * cipher/cast5-amd64.S: Ditto. * cipher/rinjdael-amd64.S: Ditto. * cipher/serpent-avx2-amd64.S: Ditto. * cipher/serpent-sse2-amd64.S: Ditto. * cipher/twofish-amd64.S: Ditto. * cipher/blowfish.c: Use AMD64 assembly implementation only if HAVE_COMPATIBLE_GCC_AMD64_PLATFORM_AS is defined * cipher/camellia-glue.c: Ditto. * cipher/cast5.c: Ditto. * cipher/rijndael.c: Ditto. * cipher/serpent.c: Ditto. * cipher/twofish.c: Ditto. * configure.ac: Check gcc/as compatibility with AMD64 assembly implementations. -- Later these checks can be split and assembly implementations adapted to handle different platforms, but for now disable AMD64 assembly implementations if assembler does not look to be able to handle them. Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* blowfish: add amd64 assembly implementationJussi Kivilinna2013-05-291-0/+533
* cipher/Makefile.am: Add 'blowfish-amd64.S'. * cipher/blowfish-amd64.S: New file. * cipher/blowfish.c (USE_AMD64_ASM): New macro. [USE_AMD64_ASM] (_gcry_blowfish_amd64_do_encrypt) (_gcry_blowfish_amd64_encrypt_block) (_gcry_blowfish_amd64_decrypt_block, _gcry_blowfish_amd64_ctr_enc) (_gcry_blowfish_amd64_cbc_dec, _gcry_blowfish_amd64_cfb_dec): New prototypes. [USE_AMD64_ASM] (do_encrypt, do_encrypt_block, do_decrypt_block) (encrypt_block, decrypt_block): New functions. (_gcry_blowfish_ctr_enc, _gcry_blowfish_cbc_dec) (_gcry_blowfish_cfb_dec, selftest_ctr, selftest_cbc, selftest_cfb): New functions. (selftest): Call new bulk selftests. * cipher/cipher.c (gcry_cipher_open) [USE_BLOWFISH]: Register Blowfish bulk functions for ctr-enc, cbc-dec and cfb-dec. * configure.ac (blowfish) [x86_64]: Add 'blowfish-amd64.lo'. * src/cipher.h (_gcry_blowfish_ctr_enc, _gcry_blowfish_cbc_dec) (gcry_blowfish_cfb_dec): New prototypes. -- Add non-parallel functions for small speed-up and 4-way parallel functions for modes of operation that support parallel processing. Speed old vs. new on AMD Phenom II X6 1055T: ECB/Stream CBC CFB OFB CTR --------------- --------------- --------------- --------------- --------------- BLOWFISH 1.21x 1.12x 1.17x 3.52x 1.18x 3.34x 1.16x 1.15x 3.38x 3.47x Speed old vs. new on Intel Core i5-2450M (Sandy-Bridge): ECB/Stream CBC CFB OFB CTR --------------- --------------- --------------- --------------- --------------- BLOWFISH 1.16x 1.10x 1.17x 2.98x 1.18x 2.88x 1.16x 1.15x 3.00x 3.02x Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>