Implementation notes: amd64, h3neo, crypto_aead/morus1280128v1

Computer: h3neo
Microarchitecture: amd64; K10 45nm (100f63)
Architecture: amd64
CPU ID: AuthenticAMD-00100f63-078bfbff
SUPERCOP version: 20240107
Operation: crypto_aead
Primitive: morus1280128v1
TimeObject sizeTest sizeImplementationCompilerBenchmark dateSUPERCOP version
1574512390 0 029468 812 1088T:refgcc_-march=native_-mtune=native_-O3_-fomit-frame-pointer_-fwrapv_-fPIC_-fPIE2023121920231212
1594715806 0 032900 812 1088T:ref64gcc_-march=native_-mtune=native_-O3_-fomit-frame-pointer_-fwrapv_-fPIC_-fPIE2023121920231212
1697317568 0 031507 844 1024T:refclang_-march=native_-O_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2023121920231212
1865413134 0 028923 844 1024T:refclang_-march=native_-O3_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2023121920231212
1865613102 0 027971 844 1024T:refclang_-march=native_-O2_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2023121920231212
1874813483 0 029891 844 1024T:refclang_-mcpu=native_-O3_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2023121920231212
193328969 0 022245 836 1024T:refclang_-march=native_-Os_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2023121920231212
2202012315 0 028635 844 1024T:sse2clang_-mcpu=native_-O3_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2023121920231212
2231412440 0 028147 844 1024T:sse2clang_-march=native_-O3_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2023121920231212
2231612424 0 027195 844 1024T:sse2clang_-march=native_-O2_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2023121920231212
224847927 0 021149 836 1024T:sse2clang_-march=native_-Os_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2023121920231212
242924321 0 019195 804 1088T:refgcc_-march=native_-mtune=native_-O_-fomit-frame-pointer_-fwrapv_-fPIC_-fPIE2023121920231212
2489810896 0 027980 812 1088T:sse2gcc_-march=native_-mtune=native_-O3_-fomit-frame-pointer_-fwrapv_-fPIC_-fPIE2023121920231212
255614558 0 020292 812 1088T:refgcc_-march=native_-mtune=native_-O2_-fomit-frame-pointer_-fwrapv_-fPIC_-fPIE2023121920231212
2580312830 0 026667 844 1024T:sse2clang_-march=native_-O_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2023121920231212
258606730 0 023171 844 1024T:ref64clang_-mcpu=native_-O3_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2023121920231212
259965910 0 020819 804 1088T:ref64gcc_-march=native_-mtune=native_-O_-fomit-frame-pointer_-fwrapv_-fPIC_-fPIE2023121920231212
260836787 0 022587 844 1024T:ref64clang_-march=native_-O3_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2023121920231212
262156310 0 022076 812 1088T:ref64gcc_-march=native_-mtune=native_-O2_-fomit-frame-pointer_-fwrapv_-fPIC_-fPIE2023121920231212
262296787 0 021667 844 1024T:ref64clang_-march=native_-O2_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2023121920231212
262385487 0 018781 836 1024T:ref64clang_-march=native_-Os_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2023121920231212
263175494 0 019151 788 1056T:ref64gcc_-march=native_-mtune=native_-Os_-fomit-frame-pointer_-fwrapv_-fPIC_-fPIE2023121920231212
263463662 0 017295 788 1056T:refgcc_-march=native_-mtune=native_-Os_-fomit-frame-pointer_-fwrapv_-fPIC_-fPIE2023121920231212
282887316 0 021259 844 1024T:ref64clang_-march=native_-O_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2023121920231212

Compiler output

