------- 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