Implementation notes: x86, thoth, crypto_hash/bblake256

Computer: thoth
Architecture: x86
CPU ID: AuthenticAMD-00000622-0183f9ff
SUPERCOP version: 20160806
Operation: crypto_hash
Primitive: bblake256
TimeImplementationCompilerBenchmark dateSUPERCOP version
48260bswapgcc -march=native -mtune=native -Os -fomit-frame-pointer -fwrapv2016072620160724
48341regsgcc -march=native -mtune=native -Os -fomit-frame-pointer -fwrapv2016072620160724
49617bswapgcc -march=native -mtune=native -O3 -fomit-frame-pointer -fwrapv2016072620160724
49750regsgcc -march=native -mtune=native -O3 -fomit-frame-pointer -fwrapv2016072620160724
50498bswapgcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv2016072620160724
50611regsgcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv2016072620160724
50780regsclang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments2016072620160724
51284bswapclang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments2016072620160724
55006bswapgcc -march=native -mtune=native -O -fomit-frame-pointer -fwrapv2016072620160724
58940regsgcc -march=native -mtune=native -O -fomit-frame-pointer -fwrapv2016072620160724
81233sandyclang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments2016072620160724
84201sandygcc -march=native -mtune=native -O3 -fomit-frame-pointer -fwrapv2016072620160724
85096sandygcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv2016072620160724
90547sandygcc -march=native -mtune=native -Os -fomit-frame-pointer -fwrapv2016072620160724
94376sandygcc -march=native -mtune=native -O -fomit-frame-pointer -fwrapv2016072620160724

Compiler output

Implementation: crypto_hash/bblake256/ssse3
Compiler: clang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments
hash.c: hash.c:174:22: error: always_inline function '_mm_set_epi8' requires target feature 'sse2', but would be inlined into function 'blake256_compress' that is compiled without support for 'sse2'
hash.c: const __m128i r8 = _mm_set_epi8(12,15,14,13,8,11,10,9,4,7,6,5,0,3,2,1);
hash.c: ^
hash.c: hash.c:175:23: error: always_inline function '_mm_set_epi8' requires target feature 'sse2', but would be inlined into function 'blake256_compress' that is compiled without support for 'sse2'
hash.c: const __m128i r16 = _mm_set_epi8(13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2);
hash.c: ^
hash.c: hash.c:176:26: error: always_inline function '_mm_set_epi8' requires target feature 'sse2', but would be inlined into function 'blake256_compress' that is compiled without support for 'sse2'
hash.c: const __m128i u8to32 = _mm_set_epi8(12, 13, 14, 15, 8, 9, 10, 11, 4, 5, 6, 7, 0, 1, 2, 3);
hash.c: ^
hash.c: hash.c:184:15: error: always_inline function '_mm_shuffle_epi8' requires target feature 'sse3', but would be inlined into function 'blake256_compress' that is compiled without support for 'sse3'
hash.c: m.u128[0] = _mm_shuffle_epi8(_mm_loadu_si128((__m128i*)(datablock + 00)), u8to32);
hash.c: ^
hash.c: hash.c:184:32: error: always_inline function '_mm_loadu_si128' requires target feature 'sse2', but would be inlined into function 'blake256_compress' that is compiled without support for 'sse2'
hash.c: m.u128[0] = _mm_shuffle_epi8(_mm_loadu_si128((__m128i*)(datablock + 00)), u8to32);
hash.c: ^
hash.c: hash.c:185:15: error: always_inline function '_mm_shuffle_epi8' requires target feature 'sse3', but would be inlined into function 'blake256_compress' that is compiled without support for 'sse3'
hash.c: m.u128[1] = _mm_shuffle_epi8(_mm_loadu_si128((__m128i*)(datablock + 16)), u8to32);
hash.c: ^
hash.c: hash.c:185:32: error: always_inline function '_mm_loadu_si128' requires target feature 'sse2', but would be inlined into function 'blake256_compress' that is compiled without support for 'sse2'
hash.c: m.u128[1] = _mm_shuffle_epi8(_mm_loadu_si128((__m128i*)(datablock + 16)), u8to32);
hash.c: ^
hash.c: hash.c:186:15: error: always_inline function '_mm_shuffle_epi8' requires target feature 'sse3', but would be inlined into function 'blake256_compress' that is compiled without support for 'sse3'
hash.c: m.u128[2] = _mm_shuffle_epi8(_mm_loadu_si128((__m128i*)(datablock + 32)), u8to32);
hash.c: ^
hash.c: hash.c:186:32: error: always_inline function '_mm_loadu_si128' requires target feature 'sse2', but would be inlined into function 'blake256_compress' that is compiled without support for 'sse2'
hash.c: ...

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

Compiler output

