7324473f89
This imports selected files from the src directory of this repository: https://sourceforge.net/p/ed448goldilocks/code/ci/v0.9.4/tree/ This is from the version tagged as "v0.9.4" with commit id 7527e9. This code was originally writting by Mike Hamburg and the import is done by kind permission of Rambus and Mike Hamburg under CLA. As this is under CLA the files are being relicensed under the OpenSSL licence. Subsequent commits will correct any licence notices in the individual files. These files should provide complete self-contained support for X448 and Ed448. They are imported "as is" from the source repository and this commit does not attempt to integrate them into the OpenSSL build system, or modify them in any way to fit OpenSSL style guidelines. That will be done by subsequent commits. Reviewed-by: Bernd Edlinger <bernd.edlinger@hotmail.de> (Merged from https://github.com/openssl/openssl/pull/5105)
24 lines
717 B
C
24 lines
717 B
C
/* Copyright (c) 2016 Cryptography Research, Inc.
|
|
* Released under the MIT License. See LICENSE.txt for license information.
|
|
*/
|
|
|
|
#ifndef __ARCH_NEON_ARCH_INTRINSICS_H__
|
|
#define __ARCH_NEON_ARCH_INTRINSICS_H__
|
|
|
|
#define ARCH_WORD_BITS 32
|
|
|
|
static __inline__ __attribute((always_inline,unused))
|
|
uint32_t word_is_zero(uint32_t a) {
|
|
uint32_t ret;
|
|
__asm__("subs %0, %1, #1;\n\tsbc %0, %0, %0" : "=r"(ret) : "r"(a) : "cc");
|
|
return ret;
|
|
}
|
|
|
|
static __inline__ __attribute((always_inline,unused))
|
|
uint64_t widemul(uint32_t a, uint32_t b) {
|
|
/* Could be UMULL, but it's hard to express to CC that the registers must be different */
|
|
return ((uint64_t)a) * b;
|
|
}
|
|
|
|
#endif /* __ARCH_NEON_ARCH_INTRINSICS_H__ */
|
|
|