You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
927 B
38 lines
927 B
|
|
#include <stdint.h>
|
|
#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;
|
|
|
|
}
|
|
|
|
|