Work with uint128? If you can, use the x86 SSE instructions that were designed specifically for this. (Then, when you have lost your value, you are ready to perform other 128-bit operations ...)
SSE2 4 , (case case). 32 . - gcc-intrinsics, raw-, sseutil.c(github: " SSE2" ) - , . SSE2 , shift () . C (wordpress: C). , :
LeftShift (uint128 x, int n) = _mm_slli_epi64 (_mm_slli_si128 (x, n/8), n% 8) n = 65..71, 73..79,... 121..127
... .