137 |
void cpu_x86_update_cr0(CPUX86State *env); |
void cpu_x86_update_cr0(CPUX86State *env); |
138 |
void cpu_x86_update_cr3(CPUX86State *env); |
void cpu_x86_update_cr3(CPUX86State *env); |
139 |
void cpu_x86_flush_tlb(CPUX86State *env, uint32_t addr); |
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); |
int cpu_x86_handle_mmu_fault(CPUX86State *env, uint32_t addr, |
141 |
void tlb_fill(unsigned long addr, int is_write, void *retaddr); |
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); |
144 |
void __hidden cpu_lock(void); |
void __hidden cpu_lock(void); |
145 |
void __hidden cpu_unlock(void); |
void __hidden cpu_unlock(void); |
146 |
void do_interrupt(int intno, int is_int, int error_code, |
void do_interrupt(int intno, int is_int, int error_code, |
368 |
(eflags & update_mask); |
(eflags & update_mask); |
369 |
} |
} |
370 |
|
|
371 |
/* memory access macros */ |
/* XXX: move that to a generic header */ |
372 |
|
#if !defined(CONFIG_USER_ONLY) |
373 |
|
|
|
#define ldul ldl |
|
|
#define lduq ldq |
|
374 |
#define ldul_user ldl_user |
#define ldul_user ldl_user |
375 |
#define ldul_kernel ldl_kernel |
#define ldul_kernel ldl_kernel |
376 |
|
|
377 |
#define ldub_raw ldub |
#define ACCESS_TYPE 0 |
378 |
#define ldsb_raw ldsb |
#define MEMSUFFIX _kernel |
379 |
#define lduw_raw lduw |
#define DATA_SIZE 1 |
380 |
#define ldsw_raw ldsw |
#include "softmmu_header.h" |
381 |
#define ldl_raw ldl |
|
382 |
#define ldq_raw ldq |
#define DATA_SIZE 2 |
383 |
|
#include "softmmu_header.h" |
384 |
#define stb_raw stb |
|
385 |
#define stw_raw stw |
#define DATA_SIZE 4 |
386 |
#define stl_raw stl |
#include "softmmu_header.h" |
387 |
#define stq_raw stq |
|
388 |
|
#define DATA_SIZE 8 |
389 |
|
#include "softmmu_header.h" |
390 |
|
#undef ACCESS_TYPE |
391 |
|
#undef MEMSUFFIX |
392 |
|
|
393 |
#define MEMUSER 0 |
#define ACCESS_TYPE 1 |
394 |
|
#define MEMSUFFIX _user |
395 |
#define DATA_SIZE 1 |
#define DATA_SIZE 1 |
396 |
#include "softmmu_header.h" |
#include "softmmu_header.h" |
397 |
|
|
403 |
|
|
404 |
#define DATA_SIZE 8 |
#define DATA_SIZE 8 |
405 |
#include "softmmu_header.h" |
#include "softmmu_header.h" |
406 |
|
#undef ACCESS_TYPE |
407 |
|
#undef MEMSUFFIX |
408 |
|
|
409 |
#undef MEMUSER |
/* these access are slower, they must be as rare as possible */ |
410 |
#define MEMUSER 1 |
#define ACCESS_TYPE 2 |
411 |
|
#define MEMSUFFIX _data |
412 |
#define DATA_SIZE 1 |
#define DATA_SIZE 1 |
413 |
#include "softmmu_header.h" |
#include "softmmu_header.h" |
414 |
|
|
420 |
|
|
421 |
#define DATA_SIZE 8 |
#define DATA_SIZE 8 |
422 |
#include "softmmu_header.h" |
#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 |
#undef MEMUSER |
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 |
|
} |
457 |
|
|
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 |
|
} |
477 |
|
|
478 |
|
#endif /* !defined(CONFIG_USER_ONLY) */ |