Implementation notes: aarch64, supercoplxc, crypto_aead/aes128gcmv1

Computer: supercoplxc
Architecture: aarch64
CPU ID: 410fd034
SUPERCOP version: 20190816
Operation: crypto_aead
Primitive: aes128gcmv1
TimeObject sizeTest sizeImplementationCompilerBenchmark dateSUPERCOP version
1800014504 0 032038 800 888dolbeau/armv8cryptoclang_-mcpu=native_-mfpu=neon_-O3_-fomit-frame-pointer_-fwrapv_-Qunused-arguments2019090320190816
54404802260 0 1621510 800 904refclang_-mcpu=native_-mfpu=neon_-O3_-fomit-frame-pointer_-fwrapv_-Qunused-arguments2019090320190816
56033602208 0 1621398 800 904refclang_-O3_-fomit-frame-pointer_-Qunused-arguments2019090320190816
56159202252 0 1621494 800 904refclang_-O3_-fwrapv_-mavx_-maes_-mpclmul_-fomit-frame-pointer_-Qunused-arguments2019090320190816
56160802252 0 1621494 800 904refclang_-O3_-fwrapv_-mavx2_-fomit-frame-pointer_-Qunused-arguments2019090320190816
56166402252 0 1621494 800 904refclang_-O3_-fwrapv_-mavx_-fomit-frame-pointer_-Qunused-arguments2019090320190816
60488807868 0 1627721 920 904refgcc_-funroll-loops_-fno-schedule-insns_-O3_-fomit-frame-pointer2019090320190816
60597607868 0 1627745 920 904refgcc_-funroll-loops_-O3_-fomit-frame-pointer2019090320190816
68421604144 0 1622681 920 904refgcc_-O3_-fomit-frame-pointer2019090320190816
69209604160 0 1622681 920 904refgcc_-fno-schedule-insns_-O3_-fomit-frame-pointer2019090320190816
353573605344 0 1624632 912 880refgcc_-funroll-loops_-O2_-fomit-frame-pointer2019090320190816
363740805344 0 1624728 912 880refgcc_-funroll-loops_-fno-schedule-insns_-O2_-fomit-frame-pointer2019090320190816
437197601768 0 1618096 896 872refgcc_-funroll-loops_-fno-schedule-insns_-Os_-fomit-frame-pointer2019090320190816
437252001768 0 1618096 896 872refgcc_-funroll-loops_-Os_-fomit-frame-pointer2019090320190816
438972001736 0 1618008 896 872refgcc_-Os_-fomit-frame-pointer2019090320190816
439076001736 0 1618008 896 872refgcc_-fno-schedule-insns_-Os_-fomit-frame-pointer2019090320190816
593752801956 0 1619200 912 880refgcc_-O2_-fomit-frame-pointer2019090320190816
597004801920 0 1619120 912 880refgcc_-fno-schedule-insns_-O2_-fomit-frame-pointer2019090320190816
680600005912 0 1626496 912 880refgcc_-funroll-loops_-fno-schedule-insns_-O_-fomit-frame-pointer2019090320190816
680660805912 0 1626496 912 880refgcc_-funroll-loops_-O_-fomit-frame-pointer2019090320190816
686196802148 0 1619504 912 880refgcc_-O_-fomit-frame-pointer2019090320190816
686200002148 0 1619504 912 880refgcc_-fno-schedule-insns_-O_-fomit-frame-pointer2019090320190816
3115439203224 0 1627008 896 880refcc2019090320190816
3115663203224 0 1627008 896 880refgcc_-funroll-loops2019090320190816
3117608003224 0 1627008 896 880refgcc2019090320190816

Compiler output

Implementation: dolbeau/armv8crypto
Security model: unknown
Compiler: cc
armv8crypto.c: In file included from armv8crypto.c:11:
armv8crypto.c: armv8crypto.c: In function 'aes_armv8_encrypt1':
armv8crypto.c: /usr/lib/gcc/aarch64-linux-gnu/8/include/arm_neon.h:12426: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:10: 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:
armv8crypto.c: /usr/lib/gcc/aarch64-linux-gnu/8/include/arm_neon.h:12426: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:10: 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: warning: implicit declaration of function 'vaeseq_u8' is invalid in C99 [-Wimplicit-function-declaration]
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: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: ...

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: dolbeau/armv8crypto
Security model: unknown
Compiler: clang -mcpu=native -mfpu=neon -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments
armv8crypto.c: armv8crypto.c:245:9: warning: 'vext_p8' macro redefined [-Wmacro-redefined]
armv8crypto.c: #define vext_p8(a,b,c) vreinterpret_p8_u8(vext_u8(vreinterpret_u8_p8(a),vreinterpret_u8_p8(b),c))
armv8crypto.c: ^
armv8crypto.c: /usr/lib/llvm-7/lib/clang/7.0.1/include/arm_neon.h:5653:9: note: previous definition is here
armv8crypto.c: #define vext_p8(__p0, __p1, __p2) __extension__ ({ \
armv8crypto.c: ^
armv8crypto.c: armv8crypto.c:246:9: warning: 'vextq_p16' macro redefined [-Wmacro-redefined]
armv8crypto.c: #define vextq_p16(a,b,c) vreinterpretq_p16_u16(vextq_u16(vreinterpretq_u16_p16(a),vreinterpretq_u16_p16(b),c))
armv8crypto.c: ^
armv8crypto.c: /usr/lib/llvm-7/lib/clang/7.0.1/include/arm_neon.h:5716:9: note: previous definition is here
armv8crypto.c: #define vextq_p16(__p0, __p1, __p2) __extension__ ({ \
armv8crypto.c: ^
armv8crypto.c: 2 warnings generated.

Number of similar (compiler,implementation) pairs: 1, namely:
CompilerImplementations
clang -mcpu=native -mfpu=neon -O3 -fomit-frame-pointer -fwrapv -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: 19, 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

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: 5, 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
clang -mcpu=native -mfpu=neon -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments openssl