func main() { … } type namedComponent … func (c namedComponent) String() string { … } type uint128 … func (c uint128) String() string { … } func feSquare() { … } func feMul() { … } // mul64 sets r to i * aX * bX. func mul64(r uint128, i int, aX, bX namedComponent) { … } // addMul64 sets r to r + i * aX * bX. func addMul64(r uint128, i uint64, aX, bX namedComponent) { … } // shiftRightBy51 returns r >> 51 and r.lo. // // After this function is called, the uint128 may not be used anymore. func shiftRightBy51(r *uint128) (out, lo GPVirtual) { … } // maskAndAdd sets r = r&mask + c*i. func maskAndAdd(r, mask, c GPVirtual, i uint64) { … } func mustAddr(c Component) Op { … }