Implementation notes: amd64, icelake, crypto_sign/ed448goldilocks

Computer: icelake
Architecture: amd64
CPU ID: GenuineIntel-000706e5-bfebfbff
SUPERCOP version: 20200826
Operation: crypto_sign
Primitive: ed448goldilocks
TimeObject sizeTest sizeImplementationCompilerBenchmark dateSUPERCOP version
69561363897 21980 086016 24576 0T:amd64clang_-march=icelake-client_-O2_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2020082720200826
70531368465 21980 094208 24576 0T:amd64clang_-march=icelake-client_-O3_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2020082720200826
73906349585 21980 069632 24576 0T:amd64clang_-march=icelake-client_-Os_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2020082720200826
86332441202 21980 065536 24576 0T:64opt-local-bin-gcc_-march=icelake-client_-mtune=icelake-client_-Os_-fomit-frame-pointer_-fwrapv_-fPIC_-fPIE2020082720200826
869976105717 21980 0126976 24576 0T:64clang_-march=icelake-client_-O3_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2020082720200826
875779102925 21980 0126976 24576 0T:64clang_-march=icelake-client_-O2_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2020082720200826
89979296814 21980 0126976 24576 0T:64opt-local-bin-gcc_-march=icelake-client_-mtune=icelake-client_-O3_-fomit-frame-pointer_-fwrapv_-fPIC_-fPIE2020082720200826
91213176640 21980 0106496 24576 0T:64opt-local-bin-gcc_-march=icelake-client_-mtune=icelake-client_-O2_-fomit-frame-pointer_-fwrapv_-fPIC_-fPIE2020082720200826
101094059400 21980 081920 24576 0T:64clang_-march=icelake-client_-Os_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2020082720200826
222994651829 18908 073728 24576 0T:32clang_-march=icelake-client_-Os_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2020082720200826
225379579164 18908 0102400 24576 0T:32clang_-march=icelake-client_-O3_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2020082720200826
227380574176 18908 098304 24576 0T:32clang_-march=icelake-client_-O2_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2020082720200826
228700880537 18908 0110592 24576 0T:32opt-local-bin-gcc_-march=icelake-client_-mtune=icelake-client_-O3_-fomit-frame-pointer_-fwrapv_-fPIC_-fPIE2020082720200826
239519950711 18908 077824 24576 0T:32opt-local-bin-gcc_-march=icelake-client_-mtune=icelake-client_-Os_-fomit-frame-pointer_-fwrapv_-fPIC_-fPIE2020082720200826
257729663272 18908 090112 24576 0T:32opt-local-bin-gcc_-march=icelake-client_-mtune=icelake-client_-O2_-fomit-frame-pointer_-fwrapv_-fPIC_-fPIE2020082720200826

Test failure

Implementation: T:amd64
Security model: timingleaks
Compiler: opt-local-bin-gcc -march=icelake-client -mtune=icelake-client -O2 -fomit-frame-pointer -fwrapv -fPIC -fPIE
error 111
crypto_sign_open returns nonzero

Number of similar (compiler,implementation) pairs: 3, namely:
CompilerImplementations
opt-local-bin-gcc -march=icelake-client -mtune=icelake-client -O2 -fomit-frame-pointer -fwrapv -fPIC -fPIE T:amd64
opt-local-bin-gcc -march=icelake-client -mtune=icelake-client -O3 -fomit-frame-pointer -fwrapv -fPIC -fPIE T:amd64
opt-local-bin-gcc -march=icelake-client -mtune=icelake-client -Os -fomit-frame-pointer -fwrapv -fPIC -fPIE T:amd64

Compiler output

Implementation: T:32
Security model: timingleaks
Compiler: clang -march=icelake-client -O2 -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE
measure.c: ld: warning: could not create compact unwind for _crypto_stream_aes256ctr_dolbeau_aesenc_int_constbranchindex_xor: register 3 saved somewhere other than in frame

