e2k: Delete redundant unimplemented messages.

DAM has not been yet implemented. We always generate
a jump to a fixing code. All these messages are redundant.

Signed-off-by: Denis Drakhnya <numas13@gmail.com>
This commit is contained in:
Denis Drakhnia 2021-02-12 17:36:13 +02:00 committed by Denis Drakhnia
parent e404c06a2d
commit ab620f7a2b
3 changed files with 32 additions and 34 deletions

View File

@ -51,6 +51,7 @@ uint64_t helper_state_reg_read_i64(CPUE2KState *env, int idx)
case 0x57: return cr_read(env, offsetof(E2KCrs, cr1.lo)); /* %cr1.lo */ case 0x57: return cr_read(env, offsetof(E2KCrs, cr1.lo)); /* %cr1.lo */
case 0x80: return env->upsr; /* %upsr */ case 0x80: return env->upsr; /* %upsr */
case 0x81: return env->ip; /* %ip */ case 0x81: return env->ip; /* %ip */
case 0x84: return env->pfpfr; /* %pfpfr */
case 0x85: return env->fpcr.raw; /* %fpcr */ case 0x85: return env->fpcr.raw; /* %fpcr */
case 0x86: return env->fpsr.raw; /* %fpsr */ case 0x86: return env->fpsr.raw; /* %fpsr */
case 0x8a: return env->idr; /* %idr */ case 0x8a: return env->idr; /* %idr */
@ -82,7 +83,7 @@ void helper_state_reg_write_i64(CPUE2KState *env, int idx, uint64_t val)
env->lsr_strmd = extract64(val, LSR_STRMD_OFF, LSR_STRMD_LEN); env->lsr_strmd = extract64(val, LSR_STRMD_OFF, LSR_STRMD_LEN);
break; break;
case 0x84: /* %pfpfr */ case 0x84: /* %pfpfr */
qemu_log_mask(LOG_UNIMP, "pfpfr write 0x%lx\n", val); env->pfpfr = val;
break; break;
case 0x85: /* %fpcr */ case 0x85: /* %fpcr */
env->fpcr.raw = val; env->fpcr.raw = val;
@ -105,7 +106,7 @@ void helper_state_reg_write_i32(CPUE2KState *env, int idx, uint32_t val)
env->lsr_lcnt = val; env->lsr_lcnt = val;
break; break;
case 0x84: /* %pfpfr */ case 0x84: /* %pfpfr */
qemu_log_mask(LOG_UNIMP, "pfpfr write 0x%x\n", val); env->pfpfr = deposit64(env->pfpfr, 0, 32, val);
break; break;
case 0x85: /* %fpcr */ case 0x85: /* %fpcr */
env->fpcr.raw = val; env->fpcr.raw = val;

View File

@ -587,10 +587,10 @@ static inline void gen_cs1(DisasContext *ctx)
ctx->ct.wbs = cs1->call_wbs; ctx->ct.wbs = cs1->call_wbs;
break; break;
case CS1_WAIT: case CS1_WAIT:
e2k_todo(ctx, "wait"); // TODO: wait
break; break;
case CS1_FLUSH: case CS1_FLUSH:
e2k_todo(ctx, "flush"); // TODO: flush
break; break;
default: default:
e2k_todo_illop(ctx, "unimplemented %d", cs1->type); e2k_todo_illop(ctx, "unimplemented %d", cs1->type);

View File

@ -1714,43 +1714,32 @@ static void gen_movtcq(Instr *instr)
static inline bool gen_ld_mas_mod(DisasContext *ctx, Instr *instr, uint8_t mod) static inline bool gen_ld_mas_mod(DisasContext *ctx, Instr *instr, uint8_t mod)
{ {
TCGv_i32 size;
TCGv_i32 reg = tcg_temp_new_i32();
bool ret = true;
// FIXME: %empty
e2k_gen_reg_index(instr->ctx, reg, instr->dst);
size = tcg_const_i32(1 << (instr->opc1 - 0x64));
switch (mod) { switch (mod) {
case 3: case 3:
if (is_chan_25(instr->chan)) { if (is_chan_25(instr->chan)) {
/* ld,{2,5} [ addr ], dst, mas=X (mod 3) */ // TODO: DAM
if (ctx->mlock == NULL) { if (ctx->mlock == NULL) {
ctx->mlock = e2k_get_temp_i32(ctx); ctx->mlock = e2k_get_temp_i32(ctx);
/* always go to fixing code */ /* always go to fixing code */
tcg_gen_movi_i32(ctx->mlock, 1); tcg_gen_movi_i32(ctx->mlock, 1);
} }
goto ok_exit; return true;
} }
break; break;
case 4: case 4:
if (instr->sm && is_chan_03(instr->chan)) { if (instr->sm && is_chan_03(instr->chan)) {
/* ld,{0,3},sm [ addr ], dst, mas=X (mod 4) */ // TODO: DAM
/* always ignore lock load */ /* always ignore lock load */
ret = false; return false;
goto ok_exit; } else if (!instr->sm && (is_chan_25(instr->chan) || is_chan_03(instr->chan))) {
// TODO
return true;
} }
break; break;
} }
e2k_todo(ctx, "opc %#x, chan %d, mod=%#x", instr->opc1, instr->chan, mod); e2k_todo(ctx, "opc %#x, chan %d, mod=%#x", instr->opc1, instr->chan, mod);
return true;
ok_exit:
tcg_temp_free_i32(size);
tcg_temp_free_i32(reg);
return ret;
} }
static MemOp gen_mas(Instr *instr, MemOp memop) static MemOp gen_mas(Instr *instr, MemOp memop)
@ -1763,16 +1752,18 @@ static MemOp gen_mas(Instr *instr, MemOp memop)
// TODO: special mas // TODO: special mas
switch (opc) { switch (opc) {
case 0: case 0:
/* flush cache */ // TODO: flush cache
memop |= MO_LE; return memop | MO_LE;
e2k_todo(ctx, "opc %#x, chan %d, flush cache", instr->opc1, case 3:
instr->chan); if (!instr->sm && is_chan_25(instr->chan)) {
// TODO: unknown store MAS OPC 0x3
return 0;
}
break; break;
default:
e2k_todo(ctx, "opc %#x, chan %d, mas=%#x (opc %#x)", instr->opc1,
instr->chan, mas, opc);
return 0;
} }
e2k_todo(ctx, "opc %#x, chan %d, mas=%#x (opc %#x)", instr->opc1,
instr->chan, mas, opc);
return 0;
} else if (mas) { } else if (mas) {
int mod = extract8(mas, 0, 3); int mod = extract8(mas, 0, 3);
// int dc = extract8(mas, 5, 2); // int dc = extract8(mas, 5, 2);
@ -1783,9 +1774,15 @@ static MemOp gen_mas(Instr *instr, MemOp memop)
return 0; return 0;
} }
} else { } else {
// TODO: mas modes switch (mod) {
e2k_todo(ctx, "opc %#x, chan %d, mas=%#x, mod=%#x", instr->opc1, case 2:
instr->chan, mas, mod); // TODO: DAM
break;
default:
e2k_todo(ctx, "opc %#x, chan %d, mas=%#x, mod=%#x", instr->opc1,
instr->chan, mas, mod);
break;
}
} }
} }