Implementation notes: amd64, gcc123, crypto_kem/firesaber2

Computer: gcc123
Architecture: amd64
CPU ID: GenuineIntel-000206d7-bfebfbff
SUPERCOP version: 20220213
Operation: crypto_kem
Primitive: firesaber2
TimeObject sizeTest sizeImplementationCompilerBenchmark dateSUPERCOP version
71627088033 0 0107341 828 1760T:refclang_-march=native_-O2_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2021020120210114
72618488033 0 0107341 828 1760T:refclang_-march=native_-O_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2021020120210114
730911103002 0 0124053 828 1760T:refclang_-march=native_-O3_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2021020120210114
75722196767 0 0115917 828 1760T:refclang_-mcpu=native_-O3_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2021020120210114
82722658510 0 076934 844 1792T:refgcc_-march=native_-mtune=native_-O3_-fomit-frame-pointer_-fwrapv_-fPIC_-fPIE2021020120210114
237314114498 0 030667 820 1760T:refclang_-march=native_-Os_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2021020120210114
266675912833 0 029758 844 1792T:refgcc_-march=native_-mtune=native_-O_-fomit-frame-pointer_-fwrapv_-fPIC_-fPIE2021020120210114
279146714328 0 031598 844 1792T:refgcc_-march=native_-mtune=native_-O2_-fomit-frame-pointer_-fwrapv_-fPIC_-fPIE2021020120210114
332134412583 0 028422 836 1760T:refgcc_-march=native_-mtune=native_-Os_-fomit-frame-pointer_-fwrapv_-fPIC_-fPIE2021020120210114

Compiler output

