Implementation notes: aarch64, hikey960, crypto_hashblocks/sha256

Computer: hikey960
Architecture: aarch64
CPU ID: 410fd034
SUPERCOP version: 20190816
Operation: crypto_hashblocks
Primitive: sha256
TimeObject sizeTest sizeImplementationCompilerBenchmark dateSUPERCOP version
0604 256 010553 1168 744dolbeau/armv8cryptogcc_-march=native_-mtune=native_-O2_-fomit-frame-pointer_-fwrapv2019112620190816
0604 256 012242 1184 776dolbeau/armv8cryptogcc_-march=native_-mtune=native_-O3_-fomit-frame-pointer_-fwrapv2019112620190816
0616 256 010657 1168 744dolbeau/armv8cryptogcc_-march=native_-mtune=native_-O_-fomit-frame-pointer_-fwrapv2019112620190816
0604 256 09957 1152 744dolbeau/armv8cryptogcc_-march=native_-mtune=native_-Os_-fomit-frame-pointer_-fwrapv2019112620190816
08132 0 018073 912 744inplacegcc_-O2_-fomit-frame-pointer2019112620190816
08268 0 018297 912 744inplacegcc_-fno-schedule-insns_-O_-fomit-frame-pointer2019112620190816
08084 0 019714 920 776refgcc_-O3_-fomit-frame-pointer2019112620190816
88838260 0 021489 912 744inplacegcc_-funroll-loops_-O_-fomit-frame-pointer2019112620190816
88839732 0 020656 816 760refclang_-O3_-fomit-frame-pointer_-Qunused-arguments2019112620190816
166508132 0 019762 920 776inplacegcc_-O3_-fomit-frame-pointer2019112620190816
166508008 0 019610 920 776inplacegcc_-fno-schedule-insns_-O3_-fomit-frame-pointer2019112620190816
166508008 0 020993 912 744inplacegcc_-funroll-loops_-fno-schedule-insns_-O2_-fomit-frame-pointer2019112620190816
166508008 0 021258 920 776inplacegcc_-funroll-loops_-fno-schedule-insns_-O3_-fomit-frame-pointer2019112620190816
166508124 0 017493 896 744inplacegcc_-funroll-loops_-fno-schedule-insns_-Os_-fomit-frame-pointer2019112620190816
166508128 0 019746 920 776inplacegcc_-march=native_-mtune=native_-O3_-fomit-frame-pointer_-fwrapv2019112620190816
166508084 0 018017 912 744refgcc_-O2_-fomit-frame-pointer2019112620190816
166508020 0 019626 920 776refgcc_-fno-schedule-insns_-O3_-fomit-frame-pointer2019112620190816
166508080 0 021025 912 744refgcc_-funroll-loops_-O2_-fomit-frame-pointer2019112620190816
166508020 0 021001 912 744refgcc_-funroll-loops_-fno-schedule-insns_-O2_-fomit-frame-pointer2019112620190816
166508128 0 017461 896 744refgcc_-march=native_-mtune=native_-Os_-fomit-frame-pointer_-fwrapv2019112620190816
233868108 0 021402 920 776inplacegcc_-funroll-loops_-O3_-fomit-frame-pointer2019112620190816
233868124 0 017493 896 744inplacegcc_-funroll-loops_-Os_-fomit-frame-pointer2019112620190816
233868128 0 017461 896 744refgcc_-fno-schedule-insns_-Os_-fomit-frame-pointer2019112620190816
233868080 0 021370 920 776refgcc_-funroll-loops_-O3_-fomit-frame-pointer2019112620190816
233868020 0 021274 920 776refgcc_-funroll-loops_-fno-schedule-insns_-O3_-fomit-frame-pointer2019112620190816
249759704 0 020640 816 760inplaceclang_-O3_-fomit-frame-pointer_-Qunused-arguments2019112620190816
249759704 0 020656 816 760inplaceclang_-O3_-fwrapv_-mavx2_-fomit-frame-pointer_-Qunused-arguments2019112620190816
249759704 0 020656 816 760inplaceclang_-O3_-fwrapv_-mavx_-fomit-frame-pointer_-Qunused-arguments2019112620190816
249758008 0 017905 912 744inplacegcc_-fno-schedule-insns_-O2_-fomit-frame-pointer2019112620190816
249758124 0 017461 896 744inplacegcc_-fno-schedule-insns_-Os_-fomit-frame-pointer2019112620190816
249758272 0 018305 912 744inplacegcc_-march=native_-mtune=native_-O_-fomit-frame-pointer_-fwrapv2019112620190816
249758128 0 017493 896 744refgcc_-funroll-loops_-Os_-fomit-frame-pointer2019112620190816
249758128 0 017493 896 744refgcc_-funroll-loops_-fno-schedule-insns_-Os_-fomit-frame-pointer2019112620190816
249758080 0 019698 920 776refgcc_-march=native_-mtune=native_-O3_-fomit-frame-pointer_-fwrapv2019112620190816
3330018848 0 031029 896 744inplacecc2019112620190816
333008260 0 021489 912 744inplacegcc_-funroll-loops_-fno-schedule-insns_-O_-fomit-frame-pointer2019112620190816
333009732 0 020680 816 760refclang_-O3_-fwrapv_-mavx_-fomit-frame-pointer_-Qunused-arguments2019112620190816
350798268 0 018297 912 744inplacegcc_-O_-fomit-frame-pointer2019112620190816
350798124 0 017461 896 744inplacegcc_-Os_-fomit-frame-pointer2019112620190816
350798108 0 021065 912 744inplacegcc_-funroll-loops_-O2_-fomit-frame-pointer2019112620190816
350798128 0 018065 912 744inplacegcc_-march=native_-mtune=native_-O2_-fomit-frame-pointer_-fwrapv2019112620190816
350799732 0 020680 816 760refclang_-O3_-fwrapv_-mavx_-maes_-mpclmul_-fomit-frame-pointer_-Qunused-arguments2019112620190816
350798020 0 017913 912 744refgcc_-fno-schedule-insns_-O2_-fomit-frame-pointer2019112620190816
350798268 0 018289 912 744refgcc_-fno-schedule-insns_-O_-fomit-frame-pointer2019112620190816
350798080 0 018009 912 744refgcc_-march=native_-mtune=native_-O2_-fomit-frame-pointer_-fwrapv2019112620190816
350798272 0 018297 912 744refgcc_-march=native_-mtune=native_-O_-fomit-frame-pointer_-fwrapv2019112620190816
356008128 0 017461 896 744refgcc_-Os_-fomit-frame-pointer2019112620190816
364909732 0 020680 816 760refclang_-O3_-fwrapv_-mavx2_-fomit-frame-pointer_-Qunused-arguments2019112620190816
374588264 0 021481 912 744refgcc_-funroll-loops_-fno-schedule-insns_-O_-fomit-frame-pointer2019112620190816
467729704 0 020656 816 760inplaceclang_-O3_-fwrapv_-mavx_-maes_-mpclmul_-fomit-frame-pointer_-Qunused-arguments2019112620190816
467728124 0 017461 896 744inplacegcc_-march=native_-mtune=native_-Os_-fomit-frame-pointer_-fwrapv2019112620190816
467728268 0 018289 912 744refgcc_-O_-fomit-frame-pointer2019112620190816
467728264 0 021481 912 744refgcc_-funroll-loops_-O_-fomit-frame-pointer2019112620190816
4995022176 0 034349 896 744refgcc2019112620190816
5846518848 0 031029 896 744inplacegcc2019112620190816
5846518848 0 031029 896 744inplacegcc_-funroll-loops2019112620190816
15817522176 0 034349 896 744refgcc_-funroll-loops2019112620190816
29970022176 0 034349 896 744refcc2019112620190816

