Revision fcc803d1 target-xtensa/translate.c
b/target-xtensa/translate.c | ||
---|---|---|
99 | 99 |
[ITLBCFG] = "ITLBCFG", |
100 | 100 |
[DTLBCFG] = "DTLBCFG", |
101 | 101 |
[IBREAKENABLE] = "IBREAKENABLE", |
102 |
[ATOMCTL] = "ATOMCTL", |
|
102 | 103 |
[IBREAKA] = "IBREAKA0", |
103 | 104 |
[IBREAKA + 1] = "IBREAKA1", |
104 | 105 |
[DBREAKA] = "DBREAKA0", |
... | ... | |
556 | 557 |
gen_jumpi_check_loop_end(dc, 0); |
557 | 558 |
} |
558 | 559 |
|
560 |
static void gen_wsr_atomctl(DisasContext *dc, uint32_t sr, TCGv_i32 v) |
|
561 |
{ |
|
562 |
tcg_gen_andi_i32(cpu_SR[sr], v, 0x3f); |
|
563 |
} |
|
564 |
|
|
559 | 565 |
static void gen_wsr_ibreaka(DisasContext *dc, uint32_t sr, TCGv_i32 v) |
560 | 566 |
{ |
561 | 567 |
unsigned id = sr - IBREAKA; |
... | ... | |
693 | 699 |
[ITLBCFG] = gen_wsr_tlbcfg, |
694 | 700 |
[DTLBCFG] = gen_wsr_tlbcfg, |
695 | 701 |
[IBREAKENABLE] = gen_wsr_ibreakenable, |
702 |
[ATOMCTL] = gen_wsr_atomctl, |
|
696 | 703 |
[IBREAKA] = gen_wsr_ibreaka, |
697 | 704 |
[IBREAKA + 1] = gen_wsr_ibreaka, |
698 | 705 |
[DBREAKA] = gen_wsr_dbreaka, |
... | ... | |
2317 | 2324 |
int label = gen_new_label(); |
2318 | 2325 |
TCGv_i32 tmp = tcg_temp_local_new_i32(); |
2319 | 2326 |
TCGv_i32 addr = tcg_temp_local_new_i32(); |
2327 |
TCGv_i32 tpc; |
|
2320 | 2328 |
|
2321 | 2329 |
tcg_gen_mov_i32(tmp, cpu_R[RRI8_T]); |
2322 | 2330 |
tcg_gen_addi_i32(addr, cpu_R[RRI8_S], RRI8_IMM8 << 2); |
2323 | 2331 |
gen_load_store_alignment(dc, 2, addr, true); |
2332 |
|
|
2333 |
gen_advance_ccount(dc); |
|
2334 |
tpc = tcg_const_i32(dc->pc); |
|
2335 |
gen_helper_check_atomctl(cpu_env, tpc, addr); |
|
2324 | 2336 |
tcg_gen_qemu_ld32u(cpu_R[RRI8_T], addr, dc->cring); |
2325 | 2337 |
tcg_gen_brcond_i32(TCG_COND_NE, cpu_R[RRI8_T], |
2326 | 2338 |
cpu_SR[SCOMPARE1], label); |
... | ... | |
2328 | 2340 |
tcg_gen_qemu_st32(tmp, addr, dc->cring); |
2329 | 2341 |
|
2330 | 2342 |
gen_set_label(label); |
2343 |
tcg_temp_free(tpc); |
|
2331 | 2344 |
tcg_temp_free(addr); |
2332 | 2345 |
tcg_temp_free(tmp); |
2333 | 2346 |
} |
Also available in: Unified diff