Implementation notes: aarch64, pi4b, crypto_aead/pi16cipher128v2

Computer: pi4b
Microarchitecture: aarch64; Cortex-A72 (410fd083)
Architecture: aarch64
CPU ID: 410fd083
SUPERCOP version: 20240716
Operation: crypto_aead
Primitive: pi16cipher128v2
TimeObject sizeTest sizeImplementationCompilerBenchmark dateSUPERCOP version
21327017255 8 032682 888 864T:goptvgcc_-march=native_-mtune=native_-O2_-fwrapv_-fPIC_-fPIE_-gdwarf-4_-Wall2024062920240625
21513818623 8 035090 888 880T:goptvgcc_-march=native_-mtune=native_-O3_-fwrapv_-fPIC_-fPIE_-gdwarf-4_-Wall2024062920240625
24170616723 8 032137 880 864T:goptvgcc_-march=native_-mtune=native_-O_-fwrapv_-fPIC_-fPIE_-gdwarf-4_-Wall2024062920240625
4107188615 8 023034 872 856T:goptvgcc_-march=native_-mtune=native_-Os_-fwrapv_-fPIC_-fPIE_-gdwarf-4_-Wall2024062920240625
4265406099 8 023233 904 872T:ref3clang_-mcpu=native_-O3_-fwrapv_-Qunused-arguments_-fPIC_-fPIE_-gdwarf-4_-Wall2024062920240625
4407587539 8 024673 904 872T:ref2clang_-mcpu=native_-O3_-fwrapv_-Qunused-arguments_-fPIC_-fPIE_-gdwarf-4_-Wall2024062920240625
6824647251 8 023698 888 880T:ref3gcc_-march=native_-mtune=native_-O3_-fwrapv_-fPIC_-fPIE_-gdwarf-4_-Wall2024062920240625
6966826931 8 022330 888 864T:ref3gcc_-march=native_-mtune=native_-O2_-fwrapv_-fPIC_-fPIE_-gdwarf-4_-Wall2024062920240625
7535545351 8 019682 872 856T:ref3gcc_-march=native_-mtune=native_-Os_-fwrapv_-fPIC_-fPIE_-gdwarf-4_-Wall2024062920240625
8815165779 8 021185 880 864T:ref3gcc_-march=native_-mtune=native_-O_-fwrapv_-fPIC_-fPIE_-gdwarf-4_-Wall2024062920240625
24597147279 8 022714 888 864T:ref2gcc_-march=native_-mtune=native_-O2_-fwrapv_-fPIC_-fPIE_-gdwarf-4_-Wall2024062920240625
26018945651 8 019978 872 856T:ref2gcc_-march=native_-mtune=native_-Os_-fwrapv_-fPIC_-fPIE_-gdwarf-4_-Wall2024062920240625
28436006187 8 021593 880 864T:ref2gcc_-march=native_-mtune=native_-O_-fwrapv_-fPIC_-fPIE_-gdwarf-4_-Wall2024062920240625

Compiler output