Compiler output

Implementation: dolbeau/amd64-sha
Security model: unknown
Compiler: cc
blocks.c: blocks.c:37:23: fatal error: immintrin.h: No such file or directory
blocks.c: #include <immintrin.h>
blocks.c: ^
blocks.c: compilation terminated.

Number of similar (compiler,implementation) pairs: 23, namely:
CompilerImplementations
cc dolbeau/amd64-sha
gcc dolbeau/amd64-sha
gcc -O2 -fomit-frame-pointer dolbeau/amd64-sha
gcc -O3 -fomit-frame-pointer dolbeau/amd64-sha
gcc -O -fomit-frame-pointer dolbeau/amd64-sha
gcc -Os -fomit-frame-pointer dolbeau/amd64-sha
gcc -fno-schedule-insns -O2 -fomit-frame-pointer dolbeau/amd64-sha
gcc -fno-schedule-insns -O3 -fomit-frame-pointer dolbeau/amd64-sha
gcc -fno-schedule-insns -O -fomit-frame-pointer dolbeau/amd64-sha
gcc -fno-schedule-insns -Os -fomit-frame-pointer dolbeau/amd64-sha
gcc -funroll-loops dolbeau/amd64-sha
gcc -funroll-loops -O2 -fomit-frame-pointer dolbeau/amd64-sha
gcc -funroll-loops -O3 -fomit-frame-pointer dolbeau/amd64-sha
gcc -funroll-loops -O -fomit-frame-pointer dolbeau/amd64-sha
gcc -funroll-loops -Os -fomit-frame-pointer dolbeau/amd64-sha
gcc -funroll-loops -fno-schedule-insns -O2 -fomit-frame-pointer dolbeau/amd64-sha
gcc -funroll-loops -fno-schedule-insns -O3 -fomit-frame-pointer dolbeau/amd64-sha
gcc -funroll-loops -fno-schedule-insns -O -fomit-frame-pointer dolbeau/amd64-sha
gcc -funroll-loops -fno-schedule-insns -Os -fomit-frame-pointer dolbeau/amd64-sha
gcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv dolbeau/amd64-sha
gcc -march=native -mtune=native -O3 -fomit-frame-pointer -fwrapv dolbeau/amd64-sha
gcc -march=native -mtune=native -O -fomit-frame-pointer -fwrapv dolbeau/amd64-sha
gcc -march=native -mtune=native -Os -fomit-frame-pointer -fwrapv dolbeau/amd64-sha

