Implementation notes: x86, thoth, crypto_hash/groestl512

Computer: thoth
Architecture: x86
CPU ID: AuthenticAMD-00000622-0183f9ff
SUPERCOP version: 20160806
Operation: crypto_hash
Primitive: groestl512
TimeImplementationCompilerBenchmark dateSUPERCOP version
258166sphlib-adaptedgcc -march=native -mtune=native -O3 -fomit-frame-pointer -fwrapv2016072620160724
259744sphlibgcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv2016072620160724
267681sphlibgcc -march=native -mtune=native -O3 -fomit-frame-pointer -fwrapv2016072620160724
271212sphlib-adaptedgcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv2016072620160724
275962sphlib-adaptedgcc -march=native -mtune=native -Os -fomit-frame-pointer -fwrapv2016072620160724
277066mmxgcc -march=native -mtune=native -O3 -fomit-frame-pointer -fwrapv2016072620160724
280422sphlibgcc -march=native -mtune=native -Os -fomit-frame-pointer -fwrapv2016072620160724
284525mmxgcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv2016072620160724
284982mmxgcc -march=native -mtune=native -O -fomit-frame-pointer -fwrapv2016072620160724
286176sphlibclang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments2016072620160724
290646mmxgcc -march=native -mtune=native -Os -fomit-frame-pointer -fwrapv2016072620160724
309750opt64gcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv2016072620160724
310182sphlib-adaptedgcc -march=native -mtune=native -O -fomit-frame-pointer -fwrapv2016072620160724
312282opt64gcc -march=native -mtune=native -O3 -fomit-frame-pointer -fwrapv2016072620160724
312791sphlibgcc -march=native -mtune=native -O -fomit-frame-pointer -fwrapv2016072620160724
319077sphlib-adaptedclang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments2016072620160724
322677opt64gcc -march=native -mtune=native -Os -fomit-frame-pointer -fwrapv2016072620160724
364596opt64gcc -march=native -mtune=native -O -fomit-frame-pointer -fwrapv2016072620160724
381975opt32clang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments2016072620160724
390845opt32gcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv2016072620160724
391256opt32gcc -march=native -mtune=native -O3 -fomit-frame-pointer -fwrapv2016072620160724
393602opt32gcc -march=native -mtune=native -O -fomit-frame-pointer -fwrapv2016072620160724
396024opt32gcc -march=native -mtune=native -Os -fomit-frame-pointer -fwrapv2016072620160724
415905sphlib-smallgcc -march=native -mtune=native -O3 -fomit-frame-pointer -fwrapv2016072620160724
417089sphlib-smallgcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv2016072620160724
456129sphlib-smallgcc -march=native -mtune=native -Os -fomit-frame-pointer -fwrapv2016072620160724
475027sphlib-smallgcc -march=native -mtune=native -O -fomit-frame-pointer -fwrapv2016072620160724
523349sphlib-smallclang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments2016072620160724
66805632bit-bytesliced-c-smallgcc -march=native -mtune=native -O3 -fomit-frame-pointer -fwrapv2016072620160724
84513832bit-bytesliced-c-smallclang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments2016072620160724
95835732bit-bytesliced-c-smallgcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv2016072620160724
123510032bit-bytesliced-c-smallgcc -march=native -mtune=native -O -fomit-frame-pointer -fwrapv2016072620160724
126148432bit-bytesliced-c-smallgcc -march=native -mtune=native -Os -fomit-frame-pointer -fwrapv2016072620160724
1955899mmxclang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments2016072620160724

Compiler output

