Commit bc98a7efa43efae9fc17062c87cc43c589d3cbae
1 parent
eae7629b
Add missing 64 bits memory accessors.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2592 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
34 additions
and
1 deletions
cpu-all.h
... | ... | @@ -644,12 +644,14 @@ static inline void stfq_be_p(void *ptr, float64 v) |
644 | 644 | #define lduw_code(p) lduw_raw(p) |
645 | 645 | #define ldsw_code(p) ldsw_raw(p) |
646 | 646 | #define ldl_code(p) ldl_raw(p) |
647 | +#define ldq_code(p) ldq_raw(p) | |
647 | 648 | |
648 | 649 | #define ldub_kernel(p) ldub_raw(p) |
649 | 650 | #define ldsb_kernel(p) ldsb_raw(p) |
650 | 651 | #define lduw_kernel(p) lduw_raw(p) |
651 | 652 | #define ldsw_kernel(p) ldsw_raw(p) |
652 | 653 | #define ldl_kernel(p) ldl_raw(p) |
654 | +#define ldq_kernel(p) ldq_raw(p) | |
653 | 655 | #define ldfl_kernel(p) ldfl_raw(p) |
654 | 656 | #define ldfq_kernel(p) ldfq_raw(p) |
655 | 657 | #define stb_kernel(p, v) stb_raw(p, v) |
... | ... | @@ -882,6 +884,7 @@ uint32_t lduw_phys(target_phys_addr_t addr); |
882 | 884 | uint32_t ldl_phys(target_phys_addr_t addr); |
883 | 885 | uint64_t ldq_phys(target_phys_addr_t addr); |
884 | 886 | void stl_phys_notdirty(target_phys_addr_t addr, uint32_t val); |
887 | +void stq_phys_notdirty(target_phys_addr_t addr, uint64_t val); | |
885 | 888 | void stb_phys(target_phys_addr_t addr, uint32_t val); |
886 | 889 | void stw_phys(target_phys_addr_t addr, uint32_t val); |
887 | 890 | void stl_phys(target_phys_addr_t addr, uint32_t val); | ... | ... |
exec.c
... | ... | @@ -338,7 +338,7 @@ void tb_flush(CPUState *env1) |
338 | 338 | |
339 | 339 | #ifdef DEBUG_TB_CHECK |
340 | 340 | |
341 | -static void tb_invalidate_check(unsigned long address) | |
341 | +static void tb_invalidate_check(target_ulong address) | |
342 | 342 | { |
343 | 343 | TranslationBlock *tb; |
344 | 344 | int i; |
... | ... | @@ -2433,6 +2433,36 @@ void stl_phys_notdirty(target_phys_addr_t addr, uint32_t val) |
2433 | 2433 | } |
2434 | 2434 | } |
2435 | 2435 | |
2436 | +void stq_phys_notdirty(target_phys_addr_t addr, uint64_t val) | |
2437 | +{ | |
2438 | + int io_index; | |
2439 | + uint8_t *ptr; | |
2440 | + unsigned long pd; | |
2441 | + PhysPageDesc *p; | |
2442 | + | |
2443 | + p = phys_page_find(addr >> TARGET_PAGE_BITS); | |
2444 | + if (!p) { | |
2445 | + pd = IO_MEM_UNASSIGNED; | |
2446 | + } else { | |
2447 | + pd = p->phys_offset; | |
2448 | + } | |
2449 | + | |
2450 | + if ((pd & ~TARGET_PAGE_MASK) != IO_MEM_RAM) { | |
2451 | + io_index = (pd >> IO_MEM_SHIFT) & (IO_MEM_NB_ENTRIES - 1); | |
2452 | +#ifdef TARGET_WORDS_BIGENDIAN | |
2453 | + io_mem_write[io_index][2](io_mem_opaque[io_index], addr, val >> 32); | |
2454 | + io_mem_write[io_index][2](io_mem_opaque[io_index], addr + 4, val); | |
2455 | +#else | |
2456 | + io_mem_write[io_index][2](io_mem_opaque[io_index], addr, val); | |
2457 | + io_mem_write[io_index][2](io_mem_opaque[io_index], addr + 4, val >> 32); | |
2458 | +#endif | |
2459 | + } else { | |
2460 | + ptr = phys_ram_base + (pd & TARGET_PAGE_MASK) + | |
2461 | + (addr & ~TARGET_PAGE_MASK); | |
2462 | + stq_p(ptr, val); | |
2463 | + } | |
2464 | +} | |
2465 | + | |
2436 | 2466 | /* warning: addr must be aligned */ |
2437 | 2467 | void stl_phys(target_phys_addr_t addr, uint32_t val) |
2438 | 2468 | { | ... | ... |