changes for different byte orderings
This commit is contained in:
parent
07f019213d
commit
13ea4896b0
|
@ -23,8 +23,13 @@ _double d1,d2;
|
|||
int sign1,sign2;
|
||||
int rv;
|
||||
|
||||
#if FL_MSL_AT_LOW_ADDRESS
|
||||
l1 = get4((char *)&d1);
|
||||
l2 = get4((char *)&d2);
|
||||
#else
|
||||
l1 = get4(((char *)&d1+4));
|
||||
l2 = get4(((char *)&d2+4));
|
||||
#endif
|
||||
sign1 = SIGN(l1);
|
||||
sign2 = SIGN(l2);
|
||||
if (sign1 != sign2) {
|
||||
|
@ -39,8 +44,13 @@ _double d1,d2;
|
|||
}
|
||||
else { /* decide in 2nd half */
|
||||
unsigned long u1, u2;
|
||||
#if FL_MSL_AT_LOW_ADDRESS
|
||||
u1 = get4(((char *)&d1 + 4));
|
||||
u2 = get4(((char *)&d2 + 4));
|
||||
#else
|
||||
u1 = get4((char *)&d1);
|
||||
u2 = get4((char *)&d2);
|
||||
#endif
|
||||
if (u1 == u2)
|
||||
return(0);
|
||||
if (u1 < u2) rv = 1;
|
||||
|
|
|
@ -108,8 +108,16 @@ dbl_over: trap(EFOVFL);
|
|||
* STORE MANTISSA
|
||||
*/
|
||||
|
||||
#if FL_MSL_AT_LOW_ADDRESS
|
||||
put4(DBL->_s.p1.fract, (char *) &DBL->_s.p1.fract);
|
||||
put4(DBL->_s.p2, (char *) &DBL->_s.p2);
|
||||
#else
|
||||
{ unsigned long l;
|
||||
put4(DBL->_s.p2, (char *) &l);
|
||||
put4(DBL->_s.p1.fract, (char *) &DBL->_s.p2);
|
||||
DBL->_s.p1.fract = l;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
/*
|
||||
|
|
|
@ -52,9 +52,20 @@ zero: zrf_ext(to);
|
|||
goto zero;
|
||||
}
|
||||
/* there is a number to convert so lets get started */
|
||||
/* first extract the exponent; its always in the first two bytes */
|
||||
|
||||
#if FL_MSL_AT_LOW_ADDRESS
|
||||
#if FL_MSW_AT_LOW_ADDRESS
|
||||
to->exp = uget2(cpt1);
|
||||
#else
|
||||
to->exp = uget2(cpt1+2);
|
||||
#endif
|
||||
#else
|
||||
#if FL_MSW_AT_LOW_ADDRESS
|
||||
to->exp = uget2(cpt1+4);
|
||||
#else
|
||||
to->exp = uget2(cpt1+6);
|
||||
#endif
|
||||
#endif
|
||||
to->sign = (to->exp & 0x8000); /* set sign bit */
|
||||
to->exp ^= to->sign;
|
||||
if (size == sizeof(DOUBLE))
|
||||
|
@ -65,17 +76,23 @@ zero: zrf_ext(to);
|
|||
leadbit++; /* will set Lead bit later */
|
||||
else to->exp++;
|
||||
|
||||
to->m1 = get4(cpt1);
|
||||
|
||||
if (size == sizeof(DOUBLE)) {
|
||||
to->m1 <<= DBL_M1LEFT; /* shift */
|
||||
to->exp -= DBL_BIAS; /* remove bias */
|
||||
#if FL_MSL_AT_LOW_ADDRESS
|
||||
to->m1 = get4(cpt1);
|
||||
cpt1 += 4;
|
||||
tmp = get4(cpt1);
|
||||
#else
|
||||
tmp = get4(cpt1);
|
||||
cpt1 += 4;
|
||||
to->m1 = get4(cpt1);
|
||||
#endif
|
||||
to->m1 <<= DBL_M1LEFT; /* shift */
|
||||
to->exp -= DBL_BIAS; /* remove bias */
|
||||
to->m1 |= (tmp>>DBL_RPACK); /* plus 10 == 32 */
|
||||
to->m2 = (tmp<<DBL_LPACK); /* plus 22 == 32 */
|
||||
}
|
||||
else { /* size == sizeof(SINGLE) */
|
||||
to->m1 = get4(cpt1);
|
||||
to->m1 <<= SGL_M1LEFT; /* shift */
|
||||
to->exp -= SGL_BIAS; /* remove bias */
|
||||
to->m2 = 0L;
|
||||
|
|
|
@ -13,7 +13,11 @@
|
|||
#define Xchar(ch) ((ch) & 0377)
|
||||
#endif
|
||||
|
||||
#if ! BYTES_REVERSED
|
||||
#define BYTES_REVERSED (MSB_AT_LOW_ADDRESS != FL_MSB_AT_LOW_ADDRESS)
|
||||
#define WORDS_REVERSED (MSW_AT_LOW_ADDRESS != FL_MSW_AT_LOW_ADDRESS)
|
||||
#define LONGS_REVERSED (FL_MSL_AT_LOW_ADDRESS)
|
||||
|
||||
#if BYTES_REVERSED
|
||||
#define uget2(c) (Xchar((c)[1]) | ((unsigned) Xchar((c)[0]) << 8))
|
||||
#define Xput2(i, c) (((c)[1] = (i)), ((c)[0] = (i) >> 8))
|
||||
#define put2(i, c) { register int j = (i); Xput2(j, c); }
|
||||
|
@ -25,7 +29,7 @@
|
|||
|
||||
#define get2(c) ((short) uget2(c))
|
||||
|
||||
#if WORDS_REVERSED || ! BYTES_REVERSED
|
||||
#if WORDS_REVERSED || BYTES_REVERSED
|
||||
#define get4(c) (uget2((c)+2) | ((long) uget2(c) << 16))
|
||||
#define put4(l, c) { register long x=(l); \
|
||||
Xput2((int)x,(c)+2); \
|
||||
|
|
|
@ -9,13 +9,11 @@
|
|||
NEGATE A FLOATING POINT (NGF 4)
|
||||
*/
|
||||
/********************************************************/
|
||||
/*
|
||||
Assumes exponent is located in bytes 0 & 1
|
||||
*/
|
||||
/********************************************************/
|
||||
|
||||
#include "FP_types.h"
|
||||
#include "get_put.h"
|
||||
|
||||
#define OFF ((FL_MSW_AT_LOW_ADDRESS ? 0 : 2) + (FL_MSB_AT_LOW_ADDRESS ? 0 : 1))
|
||||
_float
|
||||
ngf4(f)
|
||||
_float f;
|
||||
|
@ -23,7 +21,7 @@ _float f;
|
|||
unsigned char *p;
|
||||
|
||||
if (f != (_float) 0) {
|
||||
p = (unsigned char *) &f;
|
||||
p = (unsigned char *) &f + OFF;
|
||||
*p ^= 0x80;
|
||||
}
|
||||
return f;
|
||||
|
|
|
@ -9,12 +9,11 @@
|
|||
NEGATE A FLOATING POINT (NGF 8)
|
||||
*/
|
||||
/********************************************************/
|
||||
/*
|
||||
Assumes exponent is located in bytes 0 & 1
|
||||
*/
|
||||
/********************************************************/
|
||||
|
||||
#include "FP_types.h"
|
||||
#include "get_put.h"
|
||||
|
||||
#define OFF ((FL_MSL_AT_LOW_ADDRESS ? 0 : 4) + (FL_MSW_AT_LOW_ADDRESS ? 0 : 2) + (FL_MSB_AT_LOW_ADDRESS ? 0 : 1))
|
||||
|
||||
_double
|
||||
ngf8(f)
|
||||
|
@ -23,7 +22,7 @@ _double f;
|
|||
unsigned char *p;
|
||||
|
||||
if (f.__double[0] != 0 || f.__double[1] != 0) {
|
||||
p = (unsigned char *) &f;
|
||||
p = (unsigned char *) &f + OFF;
|
||||
*p ^= 0x80;
|
||||
}
|
||||
return f;
|
||||
|
|
|
@ -11,20 +11,18 @@
|
|||
|
||||
#include "FP_types.h"
|
||||
|
||||
extern _float adf4();
|
||||
extern _float adf4(), ngf4();
|
||||
|
||||
_float
|
||||
sbf4(s2,s1)
|
||||
_float s1,s2;
|
||||
{
|
||||
unsigned char *p;
|
||||
_float *result = &s1; /* s1 may not be in a register! */
|
||||
|
||||
if (s2 == (_float) 0) {
|
||||
return s1;
|
||||
}
|
||||
p = (unsigned char *) &s2;
|
||||
*p ^= 0x80; /* change sign of s2 */
|
||||
s2 = ngf4(s2);
|
||||
*result = adf4(s2,s1);
|
||||
return(s1); /* add and return result */
|
||||
}
|
||||
|
|
|
@ -11,20 +11,18 @@
|
|||
|
||||
#include "FP_types.h"
|
||||
|
||||
extern _double adf8();
|
||||
extern _double adf8(), ngf8();
|
||||
|
||||
_double
|
||||
sbf8(s2,s1)
|
||||
_double s1,s2;
|
||||
{
|
||||
unsigned char *p; /* sufficient to access sign bit */
|
||||
_double *result = &s1; /* s1 may not be in a register! */
|
||||
|
||||
if (s2.__double[0] == 0 && s2.__double[1] == 0) {
|
||||
return s1;
|
||||
}
|
||||
p = (unsigned char *) &s2;
|
||||
*p ^= 0x80; /* change sign of s2 */
|
||||
s2 = ngf8(s2);
|
||||
*result = adf8(s2,s1); /* add and return result */
|
||||
return(s1);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue