Implementation notes: x86, thoth, crypto_hash/bmw256

Computer: thoth
Architecture: x86
CPU ID: AuthenticAMD-00000622-0183f9ff
SUPERCOP version: 20160806
Operation: crypto_hash
Primitive: bmw256
TimeImplementationCompilerBenchmark dateSUPERCOP version
18766optabegcc -march=native -mtune=native -Os -fomit-frame-pointer -fwrapv2016072620160724
18819optbbegcc -march=native -mtune=native -Os -fomit-frame-pointer -fwrapv2016072620160724
19874optabegcc -march=native -mtune=native -O3 -fomit-frame-pointer -fwrapv2016072620160724
19954optbbegcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv2016072620160724
19958optabegcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv2016072620160724
20047optc04gcc -march=native -mtune=native -O3 -fomit-frame-pointer -fwrapv2016072620160724
20182optbbegcc -march=native -mtune=native -O3 -fomit-frame-pointer -fwrapv2016072620160724
20230optc03gcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv2016072620160724
20281optc01gcc -march=native -mtune=native -O3 -fomit-frame-pointer -fwrapv2016072620160724
20283optc03gcc -march=native -mtune=native -O3 -fomit-frame-pointer -fwrapv2016072620160724
20330optc01gcc -march=native -mtune=native -Os -fomit-frame-pointer -fwrapv2016072620160724
20431optc04gcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv2016072620160724
20480optbgbegcc -march=native -mtune=native -O3 -fomit-frame-pointer -fwrapv2016072620160724
20597optbgbegcc -march=native -mtune=native -Os -fomit-frame-pointer -fwrapv2016072620160724
20608optbgbegcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv2016072620160724
20983optc02gcc -march=native -mtune=native -O3 -fomit-frame-pointer -fwrapv2016072620160724
21012optc02gcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv2016072620160724
21186optc01gcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv2016072620160724
21208optbbegcc -march=native -mtune=native -O -fomit-frame-pointer -fwrapv2016072620160724
21337optabegcc -march=native -mtune=native -O -fomit-frame-pointer -fwrapv2016072620160724
21386optc03gcc -march=native -mtune=native -O -fomit-frame-pointer -fwrapv2016072620160724
21595optc02gcc -march=native -mtune=native -O -fomit-frame-pointer -fwrapv2016072620160724
21634optbgbegcc -march=native -mtune=native -O -fomit-frame-pointer -fwrapv2016072620160724
21736optabeclang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments2016072620160724
21753optc04gcc -march=native -mtune=native -O -fomit-frame-pointer -fwrapv2016072620160724
21809optbbeclang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments2016072620160724
22023optbgbeclang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments2016072620160724
22355optc01clang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments2016072620160724
22651optc03clang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments2016072620160724
22731optc01gcc -march=native -mtune=native -O -fomit-frame-pointer -fwrapv2016072620160724
22925optc04clang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments2016072620160724
23119sphlibgcc -march=native -mtune=native -O3 -fomit-frame-pointer -fwrapv2016072620160724
23161sphlibgcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv2016072620160724
23318sphlibgcc -march=native -mtune=native -Os -fomit-frame-pointer -fwrapv2016072620160724
23519sphlib-smallgcc -march=native -mtune=native -O3 -fomit-frame-pointer -fwrapv2016072620160724
24248optc02clang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments2016072620160724
24323sphlib-smallclang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments2016072620160724
24340sphlib-smallgcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv2016072620160724
24368sphlibclang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments2016072620160724
24700sphlib-smallgcc -march=native -mtune=native -Os -fomit-frame-pointer -fwrapv2016072620160724
24870sphlibgcc -march=native -mtune=native -O -fomit-frame-pointer -fwrapv2016072620160724
25089sphlib-smallgcc -march=native -mtune=native -O -fomit-frame-pointer -fwrapv2016072620160724
25654optc02gcc -march=native -mtune=native -Os -fomit-frame-pointer -fwrapv2016072620160724
26746optc03gcc -march=native -mtune=native -Os -fomit-frame-pointer -fwrapv2016072620160724
26811optc04gcc -march=native -mtune=native -Os -fomit-frame-pointer -fwrapv2016072620160724
38613refclang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments2016072620160724
44910refgcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv2016072620160724
44974refgcc -march=native -mtune=native -O3 -fomit-frame-pointer -fwrapv2016072620160724
47317refgcc -march=native -mtune=native -O -fomit-frame-pointer -fwrapv2016072620160724
108925refgcc -march=native -mtune=native -Os -fomit-frame-pointer -fwrapv2016072620160724

Test failure

Implementation: crypto_hash/bmw256/core_2_45nm/x86/ssse3_v1
Compiler: clang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments
error 111

