X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=riscv%2Fdecode.h;h=8fc8ada1b269cad40ecf04203a5fac245aec0584;hb=1da69b975beeda193d5fa47950be5883ca20ad13;hp=7f5effc741933b9a3b97fba5f54992ce2dac477f;hpb=3b1e9ab7522b3b20cde6bd8d9f2b28222463cf1b;p=riscv-isa-sim.git diff --git a/riscv/decode.h b/riscv/decode.h index 7f5effc..8fc8ada 100644 --- a/riscv/decode.h +++ b/riscv/decode.h @@ -201,18 +201,18 @@ private: #define zext_xlen(x) (((reg_t)(x) << (64-xlen)) >> (64-xlen)) #define set_pc(x) \ - do { if (unlikely(((x) & 2)) && !p->supports_extension('C')) \ - throw trap_instruction_address_misaligned(x); \ + do { p->check_pc_alignment(x); \ npc = sext_xlen(x); \ } while(0) #define set_pc_and_serialize(x) \ - do { reg_t __npc = (x); \ - set_pc(__npc); /* check alignment */ \ + do { reg_t __npc = (x) & p->pc_alignment_mask(); \ npc = PC_SERIALIZE_AFTER; \ STATE.pc = __npc; \ } while(0) +#define serialize() set_pc_and_serialize(npc) + /* Sentinel PC values to serialize simulator pipeline */ #define PC_SERIALIZE_BEFORE 3 #define PC_SERIALIZE_AFTER 5