changes for different byte orderings
authorceriel <none@none>
Wed, 25 Oct 1989 17:15:37 +0000 (17:15 +0000)
committerceriel <none@none>
Wed, 25 Oct 1989 17:15:37 +0000 (17:15 +0000)
mach/proto/fp/cmf8.c
mach/proto/fp/compact.c
mach/proto/fp/extend.c
mach/proto/fp/get_put.h
mach/proto/fp/ngf4.c
mach/proto/fp/ngf8.c
mach/proto/fp/sbf4.c
mach/proto/fp/sbf8.c

index 743ea5d..c63145b 100644 (file)
@@ -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;
index c19576b..55c3c22 100644 (file)
@@ -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 {
                /*
index 402b9ea..2acf307 100644 (file)
@@ -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;
index 48b1b8b..9fd7f60 100644 (file)
 #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); \
index f8633eb..328ebd9 100644 (file)
@@ -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;
index 91aa46f..891b2f8 100644 (file)
@@ -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;
index e6a3aa4..80e1dec 100644 (file)
 
 #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 */
 }
index f2b7112..444321e 100644 (file)
 
 #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);
 }