pi-cipher.c: pi-cipher.c:286:9: error: use of unknown builtin '__builtin_shuffle' [-Wimplicit-function-declaration]
pi-cipher.c:         n_t += __builtin_shuffle(y, g_mask);
pi-cipher.c:                ^
pi-cipher.c: pi-cipher.c:286:6: error: cannot convert between scalar type 'int' and vector type 'vchunk_t' (vector of 4 'word_t' values) as implicit conversion would cause truncation
pi-cipher.c:         n_t += __builtin_shuffle(y, g_mask);
pi-cipher.c:             ^
pi-cipher.c: pi-cipher.c:287:6: error: cannot convert between scalar type 'int' and vector type 'vchunk_t' (vector of 4 'word_t' values) as implicit conversion would cause truncation
pi-cipher.c:         n_t += __builtin_shuffle(y, n_mask);
pi-cipher.c:             ^
pi-cipher.c: pi-cipher.c:290:6: error: cannot convert between scalar type 'int' and vector type 'vchunk_t' (vector of 4 'word_t' values) as implicit conversion would cause truncation
pi-cipher.c:         n_t ^= __builtin_shuffle(n_t, n_x_1) ^ __builtin_shuffle(n_t, n_x_2);
pi-cipher.c:             ^
pi-cipher.c: pi-cipher.c:305:9: error: use of unknown builtin '__builtin_shuffle' [-Wimplicit-function-declaration]
pi-cipher.c:         m_t += __builtin_shuffle(x, g_mask);
pi-cipher.c:                ^
pi-cipher.c: pi-cipher.c:305:6: error: cannot convert between scalar type 'int' and vector type 'vchunk_t' (vector of 4 'word_t' values) as implicit conversion would cause truncation
pi-cipher.c:         m_t += __builtin_shuffle(x, g_mask);
pi-cipher.c:             ^
pi-cipher.c: pi-cipher.c:306:6: error: cannot convert between scalar type 'int' and vector type 'vchunk_t' (vector of 4 'word_t' values) as implicit conversion would cause truncation
pi-cipher.c:         m_t += __builtin_shuffle(x, m_mask);
pi-cipher.c:             ^
pi-cipher.c: pi-cipher.c:309:6: error: cannot convert between scalar type 'int' and vector type 'vchunk_t' (vector of 4 'word_t' values) as implicit conversion would cause truncation
pi-cipher.c:         m_t ^= __builtin_shuffle(m_t, m_x_1) ^ __builtin_shuffle(m_t, m_x_2);
pi-cipher.c:             ^
pi-cipher.c: pi-cipher.c:354:9: error: use of unknown builtin '__builtin_shuffle' [-Wimplicit-function-declaration]
pi-cipher.c: ...

Number of similar (implementation,compiler) pairs: 1, namely:
ImplementationCompiler
T:goptvclang -mcpu=native -O3 -fwrapv -Qunused-arguments -fPIC -fPIE -gdwarf-4 -Wall (Ubuntu_Clang_14.0.0)

Compiler output