Implementation: crypto_hash/bblake256/sse2
Compiler: clang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments
hash.c: hash.c:188:15: error: always_inline function '_mm_loadu_si128' requires target feature 'sse2', but would be inlined into function 'blake256_compress' that is compiled without support for 'sse2'
hash.c: m.u128[0] = LOADU(datablock + 0);
hash.c: ^
hash.c: hash.c:20:19: note: expanded from macro 'LOADU'
hash.c: #define LOADU(p) _mm_loadu_si128( (__m128i *)(p) )
hash.c: ^
hash.c: hash.c:189:15: error: always_inline function '_mm_loadu_si128' requires target feature 'sse2', but would be inlined into function 'blake256_compress' that is compiled without support for 'sse2'
hash.c: m.u128[1] = LOADU(datablock + 16);
hash.c: ^
hash.c: hash.c:20:19: note: expanded from macro 'LOADU'
hash.c: #define LOADU(p) _mm_loadu_si128( (__m128i *)(p) )
hash.c: ^
hash.c: hash.c:190:15: error: always_inline function '_mm_loadu_si128' requires target feature 'sse2', but would be inlined into function 'blake256_compress' that is compiled without support for 'sse2'
hash.c: m.u128[2] = LOADU(datablock + 32);
hash.c: ^
hash.c: hash.c:20:19: note: expanded from macro 'LOADU'
hash.c: #define LOADU(p) _mm_loadu_si128( (__m128i *)(p) )
hash.c: ^
hash.c: hash.c:191:15: error: always_inline function '_mm_loadu_si128' requires target feature 'sse2', but would be inlined into function 'blake256_compress' that is compiled without support for 'sse2'
hash.c: m.u128[3] = LOADU(datablock + 48);
hash.c: ^
hash.c: hash.c:20:19: note: expanded from macro 'LOADU'
hash.c: #define LOADU(p) _mm_loadu_si128( (__m128i *)(p) )
hash.c: ^
hash.c: hash.c:193:3: error: always_inline function '_mm_setzero_si128' requires target feature 'sse2', but would be inlined into function 'blake256_compress' that is compiled without support for 'sse2'
hash.c: ...

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

Compiler output

Implementation: crypto_hash/bblake256/ssse3
Compiler: gcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv
hash.c: hash.c: In function 'blake256_compress':
hash.c: hash.c:174:17: warning: SSE vector return without SSE enabled changes the ABI [-Wpsabi]
hash.c: const __m128i r8 = _mm_set_epi8(12,15,14,13,8,11,10,9,4,7,6,5,0,3,2,1);
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 hash.c:3:
hash.c: /usr/lib/gcc/i686-linux-gnu/5/include/emmintrin.h:597:1: error: inlining failed in call to always_inline '_mm_set_epi32': target specific option mismatch
hash.c: _mm_set_epi32 (int __q3, int __q2, int __q1, int __q0)
hash.c: ^
hash.c: hash.c:193:8: error: called from here
hash.c: row3 = _mm_set_epi32(0x03707344, 0x13198A2E, 0x85A308D3, 0x243F6A88);
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 hash.c:3:
hash.c: /usr/lib/gcc/i686-linux-gnu/5/include/emmintrin.h:597:1: error: inlining failed in call to always_inline '_mm_set_epi32': target specific option mismatch
hash.c: _mm_set_epi32 (int __q3, int __q2, int __q1, int __q0)
hash.c: ^
hash.c: hash.c:191:8: error: called from here
hash.c: row2 = _mm_set_epi32(state->gt;h[ 7], state->gt;h[ 6],
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 hash.c:3:
hash.c: ...

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

Compiler output

Implementation: crypto_hash/bblake256/sse2
Compiler: gcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv
hash.c: hash.c: In function 'blake256_compress':
hash.c: hash.c:188:13: warning: SSE vector return without SSE enabled changes the ABI [-Wpsabi]
hash.c: m.u128[0] = LOADU(datablock + 0);
hash.c: ^
hash.c: In file included from hash.c:3:0:
hash.c: /usr/lib/gcc/i686-linux-gnu/5/include/emmintrin.h:597:1: error: inlining failed in call to always_inline '_mm_set_epi32': target specific option mismatch
hash.c: _mm_set_epi32 (int __q3, int __q2, int __q1, int __q0)
hash.c: ^
hash.c: hash.c:202:8: error: called from here
hash.c: row3 = _mm_set_epi32(0x03707344, 0x13198A2E, 0x85A308D3, 0x243F6A88);
hash.c: ^
hash.c: In file included from hash.c:3:0:
hash.c: /usr/lib/gcc/i686-linux-gnu/5/include/emmintrin.h:597:1: error: inlining failed in call to always_inline '_mm_set_epi32': target specific option mismatch
hash.c: _mm_set_epi32 (int __q3, int __q2, int __q1, int __q0)
hash.c: ^
hash.c: hash.c:200:8: error: called from here
hash.c: row2 = _mm_set_epi32(state->gt;h[ 7], state->gt;h[ 6],
hash.c: ^
hash.c: In file included from hash.c:3:0:
hash.c: /usr/lib/gcc/i686-linux-gnu/5/include/emmintrin.h:597:1: error: inlining failed in call to always_inline '_mm_set_epi32': target specific option mismatch
hash.c: _mm_set_epi32 (int __q3, int __q2, int __q1, int __q0)
hash.c: ^
hash.c: hash.c:198:8: error: called from here
hash.c: row1 = _mm_set_epi32(state->gt;h[ 3], state->gt;h[ 2],
hash.c: ^
hash.c: ...

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