2-bit packing
NumbersFour weights share one byte; shifts and masks unpack them just before the multiply.
Weights are stored as 0, 1, 2 (meaning −1, 0, +1). Four fit in a byte, laid out so a vector load plus a few shifts and masks yields vectors of weights ready for the dot product. The +1 offset is corrected afterwards by subtracting the sum of the activations: Σ(w+1)·x − Σx = Σw·x.
Being 0 to 2 also means every weight fits the 7-bit operand of the relaxed int8 dot instruction.