Compiler output

Implementation: dolbeau/amd64-sha
Security model: unknown
Compiler: clang -O3 -fomit-frame-pointer -Qunused-arguments
blocks.c: In file included from blocks.c:37:
blocks.c: In file included from /usr/lib/llvm-3.8/bin/../lib/clang/3.8.1/include/immintrin.h:27:
blocks.c: /usr/lib/llvm-3.8/bin/../lib/clang/3.8.1/include/mmintrin.h:45:12: error: invalid conversion between vector type '__m64' (vector of 1 'long long' value) and integer type 'int' of different size
blocks.c: return (__m64)__builtin_ia32_vec_init_v2si(__i, 0);
blocks.c: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
blocks.c: /usr/lib/llvm-3.8/bin/../lib/clang/3.8.1/include/mmintrin.h:69:12: error: invalid conversion between vector type '__m64' (vector of 1 'long long' value) and integer type 'int' of different size
blocks.c: return (__m64)__builtin_ia32_packsswb((__v4hi)__m1, (__v4hi)__m2);
blocks.c: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
blocks.c: /usr/lib/llvm-3.8/bin/../lib/clang/3.8.1/include/mmintrin.h:75:12: error: invalid conversion between vector type '__m64' (vector of 1 'long long' value) and integer type 'int' of different size
blocks.c: return (__m64)__builtin_ia32_packssdw((__v2si)__m1, (__v2si)__m2);
blocks.c: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
blocks.c: /usr/lib/llvm-3.8/bin/../lib/clang/3.8.1/include/mmintrin.h:81:12: error: invalid conversion between vector type '__m64' (vector of 1 'long long' value) and integer type 'int' of different size
blocks.c: return (__m64)__builtin_ia32_packuswb((__v4hi)__m1, (__v4hi)__m2);
blocks.c: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
blocks.c: /usr/lib/llvm-3.8/bin/../lib/clang/3.8.1/include/mmintrin.h:87:12: error: invalid conversion between vector type '__m64' (vector of 1 'long long' value) and integer type 'int' of different size
blocks.c: return (__m64)__builtin_ia32_punpckhbw((__v8qi)__m1, (__v8qi)__m2);
blocks.c: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
blocks.c: /usr/lib/llvm-3.8/bin/../lib/clang/3.8.1/include/mmintrin.h:93:12: error: invalid conversion between vector type '__m64' (vector of 1 'long long' value) and integer type 'int' of different size
blocks.c: return (__m64)__builtin_ia32_punpckhwd((__v4hi)__m1, (__v4hi)__m2);
blocks.c: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
blocks.c: /usr/lib/llvm-3.8/bin/../lib/clang/3.8.1/include/mmintrin.h:99:12: error: invalid conversion between vector type '__m64' (vector of 1 'long long' value) and integer type 'int' of different size
blocks.c: return (__m64)__builtin_ia32_punpckhdq((__v2si)__m1, (__v2si)__m2);
blocks.c: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
blocks.c: /usr/lib/llvm-3.8/bin/../lib/clang/3.8.1/include/mmintrin.h:105:12: error: invalid conversion between vector type '__m64' (vector of 1 'long long' value) and integer type 'int' of different size
blocks.c: return (__m64)__builtin_ia32_punpcklbw((__v8qi)__m1, (__v8qi)__m2);
blocks.c: ...