Implementation: T:avx2
Security model: timingleaks
Compiler: clang -march=native -O2 -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE
SABER_indcpa.c: In file included from SABER_indcpa.c:9:
SABER_indcpa.c: In file included from ././polymul/toom-cook_4way.c:6:
SABER_indcpa.c: ././polymul/scm_avx.c:43:9: error: always_inline function '_mm256_mullo_epi16' requires target feature 'avx2', but would be inlined into function 'schoolbook_avx_new3_acc' that is compiled without support for 'avx2'
SABER_indcpa.c: temp = _mm256_mullo_epi16 (a0, b1);
SABER_indcpa.c: ^
SABER_indcpa.c: ././polymul/scm_avx.c:45:13: error: always_inline function '_mm256_add_epi16' requires target feature 'avx2', but would be inlined into function 'schoolbook_avx_new3_acc' that is compiled without support for 'avx2'
SABER_indcpa.c: c_avx[1] = _mm256_add_epi16(temp, c_avx[1]);
SABER_indcpa.c: ^
SABER_indcpa.c: ././polymul/scm_avx.c:48:9: error: always_inline function '_mm256_mullo_epi16' requires target feature 'avx2', but would be inlined into function 'schoolbook_avx_new3_acc' that is compiled without support for 'avx2'
SABER_indcpa.c: temp = _mm256_mullo_epi16 (a0, b2);
SABER_indcpa.c: ^
SABER_indcpa.c: ././polymul/scm_avx.c:51:13: error: always_inline function '_mm256_add_epi16' requires target feature 'avx2', but would be inlined into function 'schoolbook_avx_new3_acc' that is compiled without support for 'avx2'
SABER_indcpa.c: c_avx[2] = _mm256_add_epi16(temp, c_avx[2]);
SABER_indcpa.c: ^
SABER_indcpa.c: ././polymul/scm_avx.c:54:9: error: always_inline function '_mm256_mullo_epi16' requires target feature 'avx2', but would be inlined into function 'schoolbook_avx_new3_acc' that is compiled without support for 'avx2'
SABER_indcpa.c: temp = _mm256_mullo_epi16 (a0, b3);
SABER_indcpa.c: ^
SABER_indcpa.c: ././polymul/scm_avx.c:58:13: error: always_inline function '_mm256_add_epi16' requires target feature 'avx2', but would be inlined into function 'schoolbook_avx_new3_acc' that is compiled without support for 'avx2'
SABER_indcpa.c: c_avx[3] = _mm256_add_epi16(temp, c_avx[3]);
SABER_indcpa.c: ^
SABER_indcpa.c: ././polymul/scm_avx.c:60:9: error: always_inline function '_mm256_mullo_epi16' requires target feature 'avx2', but would be inlined into function 'schoolbook_avx_new3_acc' that is compiled without support for 'avx2'
SABER_indcpa.c: temp = _mm256_mullo_epi16 (a0, b4);
SABER_indcpa.c: ^
SABER_indcpa.c: ././polymul/scm_avx.c:65:13: error: always_inline function '_mm256_add_epi16' requires target feature 'avx2', but would be inlined into function 'schoolbook_avx_new3_acc' that is compiled without support for 'avx2'
SABER_indcpa.c: c_avx[4] = _mm256_add_epi16(temp, c_avx[4]);
SABER_indcpa.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
SABER_indcpa.c: In file included from /usr/lib/gcc/x86_64-linux-gnu/8/include/immintrin.h:43,
SABER_indcpa.c: from SABER_indcpa.h:4,
SABER_indcpa.c: from SABER_indcpa.c:5:
SABER_indcpa.c: ./polymul/scm_avx.c: In function 'mul_add':
SABER_indcpa.c: /usr/lib/gcc/x86_64-linux-gnu/8/include/avx2intrin.h:112:1: error: inlining failed in call to always_inline '_mm256_add_epi16': target specific option mismatch
SABER_indcpa.c: _mm256_add_epi16 (__m256i __A, __m256i __B)
SABER_indcpa.c: ^~~~~~~~~~~~~~~~
SABER_indcpa.c: In file included from ./polymul/toom-cook_4way.c:6,
SABER_indcpa.c: from SABER_indcpa.c:9:
SABER_indcpa.c: ./polymul/scm_avx.c:7:12: note: called from here
SABER_indcpa.c: return _mm256_add_epi16(_mm256_mullo_epi16(a, b), c);
SABER_indcpa.c: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SABER_indcpa.c: In file included from /usr/lib/gcc/x86_64-linux-gnu/8/include/immintrin.h:43,
SABER_indcpa.c: from SABER_indcpa.h:4,
SABER_indcpa.c: from SABER_indcpa.c:5:
SABER_indcpa.c: /usr/lib/gcc/x86_64-linux-gnu/8/include/avx2intrin.h:553:1: error: inlining failed in call to always_inline '_mm256_mullo_epi16': target specific option mismatch
SABER_indcpa.c: _mm256_mullo_epi16 (__m256i __A, __m256i __B)
SABER_indcpa.c: ^~~~~~~~~~~~~~~~~~
SABER_indcpa.c: In file included from ./polymul/toom-cook_4way.c:6,
SABER_indcpa.c: from SABER_indcpa.c:9:
SABER_indcpa.c: ./polymul/scm_avx.c:7:12: note: called from here
SABER_indcpa.c: return _mm256_add_epi16(_mm256_mullo_epi16(a, b), c);
SABER_indcpa.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:avx2_nttmul
Security model: timingleaks
Compiler: clang -march=native -O2 -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE
poly.c: poly.c:43:10: error: always_inline function '_mm256_sub_epi16' requires target feature 'avx2', but would be inlined into function 'nttmul_poly_crt' that is compiled without support for 'avx2'
poly.c: f1 = _mm256_sub_epi16(f1,f0);
poly.c: ^
poly.c: poly.c:45:10: error: always_inline function '_mm256_mullo_epi16' requires target feature 'avx2', but would be inlined into function 'nttmul_poly_crt' that is compiled without support for 'avx2'
poly.c: f1 = _mm256_mullo_epi16(f1,p0);
poly.c: ^
poly.c: poly.c:46:10: error: always_inline function '_mm256_add_epi16' requires target feature 'avx2', but would be inlined into function 'nttmul_poly_crt' that is compiled without support for 'avx2'
poly.c: f0 = _mm256_add_epi16(f0,f1);
poly.c: ^
poly.c: poly.c:47:10: error: always_inline function '_mm256_and_si256' requires target feature 'avx2', but would be inlined into function 'nttmul_poly_crt' that is compiled without support for 'avx2'
poly.c: f0 = _mm256_and_si256(f0,mod);
poly.c: ^
poly.c: 4 errors generated.

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