Implementation: T:avx2
Security model: timingleaks
Compiler: clang -march=native -O2 -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE
morus1280128v1avx2.c: morus1280128v1avx2.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'
morus1280128v1avx2.c: state[0] = XOR256(state[0], state[3]);
morus1280128v1avx2.c: ^
morus1280128v1avx2.c: morus1280128v1avx2.c:25:27: note: expanded from macro 'XOR256'
morus1280128v1avx2.c: #define XOR256(x,y) _mm256_xor_si256((x),(y)) /*XOR256(x,y) = x ^ y, where x and y are two 256-bit word*/
morus1280128v1avx2.c: ^
morus1280128v1avx2.c: morus1280128v1avx2.c:55:13: error: AVX vector argument of type '__m256i' (vector of 4 'long long' values) without 'avx' enabled changes the ABI
morus1280128v1avx2.c: morus1280128v1avx2.c:25:27: note: expanded from macro 'XOR256'
morus1280128v1avx2.c: #define XOR256(x,y) _mm256_xor_si256((x),(y)) /*XOR256(x,y) = x ^ y, where x and y are two 256-bit word*/
morus1280128v1avx2.c: ^
morus1280128v1avx2.c: morus1280128v1avx2.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'
morus1280128v1avx2.c: state[0] = XOR256(state[0], AND256(state[1], state[2]));
morus1280128v1avx2.c: ^
morus1280128v1avx2.c: morus1280128v1avx2.c:26:27: note: expanded from macro 'AND256'
morus1280128v1avx2.c: #define AND256(x,y) _mm256_and_si256((x),(y)) /*AND(x,y) = x & y, where x and y are two 256-bit word*/
morus1280128v1avx2.c: ^
morus1280128v1avx2.c: morus1280128v1avx2.c:56:30: error: AVX vector argument of type '__m256i' (vector of 4 'long long' values) without 'avx' enabled changes the ABI
morus1280128v1avx2.c: morus1280128v1avx2.c:26:27: note: expanded from macro 'AND256'
morus1280128v1avx2.c: #define AND256(x,y) _mm256_and_si256((x),(y)) /*AND(x,y) = x & y, where x and y are two 256-bit word*/
morus1280128v1avx2.c: ^
morus1280128v1avx2.c: morus1280128v1avx2.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'
morus1280128v1avx2.c: state[0] = XOR256(state[0], AND256(state[1], state[2]));
morus1280128v1avx2.c: ^
morus1280128v1avx2.c: morus1280128v1avx2.c:25:27: note: expanded from macro 'XOR256'
morus1280128v1avx2.c: #define XOR256(x,y) _mm256_xor_si256((x),(y)) /*XOR256(x,y) = x ^ y, where x and y are two 256-bit word*/
morus1280128v1avx2.c: ...

