P4C
The P4 Compiler
Loading...
Searching...
No Matches
tofino/bf-p4c/specs/arch_spec.h
1
18
19#ifndef BACKENDS_TOFINO_BF_P4C_SPECS_ARCH_SPEC_H_
20#define BACKENDS_TOFINO_BF_P4C_SPECS_ARCH_SPEC_H_
21
22#include "backends/tofino/bf-p4c/specs/gress.h"
23
24struct IntrinsicField {
25 public:
26 std::string name;
27 std::string asm_name;
28 explicit IntrinsicField(std::string n) : name(n), asm_name(n) {}
29 IntrinsicField(std::string n, std::string an) : name(n), asm_name(an) {}
30};
31
32struct IntrinsicParam {
33 public:
34 std::string type;
35 std::string name;
36 IntrinsicParam(std::string t, std::string n) : type(t), name(n) {}
37};
38
46class ArchSpec {
47 protected:
48 std::vector<IntrinsicField> intrinsic_metadata[GRESS_T_COUNT];
49 std::vector<IntrinsicField> intrinsic_metadata_for_tm[GRESS_T_COUNT];
50 std::vector<IntrinsicField> intrinsic_metadata_from_parser[GRESS_T_COUNT];
51 std::vector<IntrinsicField> intrinsic_metadata_for_deparser[GRESS_T_COUNT];
52 std::vector<IntrinsicField> intrinsic_metadata_for_output_port[GRESS_T_COUNT];
53
54 std::vector<IntrinsicParam> parser_intrinsic_types[GRESS_T_COUNT];
55 std::vector<IntrinsicParam> mauppu_intrinsic_types[GRESS_T_COUNT];
56 std::vector<IntrinsicParam> deparser_intrinsic_types[GRESS_T_COUNT];
57
58 int deparser_intrinsic_metadata_for_deparser_param_index = -1;
59
60 public:
61 enum ArchType_t { TNA, T2NA };
62
63 ArchSpec();
64
65 std::vector<IntrinsicField> getIngressIntrinsicMetadata() const {
66 return intrinsic_metadata[INGRESS];
67 }
68
69 std::vector<IntrinsicField> getIngressInstrinicMetadataFromParser() const {
70 return intrinsic_metadata_from_parser[INGRESS];
71 }
72
73 std::vector<IntrinsicField> getIngressInstrinicMetadataForTM() const {
74 return intrinsic_metadata_for_tm[INGRESS];
75 }
76
77 std::vector<IntrinsicField> getIngressInstrinicMetadataForDeparser() const {
78 return intrinsic_metadata_for_deparser[INGRESS];
79 }
80
81 std::vector<IntrinsicField> getEgressIntrinsicMetadata() const {
82 return intrinsic_metadata[EGRESS];
83 }
84
85 std::vector<IntrinsicField> getEgressIntrinsicMetadataFromParser() const {
86 return intrinsic_metadata_from_parser[EGRESS];
87 }
88
89 std::vector<IntrinsicField> getEgressIntrinsicMetadataForTM() const {
90 return intrinsic_metadata_for_tm[EGRESS];
91 }
92
93 std::vector<IntrinsicField> getEgressIntrinsicMetadataForDeparser() const {
94 return intrinsic_metadata_for_deparser[EGRESS];
95 }
96
97 std::vector<IntrinsicField> getEgressIntrinsicMetadataForOutputPort() const {
98 return intrinsic_metadata_for_output_port[EGRESS];
99 }
100
101 void add_md(gress_t gress, IntrinsicField f) { intrinsic_metadata[gress].push_back(f); }
102
103 void add_tm_md(gress_t gress, IntrinsicField f) {
104 intrinsic_metadata_for_tm[gress].push_back(f);
105 }
106
107 void add_prsr_md(gress_t gress, IntrinsicField f) {
108 intrinsic_metadata_from_parser[gress].push_back(f);
109 }
110
111 void add_dprsr_md(gress_t gress, IntrinsicField f) {
112 intrinsic_metadata_for_deparser[gress].push_back(f);
113 }
114
115 void add_outport_md(gress_t gress, IntrinsicField f) {
116 intrinsic_metadata_for_output_port[gress].push_back(f);
117 }
118
119 std::vector<IntrinsicParam> getParserIntrinsicTypes(gress_t g) const {
120 return parser_intrinsic_types[g];
121 }
122
123 std::vector<IntrinsicParam> getMAUIntrinsicTypes(gress_t g) const {
124 return mauppu_intrinsic_types[g];
125 }
126
127 std::vector<IntrinsicParam> getPPUIntrinsicTypes(gress_t g) const {
128 return mauppu_intrinsic_types[g];
129 }
130
131 std::vector<IntrinsicParam> getDeparserIntrinsicTypes(gress_t g) const {
132 return deparser_intrinsic_types[g];
133 }
134
143 return deparser_intrinsic_metadata_for_deparser_param_index;
144 }
145
146 void setTofinoIntrinsicTypes();
147};
148
149class TofinoArchSpec : public ArchSpec {
150 public:
151 TofinoArchSpec();
152};
153
154class JBayArchSpec : public ArchSpec {
155 public:
156 JBayArchSpec();
157};
158
159#endif /* BACKENDS_TOFINO_BF_P4C_SPECS_ARCH_SPEC_H_ */
int getDeparserIntrinsicMetadataForDeparserParamIndex() const
Get the index of the intrinsic metadata for deparser parameter in the deparser.
Definition tofino/bf-p4c/specs/arch_spec.h:142
ArchSpec()
Definition tofino/bf-p4c/specs/arch_spec.cpp:21
Definition tofino/bf-p4c/specs/arch_spec.h:24