better performance and smaller code size