P4C
The P4 Compiler
All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
hashexpr.h
1
17
18#ifndef BACKENDS_TOFINO_BF_ASM_HASHEXPR_H_
19#define BACKENDS_TOFINO_BF_ASM_HASHEXPR_H_
20
21#include "backends/tofino/bf-utils/dynamic_hash/dynamic_hash.h"
22#include "input_xbar.h"
23#include "phv.h"
24
25class HashExpr : public IHasDbPrint {
26 class PhvRef;
27 class Random;
28 class Crc;
29 class XorHash;
30 class Xor;
31 class Mask;
32 class Stripe;
33 class Slice;
34 class SExtend;
35
36 protected:
37 explicit HashExpr(int l) : lineno(l) {}
38
39 public:
40 int lineno;
41 bfn_hash_algorithm_t hash_algorithm = {}; // Zero-init to make Klockwork happy
42 static HashExpr *create(gress_t, int stage, const value_t &);
43 virtual void build_algorithm() = 0;
44 virtual bool check_ixbar(InputXbar *ix, InputXbar::HashTable ht) = 0;
45 virtual void gen_data(bitvec &data, int bit, InputXbar *ix, InputXbar::HashTable hash_table);
46 void gen_ixbar_init(ixbar_init_t *ixbar_init, std::vector<ixbar_input_t> &inputs,
47 std::vector<hash_matrix_output_t> &outputs, int logical_hash_bit,
48 InputXbar *ix, InputXbar::HashTable hash_table);
49 virtual void gen_ixbar_inputs(std::vector<ixbar_input_t> &inputs, InputXbar *ix,
50 InputXbar::HashTable hash_table) = 0;
51 virtual void get_sources(int bit, std::vector<Phv::Ref> &) const = 0;
52 std::vector<Phv::Ref> get_sources(int bit) const {
53 std::vector<Phv::Ref> rv;
54 get_sources(bit, rv);
55 return rv;
56 }
57 virtual int width() = 0;
58 virtual int input_size() = 0;
59 virtual bool match_phvref(const Phv::Ref &ref) { return false; }
60 virtual bool operator==(const HashExpr &) const = 0;
61 void find_input(Phv::Ref what, std::vector<ixbar_input_t> &inputs, InputXbar *ix,
62 InputXbar::HashTable hash_table);
63 bool operator!=(const HashExpr &a) const { return !operator==(a); }
64 virtual void dbprint(std::ostream &out) const {}
65 virtual Phv::Ref *get_ghost_slice() { return nullptr; }
66 virtual ~HashExpr() {}
67
68 private:
69 void generate_ixbar_inputs_with_gaps(const std::multimap<unsigned, Phv::Ref> &what,
70 std::vector<ixbar_input_t> &inputs, InputXbar *ix,
71 InputXbar::HashTable hash_table);
72};
73
74extern void dump(const HashExpr *);
75extern void dump(const HashExpr &);
76
77#endif /* BACKENDS_TOFINO_BF_ASM_HASHEXPR_H_ */
Definition hashexpr.cpp:192
Definition hashexpr.cpp:340
Definition hashexpr.cpp:93
Definition hashexpr.cpp:141
Definition hashexpr.cpp:476
Definition hashexpr.cpp:431
Definition hashexpr.cpp:372
XOR hashing algorithm implemented on the hashing matrix.
Definition hashexpr.cpp:259
Definition hashexpr.cpp:281
Definition hashexpr.h:25
virtual void gen_data(bitvec &data, int bit, InputXbar *ix, InputXbar::HashTable hash_table)
Definition hashexpr.cpp:68
void gen_ixbar_init(ixbar_init_t *ixbar_init, std::vector< ixbar_input_t > &inputs, std::vector< hash_matrix_output_t > &outputs, int logical_hash_bit, InputXbar *ix, InputXbar::HashTable hash_table)
Definition hashexpr.cpp:44
Definition bf-asm/input_xbar.h:58
Definition stringify.h:33
Definition bitvec.h:120
Definition bf-asm/phv.h:186
Definition bf-asm/input_xbar.h:71
Definition asm-types.h:114