Implementation: crypto_hash/groestl512/aesni-intr
Compiler: clang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments
hash.c: In file included from hash.c:28:
hash.c: ./groestl-intr-aes.h:784:3: error: always_inline function '_mm_shuffle_epi8' requires target feature 'sse3', but would be inlined into function 'INIT' that is compiled without support for 'sse3'
hash.c: Matrix_Transpose(xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7);
hash.c: ^
hash.c: ./groestl-intr-aes.h:629:8: note: expanded from macro 'Matrix_Transpose'
hash.c: i6 = _mm_shuffle_epi8(i6, t0);\
hash.c: ^
hash.c: ./groestl-intr-aes.h:784:3: error: always_inline function '_mm_shuffle_epi8' requires target feature 'sse3', but would be inlined into function 'INIT' that is compiled without support for 'sse3'
hash.c: ./groestl-intr-aes.h:630:8: note: expanded from macro 'Matrix_Transpose'
hash.c: i0 = _mm_shuffle_epi8(i0, t0);\
hash.c: ^
hash.c: ./groestl-intr-aes.h:784:3: error: always_inline function '_mm_shuffle_epi8' requires target feature 'sse3', but would be inlined into function 'INIT' that is compiled without support for 'sse3'
hash.c: ./groestl-intr-aes.h:631:8: note: expanded from macro 'Matrix_Transpose'
hash.c: i1 = _mm_shuffle_epi8(i1, t0);\
hash.c: ^
hash.c: ./groestl-intr-aes.h:784:3: error: always_inline function '_mm_shuffle_epi8' requires target feature 'sse3', but would be inlined into function 'INIT' that is compiled without support for 'sse3'
hash.c: ./groestl-intr-aes.h:632:8: note: expanded from macro 'Matrix_Transpose'
hash.c: i2 = _mm_shuffle_epi8(i2, t0);\
hash.c: ^
hash.c: ./groestl-intr-aes.h:784:3: error: always_inline function '_mm_shuffle_epi8' requires target feature 'sse3', but would be inlined into function 'INIT' that is compiled without support for 'sse3'
hash.c: ./groestl-intr-aes.h:633:8: note: expanded from macro 'Matrix_Transpose'
hash.c: i3 = _mm_shuffle_epi8(i3, t0);\
hash.c: ^
hash.c: ./groestl-intr-aes.h:784:3: error: always_inline function '_mm_shuffle_epi8' requires target feature 'sse3', but would be inlined into function 'INIT' that is compiled without support for 'sse3'
hash.c: ./groestl-intr-aes.h:635:8: note: expanded from macro 'Matrix_Transpose'
hash.c: ...

Number of similar (compiler,implementation) pairs: 1, namely:
CompilerImplementations
clang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments aesni-intr

Compiler output

Implementation: crypto_hash/groestl512/avx-intr
Compiler: clang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments
hash.c: In file included from hash.c:31:
hash.c: ./groestl-intr-avx.h:848:3: error: always_inline function '_mm_shuffle_epi8' requires target feature 'sse3', but would be inlined into function 'INIT' that is compiled without support for 'sse3'
hash.c: Matrix_Transpose(xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7);
hash.c: ^
hash.c: ./groestl-intr-avx.h:722:8: note: expanded from macro 'Matrix_Transpose'
hash.c: i6 = _mm_shuffle_epi8(i6, t0);\
hash.c: ^
hash.c: ./groestl-intr-avx.h:848:3: error: always_inline function '_mm_shuffle_epi8' requires target feature 'sse3', but would be inlined into function 'INIT' that is compiled without support for 'sse3'
hash.c: ./groestl-intr-avx.h:723:8: note: expanded from macro 'Matrix_Transpose'
hash.c: i0 = _mm_shuffle_epi8(i0, t0);\
hash.c: ^
hash.c: ./groestl-intr-avx.h:848:3: error: always_inline function '_mm_shuffle_epi8' requires target feature 'sse3', but would be inlined into function 'INIT' that is compiled without support for 'sse3'
hash.c: ./groestl-intr-avx.h:724:8: note: expanded from macro 'Matrix_Transpose'
hash.c: i1 = _mm_shuffle_epi8(i1, t0);\
hash.c: ^
hash.c: ./groestl-intr-avx.h:848:3: error: always_inline function '_mm_shuffle_epi8' requires target feature 'sse3', but would be inlined into function 'INIT' that is compiled without support for 'sse3'
hash.c: ./groestl-intr-avx.h:725:8: note: expanded from macro 'Matrix_Transpose'
hash.c: i2 = _mm_shuffle_epi8(i2, t0);\
hash.c: ^
hash.c: ./groestl-intr-avx.h:848:3: error: always_inline function '_mm_shuffle_epi8' requires target feature 'sse3', but would be inlined into function 'INIT' that is compiled without support for 'sse3'
hash.c: ./groestl-intr-avx.h:726:8: note: expanded from macro 'Matrix_Transpose'
hash.c: i3 = _mm_shuffle_epi8(i3, t0);\
hash.c: ^
hash.c: ./groestl-intr-avx.h:848:3: error: always_inline function '_mm_shuffle_epi8' requires target feature 'sse3', but would be inlined into function 'INIT' that is compiled without support for 'sse3'
hash.c: ./groestl-intr-avx.h:727:8: note: expanded from macro 'Matrix_Transpose'
hash.c: ...