Number of similar (compiler,implementation) pairs: 6, namely:
CompilerImplementations
clang -march=icelake-client -O2 -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE T:32
clang -march=icelake-client -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE T:32
clang -march=icelake-client -Os -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE T:32
clang -march=icelake-client -O2 -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE T:64
clang -march=icelake-client -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE T:64
clang -march=icelake-client -Os -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE T:64

Compiler output

Implementation: T:amd64
Security model: timingleaks
Compiler: clang -march=icelake-client -O2 -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE
ec_point.c: In file included from ec_point.c:12:
ec_point.c: In file included from ./ec_point.h:13:
ec_point.c: In file included from ./p448.h:10:
ec_point.c: ./word.h:207:5: warning: implicit declaration of function 'memset_s' is invalid in C99 [-Wimplicit-function-declaration]
ec_point.c: memset_s(p, s, c, s);
ec_point.c: ^
ec_point.c: 1 warning generated.
p448.c: In file included from p448.c:5:
p448.c: In file included from ./p448.h:10:
p448.c: ./word.h:207:5: warning: implicit declaration of function 'memset_s' is invalid in C99 [-Wimplicit-function-declaration]
p448.c: memset_s(p, s, c, s);
p448.c: ^
p448.c: 1 warning generated.
measure.c: ld: warning: could not create compact unwind for _crypto_stream_aes256ctr_dolbeau_aesenc_int_constbranchindex_xor: register 3 saved somewhere other than in frame

Number of similar (compiler,implementation) pairs: 3, namely:
CompilerImplementations
clang -march=icelake-client -O2 -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE T:amd64
clang -march=icelake-client -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE T:amd64
clang -march=icelake-client -Os -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE T:amd64

Compiler output

Implementation: T:amd64
Security model: timingleaks
Compiler: opt-local-bin-gcc -march=icelake-client -mtune=icelake-client -O2 -fomit-frame-pointer -fwrapv -fPIC -fPIE
ec_point.c: In file included from p448.h:10,
ec_point.c: from ec_point.h:13,
ec_point.c: from ec_point.c:12:
ec_point.c: word.h: In function 'really_memset':
ec_point.c: word.h:207:5: warning: implicit declaration of function 'memset_s'; did you mean '_mm_set_sd'? [-Wimplicit-function-declaration]
ec_point.c: 207 | memset_s(p, s, c, s);
ec_point.c: | ^~~~~~~~
ec_point.c: | _mm_set_sd
p448.c: In file included from p448.h:10,
p448.c: from p448.c:5:
p448.c: word.h: In function 'really_memset':
p448.c: word.h:207:5: warning: implicit declaration of function 'memset_s'; did you mean '_mm_set_sd'? [-Wimplicit-function-declaration]
p448.c: 207 | memset_s(p, s, c, s);
p448.c: | ^~~~~~~~
p448.c: | _mm_set_sd

Number of similar (compiler,implementation) pairs: 3, namely:
CompilerImplementations
opt-local-bin-gcc -march=icelake-client -mtune=icelake-client -O2 -fomit-frame-pointer -fwrapv -fPIC -fPIE T:amd64
opt-local-bin-gcc -march=icelake-client -mtune=icelake-client -O3 -fomit-frame-pointer -fwrapv -fPIC -fPIE T:amd64
opt-local-bin-gcc -march=icelake-client -mtune=icelake-client -Os -fomit-frame-pointer -fwrapv -fPIC -fPIE T:amd64

Compiler output

