18#ifndef BACKENDS_TOFINO_BF_ASM_HASHEXPR_H_
19#define BACKENDS_TOFINO_BF_ASM_HASHEXPR_H_
21#include "backends/tofino/bf-utils/dynamic_hash/dynamic_hash.h"
22#include "input_xbar.h"
37 explicit HashExpr(
int l) : lineno(l) {}
41 bfn_hash_algorithm_t hash_algorithm = {};
42 static HashExpr *create(gress_t,
int stage,
const value_t &);
43 virtual void build_algorithm() = 0;
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,
49 virtual void gen_ixbar_inputs(std::vector<ixbar_input_t> &inputs,
InputXbar *ix,
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;
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;
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() {}
69 void generate_ixbar_inputs_with_gaps(
const std::multimap<unsigned, Phv::Ref> &what,
70 std::vector<ixbar_input_t> &inputs,
InputXbar *ix,
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
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 stringify.h:33
Definition bf-asm/phv.h:186
Definition asm-types.h:114