Implementation notes: amd64, margaux, crypto_aead/morus1280128v2

Computer: margaux
Architecture: amd64
CPU ID: GenuineIntel-000006fb-bfebfbff
SUPERCOP version: 20211108
Operation: crypto_aead
Primitive: morus1280128v2
TimeObject sizeTest sizeImplementationCompilerBenchmark dateSUPERCOP version
1126813389 0 029604 804 1008T:sse2clang_-mcpu=native_-O3_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2021050320210423
1186813524 0 028612 804 1008T:sse2clang_-march=native_-O_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2021050320210423
1186913524 0 028612 804 1008T:sse2clang_-march=native_-O2_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2021050320210423
1189713556 0 029988 804 1008T:sse2clang_-march=native_-O3_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2021050320210423
119118474 0 021674 796 1008T:sse2clang_-march=native_-Os_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2021050320210423
142649340 0 024208 812 1072T:sse2gcc_-march=native_-mtune=native_-O2_-fomit-frame-pointer_-fwrapv_-fPIC_-fPIE2021050320210423
1433511259 0 028400 812 1072T:sse2gcc_-march=native_-mtune=native_-O3_-fomit-frame-pointer_-fwrapv_-fPIC_-fPIE2021050320210423
148909062 0 023856 812 1072T:sse2gcc_-march=native_-mtune=native_-O_-fomit-frame-pointer_-fwrapv_-fPIC_-fPIE2021050320210423
1735616761 0 033920 812 1072T:ref64gcc_-march=native_-mtune=native_-O3_-fomit-frame-pointer_-fwrapv_-fPIC_-fPIE2021050320210423
1736016761 0 033920 812 1072T:refgcc_-march=native_-mtune=native_-O3_-fomit-frame-pointer_-fwrapv_-fPIC_-fPIE2021050320210423
290485943 0 020743 804 1072T:ref64gcc_-march=native_-mtune=native_-O2_-fomit-frame-pointer_-fwrapv_-fPIC_-fPIE2021050320210423
291965943 0 020743 804 1072T:refgcc_-march=native_-mtune=native_-O2_-fomit-frame-pointer_-fwrapv_-fPIC_-fPIE2021050320210423
296105410 0 019067 788 1040T:refgcc_-march=native_-mtune=native_-Os_-fomit-frame-pointer_-fwrapv_-fPIC_-fPIE2021050320210423
299045892 0 020599 804 1072T:refgcc_-march=native_-mtune=native_-O_-fomit-frame-pointer_-fwrapv_-fPIC_-fPIE2021050320210423
299075892 0 020599 804 1072T:ref64gcc_-march=native_-mtune=native_-O_-fomit-frame-pointer_-fwrapv_-fPIC_-fPIE2021050320210423
303705410 0 019067 788 1040T:ref64gcc_-march=native_-mtune=native_-Os_-fomit-frame-pointer_-fwrapv_-fPIC_-fPIE2021050320210423
354045619 0 018866 796 1008T:ref64clang_-march=native_-Os_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2021050320210423
354717036 0 022228 804 1008T:ref64clang_-march=native_-O2_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2021050320210423
354847084 0 023620 804 1008T:ref64clang_-march=native_-O3_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2021050320210423
354977084 0 023620 804 1008T:refclang_-march=native_-O3_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2021050320210423
355027036 0 022228 804 1008T:refclang_-march=native_-O2_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2021050320210423
355187036 0 022228 804 1008T:refclang_-march=native_-O_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2021050320210423
355727036 0 022228 804 1008T:ref64clang_-march=native_-O_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2021050320210423
356105619 0 018866 796 1008T:refclang_-march=native_-Os_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2021050320210423
368706883 0 023220 804 1008T:ref64clang_-mcpu=native_-O3_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2021050320210423
370196883 0 023220 804 1008T:refclang_-mcpu=native_-O3_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2021050320210423

Compiler output

