On 7/20/21 11:53 PM, Song Gao wrote:
+#define TRANS_AM_W(name, op) \ +static bool trans_ ## name(DisasContext *ctx, arg_ ## name * a) \ +{ \ + TCGv addr, val, ret; \ + TCGv Rd = cpu_gpr[a->rd]; \ + int mem_idx = ctx->mem_idx; \ + \ + if (a->rd == 0) { \ + return true; \ + } \ + if ((a->rd != 0) && ((a->rj == a->rd) || (a->rk == a->rd))) { \ + printf("%s: warning, register equal\n", __func__); \ + return false; \ + } \ + \ + addr = get_gpr(a->rj); \ + val = get_gpr(a->rk); \ + ret = tcg_temp_new(); \ + \ + tcg_gen_atomic_##op##_tl(ret, addr, val, mem_idx, MO_TESL | \ + ctx->default_tcg_memop_mask); \ + tcg_gen_mov_tl(Rd, ret); \ + \ + tcg_temp_free(ret); \ + \ + return true; \ +}
No printf. Use a common routine instead of macros. r~