Lines Matching refs:ctx

19 #define REQUIRE_ZCB(ctx) do {   \
20 if (!ctx->cfg_ptr->ext_zcb) \
24 #define REQUIRE_ZCMP(ctx) do { \
25 if (!ctx->cfg_ptr->ext_zcmp) \
29 #define REQUIRE_ZCMT(ctx) do { \
30 if (!ctx->cfg_ptr->ext_zcmt) \
34 static bool trans_c_zext_b(DisasContext *ctx, arg_c_zext_b *a)
36 REQUIRE_ZCB(ctx);
37 return gen_unary(ctx, a, EXT_NONE, tcg_gen_ext8u_tl);
40 static bool trans_c_zext_h(DisasContext *ctx, arg_c_zext_h *a)
42 REQUIRE_ZCB(ctx);
43 REQUIRE_ZBB(ctx);
44 return gen_unary(ctx, a, EXT_NONE, tcg_gen_ext16u_tl);
47 static bool trans_c_sext_b(DisasContext *ctx, arg_c_sext_b *a)
49 REQUIRE_ZCB(ctx);
50 REQUIRE_ZBB(ctx);
51 return gen_unary(ctx, a, EXT_NONE, tcg_gen_ext8s_tl);
54 static bool trans_c_sext_h(DisasContext *ctx, arg_c_sext_h *a)
56 REQUIRE_ZCB(ctx);
57 REQUIRE_ZBB(ctx);
58 return gen_unary(ctx, a, EXT_NONE, tcg_gen_ext16s_tl);
61 static bool trans_c_zext_w(DisasContext *ctx, arg_c_zext_w *a)
63 REQUIRE_64BIT(ctx);
64 REQUIRE_ZCB(ctx);
65 REQUIRE_ZBA(ctx);
66 return gen_unary(ctx, a, EXT_NONE, tcg_gen_ext32u_tl);
69 static bool trans_c_not(DisasContext *ctx, arg_c_not *a)
71 REQUIRE_ZCB(ctx);
72 return gen_unary(ctx, a, EXT_NONE, tcg_gen_not_tl);
75 static bool trans_c_mul(DisasContext *ctx, arg_c_mul *a)
77 REQUIRE_ZCB(ctx);
78 REQUIRE_M_OR_ZMMUL(ctx);
79 return gen_arith(ctx, a, EXT_NONE, tcg_gen_mul_tl, NULL);
82 static bool trans_c_lbu(DisasContext *ctx, arg_c_lbu *a)
84 REQUIRE_ZCB(ctx);
85 return gen_load(ctx, a, MO_UB);
88 static bool trans_c_lhu(DisasContext *ctx, arg_c_lhu *a)
90 REQUIRE_ZCB(ctx);
91 return gen_load(ctx, a, MO_UW);
94 static bool trans_c_lh(DisasContext *ctx, arg_c_lh *a)
96 REQUIRE_ZCB(ctx);
97 return gen_load(ctx, a, MO_SW);
100 static bool trans_c_sb(DisasContext *ctx, arg_c_sb *a)
102 REQUIRE_ZCB(ctx);
103 return gen_store(ctx, a, MO_UB);
106 static bool trans_c_sh(DisasContext *ctx, arg_c_sh *a)
108 REQUIRE_ZCB(ctx);
109 return gen_store(ctx, a, MO_UW);
116 static uint32_t decode_push_pop_list(DisasContext *ctx, target_ulong rlist)
120 if (has_ext(ctx, RVE) && rlist > 6) {
169 static bool gen_pop(DisasContext *ctx, arg_cmpp *a, bool ret, bool ret_val)
171 REQUIRE_ZCMP(ctx);
173 uint32_t reg_bitmap = decode_push_pop_list(ctx, a->urlist);
178 MemOp memop = get_ol(ctx) == MXL_RV32 ? MO_TEUL : MO_TEUQ;
182 TCGv sp = dest_gpr(ctx, xSP);
190 TCGv dest = dest_gpr(ctx, i);
191 tcg_gen_qemu_ld_tl(dest, addr, ctx->mem_idx, memop);
192 gen_set_gpr(ctx, i, dest);
198 gen_set_gpr(ctx, xSP, sp);
201 gen_set_gpr(ctx, xA0, ctx->zero);
205 TCGv ret_addr = get_gpr(ctx, xRA, EXT_SIGN);
208 ctx->base.is_jmp = DISAS_NORETURN;
214 static bool trans_cm_push(DisasContext *ctx, arg_cm_push *a)
216 REQUIRE_ZCMP(ctx);
218 uint32_t reg_bitmap = decode_push_pop_list(ctx, a->urlist);
223 MemOp memop = get_ol(ctx) == MXL_RV32 ? MO_TEUL : MO_TEUQ;
227 TCGv sp = dest_gpr(ctx, xSP);
235 TCGv val = get_gpr(ctx, i, EXT_NONE);
236 tcg_gen_qemu_st_tl(val, addr, ctx->mem_idx, memop);
242 gen_set_gpr(ctx, xSP, sp);
247 static bool trans_cm_pop(DisasContext *ctx, arg_cm_pop *a)
249 return gen_pop(ctx, a, false, false);
252 static bool trans_cm_popret(DisasContext *ctx, arg_cm_popret *a)
254 return gen_pop(ctx, a, true, false);
257 static bool trans_cm_popretz(DisasContext *ctx, arg_cm_popret *a)
259 return gen_pop(ctx, a, true, true);
262 static bool trans_cm_mva01s(DisasContext *ctx, arg_cm_mva01s *a)
264 REQUIRE_ZCMP(ctx);
266 TCGv src1 = get_gpr(ctx, a->rs1, EXT_NONE);
267 TCGv src2 = get_gpr(ctx, a->rs2, EXT_NONE);
269 gen_set_gpr(ctx, xA0, src1);
270 gen_set_gpr(ctx, xA1, src2);
275 static bool trans_cm_mvsa01(DisasContext *ctx, arg_cm_mvsa01 *a)
277 REQUIRE_ZCMP(ctx);
283 TCGv a0 = get_gpr(ctx, xA0, EXT_NONE);
284 TCGv a1 = get_gpr(ctx, xA1, EXT_NONE);
286 gen_set_gpr(ctx, a->rs1, a0);
287 gen_set_gpr(ctx, a->rs2, a1);
292 static bool trans_cm_jalt(DisasContext *ctx, arg_cm_jalt *a)
294 REQUIRE_ZCMT(ctx);
300 gen_update_pc(ctx, 0);
305 TCGv succ_pc = dest_gpr(ctx, xRA);
306 gen_pc_plus_diff(succ_pc, ctx, ctx->cur_insn_len);
307 gen_set_gpr(ctx, xRA, succ_pc);
311 ctx->base.is_jmp = DISAS_NORETURN;