Implementation notes: aarch64, hikey960, crypto_aead/aes128gcmv1

Computer: hikey960
Architecture: aarch64
CPU ID: 410fd034
SUPERCOP version: 20190816
Operation: crypto_aead
Primitive: aes128gcmv1
TimeObject sizeTest sizeImplementationCompilerBenchmark dateSUPERCOP version
832515724 0 032923 944 896dolbeau/armv8cryptogcc_-march=native_-mtune=native_-O3_-fomit-frame-pointer_-fwrapv2019112720190816
83255992 0 020486 920 864dolbeau/armv8cryptogcc_-march=native_-mtune=native_-Os_-fomit-frame-pointer_-fwrapv2019112720190816
1169312268 0 027786 936 864dolbeau/armv8cryptogcc_-march=native_-mtune=native_-O2_-fomit-frame-pointer_-fwrapv2019112720190816
116939608 0 025098 936 864dolbeau/armv8cryptogcc_-march=native_-mtune=native_-O_-fomit-frame-pointer_-fwrapv2019112720190816
15012272496 0 1622416 15152 896refclang_-O3_-fwrapv_-mavx2_-fomit-frame-pointer_-Qunused-arguments2019112720190816
27972002592 0 1622496 15152 896refclang_-O3_-fomit-frame-pointer_-Qunused-arguments2019112720190816
28221752496 0 1622416 15152 896refclang_-O3_-fwrapv_-mavx_-fomit-frame-pointer_-Qunused-arguments2019112720190816
28221752496 0 1622416 15152 896refclang_-O3_-fwrapv_-mavx_-maes_-mpclmul_-fomit-frame-pointer_-Qunused-arguments2019112720190816
29886758580 0 1631531 15280 920refgcc_-funroll-loops_-fno-schedule-insns_-O3_-fomit-frame-pointer2019112720190816
31635008612 0 1631611 15280 920refgcc_-funroll-loops_-O3_-fomit-frame-pointer2019112720190816
31718254384 0 1625707 15280 920refgcc_-fno-schedule-insns_-O3_-fomit-frame-pointer2019112720190816
44864404392 0 1625779 15280 920refgcc_-O3_-fomit-frame-pointer2019112720190816
152037866472 0 1629130 15272 880refgcc_-funroll-loops_-O2_-fomit-frame-pointer2019112720190816
196719751704 0 1621394 15272 880refgcc_-O2_-fomit-frame-pointer2019112720190816
196969501684 0 1621298 15272 880refgcc_-fno-schedule-insns_-O2_-fomit-frame-pointer2019112720190816
197219251540 0 1620230 15256 880refgcc_-funroll-loops_-Os_-fomit-frame-pointer2019112720190816
197219251540 0 1620230 15256 880refgcc_-funroll-loops_-fno-schedule-insns_-Os_-fomit-frame-pointer2019112720190816
197552251512 0 1620182 15256 880refgcc_-fno-schedule-insns_-Os_-fomit-frame-pointer2019112720190816
197635501512 0 1620182 15256 880refgcc_-Os_-fomit-frame-pointer2019112720190816
216200252476 0 1623843 15280 920refgcc_-march=native_-mtune=native_-O3_-fomit-frame-pointer_-fwrapv2019112720190816
222194251856 0 1621514 15272 880refgcc_-march=native_-mtune=native_-O_-fomit-frame-pointer_-fwrapv2019112720190816
222444001856 0 1621514 15272 880refgcc_-fno-schedule-insns_-O_-fomit-frame-pointer2019112720190816
231934506420 0 1629098 15272 880refgcc_-funroll-loops_-fno-schedule-insns_-O2_-fomit-frame-pointer2019112720190816
248827045924 0 1628778 15272 880refgcc_-funroll-loops_-fno-schedule-insns_-O_-fomit-frame-pointer2019112720190816
312553891856 0 1621514 15272 880refgcc_-O_-fomit-frame-pointer2019112720190816
340221701528 0 1620198 15256 880refgcc_-march=native_-mtune=native_-Os_-fomit-frame-pointer_-fwrapv2019112720190816
484931251680 0 1621370 15272 880refgcc_-march=native_-mtune=native_-O2_-fomit-frame-pointer_-fwrapv2019112720190816
488927255924 0 1628778 15272 880refgcc_-funroll-loops_-O_-fomit-frame-pointer2019112720190816
726273003048 0 1628774 15256 880refgcc_-funroll-loops2019112720190816
739509753048 0 1628774 15256 880refgcc2019112720190816
919720203048 0 1628774 15256 880refcc2019112720190816

Compiler output

