Implementation notes: x86, thoth, crypto_sign/ed448goldilocks

Computer: thoth
Architecture: x86
CPU ID: AuthenticAMD-00000622-0183f9ff
SUPERCOP version: 20160806
Operation: crypto_sign
Primitive: ed448goldilocks
TimeImplementationCompilerBenchmark dateSUPERCOP version
6429630arm32gcc -march=native -mtune=native -O3 -fomit-frame-pointer -fwrapv2016072820160724
6800043arm32gcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv2016072820160724
7187841arm32gcc -march=native -mtune=native -Os -fomit-frame-pointer -fwrapv2016072820160724
7534653arm32clang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments2016072820160724
1030155932gcc -march=native -mtune=native -O3 -fomit-frame-pointer -fwrapv2016072820160724
1040426732clang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments2016072820160724
1065823532gcc -march=native -mtune=native -O -fomit-frame-pointer -fwrapv2016072820160724
1132393232gcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv2016072820160724
1252411832gcc -march=native -mtune=native -Os -fomit-frame-pointer -fwrapv2016072820160724
14383458arm32gcc -march=native -mtune=native -O -fomit-frame-pointer -fwrapv2016072820160724

Compiler output

Implementation: crypto_sign/ed448goldilocks/64
Compiler: clang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments
barrett_field.c: In file included from barrett_field.c:5:
barrett_field.c: In file included from ./barrett_field.h:15:
barrett_field.c: ./word.h:34:9: error: unknown type name '__uint128_t'
barrett_field.c: typedef __uint128_t dword_t;
barrett_field.c: ^
barrett_field.c: ./word.h:37:9: error: unknown type name '__int128_t'
barrett_field.c: typedef __int128_t dsword_t;
barrett_field.c: ^
barrett_field.c: ./word.h:166:30: warning: shift count >gt;= width of type [-Wshift-count-overflow]
barrett_field.c: return (((dword_t)x) - 1)>gt;>gt;WORD_BITS;
barrett_field.c: ^ ~~~~~~~~~
barrett_field.c: barrett_field.c:22:15: warning: shift count >gt;= width of type [-Wshift-count-overflow]
barrett_field.c: carry >gt;>gt;= WORD_BITS;
barrett_field.c: ^ ~~~~~~~~~
barrett_field.c: barrett_field.c:26:15: warning: shift count >gt;= width of type [-Wshift-count-overflow]
barrett_field.c: carry >gt;>gt;= WORD_BITS;
barrett_field.c: ^ ~~~~~~~~~
barrett_field.c: barrett_field.c:41:15: warning: shift count >gt;= width of type [-Wshift-count-overflow]
barrett_field.c: carry >gt;>gt;= WORD_BITS;
barrett_field.c: ^ ~~~~~~~~~
barrett_field.c: barrett_field.c:59:15: warning: shift count >gt;= width of type [-Wshift-count-overflow]
barrett_field.c: carry >gt;>gt;= WORD_BITS;
barrett_field.c: ^ ~~~~~~~~~
barrett_field.c: barrett_field.c:63:15: warning: shift count >gt;= width of type [-Wshift-count-overflow]
barrett_field.c: carry >gt;>gt;= WORD_BITS;
barrett_field.c: ...

Number of similar (compiler,implementation) pairs: 2, namely:
CompilerImplementations
clang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments 64 amd64

Compiler output

Implementation: crypto_sign/ed448goldilocks/neon
Compiler: clang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments
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: 1, namely:
CompilerImplementations
clang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments neon

Compiler output

Implementation: crypto_sign/ed448goldilocks/64
Compiler: gcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv
barrett_field.c: In file included from barrett_field.h:15:0,
barrett_field.c: from barrett_field.c:5:
barrett_field.c: word.h:34:9: error: unknown type name '__uint128_t'
barrett_field.c: typedef __uint128_t dword_t;
barrett_field.c: ^
barrett_field.c: word.h:37:9: error: unknown type name '__int128_t'
barrett_field.c: typedef __int128_t dsword_t;
barrett_field.c: ^
barrett_field.c: word.h: In function 'br_is_zero':
barrett_field.c: word.h:166:30: warning: right shift count >gt;= width of type [-Wshift-count-overflow]
barrett_field.c: return (((dword_t)x) - 1)>gt;>gt;WORD_BITS;
barrett_field.c: ^
barrett_field.c: barrett_field.c: In function 'add_nr_ext_packed':
barrett_field.c: barrett_field.c:22:15: warning: right shift count >gt;= width of type [-Wshift-count-overflow]
barrett_field.c: carry >gt;>gt;= WORD_BITS;
barrett_field.c: ^
barrett_field.c: barrett_field.c:26:15: warning: right shift count >gt;= width of type [-Wshift-count-overflow]
barrett_field.c: carry >gt;>gt;= WORD_BITS;
barrett_field.c: ^
barrett_field.c: barrett_field.c: In function 'add_nr_packed':
barrett_field.c: barrett_field.c:41:15: warning: right shift count >gt;= width of type [-Wshift-count-overflow]
barrett_field.c: carry >gt;>gt;= WORD_BITS;
barrett_field.c: ^
barrett_field.c: barrett_field.c: In function 'sub_nr_ext_packed':
barrett_field.c: barrett_field.c:59:15: warning: right shift count >gt;= width of type [-Wshift-count-overflow]
barrett_field.c: ...

Number of similar (compiler,implementation) pairs: 8, namely:
CompilerImplementations
gcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv 64 amd64
gcc -march=native -mtune=native -O3 -fomit-frame-pointer -fwrapv 64 amd64
gcc -march=native -mtune=native -O -fomit-frame-pointer -fwrapv 64 amd64
gcc -march=native -mtune=native -Os -fomit-frame-pointer -fwrapv 64 amd64

Compiler output

Implementation: crypto_sign/ed448goldilocks/neon
Compiler: gcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv
crandom.c: In file included from magic.h:15:0,
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: 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: aa[i] = vsra_n_u32(aa[i] & vmask, aa[i-1], 28);
crandom.c: ^
crandom.c: p448.h:318:15: error: incompatible types when assigning to type 'uint32x2_t {aka __vector(2) unsigned int}' from type 'int'
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' [-Wimplicit-function-declaration]
crandom.c: aa[0] = (aa[0] & vmask) + vrev64_u32(tmp) + (tmp&vm2);
crandom.c: ^

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