------- Additional Comments From vda at port dot imtp dot ilyichevsk dot odessa
dot ua 2005-04-23 22:54 -------
These are -O2 and -O3 code comparison.
-O3 code have all modified variables in registers
and thus is smaller and most likely faster.
serpent_encrypt:
pushl %ebp
movl %esp, %ebp
pushl %edi
pushl %esi
pushl %ebx
subl $256, %esp
movl 8(%ebp), %edx
movl 16(%ebp), %eax
movl 12(%eax), %ebx
movl 12(%edx), %ecx
xorl %ebx, %ecx
movl (%edx), %edi
movl %ecx, -20(%ebp)
xorl (%eax), %edi
movl 8(%edx), %ecx
movl 4(%edx), %ebx
movl -20(%ebp), %esi
xorl 8(%eax), %ecx
orl %edi, -20(%ebp)
xorl 4(%eax), %ebx
xorl %ebx, -20(%ebp)
xorl %esi, %edi
xorl %ecx, %esi
andl %edi, %ebx
xorl %edi, %ecx
notl %esi
xorl -20(%ebp), %edi
movl %edx, -16(%ebp)
serpent_encrypt:
pushl %ebp
movl %esp, %ebp
pushl %edi
pushl %esi
pushl %ebx
pushl %edx
movl 8(%ebp), %edi
movl 16(%ebp), %ecx
movl 12(%edi), %eax
xorl 12(%ecx), %eax
movl 8(%edi), %esi
movl 4(%edi), %edx
movl (%edi), %ebx
xorl 8(%ecx), %esi
xorl 4(%ecx), %edx
xorl (%ecx), %ebx
movl %eax, %ecx
orl %ebx, %ecx
xorl %eax, %ebx
xorl %esi, %eax
xorl %edx, %ecx
notl %eax
andl %ebx, %edx
xorl %eax, %edx
xorl %ebx, %esi
xorl %ecx, %ebx
orl %ebx, %eax
xorl %esi, %ebx
andl %edx, %esi
xorl %esi, %eax
notl %edx
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21182