|
@@ -1,5 +1,5 @@
|
|
|
/*
|
|
|
-r128.h: 128-bit (64.64) signed fixed-point arithmetic. Version 1.4.3
|
|
|
+r128.h: 128-bit (64.64) signed fixed-point arithmetic. Version 1.4.4
|
|
|
|
|
|
COMPILATION
|
|
|
-----------
|
|
@@ -76,8 +76,8 @@ OTHER DEALINGS IN THE SOFTWARE.
|
|
|
# include <stdint.h>
|
|
|
# define R128_S32 int32_t
|
|
|
# define R128_U32 uint32_t
|
|
|
-# define R128_S64 int64_t
|
|
|
-# define R128_U64 uint64_t
|
|
|
+# define R128_S64 long long
|
|
|
+# define R128_U64 unsigned long long
|
|
|
# define R128_LIT_S64(x) x##ll
|
|
|
# define R128_LIT_U64(x) x##ull
|
|
|
#endif
|
|
@@ -701,7 +701,7 @@ static R128_U32 r128__udiv64(R128_U32 nlo, R128_U32 nhi, R128_U32 d, R128_U32 *r
|
|
|
return (R128_U32)(n64 / d);
|
|
|
# endif
|
|
|
}
|
|
|
-#elif !defined(_M_X64) || defined(R128_STDC_ONLY)
|
|
|
+#elif defined(R128_STDC_ONLY) || !R128_INTEL
|
|
|
#define r128__umul64(a, b) ((a) * (R128_U64)(b))
|
|
|
static R128_U32 r128__udiv64(R128_U32 nlo, R128_U32 nhi, R128_U32 d, R128_U32 *rem)
|
|
|
{
|
|
@@ -799,7 +799,7 @@ static void r128__umul128(R128 *dst, R128_U64 a, R128_U64 b)
|
|
|
// MSVC x64 provides neither inline assembly nor (pre-2019) a div intrinsic, so we do fake
|
|
|
// "inline assembly" to avoid long division or outline assembly.
|
|
|
#pragma code_seg(".text")
|
|
|
-__declspec(allocate(".text")) static const unsigned char r128__udiv128Code[] = {
|
|
|
+__declspec(allocate(".text") align(16)) static const unsigned char r128__udiv128Code[] = {
|
|
|
0x48, 0x8B, 0xC1, //mov rax, rcx
|
|
|
0x49, 0xF7, 0xF0, //div rax, r8
|
|
|
0x49, 0x89, 0x11, //mov qword ptr [r9], rdx
|