The hardest part of Serpent optimization is finding good ways of performing the S-box calculations. My first set of algorithms doing this semi-automatically were described in my paper Speeding up Serpent. Since then I have made further algorithm improvements, and results optimized for 3-way parallel execution are used in my implementation contributed to the Linux kernel.