void cpu_physical_memory_rw(target_phys_addr_t addr, uint8_t *buf,

                            int len, int is_write)

{

    int l, io_index;

    uint8_t *ptr;

    uint32_t val;

    target_phys_addr_t page;

    unsigned long pd;

    PhysPageDesc *p;



    while (len > 0) {

        page = addr & TARGET_PAGE_MASK;

        l = (page + TARGET_PAGE_SIZE) - addr;

        if (l > len)

            l = len;

        p = phys_page_find(page >> TARGET_PAGE_BITS);

        if (!p) {

            pd = IO_MEM_UNASSIGNED;

        } else {

            pd = p->phys_offset;

        }



        if (is_write) {

            if ((pd & ~TARGET_PAGE_MASK) != IO_MEM_RAM) {

                io_index = (pd >> IO_MEM_SHIFT) & (IO_MEM_NB_ENTRIES - 1);

                if (p)

                    addr = (addr & ~TARGET_PAGE_MASK) + p->region_offset;

                /* XXX: could force cpu_single_env to NULL to avoid

                   potential bugs */

                if (l >= 4 && ((addr & 3) == 0)) {

                    /* 32 bit write access */

                    val = ldl_p(buf);

                    io_mem_write[io_index][2](io_mem_opaque[io_index], addr, val);

                    l = 4;

                } else if (l >= 2 && ((addr & 1) == 0)) {

                    /* 16 bit write access */

                    val = lduw_p(buf);

                    io_mem_write[io_index][1](io_mem_opaque[io_index], addr, val);

                    l = 2;

                } else {

                    /* 8 bit write access */

                    val = ldub_p(buf);

                    io_mem_write[io_index][0](io_mem_opaque[io_index], addr, val);

                    l = 1;

                }

            } else {

                unsigned long addr1;

                addr1 = (pd & TARGET_PAGE_MASK) + (addr & ~TARGET_PAGE_MASK);

                /* RAM case */

                ptr = phys_ram_base + addr1;

                memcpy(ptr, buf, l);

                if (!cpu_physical_memory_is_dirty(addr1)) {

                    /* invalidate code */

                    tb_invalidate_phys_page_range(addr1, addr1 + l, 0);

                    /* set dirty bit */

                    phys_ram_dirty[addr1 >> TARGET_PAGE_BITS] |=

                        (0xff & ~CODE_DIRTY_FLAG);

                }

            }

        } else {

            if ((pd & ~TARGET_PAGE_MASK) > IO_MEM_ROM &&

                !(pd & IO_MEM_ROMD)) {

                /* I/O case */

                io_index = (pd >> IO_MEM_SHIFT) & (IO_MEM_NB_ENTRIES - 1);

                if (p)

                    addr = (addr & ~TARGET_PAGE_MASK) + p->region_offset;

                if (l >= 4 && ((addr & 3) == 0)) {

                    /* 32 bit read access */

                    val = io_mem_read[io_index][2](io_mem_opaque[io_index], addr);

                    stl_p(buf, val);

                    l = 4;

                } else if (l >= 2 && ((addr & 1) == 0)) {

                    /* 16 bit read access */

                    val = io_mem_read[io_index][1](io_mem_opaque[io_index], addr);

                    stw_p(buf, val);

                    l = 2;

                } else {

                    /* 8 bit read access */

                    val = io_mem_read[io_index][0](io_mem_opaque[io_index], addr);

                    stb_p(buf, val);

                    l = 1;

                }

            } else {

                /* RAM case */

                ptr = phys_ram_base + (pd & TARGET_PAGE_MASK) +

                    (addr & ~TARGET_PAGE_MASK);

                memcpy(buf, ptr, l);

            }

        }

        len -= l;

        buf += l;

        addr += l;

    }

}

void cpu_physical_memory_rw(target_phys_addr_t addr, uint8_t *buf,

                            int len, int is_write)

