target: e2k: Remove helper unimpl.

This commit is contained in:
Denis Drakhnia 2020-11-24 22:50:33 +02:00 committed by Denis Drakhnia
parent 4bce722d48
commit 468277c315
8 changed files with 40 additions and 55 deletions

View File

@ -40,13 +40,6 @@ void cpu_loop(CPUE2KState *env)
process_queued_cpu_work(cs);
switch (trapnr) {
case E2K_EXCP_UNIMPL:
info.si_signo = TARGET_SIGILL;
info.si_errno = 0;
info.si_code = TARGET_ILL_ILLOPC;
info._sifields._sigfault._addr = env->ip;
queue_signal(env, info.si_signo, QEMU_SI_KILL, &info);
break;
case E2K_EXCP_SYSCALL: {
int offset = env->wd_base + env->syscall_wbs * 2;
uint64_t *regs = env->wregs;

View File

@ -233,7 +233,6 @@ void e2k_tcg_initialize(void);
#define IDR_WBL_TO_BYTES(wbl) ((wbl) ? (1 << ((wbs) + 4)) : 1)
typedef enum {
E2K_EXCP_UNIMPL = 0x01,
E2K_EXCP_SYSCALL = 0x02,
E2K_EXCP_ILLOPC = 0x03,
E2K_EXCP_ILLOPN = 0x04,

View File

@ -49,14 +49,6 @@ static inline void restore_br_state(CPUE2KState *env)
env->pcur = GET_FIELD(env->br, BR_PCUR_OFF, BR_PCUR_LEN);
}
void helper_unimpl(CPUE2KState *env)
{
CPUState *cs = env_cpu(env);
cs->exception_index = E2K_EXCP_UNIMPL;
cpu_loop_exit(cs);
}
static void pcs_push(CPUE2KState *env, int wbs)
{
size_t size = e2k_state_pcs_size_get(env);
@ -184,9 +176,11 @@ target_ulong helper_call(CPUE2KState *env, uint64_t ctpr,
do_syscall(env, call_wbs);
return env->ip;
default:
helper_raise_exception(env, E2K_EXCP_UNIMPL);
return env->ip;
abort();
break;
}
return 0;
}
void helper_raise_exception(CPUE2KState *env, int tt)

View File

@ -1,4 +1,3 @@
DEF_HELPER_1(unimpl, noreturn, env)
DEF_HELPER_2(raise_exception, noreturn, env, int)
DEF_HELPER_1(return, void, env)
DEF_HELPER_3(call, tl, env, i64, int)

View File

@ -373,7 +373,7 @@ static inline void do_branch(DisasContext *ctx)
tcg_temp_free_i64(t0);
// TODO: ldisp, sdisp
e2k_gen_exception(ctx, E2K_EXCP_UNIMPL);
e2k_gen_exception(ctx, 0);
gen_set_label(l0);
gen_goto_ctpr_disp(ctx->ct.u.ctpr);

View File

@ -81,7 +81,7 @@ static TCGv_i64 get_dst(DisasContext *dc, unsigned int als)
return e2k_get_greg(dc, i);
} else {
// TODO: %empty, %ctpr, etc
gen_helper_unimpl(cpu_env);
abort();
}
// TODO: remove
return e2k_get_temp_i64(dc);
@ -105,7 +105,7 @@ static void store_reg_alc_result(DisasContext *dc, int chan, TCGv_i64 val)
res->u.reg.i = GET_GLOBAL(dst);
} else {
// TODO: %empty, %ctpr, etc
gen_helper_unimpl(cpu_env);
abort();
}
}
@ -252,12 +252,12 @@ static inline void gen_getfd(TCGv_i64 ret, TCGv_i64 src1, TCGv_i64 src2)
static TCGCond e2k_gen_cmp_op(unsigned int cmp_op)
{
switch(cmp_op) {
case 0: gen_helper_unimpl(cpu_env); break;
case 0: abort(); break;
case 1: return TCG_COND_LTU; break;
case 2: return TCG_COND_EQ; break;
case 3: return TCG_COND_LEU; break;
case 4: gen_helper_unimpl(cpu_env); break;
case 5: gen_helper_unimpl(cpu_env); break;
case 4: abort(); break;
case 5: abort(); break;
case 6: return TCG_COND_LT; break;
case 7: return TCG_COND_LE; break;
default: g_assert_not_reached(); break;
@ -767,28 +767,28 @@ static void execute_alopf_simple(DisasContext *dc, int chan)
case 0x1f: /* getfd */ gen_alopf1_i64(dc, chan, gen_getfd); break;
case 0x20:
if (chan == 2 || chan == 5) {
gen_helper_unimpl(cpu_env);
abort();
} else {
gen_cmpsb(dc, chan); /* cmp{op}sb */
}
break;
case 0x21:
if (chan == 2 || chan == 5) {
gen_helper_unimpl(cpu_env);
abort();
} else {
gen_cmpdb(dc, chan); /* cmp{op}db */
}
break;
case 0x22:
if (chan == 2 || chan == 5) {
gen_helper_unimpl(cpu_env);
abort();
} else {
gen_cmpandsb(dc, chan); /* cmpand{op}sb */
}
break;
case 0x23:
if (chan == 2 || chan == 5) {
gen_helper_unimpl(cpu_env);
abort();
} else {
gen_cmpanddb(dc, chan); /* cmpand{op}db */
}
@ -797,7 +797,7 @@ static void execute_alopf_simple(DisasContext *dc, int chan)
if (chan == 2 || chan == 5) {
gen_st(dc, chan, MO_UB);
} else {
gen_helper_unimpl(cpu_env);
abort();
}
break;
}
@ -805,7 +805,7 @@ static void execute_alopf_simple(DisasContext *dc, int chan)
if (chan == 2 || chan == 5) {
gen_st(dc, chan, MO_UW);
} else {
gen_helper_unimpl(cpu_env);
abort();
}
break;
}
@ -813,7 +813,7 @@ static void execute_alopf_simple(DisasContext *dc, int chan)
if (chan == 2 || chan == 5) {
gen_st(dc, chan, MO_UL);
} else {
gen_helper_unimpl(cpu_env);
abort();
}
break;
}
@ -821,7 +821,7 @@ static void execute_alopf_simple(DisasContext *dc, int chan)
if (chan == 2 || chan == 5) {
gen_st(dc, chan, MO_Q);
} else {
gen_helper_unimpl(cpu_env);
abort();
}
break;
}
@ -830,14 +830,14 @@ static void execute_alopf_simple(DisasContext *dc, int chan)
break;
case 0x61:
if (chan == 2 || chan == 5) {
gen_helper_unimpl(cpu_env);
abort();
} else {
gen_movtd(dc, chan);
}
break;
case 0x64: { /* ldb */
if (chan == 1 || chan == 4) {
gen_helper_unimpl(cpu_env);
abort();
} else {
gen_ld(dc, chan, MO_UB);
}
@ -845,7 +845,7 @@ static void execute_alopf_simple(DisasContext *dc, int chan)
}
case 0x65: { /* ldh */
if (chan == 1 || chan == 4) {
gen_helper_unimpl(cpu_env);
abort();
} else {
gen_ld(dc, chan, MO_UW);
}
@ -853,7 +853,7 @@ static void execute_alopf_simple(DisasContext *dc, int chan)
}
case 0x66: { /* ldw */
if (chan == 1 || chan == 4) {
gen_helper_unimpl(cpu_env);
abort();
} else {
gen_ld(dc, chan, MO_UL);
}
@ -861,7 +861,7 @@ static void execute_alopf_simple(DisasContext *dc, int chan)
}
case 0x67: { /* ldd */
if (chan == 1 || chan == 4) {
gen_helper_unimpl(cpu_env);
abort();
} else {
gen_ld(dc, chan, MO_Q);
}

View File

@ -143,11 +143,11 @@ void e2k_commit_stubs(DisasContext *ctx)
break;
case 0x01:
// TODO
gen_helper_unimpl(cpu_env);
abort();
break;
case 0x02:
// TODO
gen_helper_unimpl(cpu_env);
abort();
break;
default:
e2k_gen_exception(ctx, E2K_EXCP_ILLOPC);
@ -295,7 +295,7 @@ static void gen_cs0(DisasContext *dc)
"invalid gettsd" if this turns out not to be the case . . . */
if (type == GETTSD) {
// TODO: gettsd
gen_helper_unimpl(cpu_env);
abort();
}
if (type == PUTTSD) {
@ -312,7 +312,7 @@ static void gen_cs0(DisasContext *dc)
both on 32 and 64-bit hosts. */
// (unsigned long long) (instr_addr + sgnd_disp));
// TODO: puttsd
gen_helper_unimpl(cpu_env);
abort();
}
if (type == PREF) {
@ -320,7 +320,7 @@ static void gen_cs0(DisasContext *dc)
// unsigned int ipd = (bundle->cs0 & 0x00000008) >> 3;
// unsigned int prefr = bundle->cs0 & 0x00000007;
// TODO: pref
gen_helper_unimpl(cpu_env);
abort();
}
}
}
@ -355,7 +355,7 @@ static void gen_cs1(DisasContext *dc)
seems to be the case even if no SETWD has been explicitly
specified. */
// unsigned int rpsz = (bundle->lts[0] & 0x0001f000) >> 12;
gen_helper_unimpl(cpu_env);
abort();
}
}
@ -395,14 +395,14 @@ static void gen_cs1(DisasContext *dc)
if (sft) {
if (dc->version >= 2) {
// TODO: setsft
gen_helper_unimpl(cpu_env);
abort();
} else {
e2k_gen_exception(dc, E2K_EXCP_ILLOPC);
}
} else {
// uint8_t eir = GET_FIELD_LEN(cs1, 0, 8);
// TODO: setei
gen_helper_unimpl(cpu_env);
abort();
}
} else if (opc == WAIT) {
// TODO: wait
@ -433,7 +433,7 @@ static void gen_cs1(DisasContext *dc)
// my_printf ("trap = %d, ", trap);
}
gen_helper_unimpl(cpu_env);
abort();
// my_printf ("ma_c = %d, fl_c = %d, ld_c = %d, st_c = %d, all_e = %d, "
// "all_c = %d", ma_c, fl_c, ld_c, st_c, all_e, all_c);
} else if (opc == CALL) {
@ -452,7 +452,7 @@ static void gen_cs1(DisasContext *dc)
if (cs0_opc == 0) {
// unsigned int hdisp = (cs0 & 0x1e) >> 1;
// TODO: hcall hdisp, wbs ? cond
gen_helper_unimpl(cpu_env);
abort();
}
} else {
e2k_gen_exception(dc, E2K_EXCP_ILLOPC);
@ -466,12 +466,12 @@ static void gen_cs1(DisasContext *dc)
} else if (opc == FLUSHR) {
if (cs1 & 0x00000001) {
// TODO: flushr
gen_helper_unimpl(cpu_env);
abort();
}
if (cs1 & 0x00000002) {
// TODO: flushc
gen_helper_unimpl(cpu_env);
abort();
}
} else if (opc == BG) {
// unsigned int chkm4 = (cs1 & 0x00010000) >> 16;
@ -479,7 +479,7 @@ static void gen_cs1(DisasContext *dc)
// unsigned int umsk = cs1 & 0x000000ff;
// TODO: vfbg
gen_helper_unimpl(cpu_env);
abort();
} else {
e2k_gen_exception(dc, E2K_EXCP_ILLOPC);
}

View File

@ -18,16 +18,16 @@ void e2k_gen_cond_i32(DisasContext *ctx, TCGv_i32 ret, uint8_t psrc)
e2k_gen_lcntex(ret);
} else {
// TODO: spred
gen_helper_unimpl(cpu_env);
abort();
}
} else if (GET_FIELD(psrc, 5, 2) == 0x40) {
int val = GET_FIELD(psrc, 0, 5);
if (val == 0) {
// TODO: bgrpred
gen_helper_unimpl(cpu_env);
abort();
} else if (val <= 15) {
// TODO: rndpred
gen_helper_unimpl(cpu_env);
abort();
} else {
e2k_gen_exception(ctx, E2K_EXCP_ILLOPN);
}
@ -172,7 +172,7 @@ void e2k_plu_execute(DisasContext *ctx)
break;
}
default:
gen_helper_unimpl(cpu_env);
abort();
break;
}
}