18#include "backends/tofino/bf-asm/tofino/phv.h"
20void Target::Tofino::Phv::init_regs(
::Phv &phv) {
25 } sizes[] = {{
"W", 32, 64}, {
"B", 8, 64}, {
"H", 16, 96}, {
"", 0, 32},
26 {
"TW", 32, 32}, {
"TB", 8, 32}, {
"TH", 16, 48}};
28 phv.regs.resize(NUM_PHV_REGS);
29 for (
unsigned i = 0; i <
sizeof sizes /
sizeof *sizes; i++) {
30 for (
unsigned j = 0; j < sizes[i].count; j++, uid++) {
31 auto reg = phv.regs[uid] =
new Register;
32 memset(reg->name, 0,
sizeof(reg->name));
33 reg->type = (uid >= FIRST_TPHV) ? Register::TAGALONG : Register::NORMAL;
36 reg->size = sizes[i].size;
39 snprintf(buf,
sizeof(buf),
"R%d", uid);
40 phv.names[INGRESS][buf][0].slice = ::Phv::Slice(*reg, 0, sizes[i].size - 1);
41 phv.names[EGRESS][buf][0].slice = ::Phv::Slice(*reg, 0, sizes[i].size - 1);
42 snprintf(reg->name,
sizeof(reg->name),
"%.2s%d", sizes[i].code, j);
43 phv.names[INGRESS][reg->name][0].slice = ::Phv::Slice(*reg, 0, sizes[i].size - 1);
44 phv.names[EGRESS][reg->name][0].slice = ::Phv::Slice(*reg, 0, sizes[i].size - 1);
48 BUG_CHECK(uid == phv.regs.size(),
"uid %u != %zu", uid, phv.regs.size());
51static bitvec tagalong_group(
int n) {
54 Target::Tofino::Phv::FIRST_8BIT_TPHV + n * (Target::Tofino::Phv::COUNT_8BIT_TPHV / 8),
55 Target::Tofino::Phv::COUNT_8BIT_TPHV / 8);
57 Target::Tofino::Phv::FIRST_16BIT_TPHV + n * (Target::Tofino::Phv::COUNT_16BIT_TPHV / 8),
58 Target::Tofino::Phv::COUNT_16BIT_TPHV / 8);
60 Target::Tofino::Phv::FIRST_32BIT_TPHV + n * (Target::Tofino::Phv::COUNT_32BIT_TPHV / 8),
61 Target::Tofino::Phv::COUNT_32BIT_TPHV / 8);
64const bitvec Target::Tofino::Phv::tagalong_groups[8] = {
65 tagalong_group(0), tagalong_group(1), tagalong_group(2), tagalong_group(3),
66 tagalong_group(4), tagalong_group(5), tagalong_group(6), tagalong_group(7)};
Definition bf-asm/phv.h:32