{

    int l, io_index;

    uint8_t *ptr;

    uint32_t val;

    target_phys_addr_t page;

    unsigned long pd;

    PhysPageDesc *p;



    while (len > 0) {

        page = addr & TARGET_PAGE_MASK;

        l = (page + TARGET_PAGE_SIZE) - addr;

        if (l > len)

            l = len;

        p = phys_page_find(page >> TARGET_PAGE_BITS);

        if (!p) {

            pd = IO_MEM_UNASSIGNED;

        } else {

            pd = p->phys_offset;

        }



        if (is_write) {

            if ((pd & ~TARGET_PAGE_MASK) != IO_MEM_RAM) {

                io_index = (pd >> IO_MEM_SHIFT) & (IO_MEM_NB_ENTRIES - 1);

                if (p)

                    addr = (addr & ~TARGET_PAGE_MASK) + p->region_offset;

                



                if (l >= 4 && ((addr & 3) == 0)) {

                    

                    val = ldl_p(buf);

                    io_mem_write[io_index][2](io_mem_opaque[io_index], addr, val);

                    l = 4;

                } else if (l >= 2 && ((addr & 1) == 0)) {

                    

                    val = lduw_p(buf);

                    io_mem_write[io_index][1](io_mem_opaque[io_index], addr, val);

                    l = 2;

                } else {

                    

                    val = ldub_p(buf);

                    io_mem_write[io_index][0](io_mem_opaque[io_index], addr, val);

                    l = 1;

                }

            } else {

                unsigned long addr1;

                addr1 = (pd & TARGET_PAGE_MASK) + (addr & ~TARGET_PAGE_MASK);

                

                ptr = phys_ram_base + addr1;

                memcpy(ptr, buf, l);

                if (!cpu_physical_memory_is_dirty(addr1)) {

                    

                    tb_invalidate_phys_page_range(addr1, addr1 + l, 0);

                    

                    phys_ram_dirty[addr1 >> TARGET_PAGE_BITS] |=

                        (0xff & ~CODE_DIRTY_FLAG);

                }

            }

        } else {

            if ((pd & ~TARGET_PAGE_MASK) > IO_MEM_ROM &&

                !(pd & IO_MEM_ROMD)) {

                

                io_index = (pd >> IO_MEM_SHIFT) & (IO_MEM_NB_ENTRIES - 1);

                if (p)

                    addr = (addr & ~TARGET_PAGE_MASK) + p->region_offset;

                if (l >= 4 && ((addr & 3) == 0)) {

                    

                    val = io_mem_read[io_index][2](io_mem_opaque[io_index], addr);

                    stl_p(buf, val);

                    l = 4;

                } else if (l >= 2 && ((addr & 1) == 0)) {

                    

                    val = io_mem_read[io_index][1](io_mem_opaque[io_index], addr);

                    stw_p(buf, val);

                    l = 2;

                } else {

                    

                    val = io_mem_read[io_index][0](io_mem_opaque[io_index], addr);

                    stb_p(buf, val);

                    l = 1;

                }

            } else {

                

                ptr = phys_ram_base + (pd & TARGET_PAGE_MASK) +

                    (addr & ~TARGET_PAGE_MASK);

                memcpy(buf, ptr, l);

            }

        }

        len -= l;

        buf += l;

        addr += l;

    }

}

                    addr = (addr & ~TARGET_PAGE_MASK) + p->region_offset;                 if (l >= 4 && ((addr & 3) == 0)) {                     io_mem_write[io_index][2](io_mem_opaque[io_index], addr, val);                 } else if (l >= 2 && ((addr & 1) == 0)) {                     io_mem_write[io_index][1](io_mem_opaque[io_index], addr, val);                     io_mem_write[io_index][0](io_mem_opaque[io_index], addr, val);                     addr = (addr & ~TARGET_PAGE_MASK) + p->region_offset;                 if (l >= 4 && ((addr & 3) == 0)) {                     val = io_mem_read[io_index][2](io_mem_opaque[io_index], addr);                 } else if (l >= 2 && ((addr & 1) == 0)) {                     val = io_mem_read[io_index][1](io_mem_opaque[io_index], addr);                     val = io_mem_read[io_index][0](io_mem_opaque[io_index], addr);
void FUNC_0(target_phys_addr_t VAR_0, uint8_t *VAR_1,

                            int VAR_2, int VAR_3)

{

    int VAR_4, VAR_5;

    uint8_t *ptr;

    uint32_t val;

    target_phys_addr_t page;

    unsigned long VAR_6;

    PhysPageDesc *p;



    while (VAR_2 > 0) {

        page = VAR_0 & TARGET_PAGE_MASK;

        VAR_4 = (page + TARGET_PAGE_SIZE) - VAR_0;

        if (VAR_4 > VAR_2)

            VAR_4 = VAR_2;

        p = phys_page_find(page >> TARGET_PAGE_BITS);

        if (!p) {

            VAR_6 = IO_MEM_UNASSIGNED;

        } else {

            VAR_6 = p->phys_offset;

        }



        if (VAR_3) {

            if ((VAR_6 & ~TARGET_PAGE_MASK) != IO_MEM_RAM) {

                VAR_5 = (VAR_6 >> IO_MEM_SHIFT) & (IO_MEM_NB_ENTRIES - 1);

                if (p)

                    VAR_0 = (VAR_0 & ~TARGET_PAGE_MASK) + p->region_offset;

                



                if (VAR_4 >= 4 && ((VAR_0 & 3) == 0)) {

                    

                    val = ldl_p(VAR_1);

                    io_mem_write[VAR_5][2](io_mem_opaque[VAR_5], VAR_0, val);

                    VAR_4 = 4;

                } else if (VAR_4 >= 2 && ((VAR_0 & 1) == 0)) {

                    

                    val = lduw_p(VAR_1);

                    io_mem_write[VAR_5][1](io_mem_opaque[VAR_5], VAR_0, val);

                    VAR_4 = 2;

                } else {

                    

                    val = ldub_p(VAR_1);

                    io_mem_write[VAR_5][0](io_mem_opaque[VAR_5], VAR_0, val);

                    VAR_4 = 1;

                }

            } else {

                unsigned long VAR_7;

                VAR_7 = (VAR_6 & TARGET_PAGE_MASK) + (VAR_0 & ~TARGET_PAGE_MASK);

                

                ptr = phys_ram_base + VAR_7;

                memcpy(ptr, VAR_1, VAR_4);

                if (!cpu_physical_memory_is_dirty(VAR_7)) {

                    

                    tb_invalidate_phys_page_range(VAR_7, VAR_7 + VAR_4, 0);

                    

                    phys_ram_dirty[VAR_7 >> TARGET_PAGE_BITS] |=

                        (0xff & ~CODE_DIRTY_FLAG);

                }

            }

        } else {

            if ((VAR_6 & ~TARGET_PAGE_MASK) > IO_MEM_ROM &&

                !(VAR_6 & IO_MEM_ROMD)) {

                

                VAR_5 = (VAR_6 >> IO_MEM_SHIFT) & (IO_MEM_NB_ENTRIES - 1);

                if (p)

                    VAR_0 = (VAR_0 & ~TARGET_PAGE_MASK) + p->region_offset;

                if (VAR_4 >= 4 && ((VAR_0 & 3) == 0)) {

                    

                    val = io_mem_read[VAR_5][2](io_mem_opaque[VAR_5], VAR_0);

                    stl_p(VAR_1, val);

                    VAR_4 = 4;

                } else if (VAR_4 >= 2 && ((VAR_0 & 1) == 0)) {

                    

                    val = io_mem_read[VAR_5][1](io_mem_opaque[VAR_5], VAR_0);

                    stw_p(VAR_1, val);

                    VAR_4 = 2;

                } else {

                    

                    val = io_mem_read[VAR_5][0](io_mem_opaque[VAR_5], VAR_0);

                    stb_p(VAR_1, val);

                    VAR_4 = 1;

                }

            } else {

                

                ptr = phys_ram_base + (VAR_6 & TARGET_PAGE_MASK) +

                    (VAR_0 & ~TARGET_PAGE_MASK);

                memcpy(VAR_1, ptr, VAR_4);

            }

        }

        VAR_2 -= VAR_4;

        VAR_1 += VAR_4;

        VAR_0 += VAR_4;

    }

}

void FUNC_0(target_phys_addr_t VAR_0, uint8_t *VAR_1,
int VAR_2, int VAR_3)
{ int VAR_4, VAR_5; uint8_t *ptr; uint32_t val; target_phys_addr_t page; unsigned long VAR_6; PhysPageDesc *p; while (VAR_2 > 0) { page = VAR_0 & TARGET_PAGE_MASK; VAR_4 = (page + TARGET_PAGE_SIZE) - VAR_0; if (VAR_4 > VAR_2)
VAR_4 = VAR_2; p = phys_page_find(page >> TARGET_PAGE_BITS); if (!p) { VAR_6 = IO_MEM_UNASSIGNED; } else { VAR_6 = p->phys_offset; } if (VAR_3) { if ((VAR_6 & ~TARGET_PAGE_MASK) != IO_MEM_RAM) { VAR_5 = (VAR_6 >> IO_MEM_SHIFT) & (IO_MEM_NB_ENTRIES - 1); if (p)
VAR_0 = (VAR_0 & ~TARGET_PAGE_MASK) + p->region_offset; if (VAR_4 >= 4 && ((VAR_0 & 3) == 0)) { val = ldl_p(VAR_1); io_mem_write[VAR_5][2](io_mem_opaque[VAR_5], VAR_0, val); VAR_4 = 4; } else if (VAR_4 >= 2 && ((VAR_0 & 1) == 0)) { val = lduw_p(VAR_1); io_mem_write[VAR_5][1](io_mem_opaque[VAR_5], VAR_0, val); VAR_4 = 2; } else { val = ldub_p(VAR_1); io_mem_write[VAR_5][0](io_mem_opaque[VAR_5], VAR_0, val); VAR_4 = 1; } } else { unsigned long VAR_7; VAR_7 = (VAR_6 & TARGET_PAGE_MASK) + (VAR_0 & ~TARGET_PAGE_MASK); ptr = phys_ram_base + VAR_7; memcpy(ptr, VAR_1, VAR_4); if (!cpu_physical_memory_is_dirty(VAR_7)) { tb_invalidate_phys_page_range(VAR_7, VAR_7 + VAR_4, 0); phys_ram_dirty[VAR_7 >> TARGET_PAGE_BITS] |=
(0xff & ~CODE_DIRTY_FLAG); } } } else { if ((VAR_6 & ~TARGET_PAGE_MASK) > IO_MEM_ROM &&
!(VAR_6 & IO_MEM_ROMD)) { VAR_5 = (VAR_6 >> IO_MEM_SHIFT) & (IO_MEM_NB_ENTRIES - 1); if (p)
VAR_0 = (VAR_0 & ~TARGET_PAGE_MASK) + p->region_offset; if (VAR_4 >= 4 && ((VAR_0 & 3) == 0)) { val = io_mem_read[VAR_5][2](io_mem_opaque[VAR_5], VAR_0); stl_p(VAR_1, val); VAR_4 = 4; } else if (VAR_4 >= 2 && ((VAR_0 & 1) == 0)) { val = io_mem_read[VAR_5][1](io_mem_opaque[VAR_5], VAR_0); stw_p(VAR_1, val); VAR_4 = 2; } else { val = io_mem_read[VAR_5][0](io_mem_opaque[VAR_5], VAR_0); stb_p(VAR_1, val); VAR_4 = 1; } } else { ptr = phys_ram_base + (VAR_6 & TARGET_PAGE_MASK) +
(VAR_0 & ~TARGET_PAGE_MASK); memcpy(VAR_1, ptr, VAR_4); } } VAR_2 -= VAR_4; VAR_1 += VAR_4; VAR_0 += VAR_4; } }