P4C
The P4 Compiler
Loading...
Searching...
No Matches
tofino/instruction.cpp
1
17
18/* Tofino overloads for instructions #included in instruction.cpp
19 * WARNING -- this is included in an anonymous namespace, as VLIWInstruction is
20 * in that anonymous namespace */
21
22void VLIWInstruction::write_regs(Target::Tofino::mau_regs &regs, Table *tbl,
24 if (act != tbl->stage->imem_addr_use[tbl->gress][act->addr]) {
25 LOG3("skipping " << tbl->name() << '.' << act->name << " as its imem is used by "
26 << tbl->stage->imem_addr_use[tbl->gress][act->addr]->name);
27 return;
28 }
29 LOG2(this);
30 auto &imem = regs.dp.imem;
31 int iaddr = act->addr / ACTION_IMEM_COLORS;
32 int color = act->addr % ACTION_IMEM_COLORS;
33 unsigned bits = encode();
34 BUG_CHECK(slot >= 0, "slot < 0");
35 switch (Phv::reg(slot)->size) {
36 case 8:
37 imem.imem_subword8[slot - 64][iaddr].imem_subword8_instr = bits;
38 imem.imem_subword8[slot - 64][iaddr].imem_subword8_color = color;
39 imem.imem_subword8[slot - 64][iaddr].imem_subword8_parity = parity(bits) ^ color;
40 break;
41 case 16:
42 imem.imem_subword16[slot - 128][iaddr].imem_subword16_instr = bits;
43 imem.imem_subword16[slot - 128][iaddr].imem_subword16_color = color;
44 imem.imem_subword16[slot - 128][iaddr].imem_subword16_parity = parity(bits) ^ color;
45 break;
46 case 32:
47 imem.imem_subword32[slot][iaddr].imem_subword32_instr = bits;
48 imem.imem_subword32[slot][iaddr].imem_subword32_color = color;
49 imem.imem_subword32[slot][iaddr].imem_subword32_parity = parity(bits) ^ color;
50 break;
51 default:
52 BUG("Invalid slot: %d", slot);
53 }
54 auto &power_ctl = regs.dp.actionmux_din_power_ctl;
55 phvRead([&](const Phv::Slice &sl) { set_power_ctl_reg(power_ctl, sl.reg.mau_id()); });
56}
Definition bf-asm/phv.h:83
Definition tables.h:98
Definition tables.h:538