Implementation: T:neon
Security model: timingleaks
Compiler: clang -march=icelake-client -O2 -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE
crandom.c: In file included from crandom.c:11:
crandom.c: In file included from ./magic.h:15:
crandom.c: ./p448.h:314:14: warning: implicit declaration of function 'vshr_n_u32' is invalid in C99 [-Wimplicit-function-declaration]
crandom.c: tmp = vshr_n_u32(aa[7],28);
crandom.c: ^
crandom.c: ./p448.h:318:17: warning: implicit declaration of function 'vsra_n_u32' is invalid in C99 [-Wimplicit-function-declaration]
crandom.c: aa[i] = vsra_n_u32(aa[i] & vmask, aa[i-1], 28);
crandom.c: ^
crandom.c: ./p448.h:320:31: warning: implicit declaration of function 'vrev64_u32' is invalid in C99 [-Wimplicit-function-declaration]
crandom.c: aa[0] = (aa[0] & vmask) + vrev64_u32(tmp) + (tmp&vm2);
crandom.c: ^
crandom.c: 3 warnings generated.
ec_point.c: In file included from ec_point.c:12:
ec_point.c: In file included from ./ec_point.h:13:
ec_point.c: ./p448.h:314:14: warning: implicit declaration of function 'vshr_n_u32' is invalid in C99 [-Wimplicit-function-declaration]
ec_point.c: tmp = vshr_n_u32(aa[7],28);
ec_point.c: ^
ec_point.c: ./p448.h:318:17: warning: implicit declaration of function 'vsra_n_u32' is invalid in C99 [-Wimplicit-function-declaration]
ec_point.c: aa[i] = vsra_n_u32(aa[i] & vmask, aa[i-1], 28);
ec_point.c: ^
ec_point.c: ./p448.h:320:31: warning: implicit declaration of function 'vrev64_u32' is invalid in C99 [-Wimplicit-function-declaration]
ec_point.c: aa[0] = (aa[0] & vmask) + vrev64_u32(tmp) + (tmp&vm2);
ec_point.c: ^
ec_point.c: 3 warnings generated.
goldilocks.c: In file included from goldilocks.c:15:
goldilocks.c: In file included from ./ec_point.h:13:
goldilocks.c: ./p448.h:314:14: warning: implicit declaration of function 'vshr_n_u32' is invalid in C99 [-Wimplicit-function-declaration]
goldilocks.c: tmp = vshr_n_u32(aa[7],28);
goldilocks.c: ^
goldilocks.c: ./p448.h:318:17: warning: implicit declaration of function 'vsra_n_u32' is invalid in C99 [-Wimplicit-function-declaration]
goldilocks.c: aa[i] = vsra_n_u32(aa[i] & vmask, aa[i-1], 28);
goldilocks.c: ^
goldilocks.c: ./p448.h:320:31: warning: implicit declaration of function 'vrev64_u32' is invalid in C99 [-Wimplicit-function-declaration]
goldilocks.c: aa[0] = (aa[0] & vmask) + vrev64_u32(tmp) + (tmp&vm2);
goldilocks.c: ^
goldilocks.c: 3 warnings generated.
magic.c: In file included from magic.c:5:
magic.c: In file included from ./field.h:11:
magic.c: In file included from ./magic.h:15:
magic.c: ./p448.h:314:14: warning: implicit declaration of function 'vshr_n_u32' is invalid in C99 [-Wimplicit-function-declaration]
magic.c: tmp = vshr_n_u32(aa[7],28);
magic.c: ^
magic.c: ./p448.h:318:17: warning: implicit declaration of function 'vsra_n_u32' is invalid in C99 [-Wimplicit-function-declaration]
magic.c: aa[i] = vsra_n_u32(aa[i] & vmask, aa[i-1], 28);
magic.c: ^
magic.c: ./p448.h:320:31: warning: implicit declaration of function 'vrev64_u32' is invalid in C99 [-Wimplicit-function-declaration]
magic.c: aa[0] = (aa[0] & vmask) + vrev64_u32(tmp) + (tmp&vm2);
magic.c: ^
magic.c: 3 warnings generated.
p448.c: In file included from p448.c:6:
p448.c: ./p448.h:314:14: warning: implicit declaration of function 'vshr_n_u32' is invalid in C99 [-Wimplicit-function-declaration]
p448.c: tmp = vshr_n_u32(aa[7],28);
p448.c: ^
p448.c: ./p448.h:318:17: warning: implicit declaration of function 'vsra_n_u32' is invalid in C99 [-Wimplicit-function-declaration]
p448.c: aa[i] = vsra_n_u32(aa[i] & vmask, aa[i-1], 28);
p448.c: ^
p448.c: ./p448.h:320:31: warning: implicit declaration of function 'vrev64_u32' is invalid in C99 [-Wimplicit-function-declaration]
p448.c: aa[0] = (aa[0] & vmask) + vrev64_u32(tmp) + (tmp&vm2);
p448.c: ^
p448.c: p448.c:19:36: error: invalid output constraint '+w' in asm
p448.c: __asm__ ("vadd.s64 %f0, %e0" : "+w"(x));
p448.c: ^
p448.c: p448.c:25:36: error: invalid output constraint '+w' in asm
p448.c: __asm__ ("vswp.s64 %e0, %f0" : "+w"(x));
p448.c: ^
p448.c: p448.c:31:36: error: invalid output constraint '+w' in asm
p448.c: __asm__ ("vswp.s64 %e0, %f0" : "+w"(x));
p448.c: ^
p448.c: p448.c:362:12: error: unknown register name 'q0' in asm
p448.c: :: "q0","q1","q2","q3",
p448.c: ^
p448.c: p448.c:564:12: error: unknown register name 'q0' in asm
p448.c: :: "q0","q1","q2","q3",
p448.c: ^
p448.c: ...

