#include #include "platform.h" #include "primitives.h" struct uint128_extra softfloat_shift128ExtraRightJam( uint64_t a64, uint64_t a0, uint64_t extra, unsigned int count ) { unsigned int negCount; struct uint128_extra z; negCount = - count; if ( count < 64 ) { z.v64 = a64>>count; z.v0 = a64<<( negCount & 63 ) | a0>>count; z.extra = a0<<( negCount & 63 ); } else { z.v64 = 0; if ( count == 64 ) { z.v0 = a64; z.extra = a0; } else { extra |= a0; if ( count < 128 ) { z.v0 = a64>>( count & 63 ); z.extra = a64<<( negCount & 63 ); } else { z.v0 = 0; z.extra = ( count == 128 ) ? a64 : ( a64 != 0 ); } } } z.extra |= ( extra != 0 ); return z; }