Lines Matching refs:dc

51 #define BUG() (gen_BUG(dc, __FILE__, __LINE__))
98 unsigned int (*decoder)(CPUCRISState *env, struct DisasContext *dc);
139 static void gen_BUG(DisasContext *dc, const char *file, int line) in gen_BUG() argument
141 cpu_abort(CPU(dc->cpu), "%s:%d pc=%x\n", file, line, dc->pc); in gen_BUG()
190 static inline void t_gen_mov_preg_TN(DisasContext *dc, int r, TCGv tn) in t_gen_mov_preg_TN() argument
201 if (dc->tb_flags & S_FLAG && r == PR_SPC) { in t_gen_mov_preg_TN()
204 dc->cpustate_changed = 1; in t_gen_mov_preg_TN()
223 static int cris_fetch(CPUCRISState *env, DisasContext *dc, uint32_t addr, in cris_fetch() argument
230 r = translator_ldl(env, &dc->base, addr); in cris_fetch()
233 r = translator_lduw(env, &dc->base, addr); in cris_fetch()
239 r = translator_ldub(env, &dc->base, addr); in cris_fetch()
250 static void cris_lock_irq(DisasContext *dc) in cris_lock_irq() argument
252 dc->clear_locked_irq = 0; in cris_lock_irq()
350 static inline void t_gen_addx_carry(DisasContext *dc, TCGv d) in t_gen_addx_carry() argument
352 if (dc->flags_x) { in t_gen_addx_carry()
362 static inline void t_gen_subx_carry(DisasContext *dc, TCGv d) in t_gen_subx_carry() argument
364 if (dc->flags_x) { in t_gen_subx_carry()
452 static bool use_goto_tb(DisasContext *dc, target_ulong dest) in use_goto_tb() argument
454 return translator_use_goto_tb(&dc->base, dest); in use_goto_tb()
457 static void gen_goto_tb(DisasContext *dc, int n, target_ulong dest) in gen_goto_tb() argument
459 if (use_goto_tb(dc, dest)) { in gen_goto_tb()
462 tcg_gen_exit_tb(dc->base.tb, n); in gen_goto_tb()
469 static inline void cris_clear_x_flag(DisasContext *dc) in cris_clear_x_flag() argument
471 if (dc->flags_x) { in cris_clear_x_flag()
472 dc->flags_uptodate = 0; in cris_clear_x_flag()
474 dc->flags_x = 0; in cris_clear_x_flag()
477 static void cris_flush_cc_state(DisasContext *dc) in cris_flush_cc_state() argument
479 if (dc->cc_size_uptodate != dc->cc_size) { in cris_flush_cc_state()
480 tcg_gen_movi_tl(cc_size, dc->cc_size); in cris_flush_cc_state()
481 dc->cc_size_uptodate = dc->cc_size; in cris_flush_cc_state()
483 tcg_gen_movi_tl(cc_op, dc->cc_op); in cris_flush_cc_state()
484 tcg_gen_movi_tl(cc_mask, dc->cc_mask); in cris_flush_cc_state()
487 static void cris_evaluate_flags(DisasContext *dc) in cris_evaluate_flags() argument
489 if (dc->flags_uptodate) { in cris_evaluate_flags()
493 cris_flush_cc_state(dc); in cris_evaluate_flags()
495 switch (dc->cc_op) { in cris_evaluate_flags()
518 switch (dc->cc_size) { in cris_evaluate_flags()
537 if (dc->cc_size == 4) { in cris_evaluate_flags()
546 switch (dc->cc_size) { in cris_evaluate_flags()
558 if (dc->flags_x) { in cris_evaluate_flags()
560 } else if (dc->cc_op == CC_OP_FLAGS) { in cris_evaluate_flags()
563 dc->flags_uptodate = 1; in cris_evaluate_flags()
566 static void cris_cc_mask(DisasContext *dc, unsigned int mask) in cris_cc_mask() argument
571 dc->update_cc = 0; in cris_cc_mask()
577 ovl = (dc->cc_mask ^ mask) & ~mask; in cris_cc_mask()
580 cris_evaluate_flags(dc); in cris_cc_mask()
582 dc->cc_mask = mask; in cris_cc_mask()
583 dc->update_cc = 1; in cris_cc_mask()
586 static void cris_update_cc_op(DisasContext *dc, int op, int size) in cris_update_cc_op() argument
588 dc->cc_op = op; in cris_update_cc_op()
589 dc->cc_size = size; in cris_update_cc_op()
590 dc->flags_uptodate = 0; in cris_update_cc_op()
593 static inline void cris_update_cc_x(DisasContext *dc) in cris_update_cc_x() argument
596 if (dc->cc_x_uptodate == (2 | dc->flags_x)) { in cris_update_cc_x()
599 tcg_gen_movi_tl(cc_x, dc->flags_x); in cris_update_cc_x()
600 dc->cc_x_uptodate = 2 | dc->flags_x; in cris_update_cc_x()
604 static void cris_pre_alu_update_cc(DisasContext *dc, int op, in cris_pre_alu_update_cc() argument
607 if (dc->update_cc) { in cris_pre_alu_update_cc()
608 cris_update_cc_op(dc, op, size); in cris_pre_alu_update_cc()
621 cris_update_cc_x(dc); in cris_pre_alu_update_cc()
626 static inline void cris_update_result(DisasContext *dc, TCGv res) in cris_update_result() argument
628 if (dc->update_cc) { in cris_update_result()
634 static void cris_alu_op_exec(DisasContext *dc, int op, in cris_alu_op_exec() argument
642 t_gen_addx_carry(dc, dst); in cris_alu_op_exec()
655 t_gen_subx_carry(dc, dst); in cris_alu_op_exec()
681 t_gen_subx_carry(dc, dst); in cris_alu_op_exec()
704 t_gen_subx_carry(dc, dst); in cris_alu_op_exec()
719 static void cris_alu(DisasContext *dc, int op, in cris_alu() argument
738 cris_pre_alu_update_cc(dc, op, op_a, op_b, size); in cris_alu()
739 cris_alu_op_exec(dc, op, tmp, op_a, op_b, size); in cris_alu()
740 cris_update_result(dc, tmp); in cris_alu()
753 static int arith_cc(DisasContext *dc) in arith_cc() argument
755 if (dc->update_cc) { in arith_cc()
756 switch (dc->cc_op) { in arith_cc()
778 static void gen_tst_cc (DisasContext *dc, TCGv cc, int cond) in gen_tst_cc() argument
792 arith_opt = arith_cc(dc) && !dc->flags_uptodate; in gen_tst_cc()
793 move_opt = (dc->cc_op == CC_OP_MOVE); in gen_tst_cc()
797 && dc->cc_x_uptodate != (2 | X_FLAG)) { in gen_tst_cc()
800 cris_evaluate_flags(dc); in gen_tst_cc()
807 && dc->cc_x_uptodate != (2 | X_FLAG)) { in gen_tst_cc()
810 cris_evaluate_flags(dc); in gen_tst_cc()
817 cris_evaluate_flags(dc); in gen_tst_cc()
821 cris_evaluate_flags(dc); in gen_tst_cc()
826 cris_evaluate_flags(dc); in gen_tst_cc()
830 cris_evaluate_flags(dc); in gen_tst_cc()
839 if (dc->cc_size == 1) { in gen_tst_cc()
841 } else if (dc->cc_size == 2) { in gen_tst_cc()
848 cris_evaluate_flags(dc); in gen_tst_cc()
858 if (dc->cc_size == 1) { in gen_tst_cc()
860 } else if (dc->cc_size == 2) { in gen_tst_cc()
867 cris_evaluate_flags(dc); in gen_tst_cc()
873 cris_evaluate_flags(dc); in gen_tst_cc()
878 cris_evaluate_flags(dc); in gen_tst_cc()
892 cris_evaluate_flags(dc); in gen_tst_cc()
901 cris_evaluate_flags(dc); in gen_tst_cc()
909 cris_evaluate_flags(dc); in gen_tst_cc()
930 cris_evaluate_flags(dc); in gen_tst_cc()
948 cris_evaluate_flags(dc); in gen_tst_cc()
960 static void cris_store_direct_jmp(DisasContext *dc) in cris_store_direct_jmp() argument
963 if (dc->jmp == JMP_DIRECT || dc->jmp == JMP_DIRECT_CC) { in cris_store_direct_jmp()
964 if (dc->jmp == JMP_DIRECT) { in cris_store_direct_jmp()
967 tcg_gen_movi_tl(env_btarget, dc->jmp_pc); in cris_store_direct_jmp()
968 dc->jmp = JMP_INDIRECT; in cris_store_direct_jmp()
972 static void cris_prepare_cc_branch (DisasContext *dc, in cris_prepare_cc_branch() argument
977 dc->delayed_branch = 2; in cris_prepare_cc_branch()
978 dc->jmp = JMP_DIRECT_CC; in cris_prepare_cc_branch()
979 dc->jmp_pc = dc->pc + offset; in cris_prepare_cc_branch()
981 gen_tst_cc(dc, env_btaken, cond); in cris_prepare_cc_branch()
982 tcg_gen_movi_tl(env_btarget, dc->jmp_pc); in cris_prepare_cc_branch()
988 static inline void cris_prepare_jmp (DisasContext *dc, unsigned int type) in cris_prepare_jmp() argument
992 dc->delayed_branch = 2; in cris_prepare_jmp()
993 dc->jmp = type; in cris_prepare_jmp()
999 static void gen_load64(DisasContext *dc, TCGv_i64 dst, TCGv addr) in gen_load64() argument
1003 if (dc->delayed_branch == 1) { in gen_load64()
1004 cris_store_direct_jmp(dc); in gen_load64()
1007 tcg_gen_qemu_ld_i64(dst, addr, dc->mem_index, MO_TEUQ); in gen_load64()
1010 static void gen_load(DisasContext *dc, TCGv dst, TCGv addr, in gen_load() argument
1015 if (dc->delayed_branch == 1) { in gen_load()
1016 cris_store_direct_jmp(dc); in gen_load()
1019 tcg_gen_qemu_ld_tl(dst, addr, dc->mem_index, in gen_load()
1023 static void gen_store (DisasContext *dc, TCGv addr, TCGv val, in gen_store() argument
1028 if (dc->delayed_branch == 1) { in gen_store()
1029 cris_store_direct_jmp(dc); in gen_store()
1035 if (dc->flags_x && (dc->tb_flags & P_FLAG)) { in gen_store()
1036 dc->postinc = 0; in gen_store()
1037 cris_evaluate_flags(dc); in gen_store()
1042 tcg_gen_qemu_st_tl(val, addr, dc->mem_index, MO_TE + ctz32(size)); in gen_store()
1044 if (dc->flags_x) { in gen_store()
1045 cris_evaluate_flags(dc); in gen_store()
1085 static inline unsigned int memsize_z(DisasContext *dc) in memsize_z() argument
1087 return dc->zsize + 1; in memsize_z()
1090 static inline unsigned int memsize_zz(DisasContext *dc) in memsize_zz() argument
1092 switch (dc->zzsize) { in memsize_zz()
1100 static inline void do_postinc (DisasContext *dc, int size) in do_postinc() argument
1102 if (dc->postinc) { in do_postinc()
1103 tcg_gen_addi_tl(cpu_R[dc->op1], cpu_R[dc->op1], size); in do_postinc()
1107 static inline void dec_prep_move_r(DisasContext *dc, int rs, int rd, in dec_prep_move_r() argument
1120 static void dec_prep_alu_r(DisasContext *dc, int rs, int rd, in dec_prep_alu_r() argument
1123 dec_prep_move_r(dc, rs, rd, size, s_ext, src); in dec_prep_alu_r()
1132 static int dec_prep_move_m(CPUCRISState *env, DisasContext *dc, in dec_prep_move_m() argument
1140 rs = dc->op1; in dec_prep_move_m()
1141 is_imm = rs == 15 && dc->postinc; in dec_prep_move_m()
1150 imm = cris_fetch(env, dc, dc->pc + 2, memsize, s_ext); in dec_prep_move_m()
1152 dc->postinc = 0; in dec_prep_move_m()
1154 cris_flush_cc_state(dc); in dec_prep_move_m()
1155 gen_load(dc, dst, cpu_R[rs], memsize, 0); in dec_prep_move_m()
1168 static int dec_prep_alu_m(CPUCRISState *env, DisasContext *dc, in dec_prep_alu_m() argument
1173 insn_len = dec_prep_move_m(env, dc, s_ext, memsize, src); in dec_prep_alu_m()
1174 tcg_gen_mov_tl(dst, cpu_R[dc->op2]); in dec_prep_alu_m()
1192 static int dec_bccq(CPUCRISState *env, DisasContext *dc) in dec_bccq() argument
1196 uint32_t cond = dc->op2; in dec_bccq()
1198 offset = EXTRACT_FIELD(dc->ir, 1, 7); in dec_bccq()
1199 sign = EXTRACT_FIELD(dc->ir, 0, 0); in dec_bccq()
1205 LOG_DIS("b%s %x\n", cc_name(cond), dc->pc + offset); in dec_bccq()
1208 cris_cc_mask(dc, 0); in dec_bccq()
1209 cris_prepare_cc_branch(dc, offset, cond); in dec_bccq()
1212 static int dec_addoq(CPUCRISState *env, DisasContext *dc) in dec_addoq() argument
1216 dc->op1 = EXTRACT_FIELD(dc->ir, 0, 7); in dec_addoq()
1217 imm = sign_extend(dc->op1, 7); in dec_addoq()
1219 LOG_DIS("addoq %d, $r%u\n", imm, dc->op2); in dec_addoq()
1220 cris_cc_mask(dc, 0); in dec_addoq()
1222 tcg_gen_addi_tl(cpu_R[R_ACR], cpu_R[dc->op2], imm); in dec_addoq()
1226 static int dec_addq(CPUCRISState *env, DisasContext *dc) in dec_addq() argument
1229 LOG_DIS("addq %u, $r%u\n", dc->op1, dc->op2); in dec_addq()
1231 dc->op1 = EXTRACT_FIELD(dc->ir, 0, 5); in dec_addq()
1233 cris_cc_mask(dc, CC_MASK_NZVC); in dec_addq()
1235 c = tcg_constant_tl(dc->op1); in dec_addq()
1236 cris_alu(dc, CC_OP_ADD, in dec_addq()
1237 cpu_R[dc->op2], cpu_R[dc->op2], c, 4); in dec_addq()
1240 static int dec_moveq(CPUCRISState *env, DisasContext *dc) in dec_moveq() argument
1244 dc->op1 = EXTRACT_FIELD(dc->ir, 0, 5); in dec_moveq()
1245 imm = sign_extend(dc->op1, 5); in dec_moveq()
1246 LOG_DIS("moveq %d, $r%u\n", imm, dc->op2); in dec_moveq()
1248 tcg_gen_movi_tl(cpu_R[dc->op2], imm); in dec_moveq()
1251 static int dec_subq(CPUCRISState *env, DisasContext *dc) in dec_subq() argument
1254 dc->op1 = EXTRACT_FIELD(dc->ir, 0, 5); in dec_subq()
1256 LOG_DIS("subq %u, $r%u\n", dc->op1, dc->op2); in dec_subq()
1258 cris_cc_mask(dc, CC_MASK_NZVC); in dec_subq()
1259 c = tcg_constant_tl(dc->op1); in dec_subq()
1260 cris_alu(dc, CC_OP_SUB, in dec_subq()
1261 cpu_R[dc->op2], cpu_R[dc->op2], c, 4); in dec_subq()
1264 static int dec_cmpq(CPUCRISState *env, DisasContext *dc) in dec_cmpq() argument
1268 dc->op1 = EXTRACT_FIELD(dc->ir, 0, 5); in dec_cmpq()
1269 imm = sign_extend(dc->op1, 5); in dec_cmpq()
1271 LOG_DIS("cmpq %d, $r%d\n", imm, dc->op2); in dec_cmpq()
1272 cris_cc_mask(dc, CC_MASK_NZVC); in dec_cmpq()
1275 cris_alu(dc, CC_OP_CMP, in dec_cmpq()
1276 cpu_R[dc->op2], cpu_R[dc->op2], c, 4); in dec_cmpq()
1279 static int dec_andq(CPUCRISState *env, DisasContext *dc) in dec_andq() argument
1283 dc->op1 = EXTRACT_FIELD(dc->ir, 0, 5); in dec_andq()
1284 imm = sign_extend(dc->op1, 5); in dec_andq()
1286 LOG_DIS("andq %d, $r%d\n", imm, dc->op2); in dec_andq()
1287 cris_cc_mask(dc, CC_MASK_NZ); in dec_andq()
1290 cris_alu(dc, CC_OP_AND, in dec_andq()
1291 cpu_R[dc->op2], cpu_R[dc->op2], c, 4); in dec_andq()
1294 static int dec_orq(CPUCRISState *env, DisasContext *dc) in dec_orq() argument
1298 dc->op1 = EXTRACT_FIELD(dc->ir, 0, 5); in dec_orq()
1299 imm = sign_extend(dc->op1, 5); in dec_orq()
1300 LOG_DIS("orq %d, $r%d\n", imm, dc->op2); in dec_orq()
1301 cris_cc_mask(dc, CC_MASK_NZ); in dec_orq()
1304 cris_alu(dc, CC_OP_OR, in dec_orq()
1305 cpu_R[dc->op2], cpu_R[dc->op2], c, 4); in dec_orq()
1308 static int dec_btstq(CPUCRISState *env, DisasContext *dc) in dec_btstq() argument
1311 dc->op1 = EXTRACT_FIELD(dc->ir, 0, 4); in dec_btstq()
1312 LOG_DIS("btstq %u, $r%d\n", dc->op1, dc->op2); in dec_btstq()
1314 cris_cc_mask(dc, CC_MASK_NZ); in dec_btstq()
1315 c = tcg_constant_tl(dc->op1); in dec_btstq()
1316 cris_evaluate_flags(dc); in dec_btstq()
1317 gen_helper_btst(cpu_PR[PR_CCS], tcg_env, cpu_R[dc->op2], in dec_btstq()
1319 cris_alu(dc, CC_OP_MOVE, in dec_btstq()
1320 cpu_R[dc->op2], cpu_R[dc->op2], cpu_R[dc->op2], 4); in dec_btstq()
1321 cris_update_cc_op(dc, CC_OP_FLAGS, 4); in dec_btstq()
1322 dc->flags_uptodate = 1; in dec_btstq()
1325 static int dec_asrq(CPUCRISState *env, DisasContext *dc) in dec_asrq() argument
1327 dc->op1 = EXTRACT_FIELD(dc->ir, 0, 4); in dec_asrq()
1328 LOG_DIS("asrq %u, $r%d\n", dc->op1, dc->op2); in dec_asrq()
1329 cris_cc_mask(dc, CC_MASK_NZ); in dec_asrq()
1331 tcg_gen_sari_tl(cpu_R[dc->op2], cpu_R[dc->op2], dc->op1); in dec_asrq()
1332 cris_alu(dc, CC_OP_MOVE, in dec_asrq()
1333 cpu_R[dc->op2], in dec_asrq()
1334 cpu_R[dc->op2], cpu_R[dc->op2], 4); in dec_asrq()
1337 static int dec_lslq(CPUCRISState *env, DisasContext *dc) in dec_lslq() argument
1339 dc->op1 = EXTRACT_FIELD(dc->ir, 0, 4); in dec_lslq()
1340 LOG_DIS("lslq %u, $r%d\n", dc->op1, dc->op2); in dec_lslq()
1342 cris_cc_mask(dc, CC_MASK_NZ); in dec_lslq()
1344 tcg_gen_shli_tl(cpu_R[dc->op2], cpu_R[dc->op2], dc->op1); in dec_lslq()
1346 cris_alu(dc, CC_OP_MOVE, in dec_lslq()
1347 cpu_R[dc->op2], in dec_lslq()
1348 cpu_R[dc->op2], cpu_R[dc->op2], 4); in dec_lslq()
1351 static int dec_lsrq(CPUCRISState *env, DisasContext *dc) in dec_lsrq() argument
1353 dc->op1 = EXTRACT_FIELD(dc->ir, 0, 4); in dec_lsrq()
1354 LOG_DIS("lsrq %u, $r%d\n", dc->op1, dc->op2); in dec_lsrq()
1356 cris_cc_mask(dc, CC_MASK_NZ); in dec_lsrq()
1358 tcg_gen_shri_tl(cpu_R[dc->op2], cpu_R[dc->op2], dc->op1); in dec_lsrq()
1359 cris_alu(dc, CC_OP_MOVE, in dec_lsrq()
1360 cpu_R[dc->op2], in dec_lsrq()
1361 cpu_R[dc->op2], cpu_R[dc->op2], 4); in dec_lsrq()
1365 static int dec_move_r(CPUCRISState *env, DisasContext *dc) in dec_move_r() argument
1367 int size = memsize_zz(dc); in dec_move_r()
1370 memsize_char(size), dc->op1, dc->op2); in dec_move_r()
1372 cris_cc_mask(dc, CC_MASK_NZ); in dec_move_r()
1374 dec_prep_move_r(dc, dc->op1, dc->op2, size, 0, cpu_R[dc->op2]); in dec_move_r()
1375 cris_cc_mask(dc, CC_MASK_NZ); in dec_move_r()
1376 cris_update_cc_op(dc, CC_OP_MOVE, 4); in dec_move_r()
1377 cris_update_cc_x(dc); in dec_move_r()
1378 cris_update_result(dc, cpu_R[dc->op2]); in dec_move_r()
1383 dec_prep_move_r(dc, dc->op1, dc->op2, size, 0, t0); in dec_move_r()
1384 cris_alu(dc, CC_OP_MOVE, in dec_move_r()
1385 cpu_R[dc->op2], in dec_move_r()
1386 cpu_R[dc->op2], t0, size); in dec_move_r()
1391 static int dec_scc_r(CPUCRISState *env, DisasContext *dc) in dec_scc_r() argument
1393 int cond = dc->op2; in dec_scc_r()
1396 cc_name(cond), dc->op1); in dec_scc_r()
1398 gen_tst_cc(dc, cpu_R[dc->op1], cond); in dec_scc_r()
1399 tcg_gen_setcondi_tl(TCG_COND_NE, cpu_R[dc->op1], cpu_R[dc->op1], 0); in dec_scc_r()
1401 cris_cc_mask(dc, 0); in dec_scc_r()
1405 static inline void cris_alu_alloc_temps(DisasContext *dc, int size, TCGv *t) in cris_alu_alloc_temps() argument
1408 t[0] = cpu_R[dc->op2]; in cris_alu_alloc_temps()
1409 t[1] = cpu_R[dc->op1]; in cris_alu_alloc_temps()
1416 static int dec_and_r(CPUCRISState *env, DisasContext *dc) in dec_and_r() argument
1419 int size = memsize_zz(dc); in dec_and_r()
1422 memsize_char(size), dc->op1, dc->op2); in dec_and_r()
1424 cris_cc_mask(dc, CC_MASK_NZ); in dec_and_r()
1426 cris_alu_alloc_temps(dc, size, t); in dec_and_r()
1427 dec_prep_alu_r(dc, dc->op1, dc->op2, size, 0, t[0], t[1]); in dec_and_r()
1428 cris_alu(dc, CC_OP_AND, cpu_R[dc->op2], t[0], t[1], size); in dec_and_r()
1432 static int dec_lz_r(CPUCRISState *env, DisasContext *dc) in dec_lz_r() argument
1436 dc->op1, dc->op2); in dec_lz_r()
1437 cris_cc_mask(dc, CC_MASK_NZ); in dec_lz_r()
1439 dec_prep_alu_r(dc, dc->op1, dc->op2, 4, 0, cpu_R[dc->op2], t0); in dec_lz_r()
1440 cris_alu(dc, CC_OP_LZ, cpu_R[dc->op2], cpu_R[dc->op2], t0, 4); in dec_lz_r()
1444 static int dec_lsl_r(CPUCRISState *env, DisasContext *dc) in dec_lsl_r() argument
1447 int size = memsize_zz(dc); in dec_lsl_r()
1450 memsize_char(size), dc->op1, dc->op2); in dec_lsl_r()
1452 cris_cc_mask(dc, CC_MASK_NZ); in dec_lsl_r()
1453 cris_alu_alloc_temps(dc, size, t); in dec_lsl_r()
1454 dec_prep_alu_r(dc, dc->op1, dc->op2, size, 0, t[0], t[1]); in dec_lsl_r()
1456 cris_alu(dc, CC_OP_LSL, cpu_R[dc->op2], t[0], t[1], size); in dec_lsl_r()
1460 static int dec_lsr_r(CPUCRISState *env, DisasContext *dc) in dec_lsr_r() argument
1463 int size = memsize_zz(dc); in dec_lsr_r()
1466 memsize_char(size), dc->op1, dc->op2); in dec_lsr_r()
1468 cris_cc_mask(dc, CC_MASK_NZ); in dec_lsr_r()
1469 cris_alu_alloc_temps(dc, size, t); in dec_lsr_r()
1470 dec_prep_alu_r(dc, dc->op1, dc->op2, size, 0, t[0], t[1]); in dec_lsr_r()
1472 cris_alu(dc, CC_OP_LSR, cpu_R[dc->op2], t[0], t[1], size); in dec_lsr_r()
1476 static int dec_asr_r(CPUCRISState *env, DisasContext *dc) in dec_asr_r() argument
1479 int size = memsize_zz(dc); in dec_asr_r()
1482 memsize_char(size), dc->op1, dc->op2); in dec_asr_r()
1484 cris_cc_mask(dc, CC_MASK_NZ); in dec_asr_r()
1485 cris_alu_alloc_temps(dc, size, t); in dec_asr_r()
1486 dec_prep_alu_r(dc, dc->op1, dc->op2, size, 1, t[0], t[1]); in dec_asr_r()
1488 cris_alu(dc, CC_OP_ASR, cpu_R[dc->op2], t[0], t[1], size); in dec_asr_r()
1492 static int dec_muls_r(CPUCRISState *env, DisasContext *dc) in dec_muls_r() argument
1495 int size = memsize_zz(dc); in dec_muls_r()
1498 memsize_char(size), dc->op1, dc->op2); in dec_muls_r()
1499 cris_cc_mask(dc, CC_MASK_NZV); in dec_muls_r()
1500 cris_alu_alloc_temps(dc, size, t); in dec_muls_r()
1501 dec_prep_alu_r(dc, dc->op1, dc->op2, size, 1, t[0], t[1]); in dec_muls_r()
1503 cris_alu(dc, CC_OP_MULS, cpu_R[dc->op2], t[0], t[1], 4); in dec_muls_r()
1507 static int dec_mulu_r(CPUCRISState *env, DisasContext *dc) in dec_mulu_r() argument
1510 int size = memsize_zz(dc); in dec_mulu_r()
1513 memsize_char(size), dc->op1, dc->op2); in dec_mulu_r()
1514 cris_cc_mask(dc, CC_MASK_NZV); in dec_mulu_r()
1515 cris_alu_alloc_temps(dc, size, t); in dec_mulu_r()
1516 dec_prep_alu_r(dc, dc->op1, dc->op2, size, 0, t[0], t[1]); in dec_mulu_r()
1518 cris_alu(dc, CC_OP_MULU, cpu_R[dc->op2], t[0], t[1], 4); in dec_mulu_r()
1523 static int dec_dstep_r(CPUCRISState *env, DisasContext *dc) in dec_dstep_r() argument
1525 LOG_DIS("dstep $r%u, $r%u\n", dc->op1, dc->op2); in dec_dstep_r()
1526 cris_cc_mask(dc, CC_MASK_NZ); in dec_dstep_r()
1527 cris_alu(dc, CC_OP_DSTEP, in dec_dstep_r()
1528 cpu_R[dc->op2], cpu_R[dc->op2], cpu_R[dc->op1], 4); in dec_dstep_r()
1532 static int dec_xor_r(CPUCRISState *env, DisasContext *dc) in dec_xor_r() argument
1535 int size = memsize_zz(dc); in dec_xor_r()
1537 memsize_char(size), dc->op1, dc->op2); in dec_xor_r()
1539 cris_cc_mask(dc, CC_MASK_NZ); in dec_xor_r()
1540 cris_alu_alloc_temps(dc, size, t); in dec_xor_r()
1541 dec_prep_alu_r(dc, dc->op1, dc->op2, size, 0, t[0], t[1]); in dec_xor_r()
1543 cris_alu(dc, CC_OP_XOR, cpu_R[dc->op2], t[0], t[1], 4); in dec_xor_r()
1547 static int dec_bound_r(CPUCRISState *env, DisasContext *dc) in dec_bound_r() argument
1550 int size = memsize_zz(dc); in dec_bound_r()
1552 memsize_char(size), dc->op1, dc->op2); in dec_bound_r()
1553 cris_cc_mask(dc, CC_MASK_NZ); in dec_bound_r()
1555 dec_prep_move_r(dc, dc->op1, dc->op2, size, 0, l0); in dec_bound_r()
1556 cris_alu(dc, CC_OP_BOUND, cpu_R[dc->op2], cpu_R[dc->op2], l0, 4); in dec_bound_r()
1560 static int dec_cmp_r(CPUCRISState *env, DisasContext *dc) in dec_cmp_r() argument
1563 int size = memsize_zz(dc); in dec_cmp_r()
1565 memsize_char(size), dc->op1, dc->op2); in dec_cmp_r()
1566 cris_cc_mask(dc, CC_MASK_NZVC); in dec_cmp_r()
1567 cris_alu_alloc_temps(dc, size, t); in dec_cmp_r()
1568 dec_prep_alu_r(dc, dc->op1, dc->op2, size, 0, t[0], t[1]); in dec_cmp_r()
1570 cris_alu(dc, CC_OP_CMP, cpu_R[dc->op2], t[0], t[1], size); in dec_cmp_r()
1574 static int dec_abs_r(CPUCRISState *env, DisasContext *dc) in dec_abs_r() argument
1577 dc->op1, dc->op2); in dec_abs_r()
1578 cris_cc_mask(dc, CC_MASK_NZ); in dec_abs_r()
1580 tcg_gen_abs_tl(cpu_R[dc->op2], cpu_R[dc->op1]); in dec_abs_r()
1581 cris_alu(dc, CC_OP_MOVE, in dec_abs_r()
1582 cpu_R[dc->op2], cpu_R[dc->op2], cpu_R[dc->op2], 4); in dec_abs_r()
1586 static int dec_add_r(CPUCRISState *env, DisasContext *dc) in dec_add_r() argument
1589 int size = memsize_zz(dc); in dec_add_r()
1591 memsize_char(size), dc->op1, dc->op2); in dec_add_r()
1592 cris_cc_mask(dc, CC_MASK_NZVC); in dec_add_r()
1593 cris_alu_alloc_temps(dc, size, t); in dec_add_r()
1594 dec_prep_alu_r(dc, dc->op1, dc->op2, size, 0, t[0], t[1]); in dec_add_r()
1596 cris_alu(dc, CC_OP_ADD, cpu_R[dc->op2], t[0], t[1], size); in dec_add_r()
1600 static int dec_addc_r(CPUCRISState *env, DisasContext *dc) in dec_addc_r() argument
1603 dc->op1, dc->op2); in dec_addc_r()
1604 cris_evaluate_flags(dc); in dec_addc_r()
1607 dc->flags_x = X_FLAG; in dec_addc_r()
1609 cris_cc_mask(dc, CC_MASK_NZVC); in dec_addc_r()
1610 cris_alu(dc, CC_OP_ADDC, in dec_addc_r()
1611 cpu_R[dc->op2], cpu_R[dc->op2], cpu_R[dc->op1], 4); in dec_addc_r()
1615 static int dec_mcp_r(CPUCRISState *env, DisasContext *dc) in dec_mcp_r() argument
1618 dc->op2, dc->op1); in dec_mcp_r()
1619 cris_evaluate_flags(dc); in dec_mcp_r()
1620 cris_cc_mask(dc, CC_MASK_RNZV); in dec_mcp_r()
1621 cris_alu(dc, CC_OP_MCP, in dec_mcp_r()
1622 cpu_R[dc->op1], cpu_R[dc->op1], cpu_PR[dc->op2], 4); in dec_mcp_r()
1646 static int dec_swap_r(CPUCRISState *env, DisasContext *dc) in dec_swap_r() argument
1653 swapmode_name(dc->op2, modename), dc->op1); in dec_swap_r()
1655 cris_cc_mask(dc, CC_MASK_NZ); in dec_swap_r()
1657 tcg_gen_mov_tl(t0, cpu_R[dc->op1]); in dec_swap_r()
1658 if (dc->op2 & 8) { in dec_swap_r()
1661 if (dc->op2 & 4) { in dec_swap_r()
1664 if (dc->op2 & 2) { in dec_swap_r()
1667 if (dc->op2 & 1) { in dec_swap_r()
1670 cris_alu(dc, CC_OP_MOVE, cpu_R[dc->op1], cpu_R[dc->op1], t0, 4); in dec_swap_r()
1674 static int dec_or_r(CPUCRISState *env, DisasContext *dc) in dec_or_r() argument
1677 int size = memsize_zz(dc); in dec_or_r()
1679 memsize_char(size), dc->op1, dc->op2); in dec_or_r()
1680 cris_cc_mask(dc, CC_MASK_NZ); in dec_or_r()
1681 cris_alu_alloc_temps(dc, size, t); in dec_or_r()
1682 dec_prep_alu_r(dc, dc->op1, dc->op2, size, 0, t[0], t[1]); in dec_or_r()
1683 cris_alu(dc, CC_OP_OR, cpu_R[dc->op2], t[0], t[1], size); in dec_or_r()
1687 static int dec_addi_r(CPUCRISState *env, DisasContext *dc) in dec_addi_r() argument
1691 memsize_char(memsize_zz(dc)), dc->op2, dc->op1); in dec_addi_r()
1692 cris_cc_mask(dc, 0); in dec_addi_r()
1694 tcg_gen_shli_tl(t0, cpu_R[dc->op2], dc->zzsize); in dec_addi_r()
1695 tcg_gen_add_tl(cpu_R[dc->op1], cpu_R[dc->op1], t0); in dec_addi_r()
1699 static int dec_addi_acr(CPUCRISState *env, DisasContext *dc) in dec_addi_acr() argument
1703 memsize_char(memsize_zz(dc)), dc->op2, dc->op1); in dec_addi_acr()
1704 cris_cc_mask(dc, 0); in dec_addi_acr()
1706 tcg_gen_shli_tl(t0, cpu_R[dc->op2], dc->zzsize); in dec_addi_acr()
1707 tcg_gen_add_tl(cpu_R[R_ACR], cpu_R[dc->op1], t0); in dec_addi_acr()
1711 static int dec_neg_r(CPUCRISState *env, DisasContext *dc) in dec_neg_r() argument
1714 int size = memsize_zz(dc); in dec_neg_r()
1716 memsize_char(size), dc->op1, dc->op2); in dec_neg_r()
1717 cris_cc_mask(dc, CC_MASK_NZVC); in dec_neg_r()
1718 cris_alu_alloc_temps(dc, size, t); in dec_neg_r()
1719 dec_prep_alu_r(dc, dc->op1, dc->op2, size, 0, t[0], t[1]); in dec_neg_r()
1721 cris_alu(dc, CC_OP_NEG, cpu_R[dc->op2], t[0], t[1], size); in dec_neg_r()
1725 static int dec_btst_r(CPUCRISState *env, DisasContext *dc) in dec_btst_r() argument
1728 dc->op1, dc->op2); in dec_btst_r()
1729 cris_cc_mask(dc, CC_MASK_NZ); in dec_btst_r()
1730 cris_evaluate_flags(dc); in dec_btst_r()
1731 gen_helper_btst(cpu_PR[PR_CCS], tcg_env, cpu_R[dc->op2], in dec_btst_r()
1732 cpu_R[dc->op1], cpu_PR[PR_CCS]); in dec_btst_r()
1733 cris_alu(dc, CC_OP_MOVE, cpu_R[dc->op2], in dec_btst_r()
1734 cpu_R[dc->op2], cpu_R[dc->op2], 4); in dec_btst_r()
1735 cris_update_cc_op(dc, CC_OP_FLAGS, 4); in dec_btst_r()
1736 dc->flags_uptodate = 1; in dec_btst_r()
1740 static int dec_sub_r(CPUCRISState *env, DisasContext *dc) in dec_sub_r() argument
1743 int size = memsize_zz(dc); in dec_sub_r()
1745 memsize_char(size), dc->op1, dc->op2); in dec_sub_r()
1746 cris_cc_mask(dc, CC_MASK_NZVC); in dec_sub_r()
1747 cris_alu_alloc_temps(dc, size, t); in dec_sub_r()
1748 dec_prep_alu_r(dc, dc->op1, dc->op2, size, 0, t[0], t[1]); in dec_sub_r()
1749 cris_alu(dc, CC_OP_SUB, cpu_R[dc->op2], t[0], t[1], size); in dec_sub_r()
1754 static int dec_movu_r(CPUCRISState *env, DisasContext *dc) in dec_movu_r() argument
1757 int size = memsize_z(dc); in dec_movu_r()
1760 dc->op1, dc->op2); in dec_movu_r()
1762 cris_cc_mask(dc, CC_MASK_NZ); in dec_movu_r()
1764 dec_prep_move_r(dc, dc->op1, dc->op2, size, 0, t0); in dec_movu_r()
1765 cris_alu(dc, CC_OP_MOVE, cpu_R[dc->op2], cpu_R[dc->op2], t0, 4); in dec_movu_r()
1770 static int dec_movs_r(CPUCRISState *env, DisasContext *dc) in dec_movs_r() argument
1773 int size = memsize_z(dc); in dec_movs_r()
1776 dc->op1, dc->op2); in dec_movs_r()
1778 cris_cc_mask(dc, CC_MASK_NZ); in dec_movs_r()
1781 t_gen_sext(t0, cpu_R[dc->op1], size); in dec_movs_r()
1782 cris_alu(dc, CC_OP_MOVE, in dec_movs_r()
1783 cpu_R[dc->op2], cpu_R[dc->op1], t0, 4); in dec_movs_r()
1788 static int dec_addu_r(CPUCRISState *env, DisasContext *dc) in dec_addu_r() argument
1791 int size = memsize_z(dc); in dec_addu_r()
1794 dc->op1, dc->op2); in dec_addu_r()
1796 cris_cc_mask(dc, CC_MASK_NZVC); in dec_addu_r()
1799 t_gen_zext(t0, cpu_R[dc->op1], size); in dec_addu_r()
1800 cris_alu(dc, CC_OP_ADD, cpu_R[dc->op2], cpu_R[dc->op2], t0, 4); in dec_addu_r()
1805 static int dec_adds_r(CPUCRISState *env, DisasContext *dc) in dec_adds_r() argument
1808 int size = memsize_z(dc); in dec_adds_r()
1811 dc->op1, dc->op2); in dec_adds_r()
1813 cris_cc_mask(dc, CC_MASK_NZVC); in dec_adds_r()
1816 t_gen_sext(t0, cpu_R[dc->op1], size); in dec_adds_r()
1817 cris_alu(dc, CC_OP_ADD, in dec_adds_r()
1818 cpu_R[dc->op2], cpu_R[dc->op2], t0, 4); in dec_adds_r()
1823 static int dec_subu_r(CPUCRISState *env, DisasContext *dc) in dec_subu_r() argument
1826 int size = memsize_z(dc); in dec_subu_r()
1829 dc->op1, dc->op2); in dec_subu_r()
1831 cris_cc_mask(dc, CC_MASK_NZVC); in dec_subu_r()
1834 t_gen_zext(t0, cpu_R[dc->op1], size); in dec_subu_r()
1835 cris_alu(dc, CC_OP_SUB, in dec_subu_r()
1836 cpu_R[dc->op2], cpu_R[dc->op2], t0, 4); in dec_subu_r()
1841 static int dec_subs_r(CPUCRISState *env, DisasContext *dc) in dec_subs_r() argument
1844 int size = memsize_z(dc); in dec_subs_r()
1847 dc->op1, dc->op2); in dec_subs_r()
1849 cris_cc_mask(dc, CC_MASK_NZVC); in dec_subs_r()
1852 t_gen_sext(t0, cpu_R[dc->op1], size); in dec_subs_r()
1853 cris_alu(dc, CC_OP_SUB, in dec_subs_r()
1854 cpu_R[dc->op2], cpu_R[dc->op2], t0, 4); in dec_subs_r()
1858 static int dec_setclrf(CPUCRISState *env, DisasContext *dc) in dec_setclrf() argument
1861 int set = (~dc->opcode >> 2) & 1; in dec_setclrf()
1864 flags = (EXTRACT_FIELD(dc->ir, 12, 15) << 4) in dec_setclrf()
1865 | EXTRACT_FIELD(dc->ir, 0, 3); in dec_setclrf()
1876 if (dc->tb_flags & U_FLAG) { in dec_setclrf()
1882 dc->flags_x = X_FLAG; in dec_setclrf()
1884 dc->flags_x = 0; in dec_setclrf()
1890 tcg_gen_movi_tl(env_pc, dc->pc + 2); in dec_setclrf()
1891 dc->base.is_jmp = DISAS_UPDATE; in dec_setclrf()
1892 dc->cpustate_changed = 1; in dec_setclrf()
1897 tcg_gen_movi_tl(env_pc, dc->pc + 2); in dec_setclrf()
1898 dc->base.is_jmp = DISAS_UPDATE; in dec_setclrf()
1899 dc->cpustate_changed = 1; in dec_setclrf()
1904 cris_evaluate_flags(dc); in dec_setclrf()
1905 cris_update_cc_op(dc, CC_OP_FLAGS, 4); in dec_setclrf()
1906 cris_update_cc_x(dc); in dec_setclrf()
1907 tcg_gen_movi_tl(cc_op, dc->cc_op); in dec_setclrf()
1910 if (!(dc->tb_flags & U_FLAG) && (flags & U_FLAG)) { in dec_setclrf()
1914 dc->cpustate_changed = 1; in dec_setclrf()
1921 dc->flags_uptodate = 1; in dec_setclrf()
1922 dc->clear_x = 0; in dec_setclrf()
1926 static int dec_move_rs(CPUCRISState *env, DisasContext *dc) in dec_move_rs() argument
1929 LOG_DIS("move $r%u, $s%u\n", dc->op1, dc->op2); in dec_move_rs()
1930 c1 = tcg_constant_tl(dc->op1); in dec_move_rs()
1931 c2 = tcg_constant_tl(dc->op2); in dec_move_rs()
1932 cris_cc_mask(dc, 0); in dec_move_rs()
1936 static int dec_move_sr(CPUCRISState *env, DisasContext *dc) in dec_move_sr() argument
1939 LOG_DIS("move $s%u, $r%u\n", dc->op2, dc->op1); in dec_move_sr()
1940 c1 = tcg_constant_tl(dc->op1); in dec_move_sr()
1941 c2 = tcg_constant_tl(dc->op2); in dec_move_sr()
1942 cris_cc_mask(dc, 0); in dec_move_sr()
1947 static int dec_move_rp(CPUCRISState *env, DisasContext *dc) in dec_move_rp() argument
1950 LOG_DIS("move $r%u, $p%u\n", dc->op1, dc->op2); in dec_move_rp()
1951 cris_cc_mask(dc, 0); in dec_move_rp()
1954 if (dc->op2 == PR_CCS) { in dec_move_rp()
1955 cris_evaluate_flags(dc); in dec_move_rp()
1956 tcg_gen_mov_tl(t[0], cpu_R[dc->op1]); in dec_move_rp()
1957 if (dc->tb_flags & U_FLAG) { in dec_move_rp()
1965 tcg_gen_mov_tl(t[0], cpu_R[dc->op1]); in dec_move_rp()
1968 t_gen_mov_preg_TN(dc, dc->op2, t[0]); in dec_move_rp()
1969 if (dc->op2 == PR_CCS) { in dec_move_rp()
1970 cris_update_cc_op(dc, CC_OP_FLAGS, 4); in dec_move_rp()
1971 dc->flags_uptodate = 1; in dec_move_rp()
1975 static int dec_move_pr(CPUCRISState *env, DisasContext *dc) in dec_move_pr() argument
1978 LOG_DIS("move $p%u, $r%u\n", dc->op2, dc->op1); in dec_move_pr()
1979 cris_cc_mask(dc, 0); in dec_move_pr()
1981 if (dc->op2 == PR_CCS) { in dec_move_pr()
1982 cris_evaluate_flags(dc); in dec_move_pr()
1985 if (dc->op2 == PR_DZ) { in dec_move_pr()
1986 tcg_gen_movi_tl(cpu_R[dc->op1], 0); in dec_move_pr()
1989 t_gen_mov_TN_preg(t0, dc->op2); in dec_move_pr()
1990 cris_alu(dc, CC_OP_MOVE, in dec_move_pr()
1991 cpu_R[dc->op1], cpu_R[dc->op1], t0, in dec_move_pr()
1992 preg_sizes[dc->op2]); in dec_move_pr()
1997 static int dec_move_mr(CPUCRISState *env, DisasContext *dc) in dec_move_mr() argument
1999 int memsize = memsize_zz(dc); in dec_move_mr()
2003 dc->op1, dc->postinc ? "+]" : "]", in dec_move_mr()
2004 dc->op2); in dec_move_mr()
2007 insn_len = dec_prep_move_m(env, dc, 0, 4, cpu_R[dc->op2]); in dec_move_mr()
2008 cris_cc_mask(dc, CC_MASK_NZ); in dec_move_mr()
2009 cris_update_cc_op(dc, CC_OP_MOVE, 4); in dec_move_mr()
2010 cris_update_cc_x(dc); in dec_move_mr()
2011 cris_update_result(dc, cpu_R[dc->op2]); in dec_move_mr()
2016 insn_len = dec_prep_move_m(env, dc, 0, memsize, t0); in dec_move_mr()
2017 cris_cc_mask(dc, CC_MASK_NZ); in dec_move_mr()
2018 cris_alu(dc, CC_OP_MOVE, in dec_move_mr()
2019 cpu_R[dc->op2], cpu_R[dc->op2], t0, memsize); in dec_move_mr()
2021 do_postinc(dc, memsize); in dec_move_mr()
2031 static int dec_movs_m(CPUCRISState *env, DisasContext *dc) in dec_movs_m() argument
2034 int memsize = memsize_z(dc); in dec_movs_m()
2038 dc->op1, dc->postinc ? "+]" : "]", in dec_movs_m()
2039 dc->op2); in dec_movs_m()
2043 insn_len = dec_prep_alu_m(env, dc, 1, memsize, t[0], t[1]); in dec_movs_m()
2044 cris_cc_mask(dc, CC_MASK_NZ); in dec_movs_m()
2045 cris_alu(dc, CC_OP_MOVE, in dec_movs_m()
2046 cpu_R[dc->op2], cpu_R[dc->op2], t[1], 4); in dec_movs_m()
2047 do_postinc(dc, memsize); in dec_movs_m()
2051 static int dec_addu_m(CPUCRISState *env, DisasContext *dc) in dec_addu_m() argument
2054 int memsize = memsize_z(dc); in dec_addu_m()
2058 dc->op1, dc->postinc ? "+]" : "]", in dec_addu_m()
2059 dc->op2); in dec_addu_m()
2063 insn_len = dec_prep_alu_m(env, dc, 0, memsize, t[0], t[1]); in dec_addu_m()
2064 cris_cc_mask(dc, CC_MASK_NZVC); in dec_addu_m()
2065 cris_alu(dc, CC_OP_ADD, in dec_addu_m()
2066 cpu_R[dc->op2], cpu_R[dc->op2], t[1], 4); in dec_addu_m()
2067 do_postinc(dc, memsize); in dec_addu_m()
2071 static int dec_adds_m(CPUCRISState *env, DisasContext *dc) in dec_adds_m() argument
2074 int memsize = memsize_z(dc); in dec_adds_m()
2078 dc->op1, dc->postinc ? "+]" : "]", in dec_adds_m()
2079 dc->op2); in dec_adds_m()
2083 insn_len = dec_prep_alu_m(env, dc, 1, memsize, t[0], t[1]); in dec_adds_m()
2084 cris_cc_mask(dc, CC_MASK_NZVC); in dec_adds_m()
2085 cris_alu(dc, CC_OP_ADD, cpu_R[dc->op2], cpu_R[dc->op2], t[1], 4); in dec_adds_m()
2086 do_postinc(dc, memsize); in dec_adds_m()
2090 static int dec_subu_m(CPUCRISState *env, DisasContext *dc) in dec_subu_m() argument
2093 int memsize = memsize_z(dc); in dec_subu_m()
2097 dc->op1, dc->postinc ? "+]" : "]", in dec_subu_m()
2098 dc->op2); in dec_subu_m()
2102 insn_len = dec_prep_alu_m(env, dc, 0, memsize, t[0], t[1]); in dec_subu_m()
2103 cris_cc_mask(dc, CC_MASK_NZVC); in dec_subu_m()
2104 cris_alu(dc, CC_OP_SUB, cpu_R[dc->op2], cpu_R[dc->op2], t[1], 4); in dec_subu_m()
2105 do_postinc(dc, memsize); in dec_subu_m()
2109 static int dec_subs_m(CPUCRISState *env, DisasContext *dc) in dec_subs_m() argument
2112 int memsize = memsize_z(dc); in dec_subs_m()
2116 dc->op1, dc->postinc ? "+]" : "]", in dec_subs_m()
2117 dc->op2); in dec_subs_m()
2121 insn_len = dec_prep_alu_m(env, dc, 1, memsize, t[0], t[1]); in dec_subs_m()
2122 cris_cc_mask(dc, CC_MASK_NZVC); in dec_subs_m()
2123 cris_alu(dc, CC_OP_SUB, cpu_R[dc->op2], cpu_R[dc->op2], t[1], 4); in dec_subs_m()
2124 do_postinc(dc, memsize); in dec_subs_m()
2128 static int dec_movu_m(CPUCRISState *env, DisasContext *dc) in dec_movu_m() argument
2131 int memsize = memsize_z(dc); in dec_movu_m()
2136 dc->op1, dc->postinc ? "+]" : "]", in dec_movu_m()
2137 dc->op2); in dec_movu_m()
2140 insn_len = dec_prep_alu_m(env, dc, 0, memsize, t[0], t[1]); in dec_movu_m()
2141 cris_cc_mask(dc, CC_MASK_NZ); in dec_movu_m()
2142 cris_alu(dc, CC_OP_MOVE, cpu_R[dc->op2], cpu_R[dc->op2], t[1], 4); in dec_movu_m()
2143 do_postinc(dc, memsize); in dec_movu_m()
2147 static int dec_cmpu_m(CPUCRISState *env, DisasContext *dc) in dec_cmpu_m() argument
2150 int memsize = memsize_z(dc); in dec_cmpu_m()
2154 dc->op1, dc->postinc ? "+]" : "]", in dec_cmpu_m()
2155 dc->op2); in dec_cmpu_m()
2158 insn_len = dec_prep_alu_m(env, dc, 0, memsize, t[0], t[1]); in dec_cmpu_m()
2159 cris_cc_mask(dc, CC_MASK_NZVC); in dec_cmpu_m()
2160 cris_alu(dc, CC_OP_CMP, cpu_R[dc->op2], cpu_R[dc->op2], t[1], 4); in dec_cmpu_m()
2161 do_postinc(dc, memsize); in dec_cmpu_m()
2165 static int dec_cmps_m(CPUCRISState *env, DisasContext *dc) in dec_cmps_m() argument
2168 int memsize = memsize_z(dc); in dec_cmps_m()
2172 dc->op1, dc->postinc ? "+]" : "]", in dec_cmps_m()
2173 dc->op2); in dec_cmps_m()
2176 insn_len = dec_prep_alu_m(env, dc, 1, memsize, t[0], t[1]); in dec_cmps_m()
2177 cris_cc_mask(dc, CC_MASK_NZVC); in dec_cmps_m()
2178 cris_alu(dc, CC_OP_CMP, in dec_cmps_m()
2179 cpu_R[dc->op2], cpu_R[dc->op2], t[1], in dec_cmps_m()
2180 memsize_zz(dc)); in dec_cmps_m()
2181 do_postinc(dc, memsize); in dec_cmps_m()
2185 static int dec_cmp_m(CPUCRISState *env, DisasContext *dc) in dec_cmp_m() argument
2188 int memsize = memsize_zz(dc); in dec_cmp_m()
2192 dc->op1, dc->postinc ? "+]" : "]", in dec_cmp_m()
2193 dc->op2); in dec_cmp_m()
2196 insn_len = dec_prep_alu_m(env, dc, 0, memsize, t[0], t[1]); in dec_cmp_m()
2197 cris_cc_mask(dc, CC_MASK_NZVC); in dec_cmp_m()
2198 cris_alu(dc, CC_OP_CMP, in dec_cmp_m()
2199 cpu_R[dc->op2], cpu_R[dc->op2], t[1], in dec_cmp_m()
2200 memsize_zz(dc)); in dec_cmp_m()
2201 do_postinc(dc, memsize); in dec_cmp_m()
2205 static int dec_test_m(CPUCRISState *env, DisasContext *dc) in dec_test_m() argument
2208 int memsize = memsize_zz(dc); in dec_test_m()
2212 dc->op1, dc->postinc ? "+]" : "]", in dec_test_m()
2213 dc->op2); in dec_test_m()
2215 cris_evaluate_flags(dc); in dec_test_m()
2218 insn_len = dec_prep_alu_m(env, dc, 0, memsize, t[0], t[1]); in dec_test_m()
2219 cris_cc_mask(dc, CC_MASK_NZ); in dec_test_m()
2223 cris_alu(dc, CC_OP_CMP, in dec_test_m()
2224 cpu_R[dc->op2], t[1], c, memsize_zz(dc)); in dec_test_m()
2225 do_postinc(dc, memsize); in dec_test_m()
2229 static int dec_and_m(CPUCRISState *env, DisasContext *dc) in dec_and_m() argument
2232 int memsize = memsize_zz(dc); in dec_and_m()
2236 dc->op1, dc->postinc ? "+]" : "]", in dec_and_m()
2237 dc->op2); in dec_and_m()
2240 insn_len = dec_prep_alu_m(env, dc, 0, memsize, t[0], t[1]); in dec_and_m()
2241 cris_cc_mask(dc, CC_MASK_NZ); in dec_and_m()
2242 cris_alu(dc, CC_OP_AND, cpu_R[dc->op2], t[0], t[1], memsize_zz(dc)); in dec_and_m()
2243 do_postinc(dc, memsize); in dec_and_m()
2247 static int dec_add_m(CPUCRISState *env, DisasContext *dc) in dec_add_m() argument
2250 int memsize = memsize_zz(dc); in dec_add_m()
2254 dc->op1, dc->postinc ? "+]" : "]", in dec_add_m()
2255 dc->op2); in dec_add_m()
2258 insn_len = dec_prep_alu_m(env, dc, 0, memsize, t[0], t[1]); in dec_add_m()
2259 cris_cc_mask(dc, CC_MASK_NZVC); in dec_add_m()
2260 cris_alu(dc, CC_OP_ADD, in dec_add_m()
2261 cpu_R[dc->op2], t[0], t[1], memsize_zz(dc)); in dec_add_m()
2262 do_postinc(dc, memsize); in dec_add_m()
2266 static int dec_addo_m(CPUCRISState *env, DisasContext *dc) in dec_addo_m() argument
2269 int memsize = memsize_zz(dc); in dec_addo_m()
2273 dc->op1, dc->postinc ? "+]" : "]", in dec_addo_m()
2274 dc->op2); in dec_addo_m()
2277 insn_len = dec_prep_alu_m(env, dc, 1, memsize, t[0], t[1]); in dec_addo_m()
2278 cris_cc_mask(dc, 0); in dec_addo_m()
2279 cris_alu(dc, CC_OP_ADD, cpu_R[R_ACR], t[0], t[1], 4); in dec_addo_m()
2280 do_postinc(dc, memsize); in dec_addo_m()
2284 static int dec_bound_m(CPUCRISState *env, DisasContext *dc) in dec_bound_m() argument
2287 int memsize = memsize_zz(dc); in dec_bound_m()
2291 dc->op1, dc->postinc ? "+]" : "]", in dec_bound_m()
2292 dc->op2); in dec_bound_m()
2296 insn_len = dec_prep_alu_m(env, dc, 0, memsize, l[0], l[1]); in dec_bound_m()
2297 cris_cc_mask(dc, CC_MASK_NZ); in dec_bound_m()
2298 cris_alu(dc, CC_OP_BOUND, cpu_R[dc->op2], l[0], l[1], 4); in dec_bound_m()
2299 do_postinc(dc, memsize); in dec_bound_m()
2303 static int dec_addc_mr(CPUCRISState *env, DisasContext *dc) in dec_addc_mr() argument
2308 dc->op1, dc->postinc ? "+]" : "]", in dec_addc_mr()
2309 dc->op2); in dec_addc_mr()
2311 cris_evaluate_flags(dc); in dec_addc_mr()
2314 dc->flags_x = X_FLAG; in dec_addc_mr()
2317 insn_len = dec_prep_alu_m(env, dc, 0, 4, t[0], t[1]); in dec_addc_mr()
2318 cris_cc_mask(dc, CC_MASK_NZVC); in dec_addc_mr()
2319 cris_alu(dc, CC_OP_ADDC, cpu_R[dc->op2], t[0], t[1], 4); in dec_addc_mr()
2320 do_postinc(dc, 4); in dec_addc_mr()
2324 static int dec_sub_m(CPUCRISState *env, DisasContext *dc) in dec_sub_m() argument
2327 int memsize = memsize_zz(dc); in dec_sub_m()
2331 dc->op1, dc->postinc ? "+]" : "]", in dec_sub_m()
2332 dc->op2, dc->ir, dc->zzsize); in dec_sub_m()
2335 insn_len = dec_prep_alu_m(env, dc, 0, memsize, t[0], t[1]); in dec_sub_m()
2336 cris_cc_mask(dc, CC_MASK_NZVC); in dec_sub_m()
2337 cris_alu(dc, CC_OP_SUB, cpu_R[dc->op2], t[0], t[1], memsize); in dec_sub_m()
2338 do_postinc(dc, memsize); in dec_sub_m()
2342 static int dec_or_m(CPUCRISState *env, DisasContext *dc) in dec_or_m() argument
2345 int memsize = memsize_zz(dc); in dec_or_m()
2349 dc->op1, dc->postinc ? "+]" : "]", in dec_or_m()
2350 dc->op2, dc->pc); in dec_or_m()
2353 insn_len = dec_prep_alu_m(env, dc, 0, memsize, t[0], t[1]); in dec_or_m()
2354 cris_cc_mask(dc, CC_MASK_NZ); in dec_or_m()
2355 cris_alu(dc, CC_OP_OR, in dec_or_m()
2356 cpu_R[dc->op2], t[0], t[1], memsize_zz(dc)); in dec_or_m()
2357 do_postinc(dc, memsize); in dec_or_m()
2361 static int dec_move_mp(CPUCRISState *env, DisasContext *dc) in dec_move_mp() argument
2364 int memsize = memsize_zz(dc); in dec_move_mp()
2369 dc->op1, in dec_move_mp()
2370 dc->postinc ? "+]" : "]", in dec_move_mp()
2371 dc->op2); in dec_move_mp()
2374 insn_len = dec_prep_alu_m(env, dc, 0, memsize, t[0], t[1]); in dec_move_mp()
2375 cris_cc_mask(dc, 0); in dec_move_mp()
2376 if (dc->op2 == PR_CCS) { in dec_move_mp()
2377 cris_evaluate_flags(dc); in dec_move_mp()
2378 if (dc->tb_flags & U_FLAG) { in dec_move_mp()
2386 t_gen_mov_preg_TN(dc, dc->op2, t[1]); in dec_move_mp()
2388 do_postinc(dc, memsize); in dec_move_mp()
2392 static int dec_move_pm(CPUCRISState *env, DisasContext *dc) in dec_move_pm() argument
2397 memsize = preg_sizes[dc->op2]; in dec_move_pm()
2401 dc->op2, dc->op1, dc->postinc ? "+]" : "]"); in dec_move_pm()
2404 if (dc->op2 == PR_CCS) { in dec_move_pm()
2405 cris_evaluate_flags(dc); in dec_move_pm()
2408 t_gen_mov_TN_preg(t0, dc->op2); in dec_move_pm()
2409 cris_flush_cc_state(dc); in dec_move_pm()
2410 gen_store(dc, cpu_R[dc->op1], t0, memsize); in dec_move_pm()
2412 cris_cc_mask(dc, 0); in dec_move_pm()
2413 if (dc->postinc) { in dec_move_pm()
2414 tcg_gen_addi_tl(cpu_R[dc->op1], cpu_R[dc->op1], memsize); in dec_move_pm()
2419 static int dec_movem_mr(CPUCRISState *env, DisasContext *dc) in dec_movem_mr() argument
2425 int nr = dc->op2 + 1; in dec_movem_mr()
2427 LOG_DIS("movem [$r%u%s, $r%u\n", dc->op1, in dec_movem_mr()
2428 dc->postinc ? "+]" : "]", dc->op2); in dec_movem_mr()
2432 cris_flush_cc_state(dc); in dec_movem_mr()
2435 tcg_gen_addi_tl(addr, cpu_R[dc->op1], i * 8); in dec_movem_mr()
2436 gen_load64(dc, tmp[i], addr); in dec_movem_mr()
2440 tcg_gen_addi_tl(addr, cpu_R[dc->op1], i * 8); in dec_movem_mr()
2441 gen_load(dc, tmp32, addr, 4, 0); in dec_movem_mr()
2452 tcg_gen_mov_tl(cpu_R[dc->op2], tmp32); in dec_movem_mr()
2456 if (dc->postinc) { in dec_movem_mr()
2457 tcg_gen_addi_tl(cpu_R[dc->op1], cpu_R[dc->op1], nr * 4); in dec_movem_mr()
2461 cris_cc_mask(dc, 0); in dec_movem_mr()
2465 static int dec_movem_rm(CPUCRISState *env, DisasContext *dc) in dec_movem_rm() argument
2471 LOG_DIS("movem $r%u, [$r%u%s\n", dc->op2, dc->op1, in dec_movem_rm()
2472 dc->postinc ? "+]" : "]"); in dec_movem_rm()
2474 cris_flush_cc_state(dc); in dec_movem_rm()
2479 tcg_gen_mov_tl(addr, cpu_R[dc->op1]); in dec_movem_rm()
2480 for (i = 0; i <= dc->op2; i++) { in dec_movem_rm()
2483 gen_store(dc, addr, cpu_R[i], 4); in dec_movem_rm()
2486 if (dc->postinc) { in dec_movem_rm()
2487 tcg_gen_mov_tl(cpu_R[dc->op1], addr); in dec_movem_rm()
2489 cris_cc_mask(dc, 0); in dec_movem_rm()
2493 static int dec_move_rm(CPUCRISState *env, DisasContext *dc) in dec_move_rm() argument
2497 memsize = memsize_zz(dc); in dec_move_rm()
2500 memsize_char(memsize), dc->op2, dc->op1); in dec_move_rm()
2503 cris_flush_cc_state(dc); in dec_move_rm()
2504 gen_store(dc, cpu_R[dc->op1], cpu_R[dc->op2], memsize); in dec_move_rm()
2506 if (dc->postinc) { in dec_move_rm()
2507 tcg_gen_addi_tl(cpu_R[dc->op1], cpu_R[dc->op1], memsize); in dec_move_rm()
2509 cris_cc_mask(dc, 0); in dec_move_rm()
2513 static int dec_lapcq(CPUCRISState *env, DisasContext *dc) in dec_lapcq() argument
2516 dc->pc + dc->op1*2, dc->op2); in dec_lapcq()
2517 cris_cc_mask(dc, 0); in dec_lapcq()
2518 tcg_gen_movi_tl(cpu_R[dc->op2], dc->pc + dc->op1 * 2); in dec_lapcq()
2522 static int dec_lapc_im(CPUCRISState *env, DisasContext *dc) in dec_lapc_im() argument
2528 rd = dc->op2; in dec_lapc_im()
2530 cris_cc_mask(dc, 0); in dec_lapc_im()
2531 imm = cris_fetch(env, dc, dc->pc + 2, 4, 0); in dec_lapc_im()
2532 LOG_DIS("lapc 0x%x, $r%u\n", imm + dc->pc, dc->op2); in dec_lapc_im()
2534 pc = dc->pc; in dec_lapc_im()
2541 static int dec_jump_p(CPUCRISState *env, DisasContext *dc) in dec_jump_p() argument
2543 LOG_DIS("jump $p%u\n", dc->op2); in dec_jump_p()
2545 if (dc->op2 == PR_CCS) { in dec_jump_p()
2546 cris_evaluate_flags(dc); in dec_jump_p()
2548 t_gen_mov_TN_preg(env_btarget, dc->op2); in dec_jump_p()
2551 cris_cc_mask(dc, 0); in dec_jump_p()
2552 cris_prepare_jmp(dc, JMP_INDIRECT); in dec_jump_p()
2557 static int dec_jas_r(CPUCRISState *env, DisasContext *dc) in dec_jas_r() argument
2560 LOG_DIS("jas $r%u, $p%u\n", dc->op1, dc->op2); in dec_jas_r()
2561 cris_cc_mask(dc, 0); in dec_jas_r()
2563 tcg_gen_mov_tl(env_btarget, cpu_R[dc->op1]); in dec_jas_r()
2564 if (dc->op2 > 15) { in dec_jas_r()
2567 c = tcg_constant_tl(dc->pc + 4); in dec_jas_r()
2568 t_gen_mov_preg_TN(dc, dc->op2, c); in dec_jas_r()
2570 cris_prepare_jmp(dc, JMP_INDIRECT); in dec_jas_r()
2574 static int dec_jas_im(CPUCRISState *env, DisasContext *dc) in dec_jas_im() argument
2579 imm = cris_fetch(env, dc, dc->pc + 2, 4, 0); in dec_jas_im()
2582 cris_cc_mask(dc, 0); in dec_jas_im()
2583 c = tcg_constant_tl(dc->pc + 8); in dec_jas_im()
2585 t_gen_mov_preg_TN(dc, dc->op2, c); in dec_jas_im()
2587 dc->jmp_pc = imm; in dec_jas_im()
2588 cris_prepare_jmp(dc, JMP_DIRECT); in dec_jas_im()
2592 static int dec_jasc_im(CPUCRISState *env, DisasContext *dc) in dec_jasc_im() argument
2597 imm = cris_fetch(env, dc, dc->pc + 2, 4, 0); in dec_jasc_im()
2600 cris_cc_mask(dc, 0); in dec_jasc_im()
2601 c = tcg_constant_tl(dc->pc + 8 + 4); in dec_jasc_im()
2603 t_gen_mov_preg_TN(dc, dc->op2, c); in dec_jasc_im()
2605 dc->jmp_pc = imm; in dec_jasc_im()
2606 cris_prepare_jmp(dc, JMP_DIRECT); in dec_jasc_im()
2610 static int dec_jasc_r(CPUCRISState *env, DisasContext *dc) in dec_jasc_r() argument
2613 LOG_DIS("jasc_r $r%u, $p%u\n", dc->op1, dc->op2); in dec_jasc_r()
2614 cris_cc_mask(dc, 0); in dec_jasc_r()
2616 tcg_gen_mov_tl(env_btarget, cpu_R[dc->op1]); in dec_jasc_r()
2617 c = tcg_constant_tl(dc->pc + 4 + 4); in dec_jasc_r()
2618 t_gen_mov_preg_TN(dc, dc->op2, c); in dec_jasc_r()
2619 cris_prepare_jmp(dc, JMP_INDIRECT); in dec_jasc_r()
2623 static int dec_bcc_im(CPUCRISState *env, DisasContext *dc) in dec_bcc_im() argument
2626 uint32_t cond = dc->op2; in dec_bcc_im()
2628 offset = cris_fetch(env, dc, dc->pc + 2, 2, 1); in dec_bcc_im()
2632 dc->pc, dc->pc + offset); in dec_bcc_im()
2634 cris_cc_mask(dc, 0); in dec_bcc_im()
2636 cris_prepare_cc_branch(dc, offset, cond); in dec_bcc_im()
2640 static int dec_bas_im(CPUCRISState *env, DisasContext *dc) in dec_bas_im() argument
2645 simm = cris_fetch(env, dc, dc->pc + 2, 4, 0); in dec_bas_im()
2647 LOG_DIS("bas 0x%x, $p%u\n", dc->pc + simm, dc->op2); in dec_bas_im()
2648 cris_cc_mask(dc, 0); in dec_bas_im()
2649 c = tcg_constant_tl(dc->pc + 8); in dec_bas_im()
2651 t_gen_mov_preg_TN(dc, dc->op2, c); in dec_bas_im()
2653 dc->jmp_pc = dc->pc + simm; in dec_bas_im()
2654 cris_prepare_jmp(dc, JMP_DIRECT); in dec_bas_im()
2658 static int dec_basc_im(CPUCRISState *env, DisasContext *dc) in dec_basc_im() argument
2662 simm = cris_fetch(env, dc, dc->pc + 2, 4, 0); in dec_basc_im()
2664 LOG_DIS("basc 0x%x, $p%u\n", dc->pc + simm, dc->op2); in dec_basc_im()
2665 cris_cc_mask(dc, 0); in dec_basc_im()
2666 c = tcg_constant_tl(dc->pc + 12); in dec_basc_im()
2668 t_gen_mov_preg_TN(dc, dc->op2, c); in dec_basc_im()
2670 dc->jmp_pc = dc->pc + simm; in dec_basc_im()
2671 cris_prepare_jmp(dc, JMP_DIRECT); in dec_basc_im()
2675 static int dec_rfe_etc(CPUCRISState *env, DisasContext *dc) in dec_rfe_etc() argument
2677 cris_cc_mask(dc, 0); in dec_rfe_etc()
2679 if (dc->op2 == 15) { in dec_rfe_etc()
2682 tcg_gen_movi_tl(env_pc, dc->pc + 2); in dec_rfe_etc()
2684 dc->base.is_jmp = DISAS_NORETURN; in dec_rfe_etc()
2688 switch (dc->op2 & 7) { in dec_rfe_etc()
2692 cris_evaluate_flags(dc); in dec_rfe_etc()
2694 dc->base.is_jmp = DISAS_UPDATE; in dec_rfe_etc()
2695 dc->cpustate_changed = true; in dec_rfe_etc()
2700 cris_evaluate_flags(dc); in dec_rfe_etc()
2702 dc->base.is_jmp = DISAS_UPDATE; in dec_rfe_etc()
2703 dc->cpustate_changed = true; in dec_rfe_etc()
2706 LOG_DIS("break %d\n", dc->op1); in dec_rfe_etc()
2707 cris_evaluate_flags(dc); in dec_rfe_etc()
2709 tcg_gen_movi_tl(env_pc, dc->pc + 2); in dec_rfe_etc()
2712 t_gen_movi_env_TN(trap_vector, dc->op1 + 16); in dec_rfe_etc()
2714 dc->base.is_jmp = DISAS_NORETURN; in dec_rfe_etc()
2717 printf("op2=%x\n", dc->op2); in dec_rfe_etc()
2725 static int dec_ftag_fidx_d_m(CPUCRISState *env, DisasContext *dc) in dec_ftag_fidx_d_m() argument
2730 static int dec_ftag_fidx_i_m(CPUCRISState *env, DisasContext *dc) in dec_ftag_fidx_i_m() argument
2735 static int dec_null(CPUCRISState *env, DisasContext *dc) in dec_null() argument
2738 dc->pc, dc->opcode, dc->op1, dc->op2); in dec_null()
2749 int (*dec)(CPUCRISState *env, DisasContext *dc);
2855 static unsigned int crisv32_decoder(CPUCRISState *env, DisasContext *dc) in crisv32_decoder() argument
2861 dc->ir = cris_fetch(env, dc, dc->pc, 2, 0); in crisv32_decoder()
2864 dc->opcode = EXTRACT_FIELD(dc->ir, 4, 11); in crisv32_decoder()
2865 dc->op1 = EXTRACT_FIELD(dc->ir, 0, 3); in crisv32_decoder()
2866 dc->op2 = EXTRACT_FIELD(dc->ir, 12, 15); in crisv32_decoder()
2867 dc->zsize = EXTRACT_FIELD(dc->ir, 4, 4); in crisv32_decoder()
2868 dc->zzsize = EXTRACT_FIELD(dc->ir, 4, 5); in crisv32_decoder()
2869 dc->postinc = EXTRACT_FIELD(dc->ir, 10, 10); in crisv32_decoder()
2873 if ((dc->opcode & decinfo[i].mask) == decinfo[i].bits) { in crisv32_decoder()
2874 insn_len = decinfo[i].dec(env, dc); in crisv32_decoder()
2881 if (dc->tb_flags & S_FLAG) { in crisv32_decoder()
2883 tcg_gen_brcondi_tl(TCG_COND_NE, cpu_PR[PR_SPC], dc->pc, l1); in crisv32_decoder()
2885 cris_evaluate_flags(dc); in crisv32_decoder()
2887 tcg_gen_movi_tl(env_pc, dc->pc + insn_len); in crisv32_decoder()
2888 tcg_gen_movi_tl(cpu_PR[PR_SPC], dc->pc + insn_len); in crisv32_decoder()
2934 DisasContext *dc = container_of(dcbase, DisasContext, base); in cris_tr_init_disas_context() local
2936 uint32_t tb_flags = dc->base.tb->flags; in cris_tr_init_disas_context()
2940 dc->decoder = crisv32_decoder; in cris_tr_init_disas_context()
2941 dc->clear_locked_irq = 0; in cris_tr_init_disas_context()
2943 dc->decoder = crisv10_decoder; in cris_tr_init_disas_context()
2944 dc->clear_locked_irq = 1; in cris_tr_init_disas_context()
2951 pc_start = dc->base.pc_first & ~1; in cris_tr_init_disas_context()
2952 dc->base.pc_first = pc_start; in cris_tr_init_disas_context()
2953 dc->base.pc_next = pc_start; in cris_tr_init_disas_context()
2955 dc->cpu = env_archcpu(env); in cris_tr_init_disas_context()
2956 dc->ppc = pc_start; in cris_tr_init_disas_context()
2957 dc->pc = pc_start; in cris_tr_init_disas_context()
2958 dc->mem_index = cpu_mmu_index(cs, false); in cris_tr_init_disas_context()
2959 dc->flags_uptodate = 1; in cris_tr_init_disas_context()
2960 dc->flags_x = tb_flags & X_FLAG; in cris_tr_init_disas_context()
2961 dc->cc_x_uptodate = 0; in cris_tr_init_disas_context()
2962 dc->cc_mask = 0; in cris_tr_init_disas_context()
2963 dc->update_cc = 0; in cris_tr_init_disas_context()
2964 dc->clear_prefix = 0; in cris_tr_init_disas_context()
2965 dc->cpustate_changed = 0; in cris_tr_init_disas_context()
2967 cris_update_cc_op(dc, CC_OP_FLAGS, 4); in cris_tr_init_disas_context()
2968 dc->cc_size_uptodate = -1; in cris_tr_init_disas_context()
2971 dc->tb_flags = tb_flags & (S_FLAG | P_FLAG | U_FLAG | X_FLAG | PFIX_FLAG); in cris_tr_init_disas_context()
2972 dc->delayed_branch = !!(tb_flags & 7); in cris_tr_init_disas_context()
2973 if (dc->delayed_branch) { in cris_tr_init_disas_context()
2974 dc->jmp = JMP_INDIRECT; in cris_tr_init_disas_context()
2976 dc->jmp = JMP_NOJMP; in cris_tr_init_disas_context()
2986 DisasContext *dc = container_of(dcbase, DisasContext, base); in cris_tr_insn_start() local
2988 tcg_gen_insn_start(dc->delayed_branch == 1 ? dc->ppc | 1 : dc->pc); in cris_tr_insn_start()
2993 DisasContext *dc = container_of(dcbase, DisasContext, base); in cris_tr_translate_insn() local
2997 LOG_DIS("%8.8x:\t", dc->pc); in cris_tr_translate_insn()
2999 dc->clear_x = 1; in cris_tr_translate_insn()
3001 insn_len = dc->decoder(cpu_env(cs), dc); in cris_tr_translate_insn()
3002 dc->ppc = dc->pc; in cris_tr_translate_insn()
3003 dc->pc += insn_len; in cris_tr_translate_insn()
3004 dc->base.pc_next += insn_len; in cris_tr_translate_insn()
3006 if (dc->base.is_jmp == DISAS_NORETURN) { in cris_tr_translate_insn()
3010 if (dc->clear_x) { in cris_tr_translate_insn()
3011 cris_clear_x_flag(dc); in cris_tr_translate_insn()
3018 assert(dc->base.is_jmp == DISAS_NEXT || dc->cpustate_changed); in cris_tr_translate_insn()
3020 if (dc->delayed_branch && --dc->delayed_branch == 0) { in cris_tr_translate_insn()
3021 dc->base.is_jmp = DISAS_DBRANCH; in cris_tr_translate_insn()
3025 if (dc->base.is_jmp != DISAS_NEXT) { in cris_tr_translate_insn()
3030 if (dc->cpustate_changed) { in cris_tr_translate_insn()
3031 dc->base.is_jmp = DISAS_UPDATE_NEXT; in cris_tr_translate_insn()
3040 if ((dc->pc ^ dc->base.pc_first) & TARGET_PAGE_MASK) { in cris_tr_translate_insn()
3041 dc->base.is_jmp = DISAS_TOO_MANY; in cris_tr_translate_insn()
3047 DisasContext *dc = container_of(dcbase, DisasContext, base); in cris_tr_tb_stop() local
3048 DisasJumpType is_jmp = dc->base.is_jmp; in cris_tr_tb_stop()
3049 target_ulong npc = dc->pc; in cris_tr_tb_stop()
3053 assert(dc->delayed_branch != 1); in cris_tr_tb_stop()
3057 if (dc->clear_locked_irq) { in cris_tr_tb_stop()
3062 if (dc->delayed_branch == 1) { in cris_tr_tb_stop()
3064 t_gen_movi_env_TN(dslot, dc->pc - dc->ppc); in cris_tr_tb_stop()
3065 cris_store_direct_jmp(dc); in cris_tr_tb_stop()
3068 cris_evaluate_flags(dc); in cris_tr_tb_stop()
3072 if (dc->base.tb->flags & 7) { in cris_tr_tb_stop()
3076 switch (dc->jmp) { in cris_tr_tb_stop()
3078 npc = dc->jmp_pc; in cris_tr_tb_stop()
3079 is_jmp = dc->cpustate_changed ? DISAS_UPDATE_NEXT : DISAS_TOO_MANY; in cris_tr_tb_stop()
3087 if (likely(!dc->cpustate_changed) in cris_tr_tb_stop()
3088 && (use_goto_tb(dc, dc->jmp_pc) || use_goto_tb(dc, npc))) { in cris_tr_tb_stop()
3092 gen_goto_tb(dc, 1, dc->jmp_pc); in cris_tr_tb_stop()
3099 tcg_gen_movi_tl(env_btarget, dc->jmp_pc); in cris_tr_tb_stop()
3106 is_jmp = dc->cpustate_changed ? DISAS_UPDATE : DISAS_JUMP; in cris_tr_tb_stop()
3123 gen_goto_tb(dc, 0, npc); in cris_tr_tb_stop()
3151 DisasContext dc; in gen_intermediate_code() local
3152 translator_loop(cs, tb, max_insns, pc, host_pc, &cris_tr_ops, &dc.base); in gen_intermediate_code()