diff options
author | Andrew Waterman <waterman@s144.Millennium.Berkeley.EDU> | 2010-10-11 17:16:00 -0700 |
---|---|---|
committer | Andrew Waterman <waterman@s144.Millennium.Berkeley.EDU> | 2010-10-11 17:16:00 -0700 |
commit | d3cb781e165427412b299b6034289b8458472790 (patch) | |
tree | 6bca19f49dd7a894221e82a9eb7d8e5180ef72fb /riscv/decode.h | |
parent | 9222fb8ab846e1c155546412662cb50a9da7c265 (diff) | |
download | spike-d3cb781e165427412b299b6034289b8458472790.zip spike-d3cb781e165427412b299b6034289b8458472790.tar.gz spike-d3cb781e165427412b299b6034289b8458472790.tar.bz2 |
[sim] added writeback tracing
Diffstat (limited to 'riscv/decode.h')
-rw-r--r-- | riscv/decode.h | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/riscv/decode.h b/riscv/decode.h index 9a0632a..56157d3 100644 --- a/riscv/decode.h +++ b/riscv/decode.h @@ -119,11 +119,35 @@ union insn_t uint32_t bits; }; +#if 0 +#include <stdio.h> +class trace_writeback +{ +public: + trace_writeback(reg_t* _rf, int _rd) : rf(_rf), rd(_rd) {} + + reg_t operator = (reg_t rhs) + { + printf("R[%x] <= %llx\n",rd,(long long)rhs); + rf[rd] = rhs; + return rhs; + } + +private: + reg_t* rf; + int rd; +}; + +#define do_writeback(rf,rd) trace_writeback(rf,rd) +#else +#define do_writeback(rf,rd) rf[rd] +#endif + // helpful macros, etc #define RS1 R[insn.rtype.rs1] #define RS2 R[insn.rtype.rs2] -#define RDR R[insn.rtype.rdr] -#define RDI R[insn.itype.rdi] +#define RDR do_writeback(R,insn.rtype.rdr) +#define RDI do_writeback(R,insn.itype.rdi) #define FRS1 FR[insn.ftype.rs1] #define FRS2 FR[insn.ftype.rs2] #define FRS3 FR[insn.ftype.rs3] |