Number of similar (compiler,implementation) pairs: 1, namely:
CompilerImplementations
clang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments avx-intr

Compiler output

Implementation: crypto_hash/groestl512/vperm-intr
Compiler: clang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments
hash.c: In file included from hash.c:34:
hash.c: ./groestl-intr-vperm.h:1099:3: error: always_inline function '_mm_andnot_si128' requires target feature 'sse2', but would be inlined into function 'INIT' that is compiled without support for 'sse2'
hash.c: VPERM_Transform_RoundConst();
hash.c: ^
hash.c: ./groestl-intr-vperm.h:1078:3: note: expanded from macro 'VPERM_Transform_RoundConst'
hash.c: VPERM_Transform_RoundConst_CNT2(0, 1);\
hash.c: ^
hash.c: ./groestl-intr-vperm.h:1067:3: note: expanded from macro 'VPERM_Transform_RoundConst_CNT2'
hash.c: VPERM_Transform_State(xmm0, xmm1, xmm2, xmm3, VPERM_IPT, xmm4, xmm5, xmm6, xmm7, xmm8, xmm9, xmm10);\
hash.c: ^
hash.c: ./groestl-intr-vperm.h:130:3: note: expanded from macro 'VPERM_Transform_State'
hash.c: VPERM_Transform_No_Const(a0, a1, t0, t1, t2, t3, c0, c1, c2);\
hash.c: ^
hash.c: ./groestl-intr-vperm.h:77:8: note: expanded from macro 'VPERM_Transform_No_Const'
hash.c: t0 = _mm_andnot_si128(t0, a0);\
hash.c: ^
hash.c: ./groestl-intr-vperm.h:1099:3: error: always_inline function '_mm_andnot_si128' requires target feature 'sse2', but would be inlined into function 'INIT' that is compiled without support for 'sse2'
hash.c: ./groestl-intr-vperm.h:1078:3: note: expanded from macro 'VPERM_Transform_RoundConst'
hash.c: VPERM_Transform_RoundConst_CNT2(0, 1);\
hash.c: ^
hash.c: ./groestl-intr-vperm.h:1067:3: note: expanded from macro 'VPERM_Transform_RoundConst_CNT2'
hash.c: VPERM_Transform_State(xmm0, xmm1, xmm2, xmm3, VPERM_IPT, xmm4, xmm5, xmm6, xmm7, xmm8, xmm9, xmm10);\
hash.c: ^
hash.c: ./groestl-intr-vperm.h:130:3: note: expanded from macro 'VPERM_Transform_State'
hash.c: VPERM_Transform_No_Const(a0, a1, t0, t1, t2, t3, c0, c1, c2);\
hash.c: ...

Number of similar (compiler,implementation) pairs: 1, namely:
CompilerImplementations
clang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments vperm-intr

Compiler output