pi-cipher.c: pi-cipher.c: In function 'pi16_init':
pi-cipher.c: pi-cipher.c:842:5: warning: 'pi' accessing 32 bytes in a region of size 8 [-Wstringop-overflow=]
pi-cipher.c:   842 |     pi(ctx->cis);
pi-cipher.c:       |     ^~~~~~~~~~~~
pi-cipher.c: pi-cipher.c:842:5: note: referencing argument 1 of type 'word_t (*)[4]' {aka 'short unsigned int (*)[4]'}
pi-cipher.c: pi-cipher.c:649:13: note: in a call to function 'pi'
pi-cipher.c:   649 | static void pi(
pi-cipher.c:       |             ^~

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

Compiler output


encrypt.c: encrypt.c:250:20: warning: unused variable 'x2' [-Wunused-variable]
encrypt.c:  u_int16_t x0, x1, x2, x3, y0, y1, y2, y3, z0, z1, z2, z3;
encrypt.c:                    ^
encrypt.c: encrypt.c:252:50: warning: variable 'k16' set but not used [-Wunused-but-set-variable]
encrypt.c:  u_int16_t *c16, *m16, *ad16, *nsec16, *npub16, *k16;
encrypt.c:                                                  ^
encrypt.c: encrypt.c:250:16: warning: unused variable 'x1' [-Wunused-variable]
encrypt.c:  u_int16_t x0, x1, x2, x3, y0, y1, y2, y3, z0, z1, z2, z3;
encrypt.c:                ^
encrypt.c: encrypt.c:266:31: warning: unused variable 'ii' [-Wunused-variable]
encrypt.c:  unsigned long long i, j, jj, ii, b, i1, j1, a;
encrypt.c:                               ^
encrypt.c: encrypt.c:252:41: warning: variable 'npub16' set but not used [-Wunused-but-set-variable]
encrypt.c:  u_int16_t *c16, *m16, *ad16, *nsec16, *npub16, *k16;
encrypt.c:                                         ^
encrypt.c: encrypt.c:250:28: warning: unused variable 'y0' [-Wunused-variable]
encrypt.c:  u_int16_t x0, x1, x2, x3, y0, y1, y2, y3, z0, z1, z2, z3;
encrypt.c:                            ^
encrypt.c: encrypt.c:250:24: warning: unused variable 'x3' [-Wunused-variable]
encrypt.c:  u_int16_t x0, x1, x2, x3, y0, y1, y2, y3, z0, z1, z2, z3;
encrypt.c:                        ^
encrypt.c: encrypt.c:250:12: warning: unused variable 'x0' [-Wunused-variable]
encrypt.c:  u_int16_t x0, x1, x2, x3, y0, y1, y2, y3, z0, z1, z2, z3;
encrypt.c:            ^
encrypt.c: encrypt.c:250:56: warning: unused variable 'z3' [-Wunused-variable]
encrypt.c: ...

Number of similar (implementation,compiler) pairs: 1, namely:
ImplementationCompiler
T:optimized_nonSSEclang -mcpu=native -O3 -fwrapv -Qunused-arguments -fPIC -fPIE -gdwarf-4 -Wall (Ubuntu_Clang_14.0.0)

Compiler output


encrypt.c: encrypt.c: In function 'crypto_aead_pi16cipher128v2_optimized_nonSSE_timingleaks_encrypt':
encrypt.c: encrypt.c:266:42: warning: unused variable 'j1' [-Wunused-variable]
encrypt.c:   266 |  unsigned long long i, j, jj, ii, b, i1, j1, a;
encrypt.c:       |                                          ^~
encrypt.c: encrypt.c:266:31: warning: unused variable 'ii' [-Wunused-variable]
encrypt.c:   266 |  unsigned long long i, j, jj, ii, b, i1, j1, a;
encrypt.c:       |                               ^~
encrypt.c: encrypt.c:262:31: warning: variable 'CommonInternalState8' set but not used [-Wunused-but-set-variable]
encrypt.c:   262 |  u_int8_t   *InternalState8, *CommonInternalState8, *tempTag8;
encrypt.c:       |                               ^~~~~~~~~~~~~~~~~~~~
encrypt.c: encrypt.c:252:50: warning: variable 'k16' set but not used [-Wunused-but-set-variable]
encrypt.c:   252 |  u_int16_t *c16, *m16, *ad16, *nsec16, *npub16, *k16;
encrypt.c:       |                                                  ^~~
encrypt.c: encrypt.c:252:41: warning: variable 'npub16' set but not used [-Wunused-but-set-variable]
encrypt.c:   252 |  u_int16_t *c16, *m16, *ad16, *nsec16, *npub16, *k16;
encrypt.c:       |                                         ^~~~~~
encrypt.c: encrypt.c:250:56: warning: unused variable 'z3' [-Wunused-variable]
encrypt.c:   250 |  u_int16_t x0, x1, x2, x3, y0, y1, y2, y3, z0, z1, z2, z3;
encrypt.c:       |                                                        ^~
encrypt.c: encrypt.c:250:52: warning: unused variable 'z2' [-Wunused-variable]
encrypt.c:   250 |  u_int16_t x0, x1, x2, x3, y0, y1, y2, y3, z0, z1, z2, z3;
encrypt.c:       |                                                    ^~
encrypt.c: encrypt.c:250:48: warning: unused variable 'z1' [-Wunused-variable]
encrypt.c:   250 |  u_int16_t x0, x1, x2, x3, y0, y1, y2, y3, z0, z1, z2, z3;
encrypt.c:       |                                                ^~
encrypt.c: ...

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

Compiler output


encrypt.c: encrypt.c:136:44: warning: unused variable 'z0' [-Wunused-variable]
encrypt.c:  u_int16_t x0, x1, x2, x3, y0, y1, y2, y3, z0, z1, z2, z3;
encrypt.c:                                            ^
encrypt.c: encrypt.c:136:48: warning: unused variable 'z1' [-Wunused-variable]
encrypt.c:  u_int16_t x0, x1, x2, x3, y0, y1, y2, y3, z0, z1, z2, z3;
encrypt.c:                                                ^
encrypt.c: encrypt.c:136:32: warning: unused variable 'y1' [-Wunused-variable]
encrypt.c:  u_int16_t x0, x1, x2, x3, y0, y1, y2, y3, z0, z1, z2, z3;
encrypt.c:                                ^
encrypt.c: encrypt.c:136:40: warning: unused variable 'y3' [-Wunused-variable]
encrypt.c:  u_int16_t x0, x1, x2, x3, y0, y1, y2, y3, z0, z1, z2, z3;
encrypt.c:                                        ^
encrypt.c: encrypt.c:136:36: warning: unused variable 'y2' [-Wunused-variable]
encrypt.c:  u_int16_t x0, x1, x2, x3, y0, y1, y2, y3, z0, z1, z2, z3;
encrypt.c:                                    ^
encrypt.c: encrypt.c:148:31: warning: variable 'CommonInternalState8' set but not used [-Wunused-but-set-variable]
encrypt.c:  u_int8_t   *InternalState8, *CommonInternalState8, *tempTag8;
encrypt.c:                               ^
encrypt.c: encrypt.c:136:52: warning: unused variable 'z2' [-Wunused-variable]
encrypt.c:  u_int16_t x0, x1, x2, x3, y0, y1, y2, y3, z0, z1, z2, z3;
encrypt.c:                                                    ^
encrypt.c: encrypt.c:138:50: warning: variable 'k16' set but not used [-Wunused-but-set-variable]
encrypt.c:  u_int16_t *c16, *m16, *ad16, *nsec16, *npub16, *k16;
encrypt.c:                                                  ^
encrypt.c: encrypt.c:152:42: warning: unused variable 'j1' [-Wunused-variable]
encrypt.c: ...

Number of similar (implementation,compiler) pairs: 1, namely:
ImplementationCompiler
T:refclang -mcpu=native -O3 -fwrapv -Qunused-arguments -fPIC -fPIE -gdwarf-4 -Wall (Ubuntu_Clang_14.0.0)

Compiler output


encrypt.c: encrypt.c: In function 'crypto_aead_pi16cipher128v2_ref_timingleaks_encrypt':
encrypt.c: encrypt.c:152:42: warning: unused variable 'j1' [-Wunused-variable]
encrypt.c:   152 |  unsigned long long i, j, jj, ii, b, i1, j1, a;
encrypt.c:       |                                          ^~
encrypt.c: encrypt.c:148:31: warning: variable 'CommonInternalState8' set but not used [-Wunused-but-set-variable]
encrypt.c:   148 |  u_int8_t   *InternalState8, *CommonInternalState8, *tempTag8;
encrypt.c:       |                               ^~~~~~~~~~~~~~~~~~~~
encrypt.c: encrypt.c:138:50: warning: variable 'k16' set but not used [-Wunused-but-set-variable]
encrypt.c:   138 |  u_int16_t *c16, *m16, *ad16, *nsec16, *npub16, *k16;
encrypt.c:       |                                                  ^~~
encrypt.c: encrypt.c:138:41: warning: variable 'npub16' set but not used [-Wunused-but-set-variable]
encrypt.c:   138 |  u_int16_t *c16, *m16, *ad16, *nsec16, *npub16, *k16;
encrypt.c:       |                                         ^~~~~~
encrypt.c: encrypt.c:136:56: warning: unused variable 'z3' [-Wunused-variable]
encrypt.c:   136 |  u_int16_t x0, x1, x2, x3, y0, y1, y2, y3, z0, z1, z2, z3;
encrypt.c:       |                                                        ^~
encrypt.c: encrypt.c:136:52: warning: unused variable 'z2' [-Wunused-variable]
encrypt.c:   136 |  u_int16_t x0, x1, x2, x3, y0, y1, y2, y3, z0, z1, z2, z3;
encrypt.c:       |                                                    ^~
encrypt.c: encrypt.c:136:48: warning: unused variable 'z1' [-Wunused-variable]
encrypt.c:   136 |  u_int16_t x0, x1, x2, x3, y0, y1, y2, y3, z0, z1, z2, z3;
encrypt.c:       |                                                ^~
encrypt.c: encrypt.c:136:44: warning: unused variable 'z0' [-Wunused-variable]
encrypt.c:   136 |  u_int16_t x0, x1, x2, x3, y0, y1, y2, y3, z0, z1, z2, z3;
encrypt.c:       |                                            ^~
encrypt.c: ...

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

Compiler output


pi-cipher.c: In function 'mu',
pi-cipher.c:     inlined from 'ast' at pi-cipher.c:257:5:
pi-cipher.c: pi-cipher.c:226:5: warning: 'phi' reading 8 bytes from a region of size 4 [-Wstringop-overread]
pi-cipher.c:   226 |     phi(t, x, mu_const, mu_v_const, mu_rot_const);
pi-cipher.c:       |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
pi-cipher.c: pi-cipher.c: In function 'ast':
pi-cipher.c: pi-cipher.c:226:5: note: referencing argument 4 of type 'const uint8_t *' {aka 'const unsigned char *'}
pi-cipher.c: pi-cipher.c:175:13: note: in a call to function 'phi'
pi-cipher.c:   175 | static void phi(
pi-cipher.c:       |             ^~~
pi-cipher.c: In function 'ny',
pi-cipher.c:     inlined from 'ast' at pi-cipher.c:258:5:
pi-cipher.c: pi-cipher.c:237:5: warning: 'phi' reading 8 bytes from a region of size 4 [-Wstringop-overread]
pi-cipher.c:   237 |     phi(dest, x, ny_const, ny_v_const, ny_rot_const);
pi-cipher.c:       |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
pi-cipher.c: pi-cipher.c: In function 'ast':
pi-cipher.c: pi-cipher.c:237:5: note: referencing argument 4 of type 'const uint8_t *' {aka 'const unsigned char *'}
pi-cipher.c: pi-cipher.c:175:13: note: in a call to function 'phi'
pi-cipher.c:   175 | static void phi(
pi-cipher.c:       |             ^~~

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

Compiler output


pi-cipher.c: In function 'mu',
pi-cipher.c:     inlined from 'ast' at pi-cipher.c:257:5,
pi-cipher.c:     inlined from 'e1' at pi-cipher.c:271:9,
pi-cipher.c:     inlined from 'pi' at pi-cipher.c:305:9:
pi-cipher.c: pi-cipher.c:226:5: warning: 'phi' reading 8 bytes from a region of size 4 [-Wstringop-overread]
pi-cipher.c:   226 |     phi(t, x, mu_const, mu_v_const, mu_rot_const);
pi-cipher.c:       |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
pi-cipher.c: pi-cipher.c: In function 'pi':
pi-cipher.c: pi-cipher.c:226:5: note: referencing argument 4 of type 'const uint8_t *' {aka 'const unsigned char *'}
pi-cipher.c: pi-cipher.c:175:13: note: in a call to function 'phi'
pi-cipher.c:   175 | static void phi(
pi-cipher.c:       |             ^~~
pi-cipher.c: In function 'ny',
pi-cipher.c:     inlined from 'ast' at pi-cipher.c:258:5,
pi-cipher.c:     inlined from 'e1' at pi-cipher.c:271:9,
pi-cipher.c:     inlined from 'pi' at pi-cipher.c:305:9:
pi-cipher.c: pi-cipher.c:237:5: warning: 'phi' reading 8 bytes from a region of size 4 [-Wstringop-overread]
pi-cipher.c:   237 |     phi(dest, x, ny_const, ny_v_const, ny_rot_const);
pi-cipher.c:       |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
pi-cipher.c: pi-cipher.c: In function 'pi':
pi-cipher.c: pi-cipher.c:237:5: note: referencing argument 4 of type 'const uint8_t *' {aka 'const unsigned char *'}
pi-cipher.c: pi-cipher.c:175:13: note: in a call to function 'phi'
pi-cipher.c:   175 | static void phi(
pi-cipher.c:       |             ^~~
pi-cipher.c: In function 'mu',
pi-cipher.c: ...

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