Implementation notes: amd64, cel02, crypto_scalarmult/nistp256

Computer: cel02
Architecture: amd64
CPU ID: GenuineIntel-00050657-bfebfbff
SUPERCOP version: 20201130
Operation: crypto_scalarmult
Primitive: nistp256
TimeObject sizeTest sizeImplementationCompilerBenchmark dateSUPERCOP version
299335813549 30720 045709 31560 1640T:mj32gcc_-march=native_-mtune=native_-O3_-fomit-frame-pointer_-fwrapv_-fPIC_-fPIE2020121120201130
393684610490 30720 037676 31528 1576T:mj32clang_-march=native_-Os_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2020121120201130
403256011107 30720 040197 31560 1608T:mj32gcc_-march=native_-mtune=native_-O2_-fomit-frame-pointer_-fwrapv_-fPIC_-fPIE2020121120201130
46273369940 30720 037077 31552 1608T:mj32gcc_-march=native_-mtune=native_-Os_-fomit-frame-pointer_-fwrapv_-fPIC_-fPIE2020121120201130
462772612799 30720 041842 31536 1576T:mj32clang_-mcpu=native_-O3_-fomit-frame-pointer_-fwrapv_-Qunused-arguments_-fPIC_-fPIE2020121120201130
1355506811298 30720 039789 31560 1608T:mj32gcc_-march=native_-mtune=native_-O_-fomit-frame-pointer_-fwrapv_-fPIC_-fPIE2020121120201130

Compiler output