Number of similar (compiler,implementation) pairs: 4, namely:
CompilerImplementations
clang -O3 -fomit-frame-pointer -Qunused-arguments dolbeau/amd64-sha
clang -O3 -fwrapv -mavx2 -fomit-frame-pointer -Qunused-arguments dolbeau/amd64-sha
clang -O3 -fwrapv -mavx -fomit-frame-pointer -Qunused-arguments dolbeau/amd64-sha
clang -O3 -fwrapv -mavx -maes -mpclmul -fomit-frame-pointer -Qunused-arguments dolbeau/amd64-sha

Compiler output

Implementation: dolbeau/armv8crypto
Security model: unknown
Compiler: cc
blocks.c: In file included from blocks.c:37:0:
blocks.c: blocks.c: In function 'crypto_hashblocks_sha256_dolbeau_armv8crypto':
blocks.c: /usr/lib/gcc/aarch64-linux-gnu/6/include/arm_neon.h:21874:1: error: inlining failed in call to always_inline 'vsha256h2q_u32': target specific option mismatch
blocks.c: vsha256h2q_u32 (uint32x4_t hash_efgh, uint32x4_t hash_abcd, uint32x4_t wk)
blocks.c: ^~~~~~~~~~~~~~
blocks.c: blocks.c:118:6: note: called from here
blocks.c: s1 = vsha256h2q_u32(x1, x0, h1)
blocks.c: ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
blocks.c: blocks.c:146:3: note: in expansion of macro 'DO16ROUNDS'
blocks.c: DO16ROUNDS(j0, j1, j2, j3, cc, cd, ce, cf);
blocks.c: ^~~~~~~~~~
blocks.c: In file included from blocks.c:37:0:
blocks.c: /usr/lib/gcc/aarch64-linux-gnu/6/include/arm_neon.h:21868:1: error: inlining failed in call to always_inline 'vsha256hq_u32': target specific option mismatch
blocks.c: vsha256hq_u32 (uint32x4_t hash_abcd, uint32x4_t hash_efgh, uint32x4_t wk)
blocks.c: ^~~~~~~~~~~~~
blocks.c: blocks.c:117:6: note: called from here
blocks.c: s0 = vsha256hq_u32(x0, x1, h1); \
blocks.c: ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
blocks.c: blocks.c:146:3: note: in expansion of macro 'DO16ROUNDS'
blocks.c: DO16ROUNDS(j0, j1, j2, j3, cc, cd, ce, cf);
blocks.c: ^~~~~~~~~~
blocks.c: In file included from blocks.c:37:0:
blocks.c: /usr/lib/gcc/aarch64-linux-gnu/6/include/arm_neon.h:21874:1: error: inlining failed in call to always_inline 'vsha256h2q_u32': target specific option mismatch
blocks.c: vsha256h2q_u32 (uint32x4_t hash_efgh, uint32x4_t hash_abcd, uint32x4_t wk)
blocks.c: ^~~~~~~~~~~~~~
blocks.c: ...

