mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-06-19 13:17:56 +00:00
exec.c: Use stn_p() and ldn_p() instead of explicit switches
Now we have stn_p() and ldn_p() we can use them in various functions in exec.c that used to have their own switch-on-size code. Backports commit 6d3ede5410e05c5f6221dab1daf99164fd6bf879 from qemu
This commit is contained in:
parent
cb879422e9
commit
0a23259560
93
qemu/exec.c
93
qemu/exec.c
|
@ -1628,22 +1628,8 @@ static MemTxResult subpage_read(struct uc_struct* uc, void *opaque, hwaddr addr,
|
||||||
if (res) {
|
if (res) {
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
switch (len) {
|
*data = ldn_p(buf, len);
|
||||||
case 1:
|
|
||||||
*data = ldub_p(buf);
|
|
||||||
return MEMTX_OK;
|
return MEMTX_OK;
|
||||||
case 2:
|
|
||||||
*data = lduw_p(buf);
|
|
||||||
return MEMTX_OK;
|
|
||||||
case 4:
|
|
||||||
*data = (uint32_t)ldl_p(buf);
|
|
||||||
return MEMTX_OK;
|
|
||||||
case 8:
|
|
||||||
*data = ldq_p(buf);
|
|
||||||
return MEMTX_OK;
|
|
||||||
default:
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static MemTxResult subpage_write(struct uc_struct* uc, void *opaque, hwaddr addr,
|
static MemTxResult subpage_write(struct uc_struct* uc, void *opaque, hwaddr addr,
|
||||||
|
@ -1657,22 +1643,7 @@ static MemTxResult subpage_write(struct uc_struct* uc, void *opaque, hwaddr addr
|
||||||
" value %"PRIx64"\n",
|
" value %"PRIx64"\n",
|
||||||
__func__, subpage, len, addr, value);
|
__func__, subpage, len, addr, value);
|
||||||
#endif
|
#endif
|
||||||
switch (len) {
|
stn_p(buf, len, value);
|
||||||
case 1:
|
|
||||||
stb_p(buf, value);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
stw_p(buf, value);
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
stl_p(buf, value);
|
|
||||||
break;
|
|
||||||
case 8:
|
|
||||||
stq_p(buf, value);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
return flatview_write(subpage->fv, addr + subpage->base, attrs, buf, len);
|
return flatview_write(subpage->fv, addr + subpage->base, attrs, buf, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1987,34 +1958,8 @@ static MemTxResult flatview_write_continue(FlatView *fv, hwaddr addr,
|
||||||
l = memory_access_size(mr, l, addr1);
|
l = memory_access_size(mr, l, addr1);
|
||||||
/* XXX: could force current_cpu to NULL to avoid
|
/* XXX: could force current_cpu to NULL to avoid
|
||||||
potential bugs */
|
potential bugs */
|
||||||
switch (l) {
|
val = ldn_p(buf, l);
|
||||||
case 8:
|
result |= memory_region_dispatch_write(mr, addr1, val, l, attrs);
|
||||||
/* 64 bit write access */
|
|
||||||
val = ldq_p(buf);
|
|
||||||
result |= memory_region_dispatch_write(mr, addr1, val, 8,
|
|
||||||
attrs);
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
/* 32 bit write access */
|
|
||||||
val = (uint32_t)ldl_p(buf);
|
|
||||||
result |= memory_region_dispatch_write(mr, addr1, val, 4,
|
|
||||||
attrs);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
/* 16 bit write access */
|
|
||||||
val = lduw_p(buf);
|
|
||||||
result |= memory_region_dispatch_write(mr, addr1, val, 2,
|
|
||||||
attrs);
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
/* 8 bit write access */
|
|
||||||
val = ldub_p(buf);
|
|
||||||
result |= memory_region_dispatch_write(mr, addr1, val, 1,
|
|
||||||
attrs);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
/* RAM case */
|
/* RAM case */
|
||||||
ptr = qemu_map_ram_ptr(mr->uc, mr->ram_block, addr1);
|
ptr = qemu_map_ram_ptr(mr->uc, mr->ram_block, addr1);
|
||||||
|
@ -2090,34 +2035,8 @@ MemTxResult flatview_read_continue(FlatView *fv, hwaddr addr,
|
||||||
// Unicorn: commented out
|
// Unicorn: commented out
|
||||||
//release_lock |= prepare_mmio_access(mr);
|
//release_lock |= prepare_mmio_access(mr);
|
||||||
l = memory_access_size(mr, l, addr1);
|
l = memory_access_size(mr, l, addr1);
|
||||||
switch (l) {
|
result |= memory_region_dispatch_read(mr, addr1, &val, l, attrs);
|
||||||
case 8:
|
stn_p(buf, l, val);
|
||||||
/* 64 bit read access */
|
|
||||||
result |= memory_region_dispatch_read(mr, addr1, &val, 8,
|
|
||||||
attrs);
|
|
||||||
stq_p(buf, val);
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
/* 32 bit read access */
|
|
||||||
result |= memory_region_dispatch_read(mr, addr1, &val, 4,
|
|
||||||
attrs);
|
|
||||||
stl_p(buf, val);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
/* 16 bit read access */
|
|
||||||
result |= memory_region_dispatch_read(mr, addr1, &val, 2,
|
|
||||||
attrs);
|
|
||||||
stw_p(buf, val);
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
/* 8 bit read access */
|
|
||||||
result |= memory_region_dispatch_read(mr, addr1, &val, 1,
|
|
||||||
attrs);
|
|
||||||
stb_p(buf, val);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
/* RAM case */
|
/* RAM case */
|
||||||
ptr = qemu_map_ram_ptr(mr->uc, mr->ram_block, addr1);
|
ptr = qemu_map_ram_ptr(mr->uc, mr->ram_block, addr1);
|
||||||
|
|
Loading…
Reference in a new issue