Size/perf optimisation for mbedtls_mpi_core_clz

Signed-off-by: Dave Rodgman <dave.rodgman@arm.com>
This commit is contained in:
Dave Rodgman 2023-04-19 17:40:28 +01:00
parent 3c3b94a31b
commit fe8a8cd100
3 changed files with 102 additions and 0 deletions

View file

@ -309,6 +309,43 @@ exit:
}
/* END_CASE */
/* BEGIN_CASE */
void mpi_core_clz(int lz, int tz)
{
if ((size_t) (lz + tz) >= (sizeof(mbedtls_mpi_uint) * 8)) {
// can't fit required number of leading and trailing zeros - skip test
goto exit;
}
mbedtls_mpi_uint x;
size_t expected;
// generate x with lz leading zeros and tz trailing zeros, all other bits set.
if (lz == -1) {
// special case: all zero
x = 0;
expected = sizeof(mbedtls_mpi_uint) * 8;
} else {
expected = lz;
if ((lz + tz) > 0) {
// some zero bits
uint32_t s = (sizeof(mbedtls_mpi_uint) * 8 - lz - tz);
x = ((1ULL << s) - 1) << tz;
} else {
// all bits set
x = ~0ULL;
}
}
size_t n = mbedtls_mpi_core_clz(x);
TEST_EQUAL(n, expected);
exit:
;
}
/* END_CASE */
/* BEGIN_CASE */
void mpi_core_lt_ct(char *input_X, char *input_Y, int exp_ret)
{

View file

@ -491,3 +491,38 @@ mpi_core_fill_random:42:0:-1:0:MBEDTLS_ERR_MPI_BAD_INPUT_DATA
Fill random core: 42 bytes, 5 missing limbs
mpi_core_fill_random:42:0:-5:0:MBEDTLS_ERR_MPI_BAD_INPUT_DATA
CLZ: 0 0: all ones
mpi_core_clz:0:0
CLZ: -1 -1: all zeros
mpi_core_clz:-1:-1
CLZ: 1 0
mpi_core_clz:1:0
CLZ: 1 1
mpi_core_clz:1:1
CLZ: 4 5
mpi_core_clz:4:5
CLZ: 8 16
mpi_core_clz:8:16
CLZ: 31 0
mpi_core_clz:31:0
CLZ: 32 0
mpi_core_clz:32:0
CLZ: 33 0
mpi_core_clz:33:0
CLZ: 63 0
mpi_core_clz:63:0
CLZ: 64 0
mpi_core_clz:64:0
CLZ: 100000 0: skip overly long input
mpi_core_clz:100000:0