[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [PULL 16/35] target/ppc: Tidy gen_conditional_store
From: |
David Gibson |
Subject: |
[Qemu-ppc] [PULL 16/35] target/ppc: Tidy gen_conditional_store |
Date: |
Tue, 3 Jul 2018 15:57:45 +1000 |
From: Richard Henderson <address@hidden>
Leave only the minimal amount of code within the STCX macro,
moving the rest of the code into gen_conditional_store.
Remove the explicit call to gen_check_align; the matching LDAX will
have already checked alignment, and we verify the same address.
Signed-off-by: Richard Henderson <address@hidden>
Signed-off-by: David Gibson <address@hidden>
---
target/ppc/translate.c | 28 +++++++++++-----------------
1 file changed, 11 insertions(+), 17 deletions(-)
diff --git a/target/ppc/translate.c b/target/ppc/translate.c
index 03e8c5df03..e751072404 100644
--- a/target/ppc/translate.c
+++ b/target/ppc/translate.c
@@ -3201,14 +3201,17 @@ ST_ATOMIC(stwat, DEF_MEMOP(MO_UL), i32, trunc_tl_i32)
ST_ATOMIC(stdat, DEF_MEMOP(MO_Q), i64, mov_i64)
#endif
-static void gen_conditional_store(DisasContext *ctx, TCGv EA,
- int reg, int memop)
+static void gen_conditional_store(DisasContext *ctx, TCGMemOp memop)
{
TCGLabel *l1 = gen_new_label();
TCGLabel *l2 = gen_new_label();
- TCGv t0;
+ TCGv t0 = tcg_temp_new();
+ int reg = rS(ctx->opcode);
- tcg_gen_brcond_tl(TCG_COND_NE, EA, cpu_reserve, l1);
+ gen_set_access_type(ctx, ACCESS_RES);
+ gen_addr_reg_index(ctx, t0);
+ tcg_gen_brcond_tl(TCG_COND_NE, t0, cpu_reserve, l1);
+ tcg_temp_free(t0);
t0 = tcg_temp_new();
tcg_gen_atomic_cmpxchg_tl(t0, cpu_reserve, cpu_reserve_val,
@@ -3232,19 +3235,10 @@ static void gen_conditional_store(DisasContext *ctx,
TCGv EA,
tcg_gen_movi_tl(cpu_reserve, -1);
}
-#define STCX(name, memop) \
-static void gen_##name(DisasContext *ctx) \
-{ \
- TCGv t0; \
- int len = MEMOP_GET_SIZE(memop); \
- gen_set_access_type(ctx, ACCESS_RES); \
- t0 = tcg_temp_local_new(); \
- gen_addr_reg_index(ctx, t0); \
- if (len > 1) { \
- gen_check_align(ctx, t0, (len) - 1); \
- } \
- gen_conditional_store(ctx, t0, rS(ctx->opcode), memop); \
- tcg_temp_free(t0); \
+#define STCX(name, memop) \
+static void gen_##name(DisasContext *ctx) \
+{ \
+ gen_conditional_store(ctx, memop); \
}
STCX(stbcx_, DEF_MEMOP(MO_UB))
--
2.17.1
- [Qemu-ppc] [PULL 00/35] ppc-for-3.0 queue 20180703, David Gibson, 2018/07/03
- [Qemu-ppc] [PULL 01/35] mac_dbdma: only dump commands for debug enabled channels, David Gibson, 2018/07/03
- [Qemu-ppc] [PULL 03/35] sam460ex: Fix sam460ex device tree when booting the Linux kernel, David Gibson, 2018/07/03
- [Qemu-ppc] [PULL 10/35] ppc/pnv: fix pnv_core_realize() error handling, David Gibson, 2018/07/03
- [Qemu-ppc] [PULL 02/35] mac_newworld: always enable disable_direct_reg3_writes for ADB machines, David Gibson, 2018/07/03
- [Qemu-ppc] [PULL 06/35] ppc/xics: move the instance_init handler under the ics-base class, David Gibson, 2018/07/03
- [Qemu-ppc] [PULL 11/35] target/ppc: Add do_unaligned_access hook, David Gibson, 2018/07/03
- [Qemu-ppc] [PULL 07/35] ppx/xics: introduce a parent_reset in ICSStateClass, David Gibson, 2018/07/03
- [Qemu-ppc] [PULL 20/35] target/ppc: Use MO_ALIGN for EXIWX and ECOWX, David Gibson, 2018/07/03
- [Qemu-ppc] [PULL 16/35] target/ppc: Tidy gen_conditional_store,
David Gibson <=
- [Qemu-ppc] [PULL 09/35] ppc/xics: rework the ICS classes inheritance tree, David Gibson, 2018/07/03
- [Qemu-ppc] [PULL 19/35] target/ppc: Split out gen_st_atomic, David Gibson, 2018/07/03
- [Qemu-ppc] [PULL 22/35] target/ppc: Implement the rest of gen_ld_atomic, David Gibson, 2018/07/03
- [Qemu-ppc] [PULL 27/35] hw/timer: Add basic M41T80 emulation, David Gibson, 2018/07/03
- [Qemu-ppc] [PULL 33/35] target/ppc: set is_jmp on ppc_tr_breakpoint_check, David Gibson, 2018/07/03
- [Qemu-ppc] [PULL 28/35] sam460ex: Add RTC device, David Gibson, 2018/07/03
- [Qemu-ppc] [PULL 35/35] ppc: Include vga cirrus card into the compiling process, David Gibson, 2018/07/03