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 | { | ... | ... |