Ilya Kurdyukov

Results 48 comments of Ilya Kurdyukov

@pmetzger > Some platforms provide this type but do 128 bit arithmetic with multiple instructions emitted by the compiler so there's no performance advantage. I'm not sure how you can...

The performance of bignums multiplication on examples from my project: x86_64 plain C code (`u32*u32->u64`): 3.388s x86_64 SSE2 (`u32*u32->u64`): 2.431s x86_64 AVX2 (`u32*u32->u64`): 1.357s x86_64 plain C code (`u64*u64->u128`): 0.775s...

> Some platforms provide this type but do 128 bit arithmetic with multiple instructions emitted by the compiler so there's no performance advantage. I'm not sure how you can tell...

Tests on godbolt.org show that __int128 is supported in GCC >= 4.6.4, GCC = 3.1, Clang

> Is there a gcc and/or clang way to use __int128 and unsigned __int128 constants, as in something like: > > ```c > __int128 a = 0x123456789abcdef0123456789abcdef0LLL; /* ??? */...

This type should be used for: 1) get a carry after adding/subtracting 64-bit integers. 2) to get the high part of the multiplication result of two 64-bit integers. For these...

The u128/u64 integer division seems inefficient, even though x86_64 has such an instruction, but both GCC and Clang issue a call to the `__udivti3` function. ```c unsigned long long test_divide(unsigned...

I think replacing HALF/FULL for all `calc` sources will require a lot of editing. And it may reduce the performance of some parts. But I can just write an alternative...

> Some arithemetic operations be by sub-optimal in certain cases on certain architectures Same as 64-bit FULL would be on 32-bit architectures for some operations. I don't think LONG_BITS =...

> Divide a double BASEB by a BASEB and get a BASEB dividend and a BASEB remainder And it can, but it's done through a library function call. What can...