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

riscv64,exec,muldiv: add mulhsu

上级 dcc2ce51
......@@ -30,6 +30,7 @@ make_EHelper(priv);
make_EHelper(mul);
make_EHelper(mulh);
make_EHelper(mulhsu);
make_EHelper(mulhu);
make_EHelper(div);
make_EHelper(divu);
......@@ -45,4 +46,4 @@ make_EHelper(remw);
make_EHelper(divuw);
make_EHelper(remuw);
make_EHelper(sraw);
make_EHelper(srlw);
\ No newline at end of file
make_EHelper(srlw);
......@@ -44,7 +44,7 @@ static OpcodeEntry op2_table [8] = {
};
static OpcodeEntry muldiv_table [8] = {
EX(mul), EX(mulh), EMPTY, EX(mulhu), EX(div), EX(divu), EX(rem), EX(remu)
EX(mul), EX(mulh), EX(mulhsu), EX(mulhu), EX(div), EX(divu), EX(rem), EX(remu)
};
static make_EHelper(op) {
......
......@@ -21,6 +21,25 @@ make_EHelper(mulhu) {
print_asm_template3(mulh);
}
make_EHelper(mulhsu) {
//rtl_msb(&s0, &id_src->val, 8);
//rtl_li(&s1, 0);
//rtl_sub(&s1, &s1, &id_src->val); // s1 = -id_src->val
//rtl_mux(&s1, &s0, &s1, &id_src->val); // s1 = |id_src->val|
//rtl_mul_hi(&id_dest->val, &s1, &id_src2->val);
//rtl_li(&s1, 0);
//rtl_sub(&s1, &s1, &id_dest->val); // s1 = -id_dest->val
//rtl_mux(&s0, &s0, &s1, &id_dest->val);
s0 = ((__int128_t)(sword_t)id_src->val * id_src2->val) >> 64;
rtl_sr(id_dest->reg, &s0, 4);
print_asm_template3(mulhsu);
}
make_EHelper(div) {
rtl_idiv_q(&s0, &id_src->val, &id_src2->val);
rtl_sr(id_dest->reg, &s0, 4);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册