Revision 61382a50 target-i386/exec.h

b/target-i386/exec.h
137 137
void cpu_x86_update_cr0(CPUX86State *env);
138 138
void cpu_x86_update_cr3(CPUX86State *env);
139 139
void cpu_x86_flush_tlb(CPUX86State *env, uint32_t addr);
140
int cpu_x86_handle_mmu_fault(CPUX86State *env, uint32_t addr, int is_write);
141
void tlb_fill(unsigned long addr, int is_write, void *retaddr);
140
int cpu_x86_handle_mmu_fault(CPUX86State *env, uint32_t addr, 
141
                             int is_write, int is_user, int is_softmmu);
142
void tlb_fill(unsigned long addr, int is_write, int is_user, 
143
              void *retaddr);
142 144
void __hidden cpu_lock(void);
143 145
void __hidden cpu_unlock(void);
144 146
void do_interrupt(int intno, int is_int, int error_code, 
......
366 368
        (eflags & update_mask);
367 369
}
368 370

  
369
/* memory access macros */
371
/* XXX: move that to a generic header */
372
#if !defined(CONFIG_USER_ONLY)
370 373

  
371
#define ldul ldl
372
#define lduq ldq
373 374
#define ldul_user ldl_user
374 375
#define ldul_kernel ldl_kernel
375 376

  
376
#define ldub_raw ldub
377
#define ldsb_raw ldsb
378
#define lduw_raw lduw
379
#define ldsw_raw ldsw
380
#define ldl_raw ldl
381
#define ldq_raw ldq
377
#define ACCESS_TYPE 0
378
#define MEMSUFFIX _kernel
379
#define DATA_SIZE 1
380
#include "softmmu_header.h"
381

  
382
#define DATA_SIZE 2
383
#include "softmmu_header.h"
382 384

  
383
#define stb_raw stb
384
#define stw_raw stw
385
#define stl_raw stl
386
#define stq_raw stq
385
#define DATA_SIZE 4
386
#include "softmmu_header.h"
387

  
388
#define DATA_SIZE 8
389
#include "softmmu_header.h"
390
#undef ACCESS_TYPE
391
#undef MEMSUFFIX
387 392

  
388
#define MEMUSER 0
393
#define ACCESS_TYPE 1
394
#define MEMSUFFIX _user
389 395
#define DATA_SIZE 1
390 396
#include "softmmu_header.h"
391 397

  
......
397 403

  
398 404
#define DATA_SIZE 8
399 405
#include "softmmu_header.h"
406
#undef ACCESS_TYPE
407
#undef MEMSUFFIX
400 408

  
401
#undef MEMUSER
402
#define MEMUSER 1
409
/* these access are slower, they must be as rare as possible */
410
#define ACCESS_TYPE 2
411
#define MEMSUFFIX _data
403 412
#define DATA_SIZE 1
404 413
#include "softmmu_header.h"
405 414

  
......
411 420

  
412 421
#define DATA_SIZE 8
413 422
#include "softmmu_header.h"
423
#undef ACCESS_TYPE
424
#undef MEMSUFFIX
425

  
426
#define ldub(p) ldub_data(p)
427
#define ldsb(p) ldsb_data(p)
428
#define lduw(p) lduw_data(p)
429
#define ldsw(p) ldsw_data(p)
430
#define ldl(p) ldl_data(p)
431
#define ldq(p) ldq_data(p)
432

  
433
#define stb(p, v) stb_data(p, v)
434
#define stw(p, v) stw_data(p, v)
435
#define stl(p, v) stl_data(p, v)
436
#define stq(p, v) stq_data(p, v)
437

  
438
static inline double ldfq(void *ptr)
439
{
440
    union {
441
        double d;
442
        uint64_t i;
443
    } u;
444
    u.i = ldq(ptr);
445
    return u.d;
446
}
447

  
448
static inline void stfq(void *ptr, double v)
449
{
450
    union {
451
        double d;
452
        uint64_t i;
453
    } u;
454
    u.d = v;
455
    stq(ptr, u.i);
456
}
414 457

  
415
#undef MEMUSER
458
static inline float ldfl(void *ptr)
459
{
460
    union {
461
        float f;
462
        uint32_t i;
463
    } u;
464
    u.i = ldl(ptr);
465
    return u.f;
466
}
467

  
468
static inline void stfl(void *ptr, float v)
469
{
470
    union {
471
        float f;
472
        uint32_t i;
473
    } u;
474
    u.f = v;
475
    stl(ptr, u.i);
476
}
416 477

  
478
#endif /* !defined(CONFIG_USER_ONLY) */

Also available in: Unified diff