add operators test class
[riscv-isa-sim.git] / operators / operators.h
1 #include "stdint.h"
2 #include "decode.h"
3
4 typedef uint64_t (*cvt)(uint64_t r);
5
6 uint64_t u64_u64_cvt(reg_t r) { return r; }
7 uint64_t u64_u16_cvt(reg_t r) { return (uint64_t)(uint16_t)r; }
8
9 uint64_t (sext32)(reg_t r) { return sext32(r); }
10
11 class opcvt
12 {
13 public:
14 cvt cv_rd;
15 cvt cv_rs1;
16 cvt cv_rs2;
17 opcvt(cvt _cv_rd, cvt _cv_rs1, cvt _cv_rs2) :
18 cv_rd(_cv_rd), cv_rs1(_cv_rs1), cv_rs2(_cv_rs2) {}
19
20 void add(reg_t &rd, const reg_t &rs1, const reg_t &rs2)
21 { rd = cv_rd(cv_rs1(rs1) + cv_rs2(rs2)); }
22
23 //R operator+ (op2 &s2) { return typecvt(s1 + typecvt(s2)); }
24 //operator R() { return typecvt(s1); }
25 };