diff options
author | Marat Dukhan <maratek@gmail.com> | 2020-04-12 15:30:45 -0700 |
---|---|---|
committer | Marat Dukhan <maratek@gmail.com> | 2020-04-12 15:30:45 -0700 |
commit | 8480d4e85d3703219e24603e3d5d00deebf6223d (patch) | |
tree | f50d0756e7e3353a810df76c11ef0cffce14edc3 | |
parent | dd41a288bc6ffa5afa54bd425b75fa7562f575ab (diff) | |
download | FXdiv-8480d4e85d3703219e24603e3d5d00deebf6223d.tar.gz |
Add disabled 128 / 64 -> 64 division implementation using __int128
-rw-r--r-- | include/fxdiv.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/include/fxdiv.h b/include/fxdiv.h index 918ad9e..aa97340 100644 --- a/include/fxdiv.h +++ b/include/fxdiv.h @@ -267,6 +267,9 @@ static inline struct fxdiv_divisor_uint64_t fxdiv_init_uint64_t(uint64_t d) { __asm__("DIVQ %[d]" : "=a" (q), "+d" (u_hi) : [d] "r" (d), "a" (UINT64_C(0))); + #elif 0 && defined(__GNUC__) && defined(__SIZEOF_INT128__) + /* GCC, Clang, and Intel Compiler fail to inline optimized implementation and call into support library for 128-bit division */ + const uint64_t q = (uint64_t) (((unsigned __int128) u_hi << 64) / ((unsigned __int128) d)); #elif (defined(_MSC_VER) && _MSC_VER >= 1920) && defined(_M_X64) unsigned __int64 remainder; const uint64_t q = (uint64_t) _udiv128((unsigned __int64) u_hi, 0, (unsigned __int64) d, &remainder); |