summaryrefslogtreecommitdiff
path: root/cipher/whirlpool.c
diff options
context:
space:
mode:
authorJussi Kivilinna <jussi.kivilinna@iki.fi>2015-05-02 13:26:46 +0300
committerJussi Kivilinna <jussi.kivilinna@iki.fi>2015-05-02 14:43:03 +0300
commit8422d5d699265b960bd1ca837044ee052fc5b614 (patch)
treee33e3c7aed5023a44a45182d1d29bdb8803a9831 /cipher/whirlpool.c
parent1089a13073c26a9a456e43ec38d937e6ee7f4077 (diff)
downloadlibgcrypt-8422d5d699265b960bd1ca837044ee052fc5b614.tar.gz
Enable AMD64 Whirlpool implementation for WIN64
* cipher/whirlpool-sse2-amd64.S: Enable when HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined. (ELF): New macro to mask lines with ELF specific commands. * cipher/whirlpool.c (USE_AMD64_ASM): Enable when HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined. [USE_AMD64_ASM] (ASM_FUNC_ABI, ASM_EXTRA_STACK): New. [USE_AMD64_ASM] (_gcry_whirlpool_transform_amd64): Add ASM_FUNC_ABI to prototype. [USE_AMD64_ASM] (whirlpool_transform): Add ASM_EXTRA_STACK to stack burn value. -- Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
Diffstat (limited to 'cipher/whirlpool.c')
-rw-r--r--cipher/whirlpool.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/cipher/whirlpool.c b/cipher/whirlpool.c
index 2732f63c..5f224a14 100644
--- a/cipher/whirlpool.c
+++ b/cipher/whirlpool.c
@@ -42,7 +42,8 @@
/* USE_AMD64_ASM indicates whether to use AMD64 assembly code. */
#undef USE_AMD64_ASM
-#if defined(__x86_64__) && defined(HAVE_COMPATIBLE_GCC_AMD64_PLATFORM_AS)
+#if defined(__x86_64__) && (defined(HAVE_COMPATIBLE_GCC_AMD64_PLATFORM_AS) || \
+ defined(HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS))
# define USE_AMD64_ASM 1
#endif
@@ -1192,9 +1193,17 @@ whirlpool_init (void *ctx, unsigned int flags)
#ifdef USE_AMD64_ASM
+#ifdef HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS
+# define ASM_FUNC_ABI __attribute__((sysv_abi))
+# define ASM_EXTRA_STACK (10 * 16)
+#else
+# define ASM_FUNC_ABI
+# define ASM_EXTRA_STACK 0
+#endif
+
extern unsigned int
_gcry_whirlpool_transform_amd64(u64 *state, const unsigned char *data,
- size_t nblks, const struct whirlpool_tables_s *tables);
+ size_t nblks, const struct whirlpool_tables_s *tables) ASM_FUNC_ABI;
static unsigned int
whirlpool_transform (void *ctx, const unsigned char *data, size_t nblks)
@@ -1202,7 +1211,7 @@ whirlpool_transform (void *ctx, const unsigned char *data, size_t nblks)
whirlpool_context_t *context = ctx;
return _gcry_whirlpool_transform_amd64(
- context->hash_state, data, nblks, &tab);
+ context->hash_state, data, nblks, &tab) + ASM_EXTRA_STACK;
}
#else /* USE_AMD64_ASM */