22void VLIWInstruction::write_regs(Target::Tofino::mau_regs ®s,
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);
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) {
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;
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;
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;
52 BUG(
"Invalid slot: %d", slot);
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()); });
Definition bf-asm/phv.h:83