Implementation: T:avx2
Security model: timingleaks
Compiler: clang -march=native -O2 -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE
encrypt.c: encrypt.c:55:13: error: always_inline function '_mm256_xor_si256' requires target feature 'xsave', but would be inlined into function 'morus_stateupdate' that is compiled without support for 'xsave'
encrypt.c: state[0] = XOR256(state[0], state[3]);
encrypt.c: ^
encrypt.c: encrypt.c:25:27: note: expanded from macro 'XOR256'
encrypt.c: #define XOR256(x,y) _mm256_xor_si256((x),(y)) /*XOR256(x,y) = x ^ y, where x and y are two 256-bit word*/
encrypt.c: ^
encrypt.c: encrypt.c:56:13: error: always_inline function '_mm256_xor_si256' requires target feature 'xsave', but would be inlined into function 'morus_stateupdate' that is compiled without support for 'xsave'
encrypt.c: state[0] = XOR256(state[0], AND256(state[1], state[2]));
encrypt.c: ^
encrypt.c: encrypt.c:25:27: note: expanded from macro 'XOR256'
encrypt.c: #define XOR256(x,y) _mm256_xor_si256((x),(y)) /*XOR256(x,y) = x ^ y, where x and y are two 256-bit word*/
encrypt.c: ^
encrypt.c: encrypt.c:56:30: error: always_inline function '_mm256_and_si256' requires target feature 'xsave', but would be inlined into function 'morus_stateupdate' that is compiled without support for 'xsave'
encrypt.c: state[0] = XOR256(state[0], AND256(state[1], state[2]));
encrypt.c: ^
encrypt.c: encrypt.c:26:27: note: expanded from macro 'AND256'
encrypt.c: #define AND256(x,y) _mm256_and_si256((x),(y)) /*AND(x,y) = x & y, where x and y are two 256-bit word*/
encrypt.c: ^
encrypt.c: encrypt.c:57:13: error: always_inline function '_mm256_or_si256' requires target feature 'xsave', but would be inlined into function 'morus_stateupdate' that is compiled without support for 'xsave'
encrypt.c: state[0] = ROTL256(state[0], n1);
encrypt.c: ^
encrypt.c: encrypt.c:39:27: note: expanded from macro 'ROTL256'
encrypt.c: #define ROTL256(x,n) OR256( _mm256_slli_epi64((x), (n)), _mm256_srli_epi64((x),(64-n)) ) /*Rotate 4 64-bit unsigned integers in x to the left by n-bit positions*/
encrypt.c: ^
encrypt.c: encrypt.c:28:27: note: expanded from macro 'OR256'
encrypt.c: ...

Number of similar (compiler,implementation) pairs: 4, namely:
CompilerImplementations
clang -march=native -O2 -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE T:avx2
clang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE T:avx2
clang -march=native -O -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE T:avx2
clang -march=native -Os -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE T:avx2

Compiler output

Implementation: T:avx2
Security model: timingleaks
Compiler: clang -mcpu=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE
encrypt.c: encrypt.c:55:13: error: always_inline function '_mm256_xor_si256' requires target feature 'avx2', but would be inlined into function 'morus_stateupdate' that is compiled without support for 'avx2'
encrypt.c: state[0] = XOR256(state[0], state[3]);
encrypt.c: ^
encrypt.c: encrypt.c:25:27: note: expanded from macro 'XOR256'
encrypt.c: #define XOR256(x,y) _mm256_xor_si256((x),(y)) /*XOR256(x,y) = x ^ y, where x and y are two 256-bit word*/
encrypt.c: ^
encrypt.c: encrypt.c:56:13: error: always_inline function '_mm256_xor_si256' requires target feature 'avx2', but would be inlined into function 'morus_stateupdate' that is compiled without support for 'avx2'
encrypt.c: state[0] = XOR256(state[0], AND256(state[1], state[2]));
encrypt.c: ^
encrypt.c: encrypt.c:25:27: note: expanded from macro 'XOR256'
encrypt.c: #define XOR256(x,y) _mm256_xor_si256((x),(y)) /*XOR256(x,y) = x ^ y, where x and y are two 256-bit word*/
encrypt.c: ^
encrypt.c: encrypt.c:56:30: error: always_inline function '_mm256_and_si256' requires target feature 'avx2', but would be inlined into function 'morus_stateupdate' that is compiled without support for 'avx2'
encrypt.c: state[0] = XOR256(state[0], AND256(state[1], state[2]));
encrypt.c: ^
encrypt.c: encrypt.c:26:27: note: expanded from macro 'AND256'
encrypt.c: #define AND256(x,y) _mm256_and_si256((x),(y)) /*AND(x,y) = x & y, where x and y are two 256-bit word*/
encrypt.c: ^
encrypt.c: encrypt.c:57:13: error: always_inline function '_mm256_or_si256' requires target feature 'avx2', but would be inlined into function 'morus_stateupdate' that is compiled without support for 'avx2'
encrypt.c: state[0] = ROTL256(state[0], n1);
encrypt.c: ^
encrypt.c: encrypt.c:39:27: note: expanded from macro 'ROTL256'
encrypt.c: #define ROTL256(x,n) OR256( _mm256_slli_epi64((x), (n)), _mm256_srli_epi64((x),(64-n)) ) /*Rotate 4 64-bit unsigned integers in x to the left by n-bit positions*/
encrypt.c: ^
encrypt.c: encrypt.c:28:27: note: expanded from macro 'OR256'
encrypt.c: ...

