提交 70c3fff1 编写于 作者: Z Zhou Yaoyang

Removed and, or, and xor

上级 fcad37c4
......@@ -15,10 +15,10 @@ static inline make_rtl(mv, rtlreg_t* dest, const rtlreg_t *src1) {
if (dest != src1) rtl_add(s, dest, src1, rz);
}
static inline make_rtl(not, rtlreg_t *dest, const rtlreg_t* src1) {
static inline make_rtl(nemunot, rtlreg_t *dest, const rtlreg_t* src1) {
// dest <- ~src1
// TODO();
rtl_xori(s, dest, src1, -1);
rtl_nemuxori(s, dest, src1, -1);
}
static inline make_rtl(neg, rtlreg_t *dest, const rtlreg_t* src1) {
......@@ -60,7 +60,7 @@ static inline make_rtl(msb, rtlreg_t* dest, const rtlreg_t* src1, int width) {
// TODO();
rtl_shri(s, dest, src1, width * 8 - 1);
if (width != 4) {
rtl_andi(s, dest, dest, 0x1);
rtl_nemuandi(s, dest, dest, 0x1);
}
}
......
......@@ -11,9 +11,9 @@
#define c_add(a, b) ((a) + (b))
#define c_sub(a, b) ((a) - (b))
#define c_and(a, b) ((a) & (b))
#define c_or(a, b) ((a) | (b))
#define c_xor(a, b) ((a) ^ (b))
#define c_nemuand(a, b) ((a) & (b))
#define c_nemuor(a, b) ((a) | (b))
#define c_nemuxor(a, b) ((a) ^ (b))
#define c_shl(a, b) ((a) << ((b) & c_shift_mask))
#define c_shr(a, b) ((a) >> ((b) & c_shift_mask))
#define c_sar(a, b) ((sword_t)(a) >> ((b) & c_shift_mask))
......
......@@ -25,7 +25,7 @@ static void clint_io_handler(uint32_t offset, int len, nemu_bool is_write) {
}
void init_clint(void) {
clint_base = (void *)new_space(0x10000);
clint_base = (uint64_t *)new_space(0x10000);
add_mmio_map("clint", CLINT_MMIO, (uint8_t *)clint_base, 0x10000, clint_io_handler);
add_alarm_handle(clint_intr);
}
......@@ -70,7 +70,7 @@ static inline make_EHelper(amoadd) {
static inline make_EHelper(amoor) {
amo_load(s);
return_on_mem_ex();
rtl_or(s, s1, s0, dsrc2);
rtl_nemuor(s, s1, s0, dsrc2);
amo_update(s);
return_on_mem_ex();
print_asm_template3(amoor);
......@@ -79,7 +79,7 @@ static inline make_EHelper(amoor) {
static inline make_EHelper(amoand) {
amo_load(s);
return_on_mem_ex();
rtl_and(s, s1, s0, dsrc2);
rtl_nemuand(s, s1, s0, dsrc2);
amo_update(s);
return_on_mem_ex();
print_asm_template3(amoand);
......@@ -124,7 +124,7 @@ static inline make_EHelper(amomin) {
static inline make_EHelper(amoxor) {
amo_load(s);
return_on_mem_ex();
rtl_xor(s, s1, s0, dsrc2);
rtl_nemuxor(s, s1, s0, dsrc2);
amo_update(s);
return_on_mem_ex();
print_asm_template3(amoxor);
......
......@@ -39,24 +39,24 @@ static inline make_EHelper(sltu) {
print_asm_template3(sltu);
}
static inline make_EHelper(xor) {
rtl_xor(s, ddest, dsrc1, dsrc2);
static inline make_EHelper(nemuxor) {
rtl_nemuxor(s, ddest, dsrc1, dsrc2);
print_asm_template3(xor);
}
static inline make_EHelper(or) {
rtl_or(s, ddest, dsrc1, dsrc2);
static inline make_EHelper(nemuor) {
rtl_nemuor(s, ddest, dsrc1, dsrc2);
print_asm_template3(or);
}
static inline make_EHelper(and) {
rtl_and(s, ddest, dsrc1, dsrc2);
print_asm_template3(and);
static inline make_EHelper(nemuand) {
rtl_nemuand(s, ddest, dsrc1, dsrc2);
print_asm_template3(nemuand);
}
static inline make_EHelper(addi) {
rtl_addi(s, ddest, dsrc1, id_src2->imm);
print_asm_template3(addi);
print_asm_template3(nemuaddi);
}
static inline make_EHelper(slli) {
......@@ -91,17 +91,17 @@ static inline make_EHelper(sltui) {
}
static inline make_EHelper(xori) {
rtl_xori(s, ddest, dsrc1, id_src2->imm);
rtl_nemuxori(s, ddest, dsrc1, id_src2->imm);
print_asm_template3(xori);
}
static inline make_EHelper(ori) {
rtl_ori(s, ddest, dsrc1, id_src2->imm);
rtl_nemuori(s, ddest, dsrc1, id_src2->imm);
print_asm_template3(ori);
}
static inline make_EHelper(andi) {
rtl_andi(s, ddest, dsrc1, id_src2->imm);
static inline make_EHelper(nemuandi) {
rtl_nemuandi(s, ddest, dsrc1, id_src2->imm);
print_asm_template3(andi);
}
......
......@@ -10,7 +10,7 @@ static inline make_EHelper(jal) {
static inline make_EHelper(jalr) {
rtl_addi(s, s0, dsrc1, id_src2->imm);
#ifdef __ENGINE_interpreter__
rtl_andi(s, s0, s0, ~0x1lu);
rtl_nemuandi(s, s0, s0, ~0x1lu);
#endif
rtl_jr(s, s0);
......
......@@ -60,7 +60,7 @@ static inline make_EHelper(op_fp){
static inline make_EHelper(op_imm) {
switch (s->isa.instr.i.funct3) {
EX(0, addi) EX(1, slli) EX(2, slti) EX(3, sltui)
EX(4, xori) EX(5, srli) EX(6, ori) EX(7, andi)
EX(4, xori) EX(5, srli) EX(6, ori) EX(7, nemuandi)
}
}
......@@ -78,7 +78,7 @@ static inline make_EHelper(op) {
#define pair(x, y) (((x) << 3) | (y))
switch (pair(idx, s->isa.instr.r.funct3)) {
EX(pair(0, 0), add) EX(pair(0, 1), sll) EX(pair(0, 2), slt) EX(pair(0, 3), sltu)
EX(pair(0, 4), xor) EX(pair(0, 5), srl) EX(pair(0, 6), or) EX(pair(0, 7), and)
EX(pair(0, 4), nemuxor) EX(pair(0, 5), srl) EX(pair(0, 6), nemuor) EX(pair(0, 7), nemuand)
EX(pair(1, 0), mul) EX(pair(1, 1), mulh) EX(pair(1,2), mulhsu)EX(pair(1, 3), mulhu)
EX(pair(1, 4), div) EX(pair(1, 5), divu) EX(pair(1, 6), rem) EX(pair(1, 7), remu)
EX(pair(2, 0), sub) EX(pair(2, 5), sra)
......@@ -173,14 +173,14 @@ static inline make_EHelper(misc_alu) {
if (op == 3) {
uint32_t op2 = (BITS(instr, 12, 12) << 2) | BITS(instr, 6, 5);
switch (op2) {
IDEX (0, CS, sub) IDEX (1, CS, xor) IDEX (2, CS, or) IDEX (3, CS, and)
IDEX (0, CS, sub) IDEX (1, CS, nemuxor) IDEX (2, CS, nemuor) IDEX (3, CS, nemuand)
IDEX (4, CS, subw)IDEX (5, CS, addw)EMPTY(6) EMPTY(7)
}
} else {
switch (op) {
IDEX (0, CB_shift, srli)
IDEX (1, CB_shift, srai)
IDEX (2, CB_andi, andi)
IDEX (2, CB_andi, nemuandi)
}
}
}
......
......@@ -29,7 +29,7 @@ static inline make_EHelper(mulhsu) {
// = mulhu(a, b) - (a < 0 ? b : 0)
rtl_sari(s, s0, dsrc1, 63);
rtl_and(s, s0, dsrc2, s0); // s0 = (id_src1->val < 0 ? id_src2->val : 0)
rtl_nemuand(s, s0, dsrc2, s0); // s0 = (id_src1->val < 0 ? id_src2->val : 0)
rtl_mul_hi(s, s1, dsrc1, dsrc2);
rtl_sub(s, ddest, s1, s0);
......
......@@ -25,7 +25,7 @@ static inline make_EHelper(csrrs) {
if (!csr_check(s, addr)) return;
csr_read(s0, addr);
if (id_src1->reg != 0) {
rtl_or(s, s1, s0, dsrc1);
rtl_nemuor(s, s1, s0, dsrc1);
csr_write(addr, s1);
}
rtl_mv(s, ddest, s0);
......@@ -38,8 +38,8 @@ static inline make_EHelper(csrrc) {
if (!csr_check(s, addr)) return;
csr_read(s0, addr);
if (id_src1->reg != 0) {
rtl_not(s, s1, dsrc1);
rtl_and(s, s1, s0, s1);
rtl_nemunot(s, s1, dsrc1);
rtl_nemuand(s, s1, s0, s1);
csr_write(addr, s1);
}
rtl_mv(s, ddest, s0);
......@@ -63,7 +63,7 @@ static inline make_EHelper(csrrsi) {
if (!csr_check(s, addr)) return;
csr_read(s0, addr);
if (id_src1->reg != 0) {
rtl_ori(s, s1, s0, id_src1->imm);
rtl_nemuori(s, s1, s0, id_src1->imm);
csr_write(addr, s1);
}
rtl_mv(s, ddest, s0);
......@@ -76,7 +76,7 @@ static inline make_EHelper(csrrci) {
if (!csr_check(s, addr)) return;
csr_read(s0, addr);
if (id_src1->reg != 0) {
rtl_andi(s, s1, s0, ~id_src1->imm);
rtl_nemuandi(s, s1, s0, ~id_src1->imm);
csr_write(addr, s1);
}
rtl_mv(s, ddest, s0);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册