Skip to content

Commit 872ed3a

Browse files
Rot127ivg
authored andcommitted
Trace dcbz
1 parent a445f1e commit 872ed3a

File tree

4 files changed

+32
-1
lines changed

4 files changed

+32
-1
lines changed

target/ppc/helper.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -789,12 +789,14 @@ DEF_HELPER_2(trace_load_crf, void, i32, i32)
789789
DEF_HELPER_4(trace_load_spr_reg, void, env, i32, i32, i32)
790790
DEF_HELPER_4(trace_store_spr_reg, void, env, i32, i32, i32)
791791
DEF_HELPER_1(trace_mode, void, ptr)
792+
DEF_HELPER_2(trace_dcbz_i32, void, env, i32)
792793
#ifdef TARGET_PPC64
793794
DEF_HELPER_2(trace_load_reg64, void, i32, i64)
794795
DEF_HELPER_2(trace_store_reg64, void, i32, i64)
795796
DEF_HELPER_3(trace_load_mem64, void, i64, i64, i32)
796797
DEF_HELPER_3(trace_store_mem64, void, i64, i64, i32)
797798
DEF_HELPER_4(trace_load_spr_reg64, void, env, i32, i32, i64)
798799
DEF_HELPER_4(trace_store_spr_reg64, void, env, i32, i32, i64)
800+
DEF_HELPER_2(trace_dcbz_i64, void, env, i64)
799801
#endif
800802
#endif /* HAS_TRACEWRAP */

target/ppc/trace_helper.c

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,11 @@ void HELPER(trace_store_mem_i64)(uint32_t addr, uint64_t val, MemOp op)
7373
qemu_trace_add_operand(oi, 0x2);
7474
}
7575

76+
void HELPER(trace_dcbz_i32)(CPUPPCState *state, uint32_t addr)
77+
{
78+
trace_dcbz(state, addr);
79+
}
80+
7681
void HELPER(trace_load_reg)(uint32_t reg, uint32_t val)
7782
{
7883
OperandInfo *oi = load_store_reg(reg, val, 0);
@@ -116,6 +121,11 @@ void HELPER(trace_store_spr_reg)(CPUPPCState *env, uint32_t reg, uint32_t field,
116121
void HELPER(trace_mode)(void *mode) { qemu_trace_set_mode(mode); }
117122

118123
#ifdef TARGET_PPC64
124+
void HELPER(trace_dcbz_i64)(CPUPPCState *state, uint64_t addr)
125+
{
126+
trace_dcbz(state, addr);
127+
}
128+
119129
void HELPER(trace_load_reg64)(uint32_t reg, uint64_t val)
120130
{
121131
OperandInfo *oi = load_store_reg64(reg, val, 0);
@@ -266,4 +276,12 @@ OperandInfo *load_store_crf(uint32_t crf, uint64_t val, int ls) {
266276

267277
OperandInfo *load_store_spr_reg(const char *name, uint64_t val, uint32_t size, int ls) {
268278
return build_load_store_reg_op(name, ls, &val, size);
269-
}
279+
}
280+
281+
void trace_dcbz(CPUPPCState *state, uint64_t addr) {
282+
qemu_log("Clear cache at 0x%lx size: %d data: 0x%llx\n", (unsigned long) addr, memop_size(state->dcache_line_size), (unsigned long long) 0);
283+
char *val = calloc(state->dcache_line_size, 1);
284+
OperandInfo *oi = load_store_mem(addr, 1, val, state->dcache_line_size);
285+
qemu_trace_add_operand(oi, 0x2);
286+
free(val);
287+
}

target/ppc/trace_helper.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,5 +46,6 @@ const char *ppc_not_used_reg_names[] = { "vs0", "vs1", "vs2", "vs3", "vs4", "vs5
4646

4747
OperandInfo *load_store_crf(uint32_t reg, uint64_t val, int ls);
4848
OperandInfo *load_store_spr_reg(const char *name, uint64_t val, uint32_t size, int ls);
49+
void trace_dcbz(CPUPPCState *state, uint64_t addr);
4950

5051
#endif /* TRACE_HELPER */

target/ppc/translate.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,15 @@ static void gen_trace_load_crf(int crf, TCGv_i32 var)
141141
gen_helper_trace_load_crf(t, var);
142142
tcg_temp_free_i32(t);
143143
}
144+
145+
static void gen_trace_dcbz(TCGv addr)
146+
{
147+
#ifdef TARGET_PPC64
148+
gen_helper_trace_dcbz_i64(cpu_env, addr);
149+
#else
150+
gen_helper_trace_dcbz_i32(cpu_env, addr);
151+
#endif
152+
}
144153
#endif /* HAS_TRACEWRAP */
145154

146155
static inline void log_load_mem_i64(TCGv addr, TCGv_i64 val, MemOp op) {
@@ -5535,6 +5544,7 @@ static void gen_dcbz(DisasContext *ctx)
55355544
tcgv_op = tcg_const_i32(ctx->opcode & 0x03FF000);
55365545
gen_addr_reg_index(ctx, tcgv_addr);
55375546
gen_helper_dcbz(cpu_env, tcgv_addr, tcgv_op);
5547+
gen_trace_dcbz(tcgv_addr);
55385548
tcg_temp_free(tcgv_addr);
55395549
tcg_temp_free_i32(tcgv_op);
55405550
}

0 commit comments

Comments
 (0)