Skip to content

Commit 6d3ede5

Browse files
committed
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. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20180611171007.4165-4-peter.maydell@linaro.org
1 parent 22672c6 commit 6d3ede5

File tree

1 file changed

+8
-104
lines changed

1 file changed

+8
-104
lines changed

exec.c

Lines changed: 8 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -2544,22 +2544,7 @@ static void notdirty_mem_write(void *opaque, hwaddr ram_addr,
25442544
memory_notdirty_write_prepare(&ndi, current_cpu, current_cpu->mem_io_vaddr,
25452545
ram_addr, size);
25462546

2547-
switch (size) {
2548-
case 1:
2549-
stb_p(qemu_map_ram_ptr(NULL, ram_addr), val);
2550-
break;
2551-
case 2:
2552-
stw_p(qemu_map_ram_ptr(NULL, ram_addr), val);
2553-
break;
2554-
case 4:
2555-
stl_p(qemu_map_ram_ptr(NULL, ram_addr), val);
2556-
break;
2557-
case 8:
2558-
stq_p(qemu_map_ram_ptr(NULL, ram_addr), val);
2559-
break;
2560-
default:
2561-
abort();
2562-
}
2547+
stn_p(qemu_map_ram_ptr(NULL, ram_addr), size, val);
25632548
memory_notdirty_write_complete(&ndi);
25642549
}
25652550

@@ -2739,22 +2724,8 @@ static MemTxResult subpage_read(void *opaque, hwaddr addr, uint64_t *data,
27392724
if (res) {
27402725
return res;
27412726
}
2742-
switch (len) {
2743-
case 1:
2744-
*data = ldub_p(buf);
2745-
return MEMTX_OK;
2746-
case 2:
2747-
*data = lduw_p(buf);
2748-
return MEMTX_OK;
2749-
case 4:
2750-
*data = (uint32_t)ldl_p(buf);
2751-
return MEMTX_OK;
2752-
case 8:
2753-
*data = ldq_p(buf);
2754-
return MEMTX_OK;
2755-
default:
2756-
abort();
2757-
}
2727+
*data = ldn_p(buf, len);
2728+
return MEMTX_OK;
27582729
}
27592730

27602731
static MemTxResult subpage_write(void *opaque, hwaddr addr,
@@ -2768,22 +2739,7 @@ static MemTxResult subpage_write(void *opaque, hwaddr addr,
27682739
" value %"PRIx64"\n",
27692740
__func__, subpage, len, addr, value);
27702741
#endif
2771-
switch (len) {
2772-
case 1:
2773-
stb_p(buf, value);
2774-
break;
2775-
case 2:
2776-
stw_p(buf, value);
2777-
break;
2778-
case 4:
2779-
stl_p(buf, value);
2780-
break;
2781-
case 8:
2782-
stq_p(buf, value);
2783-
break;
2784-
default:
2785-
abort();
2786-
}
2742+
stn_p(buf, len, value);
27872743
return flatview_write(subpage->fv, addr + subpage->base, attrs, buf, len);
27882744
}
27892745

@@ -3129,34 +3085,8 @@ static MemTxResult flatview_write_continue(FlatView *fv, hwaddr addr,
31293085
l = memory_access_size(mr, l, addr1);
31303086
/* XXX: could force current_cpu to NULL to avoid
31313087
potential bugs */
3132-
switch (l) {
3133-
case 8:
3134-
/* 64 bit write access */
3135-
val = ldq_p(buf);
3136-
result |= memory_region_dispatch_write(mr, addr1, val, 8,
3137-
attrs);
3138-
break;
3139-
case 4:
3140-
/* 32 bit write access */
3141-
val = (uint32_t)ldl_p(buf);
3142-
result |= memory_region_dispatch_write(mr, addr1, val, 4,
3143-
attrs);
3144-
break;
3145-
case 2:
3146-
/* 16 bit write access */
3147-
val = lduw_p(buf);
3148-
result |= memory_region_dispatch_write(mr, addr1, val, 2,
3149-
attrs);
3150-
break;
3151-
case 1:
3152-
/* 8 bit write access */
3153-
val = ldub_p(buf);
3154-
result |= memory_region_dispatch_write(mr, addr1, val, 1,
3155-
attrs);
3156-
break;
3157-
default:
3158-
abort();
3159-
}
3088+
val = ldn_p(buf, l);
3089+
result |= memory_region_dispatch_write(mr, addr1, val, l, attrs);
31603090
} else {
31613091
/* RAM case */
31623092
ptr = qemu_ram_ptr_length(mr->ram_block, addr1, &l, false);
@@ -3217,34 +3147,8 @@ MemTxResult flatview_read_continue(FlatView *fv, hwaddr addr,
32173147
/* I/O case */
32183148
release_lock |= prepare_mmio_access(mr);
32193149
l = memory_access_size(mr, l, addr1);
3220-
switch (l) {
3221-
case 8:
3222-
/* 64 bit read access */
3223-
result |= memory_region_dispatch_read(mr, addr1, &val, 8,
3224-
attrs);
3225-
stq_p(buf, val);
3226-
break;
3227-
case 4:
3228-
/* 32 bit read access */
3229-
result |= memory_region_dispatch_read(mr, addr1, &val, 4,
3230-
attrs);
3231-
stl_p(buf, val);
3232-
break;
3233-
case 2:
3234-
/* 16 bit read access */
3235-
result |= memory_region_dispatch_read(mr, addr1, &val, 2,
3236-
attrs);
3237-
stw_p(buf, val);
3238-
break;
3239-
case 1:
3240-
/* 8 bit read access */
3241-
result |= memory_region_dispatch_read(mr, addr1, &val, 1,
3242-
attrs);
3243-
stb_p(buf, val);
3244-
break;
3245-
default:
3246-
abort();
3247-
}
3150+
result |= memory_region_dispatch_read(mr, addr1, &val, l, attrs);
3151+
stn_p(buf, l, val);
32483152
} else {
32493153
/* RAM case */
32503154
ptr = qemu_ram_ptr_length(mr->ram_block, addr1, &l, false);

0 commit comments

Comments
 (0)