OpenCore
1.0.4
OpenCore Bootloader
Loading...
Searching...
No Matches
BigNumWordMul64.c
Go to the documentation of this file.
1
14
#include "
../BigNumLib.h
"
15
16
#if defined (_MSC_VER) && !defined (__clang__)
17
#include <intrin.h>
18
#pragma intrinsic(_umul128)
19
#endif
20
21
OC_BN_WORD
22
BigNumWordMul64
(
23
OUT
OC_BN_WORD
*Hi,
24
IN
OC_BN_WORD
A,
25
IN
OC_BN_WORD
B
26
)
27
{
28
ASSERT
(
OC_BN_WORD_SIZE
==
sizeof
(UINT64));
29
ASSERT
(Hi != NULL);
30
31
#if !defined (_MSC_VER) || defined (__clang__)
32
//
33
// Clang and GCC support the __int128 type for edk2 builds.
34
//
35
unsigned
__int128 Result = (
unsigned
__int128)A * B;
36
*Hi = (
OC_BN_WORD
)(Result >>
OC_BN_WORD_NUM_BITS
);
37
return
(
OC_BN_WORD
)Result;
38
#else
39
//
40
// MSVC does not support the __int128 type for edk2 builds, but a proprietary
41
// intrinsic function declared above.
42
//
43
return
_umul128 (A, B, Hi);
44
#endif
45
}
BigNumLib.h
OC_BN_WORD
UINTN OC_BN_WORD
Definition
BigNumLib.h:26
OC_BN_WORD_SIZE
#define OC_BN_WORD_SIZE
Definition
BigNumLib.h:30
OC_BN_WORD_NUM_BITS
#define OC_BN_WORD_NUM_BITS
Definition
BigNumLib.h:31
BigNumWordMul64
OC_BN_WORD BigNumWordMul64(OUT OC_BN_WORD *Hi, IN OC_BN_WORD A, IN OC_BN_WORD B)
Definition
BigNumWordMul64.c:17
ASSERT
#define ASSERT(x)
Definition
coder.h:55
Library
OcCryptoLib
Cpu64
BigNumWordMul64.c
Generated by
1.12.0