Implementation: T:mj32
Security model: timingleaks
Compiler: clang -march=native -O2 -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE
gep256.c: gep256.c:83:28: warning: sizeof on array function parameter will return size of 'fe *' (aka 'crypto_uint32 (*)[8]') instead of 'gep256' (aka 'fe [3]') [-Wsizeof-array-argument]
gep256.c: for (i = 0; i < sizeof p; ++i) x |= ((unsigned char *)p)[i];
gep256.c: ^
gep256.c: gep256.c:78:29: note: declared here
gep256.c: static int isneutral(gep256 p) {
gep256.c: ^
gep256.c: gep256.c:92:28: warning: sizeof on array function parameter will return size of 'fe *' (aka 'crypto_uint32 (*)[8]') instead of 'gep256_precomp' (aka 'fe [2]') [-Wsizeof-array-argument]
gep256.c: for (i = 0; i < sizeof p; ++i) x |= ((unsigned char *)p)[i];
gep256.c: ^
gep256.c: gep256.c:87:45: note: declared here
gep256.c: static int isneutral_precomp(gep256_precomp p) {
gep256.c: ^
gep256.c: 2 warnings generated.
try.c: fatal error: error in backend: Cannot select: 0x5637f5e66ca0: v4i64 = X86ISD::VTRUNC 0x5637f5e66b70
try.c: 0x5637f5e66b70: v16i32 = vselect 0x5637f5e7b5f0, 0x5637f5e02680, 0x5637f5e66a40
try.c: 0x5637f5e7b5f0: v4i1 = X86ISD::PCMPGTM 0x5637f5e5da30, 0x5637f5e595c0
try.c: 0x5637f5e5da30: v4i64 = X86ISD::VBROADCAST 0x5637f5e04a50
try.c: 0x5637f5e04a50: i64,ch = load<LD8[%lsr.iv6971]> 0x5637f5d6e950, 0x5637f5e477d0, undef:i64
try.c: 0x5637f5e477d0: i64,ch = CopyFromReg 0x5637f5d6e950, Register:i64 %vreg50
try.c: 0x5637f5e59820: i64 = Register %vreg50
try.c: 0x5637f5e00cf0: i64 = undef
try.c: 0x5637f5e595c0: v4i64,ch = CopyFromReg 0x5637f5d6e950, Register:v4i64 %vreg13
try.c: 0x5637f5e5e280: v4i64 = Register %vreg13
try.c: 0x5637f5e02680: v16i32 = X86ISD::VBROADCAST 0x5637f5e5dc90
try.c: 0x5637f5e5dc90: i32,ch = load<LD4[ConstantPool]> 0x5637f5d6e950, 0x5637f5e04030, undef:i64
try.c: 0x5637f5e04030: i64 = X86ISD::WrapperRIP TargetConstantPool:i64<i32 1> 0
try.c: 0x5637f5e4d320: i64 = TargetConstantPool<i32 1> 0
try.c: 0x5637f5e00cf0: i64 = undef
try.c: 0x5637f5e66a40: v16i32 = BUILD_VECTOR Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>
try.c: 0x5637f5e66910: i32 = Constant<0>
try.c: 0x5637f5e66910: i32 = Constant<0>
try.c: 0x5637f5e66910: i32 = Constant<0>
try.c: 0x5637f5e66910: i32 = Constant<0>
try.c: 0x5637f5e66910: i32 = Constant<0>
try.c: 0x5637f5e66910: i32 = Constant<0>
try.c: 0x5637f5e66910: i32 = Constant<0>
try.c: 0x5637f5e66910: i32 = Constant<0>
try.c: 0x5637f5e66910: i32 = Constant<0>
try.c: ...

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

Compiler output

Implementation: T:mj32
Security model: timingleaks
Compiler: clang -march=native -O3 -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE
gep256.c: gep256.c:83:28: warning: sizeof on array function parameter will return size of 'fe *' (aka 'crypto_uint32 (*)[8]') instead of 'gep256' (aka 'fe [3]') [-Wsizeof-array-argument]
gep256.c: for (i = 0; i < sizeof p; ++i) x |= ((unsigned char *)p)[i];
gep256.c: ^
gep256.c: gep256.c:78:29: note: declared here
gep256.c: static int isneutral(gep256 p) {
gep256.c: ^
gep256.c: gep256.c:92:28: warning: sizeof on array function parameter will return size of 'fe *' (aka 'crypto_uint32 (*)[8]') instead of 'gep256_precomp' (aka 'fe [2]') [-Wsizeof-array-argument]
gep256.c: for (i = 0; i < sizeof p; ++i) x |= ((unsigned char *)p)[i];
gep256.c: ^
gep256.c: gep256.c:87:45: note: declared here
gep256.c: static int isneutral_precomp(gep256_precomp p) {
gep256.c: ^
gep256.c: 2 warnings generated.
try.c: fatal error: error in backend: Cannot select: 0x5586278d6750: v4i64 = X86ISD::VTRUNC 0x5586278d6620
try.c: 0x5586278d6620: v16i32 = vselect 0x5586278d1120, 0x55862784f2c0, 0x5586278d64f0
try.c: 0x5586278d1120: v4i1 = X86ISD::PCMPGTM 0x5586278bc550, 0x5586278b90f0
try.c: 0x5586278bc550: v4i64 = X86ISD::VBROADCAST 0x55862784f780
try.c: 0x55862784f780: i64,ch = load<LD8[%lsr.iv6971]> 0x5586277b6a40, 0x558627865a50, undef:i64
try.c: 0x558627865a50: i64,ch = CopyFromReg 0x5586277b6a40, Register:i64 %vreg50
try.c: 0x5586278b9350: i64 = Register %vreg50
try.c: 0x558627855190: i64 = undef
try.c: 0x5586278b90f0: v4i64,ch = CopyFromReg 0x5586277b6a40, Register:v4i64 %vreg13
try.c: 0x5586278bcda0: v4i64 = Register %vreg13
try.c: 0x55862784f2c0: v16i32 = X86ISD::VBROADCAST 0x5586278bc7b0
try.c: 0x5586278bc7b0: i32,ch = load<LD4[ConstantPool]> 0x5586277b6a40, 0x558627851c60, undef:i64
try.c: 0x558627851c60: i64 = X86ISD::WrapperRIP TargetConstantPool:i64<i32 1> 0
try.c: 0x558627855b10: i64 = TargetConstantPool<i32 1> 0
try.c: 0x558627855190: i64 = undef
try.c: 0x5586278d64f0: v16i32 = BUILD_VECTOR Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>
try.c: 0x5586278d63c0: i32 = Constant<0>
try.c: 0x5586278d63c0: i32 = Constant<0>
try.c: 0x5586278d63c0: i32 = Constant<0>
try.c: 0x5586278d63c0: i32 = Constant<0>
try.c: 0x5586278d63c0: i32 = Constant<0>
try.c: 0x5586278d63c0: i32 = Constant<0>
try.c: 0x5586278d63c0: i32 = Constant<0>
try.c: 0x5586278d63c0: i32 = Constant<0>
try.c: 0x5586278d63c0: i32 = Constant<0>
try.c: ...

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

Compiler output

Implementation: T:mj32
Security model: timingleaks
Compiler: clang -march=native -O -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE
gep256.c: gep256.c:83:28: warning: sizeof on array function parameter will return size of 'fe *' (aka 'crypto_uint32 (*)[8]') instead of 'gep256' (aka 'fe [3]') [-Wsizeof-array-argument]
gep256.c: for (i = 0; i < sizeof p; ++i) x |= ((unsigned char *)p)[i];
gep256.c: ^
gep256.c: gep256.c:78:29: note: declared here
gep256.c: static int isneutral(gep256 p) {
gep256.c: ^
gep256.c: gep256.c:92:28: warning: sizeof on array function parameter will return size of 'fe *' (aka 'crypto_uint32 (*)[8]') instead of 'gep256_precomp' (aka 'fe [2]') [-Wsizeof-array-argument]
gep256.c: for (i = 0; i < sizeof p; ++i) x |= ((unsigned char *)p)[i];
gep256.c: ^
gep256.c: gep256.c:87:45: note: declared here
gep256.c: static int isneutral_precomp(gep256_precomp p) {
gep256.c: ^
gep256.c: 2 warnings generated.
try.c: fatal error: error in backend: Cannot select: 0x55e665703900: v4i64 = X86ISD::VTRUNC 0x55e6657037d0
try.c: 0x55e6657037d0: v16i32 = vselect 0x55e6656ff130, 0x55e665686ec0, 0x55e6657036a0
try.c: 0x55e6656ff130: v4i1 = X86ISD::PCMPGTM 0x55e6656e3980, 0x55e6656df510
try.c: 0x55e6656e3980: v4i64 = X86ISD::VBROADCAST 0x55e6656afb80
try.c: 0x55e6656afb80: i64,ch = load<LD8[%lsr.iv6971]> 0x55e6655f4900, 0x55e6656cdd90, undef:i64
try.c: 0x55e6656cdd90: i64,ch = CopyFromReg 0x55e6655f4900, Register:i64 %vreg50
try.c: 0x55e6656df770: i64 = Register %vreg50
try.c: 0x55e6656b1050: i64 = undef
try.c: 0x55e6656df510: v4i64,ch = CopyFromReg 0x55e6655f4900, Register:v4i64 %vreg13
try.c: 0x55e6656e41d0: v4i64 = Register %vreg13
try.c: 0x55e665686ec0: v16i32 = X86ISD::VBROADCAST 0x55e6656e3be0
try.c: 0x55e6656e3be0: i32,ch = load<LD4[ConstantPool]> 0x55e6655f4900, 0x55e665691860, undef:i64
try.c: 0x55e665691860: i64 = X86ISD::WrapperRIP TargetConstantPool:i64<i32 1> 0
try.c: 0x55e6656cef90: i64 = TargetConstantPool<i32 1> 0
try.c: 0x55e6656b1050: i64 = undef
try.c: 0x55e6657036a0: v16i32 = BUILD_VECTOR Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>
try.c: 0x55e665703570: i32 = Constant<0>
try.c: 0x55e665703570: i32 = Constant<0>
try.c: 0x55e665703570: i32 = Constant<0>
try.c: 0x55e665703570: i32 = Constant<0>
try.c: 0x55e665703570: i32 = Constant<0>
try.c: 0x55e665703570: i32 = Constant<0>
try.c: 0x55e665703570: i32 = Constant<0>
try.c: 0x55e665703570: i32 = Constant<0>
try.c: 0x55e665703570: i32 = Constant<0>
try.c: ...

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

Compiler output

Implementation: T:mj32
Security model: timingleaks
Compiler: clang -march=native -Os -fomit-frame-pointer -fwrapv -Qunused-arguments -fPIC -fPIE
gep256.c: gep256.c:83:28: warning: sizeof on array function parameter will return size of 'fe *' (aka 'crypto_uint32 (*)[8]') instead of 'gep256' (aka 'fe [3]') [-Wsizeof-array-argument]
gep256.c: for (i = 0; i < sizeof p; ++i) x |= ((unsigned char *)p)[i];
gep256.c: ^
gep256.c: gep256.c:78:29: note: declared here
gep256.c: static int isneutral(gep256 p) {
gep256.c: ^
gep256.c: gep256.c:92:28: warning: sizeof on array function parameter will return size of 'fe *' (aka 'crypto_uint32 (*)[8]') instead of 'gep256_precomp' (aka 'fe [2]') [-Wsizeof-array-argument]
gep256.c: for (i = 0; i < sizeof p; ++i) x |= ((unsigned char *)p)[i];
gep256.c: ^
gep256.c: gep256.c:87:45: note: declared here
gep256.c: static int isneutral_precomp(gep256_precomp p) {
gep256.c: ^
gep256.c: 2 warnings generated.

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

Compiler output

Implementation: T:mj32
Security model: timingleaks
Compiler: gcc -march=native -mtune=native -O2 -fomit-frame-pointer -fwrapv -fPIC -fPIE
gep256.c: gep256.c: In function 'isneutral':
gep256.c: gep256.c:83:28: warning: 'sizeof' on array function parameter 'p' will return size of 'crypto_uint32 (*)[8] {aka unsigned int (*)[8]}' [-Wsizeof-array-argument]
gep256.c: for (i = 0; i < sizeof p; ++i) x |= ((unsigned char *)p)[i];
gep256.c: ^
gep256.c: gep256.c:78:29: note: declared here
gep256.c: static int isneutral(gep256 p) {
gep256.c: ^
gep256.c: gep256.c: In function 'isneutral_precomp':
gep256.c: gep256.c:92:28: warning: 'sizeof' on array function parameter 'p' will return size of 'crypto_uint32 (*)[8] {aka unsigned int (*)[8]}' [-Wsizeof-array-argument]
gep256.c: for (i = 0; i < sizeof p; ++i) x |= ((unsigned char *)p)[i];
gep256.c: ^
gep256.c: gep256.c:87:45: note: declared here
gep256.c: static int isneutral_precomp(gep256_precomp p) {
gep256.c: ^

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