Compiler output

Implementation: T:avx2_nttmul
Security model: timingleaks
Compiler: clang -mcpu=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE
poly.c: poly.c:31:26: error: always_inline function '_mm256_set1_epi16' requires target feature 'avx', but would be inlined into function 'nttmul_poly_crt' that is compiled without support for 'avx'
poly.c: const __m256i u_pinv = _mm256_set1_epi16(CRT_U_PINV);
poly.c: ^
poly.c: poly.c:32:21: error: always_inline function '_mm256_set1_epi16' requires target feature 'avx', but would be inlined into function 'nttmul_poly_crt' that is compiled without support for 'avx'
poly.c: const __m256i u = _mm256_set1_epi16(CRT_U);
poly.c: ^
poly.c: poly.c:33:22: error: always_inline function '_mm256_load_si256' requires target feature 'avx', but would be inlined into function 'nttmul_poly_crt' that is compiled without support for 'avx'
poly.c: const __m256i p0 = _mm256_load_si256((__m256i *)&PDATA0[_16XP]);
poly.c: ^
poly.c: poly.c:34:22: error: always_inline function '_mm256_load_si256' requires target feature 'avx', but would be inlined into function 'nttmul_poly_crt' that is compiled without support for 'avx'
poly.c: const __m256i p1 = _mm256_load_si256((__m256i *)&PDATA1[_16XP]);
poly.c: ^
poly.c: poly.c:35:23: error: always_inline function '_mm256_set1_epi16' requires target feature 'avx', but would be inlined into function 'nttmul_poly_crt' that is compiled without support for 'avx'
poly.c: const __m256i mod = _mm256_set1_epi16(KEM_Q-1);
poly.c: ^
poly.c: poly.c:36:30: error: always_inline function '_mm256_load_si256' requires target feature 'avx', but would be inlined into function 'nttmul_poly_crt' that is compiled without support for 'avx'
poly.c: const __m256i mont0_pinv = _mm256_load_si256((__m256i *)&PDATA0[_16XMONT_PINV]);
poly.c: ^
poly.c: poly.c:37:25: error: always_inline function '_mm256_load_si256' requires target feature 'avx', but would be inlined into function 'nttmul_poly_crt' that is compiled without support for 'avx'
poly.c: const __m256i mont0 = _mm256_load_si256((__m256i *)&PDATA0[_16XMONT]);
poly.c: ^
poly.c: poly.c:40:10: error: always_inline function '_mm256_load_si256' requires target feature 'avx', but would be inlined into function 'nttmul_poly_crt' that is compiled without support for 'avx'
poly.c: f0 = _mm256_load_si256((__m256i *)&a->coeffs[16*i]);
poly.c: ^
poly.c: poly.c:41:10: error: always_inline function '_mm256_load_si256' requires target feature 'avx', but would be inlined into function 'nttmul_poly_crt' that is compiled without support for 'avx'
poly.c: ...

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

Compiler output

