mirror of
https://github.com/Mbed-TLS/mbedtls.git
synced 2025-04-17 20:42:44 +00:00
Make mbedtls_xor always inline
Signed-off-by: Dave Rodgman <dave.rodgman@arm.com>
This commit is contained in:
parent
55b5dd2cfc
commit
18d90d7519
@ -158,6 +158,12 @@ static inline const unsigned char *mbedtls_buffer_offset_const(
|
|||||||
return p == NULL ? NULL : p + n;
|
return p == NULL ? NULL : p + n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Always inline mbedtls_xor for similar reasons as mbedtls_xor_no_simd. */
|
||||||
|
#if defined(__IAR_SYSTEMS_ICC__)
|
||||||
|
#pragma inline = forced
|
||||||
|
#elif defined(__GNUC__)
|
||||||
|
__attribute__((always_inline))
|
||||||
|
#endif
|
||||||
/**
|
/**
|
||||||
* Perform a fast block XOR operation, such that
|
* Perform a fast block XOR operation, such that
|
||||||
* r[i] = a[i] ^ b[i] where 0 <= i < n
|
* r[i] = a[i] ^ b[i] where 0 <= i < n
|
||||||
@ -169,7 +175,10 @@ static inline const unsigned char *mbedtls_buffer_offset_const(
|
|||||||
* \param b Pointer to input (buffer of at least \p n bytes)
|
* \param b Pointer to input (buffer of at least \p n bytes)
|
||||||
* \param n Number of bytes to process.
|
* \param n Number of bytes to process.
|
||||||
*/
|
*/
|
||||||
inline void mbedtls_xor(unsigned char *r, const unsigned char *a, const unsigned char *b, size_t n)
|
static inline void mbedtls_xor(unsigned char *r,
|
||||||
|
const unsigned char *a,
|
||||||
|
const unsigned char *b,
|
||||||
|
size_t n)
|
||||||
{
|
{
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
#if defined(MBEDTLS_EFFICIENT_UNALIGNED_ACCESS)
|
#if defined(MBEDTLS_EFFICIENT_UNALIGNED_ACCESS)
|
||||||
@ -209,6 +218,13 @@ inline void mbedtls_xor(unsigned char *r, const unsigned char *a, const unsigned
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Always inline mbedtls_xor_no_simd as we see significant perf regressions when it does not get
|
||||||
|
* inlined (e.g., observed about 3x perf difference in gcm_mult_largetable with gcc 7 - 12) */
|
||||||
|
#if defined(__IAR_SYSTEMS_ICC__)
|
||||||
|
#pragma inline = forced
|
||||||
|
#elif defined(__GNUC__)
|
||||||
|
__attribute__((always_inline))
|
||||||
|
#endif
|
||||||
/**
|
/**
|
||||||
* Perform a fast block XOR operation, such that
|
* Perform a fast block XOR operation, such that
|
||||||
* r[i] = a[i] ^ b[i] where 0 <= i < n
|
* r[i] = a[i] ^ b[i] where 0 <= i < n
|
||||||
|
@ -217,15 +217,6 @@ struct tm *mbedtls_platform_gmtime_r(const mbedtls_time_t *tt,
|
|||||||
void (*mbedtls_test_hook_test_fail)(const char *, int, const char *);
|
void (*mbedtls_test_hook_test_fail)(const char *, int, const char *);
|
||||||
#endif /* MBEDTLS_TEST_HOOKS */
|
#endif /* MBEDTLS_TEST_HOOKS */
|
||||||
|
|
||||||
/*
|
|
||||||
* Provide external definitions of some inline functions so that the compiler
|
|
||||||
* has the option to not inline them
|
|
||||||
*/
|
|
||||||
extern inline void mbedtls_xor(unsigned char *r,
|
|
||||||
const unsigned char *a,
|
|
||||||
const unsigned char *b,
|
|
||||||
size_t n);
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_HAVE_TIME) && !defined(MBEDTLS_PLATFORM_MS_TIME_ALT)
|
#if defined(MBEDTLS_HAVE_TIME) && !defined(MBEDTLS_PLATFORM_MS_TIME_ALT)
|
||||||
|
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user