------- Comment #13 from rask at sygehus dot dk 2007-07-01 19:52 -------
This has regressed quite badly. Here's what we get with
-O2 -fomit-frame-pointer -m32 -march=pentium4:
fl:
movzbl %al, %eax # 21 *zero_extendqisi2_movzbw [length
= 3]
movl x, %edx # 8 *movsi_1/1 [length = 6]
xorb %dl, %dl # 27 *movstrictqi_xor [length = 2]
orl %edx, %eax # 10 *iorsi_1/1 [length = 2]
movl %eax, x # 11 *movsi_1/2 [length = 5]
ret # 25 return_internal [length = 1]
fu:
movzbl %al, %eax # 22 *zero_extendqisi2_movzbw [length
= 3]
sall $8, %eax # 8 *ashlsi3_1/1 [length = 3]
movl x, %edx # 9 *movsi_1/1 [length = 6]
xorb %dh, %dh # 23 *xorqi_ext_2 [length = 2]
orl %edx, %eax # 11 *iorsi_1/1 [length = 2]
movl %eax, x # 12 *movsi_1/2 [length = 5]
ret # 26 return_internal [length = 1]
gl:
movzbl %al, %eax # 21 *zero_extendqihi2_movzbl [length
= 3]
movzwl y, %edx # 8 *movhi_1/3 [length = 7]
xorb %dl, %dl # 28 *movstrictqi_xor [length = 2]
orl %edx, %eax # 23 *iorsi_1/1 [length = 2]
movw %ax, y # 11 *movhi_1/4 [length = 6]
ret # 26 return_internal [length = 1]
gu:
sall $8, %eax # 22 *ashlsi3_1/1 [length = 3]
movzbl y, %edx # 23 *zero_extendqihi2_movzbl [length = 7]
orl %edx, %eax # 24 *iorsi_1/1 [length = 2]
movw %ax, y # 12 *movhi_1/4 [length = 6]
ret # 27 return_internal [length = 1]
Likewise for -march=pentium:
fl:
movl x, %edx # 8 *movsi_1/1 [length = 6]
andl $255, %eax # 21 *andsi_1/1 [length = 6]
xorb %dl, %dl # 27 *movstrictqi_xor [length = 2]
orl %edx, %eax # 10 *iorsi_1/1 [length = 2]
movl %eax, x # 11 *movsi_1/2 [length = 5]
ret # 25 return_internal [length = 1]
fu:
movl x, %edx # 9 *movsi_1/1 [length = 6]
andl $255, %eax # 22 *andsi_1/1 [length = 6]
sall $8, %eax # 8 *ashlsi3_1/1 [length = 3]
xorb %dh, %dh # 23 *xorqi_ext_2 [length = 2]
orl %edx, %eax # 11 *iorsi_1/1 [length = 2]
movl %eax, x # 12 *movsi_1/2 [length = 5]
ret # 26 return_internal [length = 1]
gl:
movw y, %dx # 8 *movhi_1/3 [length = 7]
andl $255, %eax # 22 *andsi_1/1 [length = 6]
xorb %dl, %dl # 29 *movstrictqi_xor [length = 2]
orl %edx, %eax # 24 *iorsi_1/1 [length = 2]
movw %ax, y # 11 *movhi_1/4 [length = 6]
ret # 27 return_internal [length = 1]
gu:
movb %al, y+1 # 12 *movqi_1/7 [length = 5]
ret # 24 return_internal [length = 1]
.ident "GCC: (GNU) 4.3.0 20070628 (experimental)"
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15184