X86-64 ABI mandates that wrt. argument passing, i128 is considered as a struct {i64, i64}
and thus that it cannot be split across register and stack.
GCC already implements this behavior, while clang doesn't, which can cause
subtle runtime issues when mixing both object files.
As a side effect, share some code between 32 and 64 bit implementation.
clang-tidy: warning: invalid case style for function 'NotEnoughRemaingRegisters' [readability-identifier-naming]
not useful