Commit aab33094073678d459ccaac5c60ea7533e8d1d8e
1 parent
05f3fb8d
more physical memory access functions
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1587 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
51 additions
and
0 deletions
cpu-all.h
| ... | ... | @@ -735,9 +735,15 @@ static inline void cpu_physical_memory_write(target_phys_addr_t addr, |
| 735 | 735 | { |
| 736 | 736 | cpu_physical_memory_rw(addr, (uint8_t *)buf, len, 1); |
| 737 | 737 | } |
| 738 | +uint32_t ldub_phys(target_phys_addr_t addr); | |
| 739 | +uint32_t lduw_phys(target_phys_addr_t addr); | |
| 738 | 740 | uint32_t ldl_phys(target_phys_addr_t addr); |
| 741 | +uint64_t ldq_phys(target_phys_addr_t addr); | |
| 739 | 742 | void stl_phys_notdirty(target_phys_addr_t addr, uint32_t val); |
| 743 | +void stb_phys(target_phys_addr_t addr, uint32_t val); | |
| 744 | +void stw_phys(target_phys_addr_t addr, uint32_t val); | |
| 740 | 745 | void stl_phys(target_phys_addr_t addr, uint32_t val); |
| 746 | +void stq_phys(target_phys_addr_t addr, uint64_t val); | |
| 741 | 747 | |
| 742 | 748 | int cpu_memory_rw_debug(CPUState *env, target_ulong addr, |
| 743 | 749 | uint8_t *buf, int len, int is_write); | ... | ... |
exec.c
| ... | ... | @@ -2284,6 +2284,30 @@ uint32_t ldl_phys(target_phys_addr_t addr) |
| 2284 | 2284 | return val; |
| 2285 | 2285 | } |
| 2286 | 2286 | |
| 2287 | +/* XXX: optimize */ | |
| 2288 | +uint32_t ldub_phys(target_phys_addr_t addr) | |
| 2289 | +{ | |
| 2290 | + uint8_t val; | |
| 2291 | + cpu_physical_memory_read(addr, &val, 1); | |
| 2292 | + return val; | |
| 2293 | +} | |
| 2294 | + | |
| 2295 | +/* XXX: optimize */ | |
| 2296 | +uint32_t lduw_phys(target_phys_addr_t addr) | |
| 2297 | +{ | |
| 2298 | + uint16_t val; | |
| 2299 | + cpu_physical_memory_read(addr, (uint8_t *)&val, 2); | |
| 2300 | + return tswap16(val); | |
| 2301 | +} | |
| 2302 | + | |
| 2303 | +/* XXX: optimize */ | |
| 2304 | +uint64_t ldq_phys(target_phys_addr_t addr) | |
| 2305 | +{ | |
| 2306 | + uint64_t val; | |
| 2307 | + cpu_physical_memory_read(addr, (uint8_t *)&val, 8); | |
| 2308 | + return tswap64(val); | |
| 2309 | +} | |
| 2310 | + | |
| 2287 | 2311 | /* warning: addr must be aligned. The ram page is not masked as dirty |
| 2288 | 2312 | and the code inside is not invalidated. It is useful if the dirty |
| 2289 | 2313 | bits are used to track modified PTEs */ |
| ... | ... | @@ -2345,6 +2369,27 @@ void stl_phys(target_phys_addr_t addr, uint32_t val) |
| 2345 | 2369 | } |
| 2346 | 2370 | } |
| 2347 | 2371 | |
| 2372 | +/* XXX: optimize */ | |
| 2373 | +void stb_phys(target_phys_addr_t addr, uint32_t val) | |
| 2374 | +{ | |
| 2375 | + uint8_t v = val; | |
| 2376 | + cpu_physical_memory_write(addr, &v, 1); | |
| 2377 | +} | |
| 2378 | + | |
| 2379 | +/* XXX: optimize */ | |
| 2380 | +void stw_phys(target_phys_addr_t addr, uint32_t val) | |
| 2381 | +{ | |
| 2382 | + uint16_t v = tswap16(val); | |
| 2383 | + cpu_physical_memory_write(addr, (const uint8_t *)&v, 2); | |
| 2384 | +} | |
| 2385 | + | |
| 2386 | +/* XXX: optimize */ | |
| 2387 | +void stq_phys(target_phys_addr_t addr, uint64_t val) | |
| 2388 | +{ | |
| 2389 | + val = tswap64(val); | |
| 2390 | + cpu_physical_memory_write(addr, (const uint8_t *)&val, 8); | |
| 2391 | +} | |
| 2392 | + | |
| 2348 | 2393 | #endif |
| 2349 | 2394 | |
| 2350 | 2395 | /* virtual memory access for debug */ | ... | ... |