]> git.proxmox.com Git - qemu.git/commitdiff
endianness fixes
authorbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Mon, 7 Feb 2005 12:43:57 +0000 (12:43 +0000)
committerbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Mon, 7 Feb 2005 12:43:57 +0000 (12:43 +0000)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1268 c046a42c-6fe2-441c-8c8c-71466251a162

target-arm/nwfpe/double_cpdo.c
target-arm/nwfpe/fpa11.h
target-arm/nwfpe/fpa11_cpdt.c

index f1738eac0da2723ba5dc1250c011ac2ce80f7f0d..c44d3fc58ee8cdc0d37bc7048b2e88d32db53b06 100644 (file)
@@ -150,7 +150,11 @@ unsigned int DoubleCPDO(const unsigned int opcode)
       case MNF_CODE:
       {
          unsigned int *p = (unsigned int*)&rFm;
+#ifdef WORDS_BIGENDIAN
+         p[0] ^= 0x80000000;
+#else
          p[1] ^= 0x80000000;
+#endif
          fpa11->fpreg[Fd].fDouble = rFm;
       }
       break;
@@ -158,7 +162,11 @@ unsigned int DoubleCPDO(const unsigned int opcode)
       case ABS_CODE:
       {
          unsigned int *p = (unsigned int*)&rFm;
+#ifdef WORDS_BIGENDIAN
+         p[0] &= 0x7fffffff;
+#else
          p[1] &= 0x7fffffff;
+#endif
          fpa11->fpreg[Fd].fDouble = rFm;
       }
       break;
index 95ad119367ec09e58a8125df5c7f54c7ac30930f..389c02986b765ce82353475d684944b7953f3d43 100644 (file)
 #ifndef __FPA11_H__
 #define __FPA11_H__
 
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+
 #define GET_FPA11() (qemufpa)
 
 /*
@@ -87,8 +91,6 @@ extern void resetFPA11(void);
 extern void SetRoundingMode(const unsigned int);
 extern void SetRoundingPrecision(const unsigned int);
 
-#define get_user(x,y) ((x)=*(y))
-#define put_user(x,y) (*(y)=(x))
 static inline unsigned int readRegister(unsigned int reg)
 {
     return (user_registers[(reg)]);
@@ -128,4 +130,7 @@ unsigned    int ZF;
 
 unsigned int EmulateAll(unsigned int opcode, FPA11* qfpa, unsigned int* qregs);
 
+/* included only for get_user/put_user macros */
+#include "qemu.h"
+
 #endif
index 283e34673cc5414d61349d950156eb0fe164869b..c1d561554747fca1e4d13a99c09b17347caab9d5 100644 (file)
@@ -43,8 +43,13 @@ void loadDouble(const unsigned int Fn,const unsigned int *pMem)
    unsigned int *p;
    p = (unsigned int*)&fpa11->fpreg[Fn].fDouble;
    fpa11->fType[Fn] = typeDouble;
+#ifdef WORDS_BIGENDIAN
+   get_user(p[0], &pMem[0]); /* sign & exponent */
+   get_user(p[1], &pMem[1]);
+#else
    get_user(p[0], &pMem[1]);
    get_user(p[1], &pMem[0]); /* sign & exponent */
+#endif
 }   
 
 static inline
@@ -133,8 +138,13 @@ void storeDouble(const unsigned int Fn,unsigned int *pMem)
 
       default: val = fpa11->fpreg[Fn].fDouble;
    }
+#ifdef WORDS_BIGENDIAN
+   put_user(p[0], &pMem[0]);   /* msw */
+   put_user(p[1], &pMem[1]);   /* lsw */
+#else
    put_user(p[1], &pMem[0]);   /* msw */
    put_user(p[0], &pMem[1]);   /* lsw */
+#endif
 }   
 
 static inline