Number of similar (compiler,implementation) pairs: 5, 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
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
morus1280128v1avx2.c: morus1280128v1avx2.c: In function 'morus_stateupdate':
morus1280128v1avx2.c: morus1280128v1avx2.c:53:6: note: the ABI for passing parameters with 32-byte alignment has changed in GCC 4.6
morus1280128v1avx2.c: 53 | void morus_stateupdate(__m256i msgblk, __m256i *state)
morus1280128v1avx2.c: | ^~~~~~~~~~~~~~~~~
morus1280128v1avx2.c: morus1280128v1avx2.c:55:18: warning: AVX vector return without AVX enabled changes the ABI [-Wpsabi]
morus1280128v1avx2.c: 55 | state[0] = XOR256(state[0], state[3]);
morus1280128v1avx2.c: | ^
morus1280128v1avx2.c: In file included from /usr/lib/gcc/x86_64-linux-gnu/11/include/immintrin.h:47,
morus1280128v1avx2.c: from morus1280128v1avx2.c:2:
morus1280128v1avx2.c: morus1280128v1avx2.c: In function 'morus_enc_aut_step':
morus1280128v1avx2.c: /usr/lib/gcc/x86_64-linux-gnu/11/include/avx2intrin.h:1071:1: error: inlining failed in call to 'always_inline' '_mm256_permute4x64_epi64': target specific option mismatch
morus1280128v1avx2.c: 1071 | _mm256_permute4x64_epi64 (__m256i __X, const int __M)
morus1280128v1avx2.c: | ^~~~~~~~~~~~~~~~~~~~~~~~
morus1280128v1avx2.c: morus1280128v1avx2.c:41:27: note: called from here
morus1280128v1avx2.c: 41 | #define ROTL256_64(x) _mm256_permute4x64_epi64((x), _MM_SHUFFLE(2,1,0,3)) /*Rotate x by 64-bit positions to the left*/
morus1280128v1avx2.c: | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
morus1280128v1avx2.c: morus1280128v1avx2.c:204:20: note: in expansion of macro 'ROTL256_64'
morus1280128v1avx2.c: 204 | state[2] = ROTL256_64(state[2]);
morus1280128v1avx2.c: | ^~~~~~~~~~
morus1280128v1avx2.c: In file included from /usr/lib/gcc/x86_64-linux-gnu/11/include/immintrin.h:47,
morus1280128v1avx2.c: from morus1280128v1avx2.c:2:
morus1280128v1avx2.c: /usr/lib/gcc/x86_64-linux-gnu/11/include/avx2intrin.h:574:1: error: inlining failed in call to 'always_inline' '_mm256_or_si256': target specific option mismatch
morus1280128v1avx2.c: 574 | _mm256_or_si256 (__m256i __A, __m256i __B)
morus1280128v1avx2.c: | ^~~~~~~~~~~~~~~
morus1280128v1avx2.c: morus1280128v1avx2.c:28:27: note: called from here
morus1280128v1avx2.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 -O2 -fomit-frame-pointer -fwrapv -fPIC -fPIE
try.c: /usr/bin/ld: libcrypto_aead_morus1280128v1.a(morus1280128v1sse2.o): in function `morus_initialization':
try.c: morus1280128v1sse2.c:(.text+0x...): undefined reference to `morus_stateupdate'
try.c: /usr/bin/ld: libcrypto_aead_morus1280128v1.a(morus1280128v1sse2.o): in function `morus_initialization_key_256':
try.c: morus1280128v1sse2.c:(.text+0x...): undefined reference to `morus_stateupdate'
try.c: /usr/bin/ld: libcrypto_aead_morus1280128v1.a(morus1280128v1sse2.o): in function `morus_tag_generation':
try.c: morus1280128v1sse2.c:(.text+0x...): undefined reference to `morus_stateupdate'
try.c: /usr/bin/ld: libcrypto_aead_morus1280128v1.a(morus1280128v1sse2.o): in function `morus_tag_verification':
try.c: morus1280128v1sse2.c:(.text+0x...): undefined reference to `morus_stateupdate'
try.c: /usr/bin/ld: libcrypto_aead_morus1280128v1.a(morus1280128v1sse2.o): in function `morus_enc_aut_partialblock':
try.c: morus1280128v1sse2.c:(.text+0x...): undefined reference to `morus_stateupdate'
try.c: /usr/bin/ld: libcrypto_aead_morus1280128v1.a(morus1280128v1sse2.o):morus1280128v1sse2.c:(.text+0x...): more undefined references to `morus_stateupdate' follow
try.c: collect2: error: ld returned 1 exit status

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

Compiler output

Implementation: T:sse2
Security model: timingleaks
Compiler: gcc -march=native -mtune=native -Os -fomit-frame-pointer -fwrapv -fPIC -fPIE
try.c: /usr/bin/ld: libcrypto_aead_morus1280128v1.a(morus1280128v1sse2.o): in function `morus_initialization':
try.c: morus1280128v1sse2.c:(.text+0x...): undefined reference to `morus_stateupdate'
try.c: /usr/bin/ld: libcrypto_aead_morus1280128v1.a(morus1280128v1sse2.o): in function `morus_initialization_key_256':
try.c: morus1280128v1sse2.c:(.text+0x...): undefined reference to `morus_stateupdate'
try.c: /usr/bin/ld: libcrypto_aead_morus1280128v1.a(morus1280128v1sse2.o): in function `morus_tag_generation':
try.c: morus1280128v1sse2.c:(.text+0x...): undefined reference to `morus_stateupdate'
try.c: /usr/bin/ld: libcrypto_aead_morus1280128v1.a(morus1280128v1sse2.o): in function `morus_tag_verification':
try.c: morus1280128v1sse2.c:(.text+0x...): undefined reference to `morus_stateupdate'
try.c: /usr/bin/ld: libcrypto_aead_morus1280128v1.a(morus1280128v1sse2.o): in function `morus_enc_aut_partialblock':
try.c: morus1280128v1sse2.c:(.text+0x...): undefined reference to `morus_stateupdate'
try.c: /usr/bin/ld: libcrypto_aead_morus1280128v1.a(morus1280128v1sse2.o):morus1280128v1sse2.c:(.text+0x...): more undefined references to `morus_stateupdate' follow
try.c: /usr/bin/ld: libcrypto_aead_morus1280128v1.a(morus1280128v1sse2.o): in function `crypto_aead_morus1280128v1_sse2_timingleaks_encrypt':
try.c: morus1280128v1sse2.c:(.text+0x...): undefined reference to `morus_enc_aut_step'
try.c: /usr/bin/ld: morus1280128v1sse2.c:(.text+0x...): undefined reference to `morus_enc_aut_step'
try.c: /usr/bin/ld: libcrypto_aead_morus1280128v1.a(morus1280128v1sse2.o): in function `crypto_aead_morus1280128v1_sse2_timingleaks_decrypt':
try.c: morus1280128v1sse2.c:(.text+0x...): undefined reference to `morus_enc_aut_step'
try.c: /usr/bin/ld: morus1280128v1sse2.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