0f4955be5bd54e183cc2ad277c4622cc8b972462
[riscv-isa-sim.git] / hwacha / hwacha.h
1 #ifndef _HWACHA_H
2 #define _HWACHA_H
3
4 #include "extension.h"
5
6 struct ct_state_t
7 {
8 void reset();
9
10 uint32_t nxpr;
11 uint32_t nfpr;
12 uint32_t maxvl;
13 uint32_t vl;
14
15 reg_t vf_pc;
16 };
17
18 struct ut_state_t
19 {
20 void reset();
21
22 bool run;
23 regfile_t<reg_t, 32, true> XPR;
24 regfile_t<reg_t, 32, false> FPR;
25 };
26
27 class hwacha_t : public extension_t
28 {
29 public:
30 std::vector<insn_desc_t> get_instructions();
31 const char* name() { return "hwacha"; }
32 void reset();
33
34 ct_state_t* get_ct_state() { return &ct_state; }
35 ut_state_t* get_ut_state(int idx) { return &ut_state[idx]; }
36 bool vf_active();
37
38 private:
39 static const int max_uts = 2048;
40 ct_state_t ct_state;
41 ut_state_t ut_state[max_uts];
42 };
43
44 REGISTER_EXTENSION(hwacha, []() { return new hwacha_t; })
45
46 #endif