Implementation: crypto_hash/groestl512/opt64
Compiler: clang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments
hash.c: hash.c:191:3: warning: non-constant static local variable in inline function may be different in different files [-Wstatic-local-in-inline]
hash.c: static u64 y[COLS1024] __attribute__((aligned(16)));
hash.c: ^
hash.c: hash.c:190:1: note: use 'static' to give inline function 'F1024' internal linkage
hash.c: inline void F1024(u64 *h, const u64 *m) {
hash.c: ^
hash.c: static
hash.c: hash.c:192:3: warning: non-constant static local variable in inline function may be different in different files [-Wstatic-local-in-inline]
hash.c: static u64 z[COLS1024] __attribute__((aligned(16)));
hash.c: ^
hash.c: hash.c:190:1: note: use 'static' to give inline function 'F1024' internal linkage
hash.c: inline void F1024(u64 *h, const u64 *m) {
hash.c: ^
hash.c: static
hash.c: hash.c:193:3: warning: non-constant static local variable in inline function may be different in different files [-Wstatic-local-in-inline]
hash.c: static u64 outQ[COLS1024] __attribute__((aligned(16)));
hash.c: ^
hash.c: hash.c:190:1: note: use 'static' to give inline function 'F1024' internal linkage
hash.c: inline void F1024(u64 *h, const u64 *m) {
hash.c: ^
hash.c: static
hash.c: hash.c:194:3: warning: non-constant static local variable in inline function may be different in different files [-Wstatic-local-in-inline]
hash.c: static u64 inP[COLS1024] __attribute__((aligned(16)));
hash.c: ^
hash.c: hash.c:190:1: note: use 'static' to give inline function 'F1024' internal linkage
hash.c: ...

Number of similar (compiler,implementation) pairs: 1, namely:
CompilerImplementations
clang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments opt64

Compiler output

Implementation: crypto_hash/groestl512/aesni-intr
Compiler: gcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv
hash.c: In file included from hash.c:28:0:
hash.c: groestl-intr-aes.h: In function 'INIT':
hash.c: groestl-intr-aes.h:629:6: warning: SSE vector return without SSE enabled changes the ABI [-Wpsabi]
hash.c: i6 = _mm_shuffle_epi8(i6, t0);\
hash.c: ^
hash.c: groestl-intr-aes.h:784:3: note: in expansion of macro 'Matrix_Transpose'
hash.c: Matrix_Transpose(xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7);
hash.c: ^
hash.c: In file included from /usr/lib/gcc/i686-linux-gnu/5/include/pmmintrin.h:31:0,
hash.c: from /usr/lib/gcc/i686-linux-gnu/5/include/tmmintrin.h:31,
hash.c: from /usr/lib/gcc/i686-linux-gnu/5/include/smmintrin.h:32,
hash.c: from groestl-intr-aes.h:10,
hash.c: from hash.c:28:
hash.c: /usr/lib/gcc/i686-linux-gnu/5/include/emmintrin.h:1005:1: error: inlining failed in call to always_inline '_mm_unpacklo_epi64': target specific option mismatch
hash.c: _mm_unpacklo_epi64 (__m128i __A, __m128i __B)
hash.c: ^
hash.c: In file included from hash.c:28:0:
hash.c: groestl-intr-aes.h:692:8: error: called from here
hash.c: i6 = _mm_unpacklo_epi64(i6, t7);\
hash.c: ^
hash.c: groestl-intr-aes.h:784:3: note: in expansion of macro 'Matrix_Transpose'
hash.c: Matrix_Transpose(xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7);
hash.c: ^
hash.c: In file included from /usr/lib/gcc/i686-linux-gnu/5/include/pmmintrin.h:31:0,
hash.c: from /usr/lib/gcc/i686-linux-gnu/5/include/tmmintrin.h:31,
hash.c: ...

Number of similar (compiler,implementation) pairs: 4, namely:
CompilerImplementations
gcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv aesni-intr
gcc -march=native -mtune=native -O3 -fomit-frame-pointer -fwrapv aesni-intr
gcc -march=native -mtune=native -O -fomit-frame-pointer -fwrapv aesni-intr
gcc -march=native -mtune=native -Os -fomit-frame-pointer -fwrapv aesni-intr

Compiler output

Implementation: crypto_hash/groestl512/avx-intr
Compiler: gcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv
hash.c: In file included from hash.c:31:0:
hash.c: groestl-intr-avx.h: In function 'INIT':
hash.c: groestl-intr-avx.h:722:6: warning: SSE vector return without SSE enabled changes the ABI [-Wpsabi]
hash.c: i6 = _mm_shuffle_epi8(i6, t0);\
hash.c: ^
hash.c: groestl-intr-avx.h:848:3: note: in expansion of macro 'Matrix_Transpose'
hash.c: Matrix_Transpose(xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7);
hash.c: ^
hash.c: groestl-intr-avx.h: In function 'TF1024':
hash.c: groestl-intr-avx.h:906:8: warning: AVX vector return without AVX enabled changes the ABI [-Wpsabi]
hash.c: ymm8 = insert_m128i_in_m256d(ymm8, xmm8, 0);
hash.c: ^
hash.c: In file included from /usr/lib/gcc/i686-linux-gnu/5/include/pmmintrin.h:31:0,
hash.c: from /usr/lib/gcc/i686-linux-gnu/5/include/tmmintrin.h:31,
hash.c: from /usr/lib/gcc/i686-linux-gnu/5/include/smmintrin.h:32,
hash.c: from groestl-intr-avx.h:10,
hash.c: from hash.c:31:
hash.c: groestl-intr-avx.h: In function 'INIT':
hash.c: /usr/lib/gcc/i686-linux-gnu/5/include/emmintrin.h:981:1: error: inlining failed in call to always_inline '_mm_unpackhi_epi64': target specific option mismatch
hash.c: _mm_unpackhi_epi64 (__m128i __A, __m128i __B)
hash.c: ^
hash.c: In file included from hash.c:31:0:
hash.c: groestl-intr-avx.h:770:8: error: called from here
hash.c: i7 = _mm_unpackhi_epi64(t5, t7);\
hash.c: ^
hash.c: ...

Number of similar (compiler,implementation) pairs: 4, namely:
CompilerImplementations
gcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv avx-intr
gcc -march=native -mtune=native -O3 -fomit-frame-pointer -fwrapv avx-intr
gcc -march=native -mtune=native -O -fomit-frame-pointer -fwrapv avx-intr
gcc -march=native -mtune=native -Os -fomit-frame-pointer -fwrapv avx-intr

Compiler output

Implementation: crypto_hash/groestl512/vperm-intr
Compiler: gcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv
hash.c: In file included from hash.c:34:0:
hash.c: groestl-intr-vperm.h: In function 'INIT':
hash.c: groestl-intr-vperm.h:77:6: warning: SSE vector return without SSE enabled changes the ABI [-Wpsabi]
hash.c: t0 = _mm_andnot_si128(t0, a0);\
hash.c: ^
hash.c: groestl-intr-vperm.h:130:3: note: in expansion of macro 'VPERM_Transform_No_Const'
hash.c: VPERM_Transform_No_Const(a0, a1, t0, t1, t2, t3, c0, c1, c2);\
hash.c: ^
hash.c: groestl-intr-vperm.h:1067:3: note: in expansion of macro 'VPERM_Transform_State'
hash.c: VPERM_Transform_State(xmm0, xmm1, xmm2, xmm3, VPERM_IPT, xmm4, xmm5, xmm6, xmm7, xmm8, xmm9, xmm10);\
hash.c: ^
hash.c: groestl-intr-vperm.h:1078:3: note: in expansion of macro 'VPERM_Transform_RoundConst_CNT2'
hash.c: VPERM_Transform_RoundConst_CNT2(0, 1);\
hash.c: ^
hash.c: groestl-intr-vperm.h:1099:3: note: in expansion of macro 'VPERM_Transform_RoundConst'
hash.c: VPERM_Transform_RoundConst();
hash.c: ^
hash.c: In file included from /usr/lib/gcc/i686-linux-gnu/5/include/pmmintrin.h:31:0,
hash.c: from /usr/lib/gcc/i686-linux-gnu/5/include/tmmintrin.h:31,
hash.c: from groestl-intr-vperm.h:13,
hash.c: from hash.c:34:
hash.c: /usr/lib/gcc/i686-linux-gnu/5/include/emmintrin.h:1005:1: error: inlining failed in call to always_inline '_mm_unpacklo_epi64': target specific option mismatch
hash.c: _mm_unpacklo_epi64 (__m128i __A, __m128i __B)
hash.c: ^
hash.c: In file included from hash.c:34:0:
hash.c: ...

Number of similar (compiler,implementation) pairs: 4, namely:
CompilerImplementations
gcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv vperm-intr
gcc -march=native -mtune=native -O3 -fomit-frame-pointer -fwrapv vperm-intr
gcc -march=native -mtune=native -O -fomit-frame-pointer -fwrapv vperm-intr
gcc -march=native -mtune=native -Os -fomit-frame-pointer -fwrapv vperm-intr

Compiler output

Implementation: crypto_hash/groestl512/opt64
Compiler: gcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv
hash.c: hash.c:194:14: warning: 'inP' is static but declared in inline function 'F1024' which is not static
hash.c: static u64 inP[COLS1024] __attribute__((aligned(16)));
hash.c: ^
hash.c: hash.c:193:14: warning: 'outQ' is static but declared in inline function 'F1024' which is not static
hash.c: static u64 outQ[COLS1024] __attribute__((aligned(16)));
hash.c: ^
hash.c: hash.c:192:14: warning: 'z' is static but declared in inline function 'F1024' which is not static
hash.c: static u64 z[COLS1024] __attribute__((aligned(16)));
hash.c: ^
hash.c: hash.c:191:14: warning: 'y' is static but declared in inline function 'F1024' which is not static
hash.c: static u64 y[COLS1024] __attribute__((aligned(16)));
hash.c: ^

Number of similar (compiler,implementation) pairs: 4, namely:
CompilerImplementations
gcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv opt64
gcc -march=native -mtune=native -O3 -fomit-frame-pointer -fwrapv opt64
gcc -march=native -mtune=native -O -fomit-frame-pointer -fwrapv opt64
gcc -march=native -mtune=native -Os -fomit-frame-pointer -fwrapv opt64