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

riscv64,exec: add amoand

上级 6039893e
......@@ -57,3 +57,4 @@ make_EHelper(sc);
make_EHelper(amoswap);
make_EHelper(amoadd);
make_EHelper(amoor);
make_EHelper(amoand);
......@@ -25,37 +25,36 @@ make_EHelper(sc) {
print_asm_template3(sc);
}
make_EHelper(amoswap) {
static void inline amo_load() {
rtl_lm(&s0, &id_src->val, decinfo.width);
rtl_sext(&s0, &s0, decinfo.width);
rtl_sr(id_dest->reg, &s0, 0);
}
// swap
make_EHelper(amoswap) {
amo_load();
//swap
rtl_sm(&id_src->val, &id_src2->val, decinfo.width);
print_asm_template3(amoswap);
}
make_EHelper(amoadd) {
rtl_lm(&s0, &id_src->val, decinfo.width);
rtl_sext(&s0, &s0, decinfo.width);
rtl_sr(id_dest->reg, &s0, 0);
// add
amo_load();
rtl_add(&s0, &s0, &id_src2->val);
rtl_sm(&id_src->val, &s0, decinfo.width);
print_asm_template3(amoor);
}
make_EHelper(amoor) {
rtl_lm(&s0, &id_src->val, decinfo.width);
rtl_sext(&s0, &s0, decinfo.width);
rtl_sr(id_dest->reg, &s0, 0);
// or
amo_load();
rtl_or(&s0, &s0, &id_src2->val);
rtl_sm(&id_src->val, &s0, decinfo.width);
print_asm_template3(amoor);
}
make_EHelper(amoand) {
amo_load();
rtl_and(&s0, &s0, &id_src2->val);
rtl_sm(&id_src->val, &s0, decinfo.width);
print_asm_template3(amoand);
}
......@@ -70,7 +70,7 @@ static make_EHelper(atomic) {
EMPTY, EX(amoswap), EX(lr), EX(sc)
};
static OpcodeEntry table_hi [8] = {
EX(amoadd), EMPTY, EX(amoor), EMPTY, EMPTY, EMPTY, EMPTY, EMPTY
EX(amoadd), EMPTY, EX(amoor), EX(amoand), EMPTY, EMPTY, EMPTY, EMPTY
};
decinfo.width = 1 << decinfo.isa.instr.funct3;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册