Implementation notes: amd64, h3neo, crypto_aead/norx6441v2

Computer: h3neo
Microarchitecture: amd64; K10 45nm (100f63)
Architecture: amd64
CPU ID: AuthenticAMD-00100f63-078bfbff
SUPERCOP version: 20240625
Operation: crypto_aead
Primitive: norx6441v2
TimeObject sizeTest sizeImplementationCompilerBenchmark dateSUPERCOP version
400084875 16 027147 860 1024T:refclang_-mcpu=native_-O3_-fwrapv_-Qunused-arguments_-fPIC_-fPIE_-gdwarf-4_-Wall2024070520240625
409599765 16 033364 828 1088T:refgcc_-march=native_-mtune=native_-O3_-fwrapv_-fPIC_-fPIE_-gdwarf-4_-Wall2024070520240625
414824654 16 026948 828 1088T:refgcc_-march=native_-mtune=native_-O2_-fwrapv_-fPIC_-fPIE_-gdwarf-4_-Wall2024070520240625
435033692 16 023312 804 1056T:refgcc_-march=native_-mtune=native_-Os_-fwrapv_-fPIC_-fPIE_-gdwarf-4_-Wall2024070520240625
456694082 16 025308 820 1088T:refgcc_-march=native_-mtune=native_-O_-fwrapv_-fPIC_-fPIE_-gdwarf-4_-Wall2024070520240625
458725042 16 025835 860 1024T:refclang_-march=native_-O2_-fwrapv_-Qunused-arguments_-fPIC_-fPIE_-gdwarf-4_-Wall2024070520240625
459644866 16 026563 860 1024T:refclang_-march=native_-O3_-fwrapv_-Qunused-arguments_-fPIC_-fPIE_-gdwarf-4_-Wall2024070520240625
468773606 16 022861 852 1024T:refclang_-march=native_-Os_-fwrapv_-Qunused-arguments_-fPIC_-fPIE_-gdwarf-4_-Wall2024070520240625
4793519906 8 042123 852 1024T:xmmclang_-mcpu=native_-O3_-fwrapv_-Qunused-arguments_-fPIC_-fPIE_-gdwarf-4_-Wall2024070520240625
5016120594 8 044124 820 1088T:xmmgcc_-march=native_-mtune=native_-O3_-fwrapv_-fPIC_-fPIE_-gdwarf-4_-Wall2024070520240625
5177121327 8 043524 820 1088T:xmmgcc_-march=native_-mtune=native_-O2_-fwrapv_-fPIC_-fPIE_-gdwarf-4_-Wall2024070520240625
5194920042 8 041155 812 1088T:xmmgcc_-march=native_-mtune=native_-O_-fwrapv_-fPIC_-fPIE_-gdwarf-4_-Wall2024070520240625
529943867 16 023731 860 1024T:refclang_-march=native_-O_-fwrapv_-Qunused-arguments_-fPIC_-fPIE_-gdwarf-4_-Wall2024070520240625
5301319966 8 040683 852 1024T:xmmclang_-march=native_-O2_-fwrapv_-Qunused-arguments_-fPIC_-fPIE_-gdwarf-4_-Wall2024070520240625
5302719982 8 041635 852 1024T:xmmclang_-march=native_-O3_-fwrapv_-Qunused-arguments_-fPIC_-fPIE_-gdwarf-4_-Wall2024070520240625
5499920019 8 039133 844 1024T:xmmclang_-march=native_-Os_-fwrapv_-Qunused-arguments_-fPIC_-fPIE_-gdwarf-4_-Wall2024070520240625
5569720185 8 039851 852 1024T:xmmclang_-march=native_-O_-fwrapv_-Qunused-arguments_-fPIC_-fPIE_-gdwarf-4_-Wall2024070520240625
6205017761 8 037215 796 1056T:xmmgcc_-march=native_-mtune=native_-Os_-fwrapv_-fPIC_-fPIE_-gdwarf-4_-Wall2024070520240625

Compiler output


