fix msvc type cast fail.
GCC needs the `cast` due to incompatible type error Signed-off-by: Jerry Yu <jerry.h.yu@arm.com>
This commit is contained in:
parent
07d28d8598
commit
9db4b1f455
1 changed files with 15 additions and 3 deletions
|
@ -296,12 +296,24 @@ static inline poly64_t vget_low_p64(poly64x2_t __a)
|
||||||
* Older compilers miss some intrinsic functions for `poly*_t`. We use
|
* Older compilers miss some intrinsic functions for `poly*_t`. We use
|
||||||
* uint8x16_t and uint8x16x3_t as input/output parameters.
|
* uint8x16_t and uint8x16x3_t as input/output parameters.
|
||||||
*/
|
*/
|
||||||
|
#if defined(__GNUC__) && !defined(__clang__)
|
||||||
|
/* GCC reports incompatible type error without cast. GCC think poly64_t and
|
||||||
|
* poly64x1_t are different, that is different with MSVC and Clang. */
|
||||||
|
#define MBEDTLS_VMULL_P64(a, b) vmull_p64((poly64_t) a, (poly64_t) b)
|
||||||
|
#else
|
||||||
|
/* MSVC reports `error C2440: 'type cast'` with cast. Clang does not report
|
||||||
|
* error with/without cast. And I think poly64_t and poly64x1_t are same, no
|
||||||
|
* cast for clang also. */
|
||||||
|
#define MBEDTLS_VMULL_P64(a, b) vmull_p64(a, b)
|
||||||
|
#endif
|
||||||
static inline uint8x16_t pmull_low(uint8x16_t a, uint8x16_t b)
|
static inline uint8x16_t pmull_low(uint8x16_t a, uint8x16_t b)
|
||||||
{
|
{
|
||||||
|
|
||||||
return vreinterpretq_u8_p128(
|
return vreinterpretq_u8_p128(
|
||||||
vmull_p64(
|
MBEDTLS_VMULL_P64(
|
||||||
(poly64_t) vget_low_p64(vreinterpretq_p64_u8(a)),
|
vget_low_p64(vreinterpretq_p64_u8(a)),
|
||||||
(poly64_t) vget_low_p64(vreinterpretq_p64_u8(b))));
|
vget_low_p64(vreinterpretq_p64_u8(b))
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline uint8x16_t pmull_high(uint8x16_t a, uint8x16_t b)
|
static inline uint8x16_t pmull_high(uint8x16_t a, uint8x16_t b)
|
||||||
|
|
Loading…
Reference in a new issue