Number of similar (compiler,implementation) pairs: 3, namely:
CompilerImplementations
clang -march=icelake-client -O2 -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE T:neon
clang -march=icelake-client -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE T:neon
clang -march=icelake-client -Os -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE T:neon

Compiler output

Implementation: T:neon
Security model: timingleaks
Compiler: opt-local-bin-gcc -march=icelake-client -mtune=icelake-client -O2 -fomit-frame-pointer -fwrapv -fPIC -fPIE
crandom.c: In file included from magic.h:15,
crandom.c: from crandom.c:11:
crandom.c: p448.h: In function 'p448_weak_reduce':
crandom.c: p448.h:314:14: warning: implicit declaration of function 'vshr_n_u32' [-Wimplicit-function-declaration]
crandom.c: 314 | tmp = vshr_n_u32(aa[7],28);
crandom.c: | ^~~~~~~~~~
crandom.c: p448.h:314:14: error: incompatible types when initializing type 'uint32x2_t' {aka '__vector(2) unsigned int'} using type 'int'
crandom.c: p448.h:318:17: warning: implicit declaration of function 'vsra_n_u32' [-Wimplicit-function-declaration]
crandom.c: 318 | aa[i] = vsra_n_u32(aa[i] & vmask, aa[i-1], 28);
crandom.c: | ^~~~~~~~~~
crandom.c: p448.h:318:17: error: incompatible types when assigning to type 'uint32x2_t' {aka '__vector(2) unsigned int'} from type 'int'
crandom.c: p448.h:320:31: warning: implicit declaration of function 'vrev64_u32' [-Wimplicit-function-declaration]
crandom.c: 320 | aa[0] = (aa[0] & vmask) + vrev64_u32(tmp) + (tmp&vm2);
crandom.c: | ^~~~~~~~~~

Number of similar (compiler,implementation) pairs: 3, namely:
CompilerImplementations
opt-local-bin-gcc -march=icelake-client -mtune=icelake-client -O2 -fomit-frame-pointer -fwrapv -fPIC -fPIE T:neon
opt-local-bin-gcc -march=icelake-client -mtune=icelake-client -O3 -fomit-frame-pointer -fwrapv -fPIC -fPIE T:neon
opt-local-bin-gcc -march=icelake-client -mtune=icelake-client -Os -fomit-frame-pointer -fwrapv -fPIC -fPIE T:neon