Number of similar (compiler,implementation) pairs: 19, namely:
CompilerImplementations
cc dolbeau/armv8crypto
gcc dolbeau/armv8crypto
gcc -O2 -fomit-frame-pointer dolbeau/armv8crypto
gcc -O3 -fomit-frame-pointer dolbeau/armv8crypto
gcc -O -fomit-frame-pointer dolbeau/armv8crypto
gcc -Os -fomit-frame-pointer dolbeau/armv8crypto
gcc -fno-schedule-insns -O2 -fomit-frame-pointer dolbeau/armv8crypto
gcc -fno-schedule-insns -O3 -fomit-frame-pointer dolbeau/armv8crypto
gcc -fno-schedule-insns -O -fomit-frame-pointer dolbeau/armv8crypto
gcc -fno-schedule-insns -Os -fomit-frame-pointer dolbeau/armv8crypto
gcc -funroll-loops dolbeau/armv8crypto
gcc -funroll-loops -O2 -fomit-frame-pointer dolbeau/armv8crypto
gcc -funroll-loops -O3 -fomit-frame-pointer dolbeau/armv8crypto
gcc -funroll-loops -O -fomit-frame-pointer dolbeau/armv8crypto
gcc -funroll-loops -Os -fomit-frame-pointer dolbeau/armv8crypto
gcc -funroll-loops -fno-schedule-insns -O2 -fomit-frame-pointer dolbeau/armv8crypto
gcc -funroll-loops -fno-schedule-insns -O3 -fomit-frame-pointer dolbeau/armv8crypto
gcc -funroll-loops -fno-schedule-insns -O -fomit-frame-pointer dolbeau/armv8crypto
gcc -funroll-loops -fno-schedule-insns -Os -fomit-frame-pointer dolbeau/armv8crypto

Compiler output

Implementation: dolbeau/armv8crypto
Security model: unknown
Compiler: clang -O3 -fomit-frame-pointer -Qunused-arguments
blocks.c: blocks.c:134:3: warning: implicit declaration of function 'vsha256hq_u32' is invalid in C99 [-Wimplicit-function-declaration]
blocks.c: DO16ROUNDS(i0, i1, i2, i3, c0, c1, c2, c3);
blocks.c: ^
blocks.c: blocks.c:108:8: note: expanded from macro 'DO16ROUNDS'
blocks.c: x0 = vsha256hq_u32(s0, s1, h0); \
blocks.c: ^
blocks.c: blocks.c:134:3: error: assigning to 'uint32x4_t' (vector of 4 'uint32_t' values) from incompatible type 'int'
blocks.c: DO16ROUNDS(i0, i1, i2, i3, c0, c1, c2, c3);
blocks.c: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
blocks.c: blocks.c:108:6: note: expanded from macro 'DO16ROUNDS'
blocks.c: x0 = vsha256hq_u32(s0, s1, h0); \
blocks.c: ^ ~~~~~~~~~~~~~~~~~~~~~~~~~
blocks.c: blocks.c:134:3: warning: implicit declaration of function 'vsha256h2q_u32' is invalid in C99 [-Wimplicit-function-declaration]
blocks.c: blocks.c:109:8: note: expanded from macro 'DO16ROUNDS'
blocks.c: x1 = vsha256h2q_u32(s1, s0, h0); \
blocks.c: ^
blocks.c: blocks.c:134:3: error: assigning to 'uint32x4_t' (vector of 4 'uint32_t' values) from incompatible type 'int'
blocks.c: DO16ROUNDS(i0, i1, i2, i3, c0, c1, c2, c3);
blocks.c: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
blocks.c: blocks.c:109:6: note: expanded from macro 'DO16ROUNDS'
blocks.c: x1 = vsha256h2q_u32(s1, s0, h0); \
blocks.c: ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~
blocks.c: blocks.c:134:3: error: assigning to 'uint32x4_t' (vector of 4 'uint32_t' values) from incompatible type 'int'
blocks.c: DO16ROUNDS(i0, i1, i2, i3, c0, c1, c2, c3);
blocks.c: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
blocks.c: ...

Number of similar (compiler,implementation) pairs: 4, namely:
CompilerImplementations
clang -O3 -fomit-frame-pointer -Qunused-arguments dolbeau/armv8crypto
clang -O3 -fwrapv -mavx2 -fomit-frame-pointer -Qunused-arguments dolbeau/armv8crypto
clang -O3 -fwrapv -mavx -fomit-frame-pointer -Qunused-arguments dolbeau/armv8crypto
clang -O3 -fwrapv -mavx -maes -mpclmul -fomit-frame-pointer -Qunused-arguments dolbeau/armv8crypto