/[qemu]/qemu/target-i386/exec.h
ViewVC logotype

Diff of /qemu/target-i386/exec.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.2 by bellard, Mon Oct 27 21:22:23 2003 UTC revision 1.3 by bellard, Tue Oct 28 23:06:17 2003 UTC
# Line 171  void helper_wrmsr(void); Line 171  void helper_wrmsr(void);
171  void helper_lsl(void);  void helper_lsl(void);
172  void helper_lar(void);  void helper_lar(void);
173    
174    /* XXX: move that to a generic header */
175    #if !defined(CONFIG_USER_ONLY)
176    
177    #define ldul_user ldl_user
178    #define ldul_kernel ldl_kernel
179    
180    #define ACCESS_TYPE 0
181    #define MEMSUFFIX _kernel
182    #define DATA_SIZE 1
183    #include "softmmu_header.h"
184    
185    #define DATA_SIZE 2
186    #include "softmmu_header.h"
187    
188    #define DATA_SIZE 4
189    #include "softmmu_header.h"
190    
191    #define DATA_SIZE 8
192    #include "softmmu_header.h"
193    #undef ACCESS_TYPE
194    #undef MEMSUFFIX
195    
196    #define ACCESS_TYPE 1
197    #define MEMSUFFIX _user
198    #define DATA_SIZE 1
199    #include "softmmu_header.h"
200    
201    #define DATA_SIZE 2
202    #include "softmmu_header.h"
203    
204    #define DATA_SIZE 4
205    #include "softmmu_header.h"
206    
207    #define DATA_SIZE 8
208    #include "softmmu_header.h"
209    #undef ACCESS_TYPE
210    #undef MEMSUFFIX
211    
212    /* these access are slower, they must be as rare as possible */
213    #define ACCESS_TYPE 2
214    #define MEMSUFFIX _data
215    #define DATA_SIZE 1
216    #include "softmmu_header.h"
217    
218    #define DATA_SIZE 2
219    #include "softmmu_header.h"
220    
221    #define DATA_SIZE 4
222    #include "softmmu_header.h"
223    
224    #define DATA_SIZE 8
225    #include "softmmu_header.h"
226    #undef ACCESS_TYPE
227    #undef MEMSUFFIX
228    
229    #define ldub(p) ldub_data(p)
230    #define ldsb(p) ldsb_data(p)
231    #define lduw(p) lduw_data(p)
232    #define ldsw(p) ldsw_data(p)
233    #define ldl(p) ldl_data(p)
234    #define ldq(p) ldq_data(p)
235    
236    #define stb(p, v) stb_data(p, v)
237    #define stw(p, v) stw_data(p, v)
238    #define stl(p, v) stl_data(p, v)
239    #define stq(p, v) stq_data(p, v)
240    
241    static inline double ldfq(void *ptr)
242    {
243        union {
244            double d;
245            uint64_t i;
246        } u;
247        u.i = ldq(ptr);
248        return u.d;
249    }
250    
251    static inline void stfq(void *ptr, double v)
252    {
253        union {
254            double d;
255            uint64_t i;
256        } u;
257        u.d = v;
258        stq(ptr, u.i);
259    }
260    
261    static inline float ldfl(void *ptr)
262    {
263        union {
264            float f;
265            uint32_t i;
266        } u;
267        u.i = ldl(ptr);
268        return u.f;
269    }
270    
271    static inline void stfl(void *ptr, float v)
272    {
273        union {
274            float f;
275            uint32_t i;
276        } u;
277        u.f = v;
278        stl(ptr, u.i);
279    }
280    
281    #endif /* !defined(CONFIG_USER_ONLY) */
282    
283  #ifdef USE_X86LDOUBLE  #ifdef USE_X86LDOUBLE
284  /* use long double functions */  /* use long double functions */
285  #define lrint lrintl  #define lrint lrintl
# Line 317  static inline void helper_fstt(CPU86_LDo Line 426  static inline void helper_fstt(CPU86_LDo
426      e |= SIGND(temp) >> 16;      e |= SIGND(temp) >> 16;
427      stw(ptr + 8, e);      stw(ptr + 8, e);
428  }  }
429  #endif  #else
430    
431    /* XXX: same endianness assumed */
432    
433    #ifdef CONFIG_USER_ONLY
434    
435    static inline CPU86_LDouble helper_fldt(uint8_t *ptr)
436    {
437        return *(CPU86_LDouble *)ptr;
438    }
439    
440    static inline void helper_fstt(CPU86_LDouble f, uint8_t *ptr)
441    {
442        *(CPU86_LDouble *)ptr = f;
443    }
444    
445    #else
446    
447    /* we use memory access macros */
448    
449    static inline CPU86_LDouble helper_fldt(uint8_t *ptr)
450    {
451        CPU86_LDoubleU temp;
452    
453        temp.l.lower = ldq(ptr);
454        temp.l.upper = lduw(ptr + 8);
455        return temp.d;
456    }
457    
458    static inline void helper_fstt(CPU86_LDouble f, uint8_t *ptr)
459    {
460        CPU86_LDoubleU temp;
461        
462        temp.d = f;
463        stq(ptr, temp.l.lower);
464        stw(ptr + 8, temp.l.upper);
465    }
466    
467    #endif /* !CONFIG_USER_ONLY */
468    
469    #endif /* USE_X86LDOUBLE */
470    
471  const CPU86_LDouble f15rk[7];  const CPU86_LDouble f15rk[7];
472    
# Line 368  static inline void load_eflags(int eflag Line 517  static inline void load_eflags(int eflag
517          (eflags & update_mask);          (eflags & update_mask);
518  }  }
519    
 /* XXX: move that to a generic header */  
 #if !defined(CONFIG_USER_ONLY)  
   
 #define ldul_user ldl_user  
 #define ldul_kernel ldl_kernel  
   
 #define ACCESS_TYPE 0  
 #define MEMSUFFIX _kernel  
 #define DATA_SIZE 1  
 #include "softmmu_header.h"  
   
 #define DATA_SIZE 2  
 #include "softmmu_header.h"  
   
 #define DATA_SIZE 4  
 #include "softmmu_header.h"  
   
 #define DATA_SIZE 8  
 #include "softmmu_header.h"  
 #undef ACCESS_TYPE  
 #undef MEMSUFFIX  
   
 #define ACCESS_TYPE 1  
 #define MEMSUFFIX _user  
 #define DATA_SIZE 1  
 #include "softmmu_header.h"  
   
 #define DATA_SIZE 2  
 #include "softmmu_header.h"  
   
 #define DATA_SIZE 4  
 #include "softmmu_header.h"  
   
 #define DATA_SIZE 8  
 #include "softmmu_header.h"  
 #undef ACCESS_TYPE  
 #undef MEMSUFFIX  
   
 /* these access are slower, they must be as rare as possible */  
 #define ACCESS_TYPE 2  
 #define MEMSUFFIX _data  
 #define DATA_SIZE 1  
 #include "softmmu_header.h"  
   
 #define DATA_SIZE 2  
 #include "softmmu_header.h"  
   
 #define DATA_SIZE 4  
 #include "softmmu_header.h"  
   
 #define DATA_SIZE 8  
 #include "softmmu_header.h"  
 #undef ACCESS_TYPE  
 #undef MEMSUFFIX  
   
 #define ldub(p) ldub_data(p)  
 #define ldsb(p) ldsb_data(p)  
 #define lduw(p) lduw_data(p)  
 #define ldsw(p) ldsw_data(p)  
 #define ldl(p) ldl_data(p)  
 #define ldq(p) ldq_data(p)  
   
 #define stb(p, v) stb_data(p, v)  
 #define stw(p, v) stw_data(p, v)  
 #define stl(p, v) stl_data(p, v)  
 #define stq(p, v) stq_data(p, v)  
   
 static inline double ldfq(void *ptr)  
 {  
     union {  
         double d;  
         uint64_t i;  
     } u;  
     u.i = ldq(ptr);  
     return u.d;  
 }  
   
 static inline void stfq(void *ptr, double v)  
 {  
     union {  
         double d;  
         uint64_t i;  
     } u;  
     u.d = v;  
     stq(ptr, u.i);  
 }  
   
 static inline float ldfl(void *ptr)  
 {  
     union {  
         float f;  
         uint32_t i;  
     } u;  
     u.i = ldl(ptr);  
     return u.f;  
 }  
   
 static inline void stfl(void *ptr, float v)  
 {  
     union {  
         float f;  
         uint32_t i;  
     } u;  
     u.f = v;  
     stl(ptr, u.i);  
 }  
   
 #endif /* !defined(CONFIG_USER_ONLY) */  

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26