提交 b51f5e5a 编写于 作者: Z Zihao Yu

remote rtl_kill()

上级 8fb07d1d
......@@ -126,10 +126,4 @@ static inline make_rtl(jrelop, uint32_t relop,
if (is_jmp) rtl_j(s, target);
}
/* Pseudo instructions */
static inline make_rtl(kill, const rtlreg_t *src1) {
// do nothing
}
#endif
......@@ -46,7 +46,4 @@ make_rtl(j, vaddr_t target);
make_rtl(jr, rtlreg_t *target);
make_rtl(jrelop, uint32_t relop, const rtlreg_t *src1, const rtlreg_t *src2, vaddr_t target);
/* Pseudo instructions */
make_rtl(kill, const rtlreg_t *src1);
#endif
......@@ -449,10 +449,3 @@ make_rtl(jrelop, uint32_t relop, const rtlreg_t *src1, const rtlreg_t *src2, vad
Assert(new_idx - old_idx == 5, "if this condition is broken, "
"you should also modify rv64_exec_trans_buffer() in exec.c");
}
make_rtl(kill, const rtlreg_t* src1) {
#ifdef REG_SPILLING
uint32_t varidx = rtlreg2varidx(s, src1);
spill_flush(varidx);
#endif
}
......@@ -110,12 +110,9 @@ static inline void mux(DecodeExecState *s, rtlreg_t* dest, const rtlreg_t* cond,
rtl_setrelopi(s, RELOP_EQ, s0, cond, 0);
rtl_subi(s, s0, s0, 1);
// s0 = mask
rtl_kill(s, cond);
rtl_and(s, s1, src1, s0);
rtl_not(s, s0, s0);
rtl_kill(s, s1);
rtl_and(s, dest, src2, s0);
rtl_kill(s, s0);
rtl_or(s, dest, dest, s1);
}
......
......@@ -3,7 +3,6 @@
static inline make_EHelper(ld) {
rtl_lm(s, s0, dsrc1, id_src2->imm, s->width);
check_mem_ex();
rtl_kill(s, dsrc1);
rtl_sr(s, id_dest->reg, s0, 4);
print_Dop(id_src1->str, OP_STR_SIZE, "%d(%s)", id_src2->imm, reg_name(id_src1->reg, 4));
......@@ -19,7 +18,6 @@ static inline make_EHelper(ld) {
static inline make_EHelper(lds) {
rtl_lm(s, s0, dsrc1, id_src2->imm, s->width);
check_mem_ex();
rtl_kill(s, dsrc1);
rtl_sext(s, ddest, s0, s->width);
print_Dop(id_src1->str, OP_STR_SIZE, "%d(%s)", id_src2->imm, reg_name(id_src1->reg, 4));
......@@ -46,8 +44,6 @@ static inline make_EHelper(st) {
static inline make_EHelper(swl) {
rtl_addi(s, s0, dsrc1, id_src2->imm);
rtl_kill(s, dsrc1);
// mem.shamt2
rtl_andi(s, s1, s0, 0x3);
rtl_shli(s, s1, s1, 3);
......@@ -67,20 +63,15 @@ static inline make_EHelper(swl) {
rtl_subi(s, s1, s1, 24);
rtl_neg(s, s1, s1);
rtl_kill(s, s0);
// prepare register data
rtl_shr(s, s1, ddest, s1);
// merge the word
rtl_or(s, s1, s0, s1);
rtl_kill(s, s1);
// write back
rtl_addi(s, s0, dsrc1, id_src2->imm);
rtl_andi(s, s0, s0, ~0x3u);
rtl_kill(s, dsrc1);
rtl_sm(s, s0, 0, s1, 4);
check_mem_ex();
......@@ -91,8 +82,6 @@ static inline make_EHelper(swl) {
static inline make_EHelper(swr) {
rtl_addi(s, s0, dsrc1, id_src2->imm);
rtl_kill(s, dsrc1);
// mem.shmat2
rtl_andi(s, s1, s0, 0x3);
rtl_shli(s, s1, s1, 3);
......@@ -114,20 +103,15 @@ static inline make_EHelper(swr) {
rtl_subi(s, s1, s1, 24);
rtl_neg(s, s1, s1);
rtl_kill(s, s0);
// prepare register data
rtl_shl(s, s1, ddest, s1);
// merge the word
rtl_or(s, s1, s0, s1);
rtl_kill(s, s1);
// write back
rtl_addi(s, s0, dsrc1, id_src2->imm);
rtl_andi(s, s0, s0, ~0x3u);
rtl_kill(s, dsrc1);
rtl_sm(s, s0, 0, s1, 4);
check_mem_ex();
......@@ -138,8 +122,6 @@ static inline make_EHelper(swr) {
static inline make_EHelper(lwl) {
rtl_addi(s, s0, dsrc1, id_src2->imm);
rtl_kill(s, dsrc1);
// mem.shmat2
rtl_andi(s, s1, s0, 0x3);
rtl_shli(s, s1, s1, 3);
......@@ -158,16 +140,12 @@ static inline make_EHelper(lwl) {
rtl_subi(s, s1, s1, 24);
rtl_neg(s, s1, s1);
rtl_kill(s, s0);
// prepare register data
rtl_shli(s, ddest, ddest, 8); // shift 8 bit
rtl_shl(s, ddest, ddest, s1); // second shift
rtl_shr(s, ddest, ddest, s1); // shift back
rtl_shri(s, ddest, ddest, 8); // shift 8 bit
rtl_kill(s, s1);
// merge the word
rtl_or(s, ddest, s0, ddest);
......@@ -178,8 +156,6 @@ static inline make_EHelper(lwl) {
static inline make_EHelper(lwr) {
rtl_addi(s, s0, dsrc1, id_src2->imm);
rtl_kill(s, dsrc1);
// mem.shmat2
rtl_andi(s, s1, s0, 0x3);
rtl_shli(s, s1, s1, 3);
......@@ -195,7 +171,6 @@ static inline make_EHelper(lwr) {
// reg.shmat = 24 - mem.shmat2
rtl_subi(s, s1, s1, 24);
rtl_neg(s, s1, s1);
rtl_kill(s, s0);
// prepare register data
rtl_shri(s, ddest, ddest, 8); // shift 8 bit
......@@ -203,8 +178,6 @@ static inline make_EHelper(lwr) {
rtl_shl(s, ddest, ddest, s1); // shift back
rtl_shli(s, ddest, ddest, 8); // shift 8 bit
rtl_kill(s, s1);
// merge the word
rtl_or(s, ddest, s0, ddest);
......
......@@ -25,28 +25,24 @@ static inline make_EHelper(mul) {
static inline make_EHelper(mult) {
rtl_imul_lo(s, &cpu.lo, dsrc1, dsrc2);
rtl_kill(s, &cpu.lo);
rtl_imul_hi(s, &cpu.hi, dsrc1, dsrc2);
print_asm_template3(mult);
}
static inline make_EHelper(multu) {
rtl_mul_lo(s, &cpu.lo, dsrc1, dsrc2);
rtl_kill(s, &cpu.lo);
rtl_mul_hi(s, &cpu.hi, dsrc1, dsrc2);
print_asm_template3(multu);
}
static inline make_EHelper(div) {
rtl_idiv_q(s, &cpu.lo, dsrc1, dsrc2);
rtl_kill(s, &cpu.lo);
rtl_idiv_r(s, &cpu.hi, dsrc1, dsrc2);
print_asm_template3(div);
}
static inline make_EHelper(divu) {
rtl_div_q(s, &cpu.lo, dsrc1, dsrc2);
rtl_kill(s, &cpu.lo);
rtl_div_r(s, &cpu.hi, dsrc1, dsrc2);
print_asm_template3(divu);
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册