From: Yunsup Lee Date: Mon, 16 Mar 2015 08:59:55 +0000 (-0700) Subject: vxcptsave->vxcptevac,vxcptrestore->vxcpthold X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=68d1d85208680ca335141916df0c54a4f03aace5;p=riscv-isa-sim.git vxcptsave->vxcptevac,vxcptrestore->vxcpthold this change was necessary since the impl csr is gone. --- diff --git a/hwacha/decode_hwacha.h b/hwacha/decode_hwacha.h index b00c6af..1541758 100644 --- a/hwacha/decode_hwacha.h +++ b/hwacha/decode_hwacha.h @@ -14,6 +14,7 @@ #define MAXVL (h->get_ct_state()->maxvl) #define VL (h->get_ct_state()->vl) #define UTIDX (h->get_ct_state()->count) +#define PREC (h->get_ct_state()->prec) #define VF_PC (h->get_ct_state()->vf_pc) #define WRITE_NXPR(nxprnext) (h->get_ct_state()->nxpr = (nxprnext)) #define WRITE_NFPR(nfprnext) (h->get_ct_state()->nfpr = (nfprnext)) diff --git a/hwacha/encodings_hwacha.h b/hwacha/encodings_hwacha.h index 11fa889..433748f 100644 --- a/hwacha/encodings_hwacha.h +++ b/hwacha/encodings_hwacha.h @@ -111,7 +111,7 @@ #define MASK_VXCPTAUX 0xfffff07f #define MASK_VXCPTCAUSE 0xfffff07f #define MASK_VXCPTEVAC 0xfff07fff -#define MASK_VXCPTHOLD 0xffffffff +#define MASK_VXCPTHOLD 0xfff07fff #define MASK_VXCPTKILL 0xffffffff #define MASK_VXCPTRESTORE 0xfff07fff #define MASK_VXCPTSAVE 0xfff07fff diff --git a/hwacha/hwacha_disasm.cc b/hwacha/hwacha_disasm.cc index 02e3d57..a950cd5 100644 --- a/hwacha/hwacha_disasm.cc +++ b/hwacha/hwacha_disasm.cc @@ -139,8 +139,8 @@ std::vector hwacha_t::get_disasms() DISASM_INSN("vxcptcause", vxcptcause, 0, {&xrd}); DISASM_INSN("vxcptaux", vxcptaux, 0, {&xrd}); - DISASM_INSN("vxcptsave", vxcptsave, 0, {&xrs1}); - DISASM_INSN("vxcptrestore", vxcptrestore, 0, {&xrs1}); + DISASM_INSN("vxcptevac", vxcptevac, 0, {&xrs1}); + DISASM_INSN("vxcpthold", vxcpthold, 0, {&xrs1}); DISASM_INSN("vxcptkill", vxcptkill, 0, {}); const uint32_t mask_vseglen = 0x7UL << 29; diff --git a/hwacha/insns/vxcptevac.h b/hwacha/insns/vxcptevac.h new file mode 100644 index 0000000..607e352 --- /dev/null +++ b/hwacha/insns/vxcptevac.h @@ -0,0 +1,48 @@ +require_supervisor_hwacha; +reg_t addr = XS1; + +#define STORE_B(addr, value) \ + p->get_mmu()->store_uint8(addr, value); \ + addr += 1; \ + +#define STORE_W(addr, value) \ + p->get_mmu()->store_uint32(addr, value); \ + addr += 4; \ + +#define STORE_D(addr, value) \ + p->get_mmu()->store_uint64(addr, value); \ + addr += 8; \ + +// to be compliant with the evac structure +STORE_D(addr, (uint64_t)-1); + +STORE_W(addr, NXPR); +STORE_W(addr, NFPR); +STORE_W(addr, MAXVL); +STORE_W(addr, VL); +STORE_W(addr, UTIDX); +STORE_W(addr, PREC); + +STORE_D(addr, VF_PC); + +for (uint32_t x=1; xget_ut_state(i)->run); +} + +#undef STORE_B +#undef STORE_W +#undef STORE_D + +#include "insns/vxcptkill.h" diff --git a/hwacha/insns/vxcpthold.h b/hwacha/insns/vxcpthold.h new file mode 100644 index 0000000..adefd75 --- /dev/null +++ b/hwacha/insns/vxcpthold.h @@ -0,0 +1,42 @@ +require_supervisor_hwacha; +reg_t addr = XS1; + +#define LOAD_B(addr) \ + (addr += 1, p->get_mmu()->load_uint8(addr-1)) + +#define LOAD_W(addr) \ + (addr += 4, p->get_mmu()->load_uint32(addr-4)) + +#define LOAD_D(addr) \ + (addr += 8, p->get_mmu()->load_uint64(addr-8)) + +// to be compliant with the evac structure +addr += 8; + +WRITE_NXPR(LOAD_W(addr)); +WRITE_NFPR(LOAD_W(addr)); +WRITE_MAXVL(LOAD_W(addr)); +WRITE_VL(LOAD_W(addr)); +WRITE_UTIDX(LOAD_W(addr)); +WRITE_PREC(LOAD_W(addr)); +WRITE_VF_PC(LOAD_D(addr)); + +for (uint32_t x=1; xget_ut_state(i)->run = LOAD_B(addr); +} + +#undef LOAD_B +#undef LOAD_W +#undef LOAD_D diff --git a/hwacha/insns/vxcptrestore.h b/hwacha/insns/vxcptrestore.h deleted file mode 100644 index db7a62e..0000000 --- a/hwacha/insns/vxcptrestore.h +++ /dev/null @@ -1,40 +0,0 @@ -require_supervisor_hwacha; -reg_t addr = XS1; - -#define LOAD_B(addr) \ - (addr += 1, p->get_mmu()->load_uint8(addr-1)) - -#define LOAD_W(addr) \ - (addr += 4, p->get_mmu()->load_uint32(addr-4)) - -#define LOAD_D(addr) \ - (addr += 8, p->get_mmu()->load_uint64(addr-8)) - - -WRITE_NXPR(LOAD_W(addr)); -WRITE_NFPR(LOAD_W(addr)); -WRITE_MAXVL(LOAD_W(addr)); -WRITE_VL(LOAD_W(addr)); -WRITE_UTIDX(LOAD_W(addr)); -addr += 4; -WRITE_VF_PC(LOAD_D(addr)); - -for (uint32_t x=1; xget_ut_state(i)->run = LOAD_B(addr); -} - -#undef LOAD_B -#undef LOAD_W -#undef LOAD_D diff --git a/hwacha/insns/vxcptsave.h b/hwacha/insns/vxcptsave.h deleted file mode 100644 index cc663ed..0000000 --- a/hwacha/insns/vxcptsave.h +++ /dev/null @@ -1,44 +0,0 @@ -require_supervisor_hwacha; -reg_t addr = XS1; - -#define STORE_B(addr, value) \ - p->get_mmu()->store_uint8(addr, value); \ - addr += 1; \ - -#define STORE_W(addr, value) \ - p->get_mmu()->store_uint32(addr, value); \ - addr += 4; \ - -#define STORE_D(addr, value) \ - p->get_mmu()->store_uint64(addr, value); \ - addr += 8; \ - -STORE_W(addr, NXPR); -STORE_W(addr, NFPR); -STORE_W(addr, MAXVL); -STORE_W(addr, VL); -STORE_W(addr, UTIDX); -addr += 4; -STORE_D(addr, VF_PC); - -for (uint32_t x=1; xget_ut_state(i)->run); -} - -#undef STORE_B -#undef STORE_W -#undef STORE_D - -#include "insns/vxcptkill.h" diff --git a/hwacha/opcodes_hwacha.h b/hwacha/opcodes_hwacha.h index b6dbe8b..d0eb1ee 100644 --- a/hwacha/opcodes_hwacha.h +++ b/hwacha/opcodes_hwacha.h @@ -42,6 +42,6 @@ DECLARE_INSN(vssegstw, MATCH_VSSEGSTW, MASK_VSSEGSTW) DECLARE_INSN(vssegw, MATCH_VSSEGW, MASK_VSSEGW) DECLARE_INSN(vxcptaux, MATCH_VXCPTAUX, MASK_VXCPTAUX) DECLARE_INSN(vxcptcause, MATCH_VXCPTCAUSE, MASK_VXCPTCAUSE) +DECLARE_INSN(vxcptevac, MATCH_VXCPTEVAC, MASK_VXCPTEVAC) +DECLARE_INSN(vxcpthold, MATCH_VXCPTHOLD, MASK_VXCPTHOLD) DECLARE_INSN(vxcptkill, MATCH_VXCPTKILL, MASK_VXCPTKILL) -DECLARE_INSN(vxcptrestore, MATCH_VXCPTRESTORE, MASK_VXCPTRESTORE) -DECLARE_INSN(vxcptsave, MATCH_VXCPTSAVE, MASK_VXCPTSAVE)