Add invalid_float (from opcodes/ns32k-dis.c).

This commit is contained in:
matthias 1999-03-02 07:59:33 +00:00
parent 31289a4af8
commit 5748a83696
1 changed files with 48 additions and 0 deletions

View File

@ -26,6 +26,54 @@ _initialize_ns32k_tdep ()
tm_print_insn = print_insn_ns32k;
}
static int
bit_extract (buffer, offset, count)
char *buffer;
int offset;
int count;
{
int result;
int mask;
int bit;
buffer += offset >> 3;
offset &= 7;
bit = 1;
result = 0;
while (count--)
{
if ((*buffer & (1 << offset)))
result |= bit;
if (++offset == 8)
{
offset = 0;
buffer++;
}
bit <<= 1;
}
return result;
}
invalid_float(p, len)
register char *p;
register int len;
{
register val;
if ( len == 4 )
val = (bit_extract(p, 23, 8)/*exponent*/ == 0xff
|| (bit_extract(p, 23, 8)/*exponent*/ == 0 &&
bit_extract(p, 0, 23)/*mantisa*/ != 0));
else if ( len == 8 )
val = (bit_extract(p, 52, 11)/*exponent*/ == 0x7ff
|| (bit_extract(p, 52, 11)/*exponent*/ == 0
&& (bit_extract(p, 0, 32)/*low mantisa*/ != 0
|| bit_extract(p, 32, 20)/*high mantisa*/ != 0)));
else
val = 1;
return (val);
}
sign_extend (value, bits)
{
value = value & ((1 << bits) - 1);