On 06/03/18 16:42, Florian Westphal wrote: > I would also add 'highlevel' objects that are themselves translated into > basic operations. Most obvious example > are 'fetch 4 bytes x bytes into transport header'. > > Frontend should not need to bother with ipv4 details, such as ip > options. Instead IMR should take care of this and generate the needed > instructions to fetch iph->ihl and figure out the correct transport > header offset. Presumably then for this the IMR regs will cease to have any connection to BPF regs and will simply be (SSA?) r0, r1, ... as far as needed (not limited to 10 regs like BPF)? Then register allocation all happens in the IMR->BPF conversion (even for things 64 bits or smaller).
I wonder how sophisticated we should be about register allocation; whether we should go the whole hog with graph-colouring algorithms or linear scan, or just do something naïve like an LRU. Relatedly, should we spill values to the stack when we run out of registers, or should we just rely on being able to rematerialise them from parsing the packet again? -Ed