Implementation: dolbeau/armv8crypto
Security model: unknown
Compiler: cc
armv8crypto.c: In file included from armv8crypto.c:11:0:
armv8crypto.c: armv8crypto.c: In function 'aes_armv8_encrypt1':
armv8crypto.c: /usr/lib/gcc/aarch64-linux-gnu/6/include/arm_neon.h:11442:1: error: inlining failed in call to always_inline 'vaeseq_u8': target specific option mismatch
armv8crypto.c: vaeseq_u8 (uint8x16_t data, uint8x16_t key)
armv8crypto.c: ^~~~~~~~~
armv8crypto.c: armv8crypto.c:82:8: note: called from here
armv8crypto.c: temp = vaeseq_u8(temp, vld1q_u8((rkeys+144)));
armv8crypto.c: ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
armv8crypto.c: In file included from armv8crypto.c:11:0:
armv8crypto.c: /usr/lib/gcc/aarch64-linux-gnu/6/include/arm_neon.h:11442:1: error: inlining failed in call to always_inline 'vaeseq_u8': target specific option mismatch
armv8crypto.c: vaeseq_u8 (uint8x16_t data, uint8x16_t key)
armv8crypto.c: ^~~~~~~~~
armv8crypto.c: armv8crypto.c:82:8: note: called from here
armv8crypto.c: temp = vaeseq_u8(temp, vld1q_u8((rkeys+144)));
armv8crypto.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
armv8crypto.c: armv8crypto.c:82:10: warning: implicit declaration of function 'vaeseq_u8' is invalid in C99 [-Wimplicit-function-declaration]
armv8crypto.c: temp = vaeseq_u8(temp, vld1q_u8((rkeys+144)));
armv8crypto.c: ^
armv8crypto.c: armv8crypto.c:82:8: error: assigning to 'uint8x16_t' (vector of 16 'uint8_t' values) from incompatible type 'int'
armv8crypto.c: temp = vaeseq_u8(temp, vld1q_u8((rkeys+144)));
armv8crypto.c: ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
armv8crypto.c: armv8crypto.c:237:1: error: invalid conversion between vector type 'uint32x4_t' (vector of 4 'uint32_t' values) and integer type 'int' of different size
armv8crypto.c: FUNC(2, MAKE2)
armv8crypto.c: ^~~~~~~~~~~~~~
armv8crypto.c: armv8crypto.c:232:11: note: expanded from macro 'FUNC'
armv8crypto.c: MAKEN(AESENCLASTx); \
armv8crypto.c: ~~~~~~^~~~~~~~~~~~
armv8crypto.c: armv8crypto.c:189:3: note: expanded from macro 'MAKE2'
armv8crypto.c: X(0);X(1)
armv8crypto.c: ^~~~
armv8crypto.c: armv8crypto.c:181:11: note: expanded from macro 'AESENCLASTx'
armv8crypto.c: nv##a = (uint32x4_t)vaeseq_u8((uint8x16_t)nv##a, vld1q_u8((rkeys+144))); nv##a = veorq_u32(nv##a, vld1q_u32((unsigned int*)(rkeys+160)))
armv8crypto.c: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
armv8crypto.c: armv8crypto.c:237:1: error: invalid conversion between vector type 'uint32x4_t' (vector of 4 'uint32_t' values) and integer type 'int' of different size
armv8crypto.c: FUNC(2, MAKE2)
armv8crypto.c: ^~~~~~~~~~~~~~
armv8crypto.c: armv8crypto.c:232:11: note: expanded from macro 'FUNC'
armv8crypto.c: MAKEN(AESENCLASTx); \
armv8crypto.c: ~~~~~~^~~~~~~~~~~~
armv8crypto.c: armv8crypto.c:189:8: note: expanded from macro 'MAKE2'
armv8crypto.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

Compiler output

Implementation: openssl
Security model: unknown
Compiler: cc
decrypt.c: decrypt.c: In function 'crypto_aead_aes128gcmv1_openssl_decrypt':
decrypt.c: decrypt.c:13:18: error: storage size of 'x' isn't known
decrypt.c: EVP_CIPHER_CTX x;
decrypt.c: ^

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

Compiler output

Implementation: openssl
Security model: unknown
Compiler: clang -O3 -fomit-frame-pointer -Qunused-arguments
decrypt.c: decrypt.c:13:18: error: variable has incomplete type 'EVP_CIPHER_CTX' (aka 'struct evp_cipher_ctx_st')
decrypt.c: EVP_CIPHER_CTX x;
decrypt.c: ^
decrypt.c: /usr/include/openssl/ossl_typ.h:90:16: note: forward declaration of 'struct evp_cipher_ctx_st'
decrypt.c: typedef struct evp_cipher_ctx_st EVP_CIPHER_CTX;
decrypt.c: ^
decrypt.c: 1 error generated.

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