norx.c: norx.c:388:5: error: '__builtin_ia32_pblendd256' needs target feature avx2
norx.c:     INITIALISE(A, B, C, D, nonce, key);
norx.c:     ^
norx.c: norx.c:289:9: note: expanded from macro 'INITIALISE'
norx.c:     A = _mm256_blend_epi32(_mm256_set_epi64x(U3, U2, 0, 0),                \
norx.c:         ^
norx.c: /usr/lib/llvm-14/lib/clang/14.0.0/include/avx2intrin.h:750:13: note: expanded from macro '_mm256_blend_epi32'
norx.c:   ((__m256i)__builtin_ia32_pblendd256((__v8si)(__m256i)(V1), \
norx.c:             ^
norx.c: norx.c:388:5: error: always_inline function '_mm256_set_epi64x' requires target feature 'avx', but would be inlined into function 'norx_aead_encrypt' that is compiled without support for 'avx'
norx.c: norx.c:289:28: note: expanded from macro 'INITIALISE'
norx.c:     A = _mm256_blend_epi32(_mm256_set_epi64x(U3, U2, 0, 0),                \
norx.c:                            ^
norx.c: norx.c:388:5: error: AVX vector return of type '__m256i' (vector of 4 'long long' values) without 'avx' enabled changes the ABI
norx.c: norx.c:289:28: note: expanded from macro 'INITIALISE'
norx.c:     A = _mm256_blend_epi32(_mm256_set_epi64x(U3, U2, 0, 0),                \
norx.c:                            ^
norx.c: norx.c:388:5: error: always_inline function '_mm256_castsi128_si256' requires target feature 'avx', but would be inlined into function 'norx_aead_encrypt' that is compiled without support for 'avx'
norx.c: norx.c:290:28: note: expanded from macro 'INITIALISE'
norx.c:                            _mm256_castsi128_si256(LOADU128(NONCE)), 0x0F); \
norx.c:                            ^
norx.c: norx.c:388:5: error: AVX vector return of type '__m256i' (vector of 4 'long long' values) without 'avx' enabled changes the ABI
norx.c: norx.c:290:28: note: expanded from macro 'INITIALISE'
norx.c:                            _mm256_castsi128_si256(LOADU128(NONCE)), 0x0F); \
norx.c:                            ^
norx.c: ...

Number of similar (implementation,compiler) pairs: 5, namely:
ImplementationCompiler
T:ymmclang -march=native -O2 -fwrapv -Qunused-arguments -fPIC -fPIE -gdwarf-4 -Wall (Ubuntu_Clang_14.0.0)
T:ymmclang -march=native -O3 -fwrapv -Qunused-arguments -fPIC -fPIE -gdwarf-4 -Wall (Ubuntu_Clang_14.0.0)
T:ymmclang -march=native -O -fwrapv -Qunused-arguments -fPIC -fPIE -gdwarf-4 -Wall (Ubuntu_Clang_14.0.0)
T:ymmclang -march=native -Os -fwrapv -Qunused-arguments -fPIC -fPIE -gdwarf-4 -Wall (Ubuntu_Clang_14.0.0)
T:ymmclang -mcpu=native -O3 -fwrapv -Qunused-arguments -fPIC -fPIE -gdwarf-4 -Wall (Ubuntu_Clang_14.0.0)

Compiler output


norx.c: norx.c: In function 'norx_aead_encrypt':
norx.c: norx.c:289:7: warning: AVX vector return without AVX enabled changes the ABI [-Wpsabi]
norx.c:   289 |     A = _mm256_blend_epi32(_mm256_set_epi64x(U3, U2, 0, 0),                \
norx.c:       |       ^
norx.c: norx.c:388:5: note: in expansion of macro 'INITIALISE'
norx.c:   388 |     INITIALISE(A, B, C, D, nonce, key);
norx.c:       |     ^~~~~~~~~~
norx.c: In file included from /usr/lib/gcc/x86_64-linux-gnu/11/include/immintrin.h:47,
norx.c:                  from norx.c:25:
norx.c: /usr/lib/gcc/x86_64-linux-gnu/11/include/avx2intrin.h:913:1: error: inlining failed in call to 'always_inline' '_mm256_xor_si256': target specific option mismatch
norx.c:   913 | _mm256_xor_si256 (__m256i __A, __m256i __B)
norx.c:       | ^~~~~~~~~~~~~~~~
norx.c: norx.c:72:19: note: called from here
norx.c:    72 | #define XOR(A, B) _mm256_xor_si256((A), (B))
norx.c:       |                   ^~~~~~~~~~~~~~~~~~~~~~~~~~
norx.c: norx.c:294:9: note: in expansion of macro 'XOR'
norx.c:   294 |     D = XOR(D, _mm256_set_epi64x(NORX_T, NORX_P, NORX_L, NORX_W));         \
norx.c:       |         ^~~
norx.c: norx.c:388:5: note: in expansion of macro 'INITIALISE'
norx.c:   388 |     INITIALISE(A, B, C, D, nonce, key);
norx.c:       |     ^~~~~~~~~~
norx.c: In file included from /usr/lib/gcc/x86_64-linux-gnu/11/include/immintrin.h:43,
norx.c:                  from norx.c:25:
norx.c: /usr/lib/gcc/x86_64-linux-gnu/11/include/avxintrin.h:1303:1: error: inlining failed in call to 'always_inline' '_mm256_set_epi64x': target specific option mismatch
norx.c:  1303 | _mm256_set_epi64x (long long __A, long long __B, long long __C,
norx.c: ...

Number of similar (implementation,compiler) pairs: 4, namely:
ImplementationCompiler
T:ymmgcc -march=native -mtune=native -O2 -fwrapv -fPIC -fPIE -gdwarf-4 -Wall (11.4.0)
T:ymmgcc -march=native -mtune=native -O3 -fwrapv -fPIC -fPIE -gdwarf-4 -Wall (11.4.0)
T:ymmgcc -march=native -mtune=native -O -fwrapv -fPIC -fPIE -gdwarf-4 -Wall (11.4.0)
T:ymmgcc -march=native -mtune=native -Os -fwrapv -fPIC -fPIE -gdwarf-4 -Wall (11.4.0)