Number of similar (compiler,implementation) pairs: 15, namely:
CompilerImplementations
clang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments core_2_45nm/x86/ssse3_v1 core_2_65nm/x86/ssse3_v1 core_i7_45nm/x86/ssse3_v1
gcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv core_2_45nm/x86/ssse3_v1 core_2_65nm/x86/ssse3_v1 core_i7_45nm/x86/ssse3_v1
gcc -march=native -mtune=native -O3 -fomit-frame-pointer -fwrapv core_2_45nm/x86/ssse3_v1 core_2_65nm/x86/ssse3_v1 core_i7_45nm/x86/ssse3_v1
gcc -march=native -mtune=native -O -fomit-frame-pointer -fwrapv core_2_45nm/x86/ssse3_v1 core_2_65nm/x86/ssse3_v1 core_i7_45nm/x86/ssse3_v1
gcc -march=native -mtune=native -Os -fomit-frame-pointer -fwrapv core_2_45nm/x86/ssse3_v1 core_2_65nm/x86/ssse3_v1 core_i7_45nm/x86/ssse3_v1

Compiler output

Implementation: crypto_hash/bmw256/optc01
Compiler: clang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments
BlueMidnightWish.c: BlueMidnightWish.c:1326:86: warning: '&' within '^' [-Wbitwise-op-parentheses]
BlueMidnightWish.c: hashState256(state)->gt;LastPart[LastByte] = hashState256(state)->gt;LastPart[LastByte] & (0xff BlueMidnightWish.c: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BlueMidnightWish.c: BlueMidnightWish.c:1326:86: note: place parentheses around the '&' expression to silence this warning
BlueMidnightWish.c: hashState256(state)->gt;LastPart[LastByte] = hashState256(state)->gt;LastPart[LastByte] & (0xff BlueMidnightWish.c: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BlueMidnightWish.c: BlueMidnightWish.c:1360:86: warning: '&' within '^' [-Wbitwise-op-parentheses]
BlueMidnightWish.c: hashState512(state)->gt;LastPart[LastByte] = hashState512(state)->gt;LastPart[LastByte] & (0xff BlueMidnightWish.c: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BlueMidnightWish.c: BlueMidnightWish.c:1360:86: note: place parentheses around the '&' expression to silence this warning
BlueMidnightWish.c: hashState512(state)->gt;LastPart[LastByte] = hashState512(state)->gt;LastPart[LastByte] & (0xff BlueMidnightWish.c: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BlueMidnightWish.c: 2 warnings generated.

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

Compiler output

Implementation: crypto_hash/bmw256/optc03
Compiler: clang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments
BlueMidnightWish.c: BlueMidnightWish.c:735:84: warning: '&' within '^' [-Wbitwise-op-parentheses]
BlueMidnightWish.c: hashState256_(state).LastPart[LastByte] = hashState256_(state).LastPart[LastByte] & (0xff BlueMidnightWish.c: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BlueMidnightWish.c: BlueMidnightWish.c:735:84: note: place parentheses around the '&' expression to silence this warning
BlueMidnightWish.c: hashState256_(state).LastPart[LastByte] = hashState256_(state).LastPart[LastByte] & (0xff BlueMidnightWish.c: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BlueMidnightWish.c: 1 warning generated.

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

Compiler output

Implementation: crypto_hash/bmw256/optc04
Compiler: clang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments
BlueMidnightWish.c: BlueMidnightWish.c:865:84: warning: '&' within '^' [-Wbitwise-op-parentheses]
BlueMidnightWish.c: hashState256_(state).LastPart[LastByte] = hashState256_(state).LastPart[LastByte] & (0xff BlueMidnightWish.c: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BlueMidnightWish.c: BlueMidnightWish.c:865:84: note: place parentheses around the '&' expression to silence this warning
BlueMidnightWish.c: hashState256_(state).LastPart[LastByte] = hashState256_(state).LastPart[LastByte] & (0xff BlueMidnightWish.c: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BlueMidnightWish.c: 1 warning generated.

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

Compiler output

Implementation: crypto_hash/bmw256/optc02
Compiler: clang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments
BlueMidnightWish.c: BlueMidnightWish.c:878:84: warning: '&' within '^' [-Wbitwise-op-parentheses]
BlueMidnightWish.c: hashState256(state)->gt;LastPart[LastByte] = hashState256(state)->gt;LastPart[LastByte] & (0xff BlueMidnightWish.c: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BlueMidnightWish.c: BlueMidnightWish.c:878:84: note: place parentheses around the '&' expression to silence this warning
BlueMidnightWish.c: hashState256(state)->gt;LastPart[LastByte] = hashState256(state)->gt;LastPart[LastByte] & (0xff BlueMidnightWish.c: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BlueMidnightWish.c: 1 warning generated.

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

Compiler output

Implementation: crypto_hash/bmw256/optc31ssse3
Compiler: clang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments
Compress256_sse_31.c: Compress256_sse_31.c:1572:2: error: "This version need SSSE3"
Compress256_sse_31.c: #error "This version need SSSE3"
Compress256_sse_31.c: ^
Compress256_sse_31.c: 1 error generated.

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

Compiler output

Implementation: crypto_hash/bmw256/opt24ssse3_asm32
Compiler: clang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments
wrapper.c: wrapper.c:25:2: error: "This version need SSSE3"
wrapper.c: #error "This version need SSSE3"
wrapper.c: ^
wrapper.c: wrapper.c:31:9: warning: 'crypto_hash_BYTES' macro redefined [-Wmacro-redefined]
wrapper.c: #define crypto_hash_BYTES 32
wrapper.c: ^
wrapper.c: ./crypto_hash.h:7:9: note: previous definition is here
wrapper.c: #define crypto_hash_BYTES crypto_hash_bmw256_BYTES
wrapper.c: ^
wrapper.c: wrapper.c:33:8: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
wrapper.c: extern Compress256(u_int32_t *data32, u_int32_t *data32_end, hashState *state);
wrapper.c: ~~~~~~ ^
wrapper.c: wrapper.c:232:34: warning: incompatible pointer types passing 'u_int32_t *' (aka 'unsigned int *') to parameter of type 'hashState *' [-Wincompatible-pointer-types]
wrapper.c: Compress256(data32, data32 +16, CONST32final-4); // TODO: This is a HACK...
wrapper.c: ^~~~~~~~~~~~~~
wrapper.c: wrapper.c:33:73: note: passing argument to parameter 'state' here
wrapper.c: extern Compress256(u_int32_t *data32, u_int32_t *data32_end, hashState *state);
wrapper.c: ^
wrapper.c: 3 warnings and 1 error generated.

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

Compiler output

Implementation: crypto_hash/bmw256/optc31ssse3
Compiler: gcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv
Compress256_sse_31.c: Compress256_sse_31.c:1572:2: error: #error "This version need SSSE3"
Compress256_sse_31.c: #error "This version need SSSE3"
Compress256_sse_31.c: ^

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

Compiler output

Implementation: crypto_hash/bmw256/opt24ssse3_asm32
Compiler: gcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv
wrapper.c: wrapper.c:25:2: error: #error "This version need SSSE3"
wrapper.c: #error "This version need SSSE3"
wrapper.c: ^
wrapper.c: wrapper.c:31:0: warning: "crypto_hash_BYTES" redefined
wrapper.c: #define crypto_hash_BYTES 32
wrapper.c: ^
wrapper.c: In file included from wrapper.c:20:0:
wrapper.c: crypto_hash.h:7:0: note: this is the location of the previous definition
wrapper.c: #define crypto_hash_BYTES crypto_hash_bmw256_BYTES
wrapper.c: ^
wrapper.c: wrapper.c:33:8: warning: type defaults to 'int' in declaration of 'Compress256' [-Wimplicit-int]
wrapper.c: extern Compress256(u_int32_t *data32, u_int32_t *data32_end, hashState *state);
wrapper.c: ^
wrapper.c: wrapper.c: In function 'crypto_hash_bmw256_opt24ssse3_asm32':
wrapper.c: wrapper.c:232:34: warning: passing argument 3 of 'Compress256' from incompatible pointer type [-Wincompatible-pointer-types]
wrapper.c: Compress256(data32, data32 +16, CONST32final-4); // TODO: This is a HACK...
wrapper.c: ^
wrapper.c: wrapper.c:33:8: note: expected 'hashState * {aka struct gt; *}' but argument is of type 'u_int32_t * {aka unsigned int *}'
wrapper.c: extern Compress256(u_int32_t *data32, u_int32_t *data32_end, hashState *state);
wrapper.c: ^

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

Compiler output

Implementation: crypto_hash/bmw256/opt31ssse3_asm32
Compiler: gcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv
wrapper.c: wrapper.c:25:2: error: #error "This version need SSSE3"
wrapper.c: #error "This version need SSSE3"
wrapper.c: ^
wrapper.c: wrapper.c:31:0: warning: "crypto_hash_BYTES" redefined
wrapper.c: #define crypto_hash_BYTES 32
wrapper.c: ^
wrapper.c: In file included from wrapper.c:20:0:
wrapper.c: crypto_hash.h:7:0: note: this is the location of the previous definition
wrapper.c: #define crypto_hash_BYTES crypto_hash_bmw256_BYTES
wrapper.c: ^
wrapper.c: wrapper.c:33:8: warning: type defaults to 'int' in declaration of 'Compress256' [-Wimplicit-int]
wrapper.c: extern Compress256(u_int32_t *data32, u_int32_t *data32_end, hashState *state);
wrapper.c: ^
wrapper.c: wrapper.c: In function 'crypto_hash_bmw256_opt31ssse3_asm32':
wrapper.c: wrapper.c:232:34: warning: passing argument 3 of 'Compress256' from incompatible pointer type [-Wincompatible-pointer-types]
wrapper.c: Compress256(data32, data32 +16, CONST32final-4); // TODO: This is a HACK...
wrapper.c: ^
wrapper.c: wrapper.c:33:8: note: expected 'hashState * {aka struct gt; *}' but argument is of type 'u_int32_t * {aka unsigned int *}'
wrapper.c: extern Compress256(u_int32_t *data32, u_int32_t *data32_end, hashState *state);
wrapper.c: ^

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