Number of similar (compiler,implementation) pairs: 1, namely:
CompilerImplementations
clang -mcpu=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE T:avx2

Compiler output

Implementation: T:avx2
Security model: timingleaks
Compiler: gcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv -fPIC -fPIE
encrypt.c: encrypt.c: In function 'morus_stateupdate':
encrypt.c: encrypt.c:53:6: note: The ABI for passing parameters with 32-byte alignment has changed in GCC 4.6
encrypt.c: void morus_stateupdate(__m256i msgblk, __m256i *state)
encrypt.c: ^~~~~~~~~~~~~~~~~
encrypt.c: encrypt.c:55:11: warning: AVX vector return without AVX enabled changes the ABI [-Wpsabi]
encrypt.c: state[0] = XOR256(state[0], state[3]);
encrypt.c: ^
encrypt.c: In file included from /usr/lib/gcc/x86_64-linux-gnu/7/include/immintrin.h:43:0,
encrypt.c: from encrypt.c:2:
encrypt.c: encrypt.c: In function 'morus_enc_aut_step':
encrypt.c: /usr/lib/gcc/x86_64-linux-gnu/7/include/avx2intrin.h:1068:1: error: inlining failed in call to always_inline '_mm256_permute4x64_epi64': target specific option mismatch
encrypt.c: _mm256_permute4x64_epi64 (__m256i __X, const int __M)
encrypt.c: ^~~~~~~~~~~~~~~~~~~~~~~~
encrypt.c: encrypt.c:41:27: note: called from here
encrypt.c: #define ROTL256_64(x) _mm256_permute4x64_epi64((x), _MM_SHUFFLE(2,1,0,3)) /*Rotate x by 64-bit positions to the left*/
encrypt.c: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
encrypt.c: encrypt.c:207:13: note: in expansion of macro 'ROTL256_64'
encrypt.c: state[2] = ROTL256_64(state[2]);
encrypt.c: ^~~~~~~~~~
encrypt.c: In file included from /usr/lib/gcc/x86_64-linux-gnu/7/include/immintrin.h:43:0,
encrypt.c: from encrypt.c:2:
encrypt.c: /usr/lib/gcc/x86_64-linux-gnu/7/include/avx2intrin.h:574:1: error: inlining failed in call to always_inline '_mm256_or_si256': target specific option mismatch
encrypt.c: _mm256_or_si256 (__m256i __A, __m256i __B)
encrypt.c: ^~~~~~~~~~~~~~~
encrypt.c: encrypt.c:28:27: note: called from here
encrypt.c: ...

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

Compiler output

