Check whether the assembler supports XOP
This commit is contained in:
parent
b10dc6b37d
commit
18bd6c0740
2 changed files with 16 additions and 4 deletions
12
configure.ac
12
configure.ac
|
@ -47,11 +47,19 @@ if test x$have_x86 = xtrue
|
||||||
then
|
then
|
||||||
AC_MSG_CHECKING(whether we can compile AVX code)
|
AC_MSG_CHECKING(whether we can compile AVX code)
|
||||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[asm ("vmovdqa %ymm0, %ymm1");])],
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[asm ("vmovdqa %ymm0, %ymm1");])],
|
||||||
AC_DEFINE(USE_AVX, 1, [Define to 1 if AVX assembly is available.])
|
AC_DEFINE(USE_AVX, 1, [Define to 1 if AVX assembly is available.])
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_MSG_CHECKING(whether we can compile XOP code)
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[asm ("vprotd \$7, %xmm0, %xmm1");])],
|
||||||
|
AC_DEFINE(USE_XOP, 1, [Define to 1 if XOP assembly is available.])
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
,
|
,
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
AC_MSG_WARN([The assembler does not support the AVX instruction set.])
|
AC_MSG_WARN([The assembler does not support the XOP instruction set.])
|
||||||
|
)
|
||||||
|
,
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
AC_MSG_WARN([The assembler does not support the AVX instruction set.])
|
||||||
)
|
)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
|
@ -1855,7 +1855,7 @@ scrypt_core_2way_loop2:
|
||||||
salsa8_core_3way_avx_doubleround
|
salsa8_core_3way_avx_doubleround
|
||||||
salsa8_core_3way_avx_doubleround
|
salsa8_core_3way_avx_doubleround
|
||||||
.endm
|
.endm
|
||||||
#endif
|
#endif /* USE_AVX */
|
||||||
|
|
||||||
.text
|
.text
|
||||||
.p2align 6
|
.p2align 6
|
||||||
|
@ -1920,11 +1920,13 @@ _scrypt_core_3way:
|
||||||
andl $0x00000006, %eax
|
andl $0x00000006, %eax
|
||||||
cmpl $0x00000006, %eax
|
cmpl $0x00000006, %eax
|
||||||
jne scrypt_core_3way_xmm
|
jne scrypt_core_3way_xmm
|
||||||
|
#if defined(USE_XOP)
|
||||||
# Check for XOP support
|
# Check for XOP support
|
||||||
movl $0x80000001, %eax
|
movl $0x80000001, %eax
|
||||||
cpuid
|
cpuid
|
||||||
andl $0x00000800, %ecx
|
andl $0x00000800, %ecx
|
||||||
jnz scrypt_core_3way_xop
|
jnz scrypt_core_3way_xop
|
||||||
|
#endif
|
||||||
|
|
||||||
scrypt_core_3way_avx:
|
scrypt_core_3way_avx:
|
||||||
scrypt_shuffle %rdi, 0, %rsp, 0
|
scrypt_shuffle %rdi, 0, %rsp, 0
|
||||||
|
@ -2238,6 +2240,7 @@ scrypt_core_3way_avx_loop2:
|
||||||
scrypt_core_3way_cleanup
|
scrypt_core_3way_cleanup
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
#if defined(USE_XOP)
|
||||||
.macro salsa8_core_3way_xop_doubleround
|
.macro salsa8_core_3way_xop_doubleround
|
||||||
vpaddd %xmm0, %xmm1, %xmm4
|
vpaddd %xmm0, %xmm1, %xmm4
|
||||||
vpaddd %xmm8, %xmm9, %xmm6
|
vpaddd %xmm8, %xmm9, %xmm6
|
||||||
|
@ -2658,7 +2661,8 @@ scrypt_core_3way_xop_loop2:
|
||||||
|
|
||||||
scrypt_core_3way_cleanup
|
scrypt_core_3way_cleanup
|
||||||
ret
|
ret
|
||||||
#endif
|
#endif /* USE_XOP */
|
||||||
|
#endif /* USE_AVX */
|
||||||
|
|
||||||
.macro salsa8_core_3way_xmm_doubleround
|
.macro salsa8_core_3way_xmm_doubleround
|
||||||
movdqa %xmm1, %xmm4
|
movdqa %xmm1, %xmm4
|
||||||
|
|
Loading…
Reference in a new issue