Implementation: T:avx2_nttmul
Security model: timingleaks
Compiler: gcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv -fPIC -fPIE
poly.c: In file included from /usr/lib/gcc/x86_64-linux-gnu/8/include/immintrin.h:43,
poly.c: from poly.c:3:
poly.c: poly.c: In function 'mulmod':
poly.c: /usr/lib/gcc/x86_64-linux-gnu/8/include/avx2intrin.h:808:1: error: inlining failed in call to always_inline '_mm256_sub_epi16': target specific option mismatch
poly.c: _mm256_sub_epi16 (__m256i __A, __m256i __B)
poly.c: ^~~~~~~~~~~~~~~~
poly.c: poly.c:12:7: note: called from here
poly.c: t = _mm256_sub_epi16(u,t);
poly.c: ^~~~~~~~~~~~~~~~~~~~~
poly.c: In file included from /usr/lib/gcc/x86_64-linux-gnu/8/include/immintrin.h:43,
poly.c: from poly.c:3:
poly.c: /usr/lib/gcc/x86_64-linux-gnu/8/include/avx2intrin.h:546:1: error: inlining failed in call to always_inline '_mm256_mulhi_epi16': target specific option mismatch
poly.c: _mm256_mulhi_epi16 (__m256i __A, __m256i __B)
poly.c: ^~~~~~~~~~~~~~~~~~
poly.c: poly.c:11:7: note: called from here
poly.c: t = _mm256_mulhi_epi16(t,p);
poly.c: ^~~~~~~~~~~~~~~~~~~~~~~
poly.c: In file included from /usr/lib/gcc/x86_64-linux-gnu/8/include/immintrin.h:43,
poly.c: from poly.c:3:
poly.c: /usr/lib/gcc/x86_64-linux-gnu/8/include/avx2intrin.h:546:1: error: inlining failed in call to always_inline '_mm256_mulhi_epi16': target specific option mismatch
poly.c: _mm256_mulhi_epi16 (__m256i __A, __m256i __B)
poly.c: ^~~~~~~~~~~~~~~~~~
poly.c: poly.c:10:7: note: called from here
poly.c: u = _mm256_mulhi_epi16(a,b);
poly.c: ^~~~~~~~~~~~~~~~~~~~~~~
poly.c: ...

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

Namespace violations

Implementation: T:ref
Security model: timingleaks
Compiler: clang -march=native -O2 -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE
SABER_indcpa.o GenMatrix T
SABER_indcpa.o InnerProd T
SABER_indcpa.o MatrixVectorMul T
SABER_indcpa.o POL2MSG T
SABER_indcpa.o clock1 C
SABER_indcpa.o clock2 C
SABER_indcpa.o clock_cl_mv C
SABER_indcpa.o clock_cl_sm C
SABER_indcpa.o clock_kp_mv C
SABER_indcpa.o clock_kp_sm C
SABER_indcpa.o indcpa_kem_dec T
SABER_indcpa.o indcpa_kem_enc T
SABER_indcpa.o indcpa_kem_keypair T
SABER_indcpa.o karatsuba_simple T
SABER_indcpa.o pol_mul T
SABER_indcpa.o print_poly2 T
SABER_indcpa.o reduce T
SABER_indcpa.o toom_cook_4way T
cbd.o cbd T
fips202.o KeccakF1600_StatePermute T
fips202.o cshake128_simple T
fips202.o cshake128_simple_absorb T
fips202.o cshake128_simple_squeezeblocks T
fips202.o sha3_256 T
fips202.o sha3_512 T
fips202.o shake128 T
kem.o clock1 C
kem.o clock2 C
kem.o clock_cl_mv C
kem.o clock_cl_sm C
kem.o clock_kp_mv C
kem.o clock_kp_sm C
pack_unpack.o BS2POL T
pack_unpack.o BS2POLVEC T
pack_unpack.o BS2POLVECp T
pack_unpack.o BS2POLVECq T
pack_unpack.o POLVEC2BS T
pack_unpack.o POLVECp2BS T
pack_unpack.o POLVECq2BS T
pack_unpack.o SABER_pack_3bit T
pack_unpack.o SABER_pack_4bit T
pack_unpack.o SABER_pack_6bit T
pack_unpack.o SABER_un_pack3bit T
pack_unpack.o SABER_un_pack4bit T
pack_unpack.o SABER_un_pack6bit T
poly.o GenSecret T
verify.o cmov T
verify.o verify T

Number of similar (compiler,implementation) pairs: 9, 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