Implementation: T:sse2
Security model: timingleaks
Compiler: gcc -march=native -mtune=native -Os -fomit-frame-pointer -fwrapv -fPIC -fPIE
try.c: libcrypto_aead_morus1280128v2.a(encrypt.o): In function `morus_initialization':
try.c: encrypt.c:(.text+0x...): undefined reference to `morus_stateupdate'
try.c: libcrypto_aead_morus1280128v2.a(encrypt.o): In function `morus_initialization_key_256':
try.c: encrypt.c:(.text+0x...): undefined reference to `morus_stateupdate'
try.c: libcrypto_aead_morus1280128v2.a(encrypt.o): In function `morus_tag_generation':
try.c: encrypt.c:(.text+0x...): undefined reference to `morus_stateupdate'
try.c: libcrypto_aead_morus1280128v2.a(encrypt.o): In function `morus_tag_verification':
try.c: encrypt.c:(.text+0x...): undefined reference to `morus_stateupdate'
try.c: libcrypto_aead_morus1280128v2.a(encrypt.o): In function `morus_enc_aut_partialblock':
try.c: encrypt.c:(.text+0x...): undefined reference to `morus_stateupdate'
try.c: libcrypto_aead_morus1280128v2.a(encrypt.o):encrypt.c:(.text+0x...): more undefined references to `morus_stateupdate' follow
try.c: libcrypto_aead_morus1280128v2.a(encrypt.o): In function `crypto_aead_morus1280128v2_sse2_timingleaks_encrypt':
try.c: encrypt.c:(.text+0x...): undefined reference to `morus_enc_aut_step'
try.c: encrypt.c:(.text+0x...): undefined reference to `morus_enc_aut_step'
try.c: libcrypto_aead_morus1280128v2.a(encrypt.o): In function `crypto_aead_morus1280128v2_sse2_timingleaks_decrypt':
try.c: encrypt.c:(.text+0x...): undefined reference to `morus_enc_aut_step'
try.c: encrypt.c:(.text+0x...): undefined reference to `morus_dec_aut_step'
try.c: collect2: error: ld returned 1 exit status

Number of similar (compiler,implementation) pairs: 1, namely:
CompilerImplementations
gcc -march=native -mtune=native -Os -fomit-frame-pointer -fwrapv -fPIC -fPIE T:sse2

Namespace violations

Implementation: T:ref
Security model: timingleaks
Compiler: clang -march=native -O2 -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE
encrypt.o morus_dec_aut_partialblock T
encrypt.o morus_dec_aut_step T
encrypt.o morus_enc_aut_partialblock T
encrypt.o morus_enc_aut_step T
encrypt.o morus_initialization T
encrypt.o morus_stateupdate T
encrypt.o morus_tag_generation T
encrypt.o morus_tag_verification T

Number of similar (compiler,implementation) pairs: 18, namely:
CompilerImplementations
clang -march=native -O2 -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE T:ref
clang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE T:ref
clang -march=native -O -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE T:ref
clang -march=native -Os -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE T:ref
clang -mcpu=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE T:ref
gcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv -fPIC -fPIE T:ref
gcc -march=native -mtune=native -O3 -fomit-frame-pointer -fwrapv -fPIC -fPIE T:ref
gcc -march=native -mtune=native -O -fomit-frame-pointer -fwrapv -fPIC -fPIE T:ref
gcc -march=native -mtune=native -Os -fomit-frame-pointer -fwrapv -fPIC -fPIE T:ref
clang -march=native -O2 -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE T:ref64
clang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE T:ref64
clang -march=native -O -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE T:ref64
clang -march=native -Os -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE T:ref64
clang -mcpu=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE T:ref64
gcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv -fPIC -fPIE T:ref64
gcc -march=native -mtune=native -O3 -fomit-frame-pointer -fwrapv -fPIC -fPIE T:ref64
gcc -march=native -mtune=native -O -fomit-frame-pointer -fwrapv -fPIC -fPIE T:ref64
gcc -march=native -mtune=native -Os -fomit-frame-pointer -fwrapv -fPIC -fPIE T:ref64

Namespace violations

Implementation: T:sse2
Security model: timingleaks
Compiler: clang -march=native -O2 -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE
encrypt.o morus_dec_aut_partialblock T
encrypt.o morus_enc_aut_partialblock T
encrypt.o morus_initialization T
encrypt.o morus_initialization_key_256 T
encrypt.o morus_tag_generation T
encrypt.o morus_tag_verification T

Number of similar (compiler,implementation) pairs: 8, namely:
CompilerImplementations
clang -march=native -O2 -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE T:sse2
clang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE T:sse2
clang -march=native -O -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE T:sse2
clang -march=native -Os -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE T:sse2
clang -mcpu=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE T:sse2
gcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv -fPIC -fPIE T:sse2
gcc -march=native -mtune=native -O3 -fomit-frame-pointer -fwrapv -fPIC -fPIE T:sse2
gcc -march=native -mtune=native -O -fomit-frame-pointer -fwrapv -fPIC -fPIE T:sse2