Am 01.11.2013 19:53, schrieb DSF:
If your current compiler misses such an obvious optimization, it is
quite frankly a piece of shit.
I would not disagree as far as code generation goes.
Just for reference, gcc 4.7 produces the expected:
080484a0 <foo>:
80484a0: c7 05 20 a0 04 08 00 movl $0x0,0x804a020
80484a7: 00 00 00
80484aa: c7 05 24 a0 04 08 00 movl $0x0,0x804a024
80484b1: 00 00 00
80484b4: c7 05 28 a0 04 08 00 movl $0x0,0x804a028
80484bb: 00 00 00
80484be: c7 05 2c a0 04 08 00 movl $0x0,0x804a02c
80484c5: 00 00 00
80484c8: c7 05 30 a0 04 08 00 movl $0x0,0x804a030
80484cf: 00 00 00
80484d2: c7 05 34 a0 04 08 00 movl $0x0,0x804a034
80484d9: 00 00 00
80484dc: c7 05 38 a0 04 08 00 movl $0x0,0x804a038
80484e3: 00 00 00
80484e6: c7 05 3c a0 04 08 00 movl $0x0,0x804a03c
80484ed: 00 00 00
80484f0: c7 05 40 a0 04 08 00 movl $0x0,0x804a040
80484f7: 00 00 00
80484fa: c3 ret
80484fb: 90 nop
80484fc: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
08048500 <bar>:
8048500: c7 05 44 a0 04 08 00 movl $0x0,0x804a044
8048507: 00 00 00
804850a: c7 05 48 a0 04 08 00 movl $0x0,0x804a048
8048511: 00 00 00
8048514: c7 05 4c a0 04 08 00 movl $0x0,0x804a04c
804851b: 00 00 00
804851e: c7 05 50 a0 04 08 00 movl $0x0,0x804a050
8048525: 00 00 00
8048528: c7 05 54 a0 04 08 00 movl $0x0,0x804a054
804852f: 00 00 00
8048532: c7 05 58 a0 04 08 00 movl $0x0,0x804a058
8048539: 00 00 00
804853c: c7 05 5c a0 04 08 00 movl $0x0,0x804a05c
8048543: 00 00 00
8048546: c7 05 60 a0 04 08 00 movl $0x0,0x804a060
804854d: 00 00 00
8048550: c7 05 64 a0 04 08 00 movl $0x0,0x804a064
8048557: 00 00 00
804855a: c3 ret
804855b: 66 90 xchg %ax,%ax
804855d: 66 90 xchg %ax,%ax
804855f: 90 nop
Regards,
Joe
If we're going to be specific, here's what it compiles to for me:
Foo:
00404429 55 PUSH EBP
0040442A 8BEC MOV EBP,ESP
0040442C 33C0 XOR EAX,EAX
0040442E A3 D0264200 MOV DWORD PTR DS:[4226D0],EAX
00404433 33D2 XOR EDX,EDX
00404435 8915 D4264200 MOV DWORD PTR DS:[4226D4],EDX
0040443B 33C9 XOR ECX,ECX
0040443D 890D D8264200 MOV DWORD PTR DS:[4226D8],ECX
00404443 33C0 XOR EAX,EAX
00404445 A3 DC264200 MOV DWORD PTR DS:[4226DC],EAX
0040444A 33D2 XOR EDX,EDX
0040444C 8915 E0264200 MOV DWORD PTR DS:[4226E0],EDX
00404452 33C9 XOR ECX,ECX
00404454 890D E4264200 MOV DWORD PTR DS:[4226E4],ECX
0040445A 33C0 XOR EAX,EAX
0040445C A3 E8264200 MOV DWORD PTR DS:[4226E8],EAX
00404461 33D2 XOR EDX,EDX
00404463 8915 EC264200 MOV DWORD PTR DS:[4226EC],EDX
00404469 33C9 XOR ECX,ECX
0040446B 890D F0264200 MOV DWORD PTR DS:[4226F0],ECX
00404471 5D POP EBP
00404472 C3 RETN
Bar:
00404473 55 PUSH EBP
00404474 8BEC MOV EBP,ESP
00404476 33C0 XOR EAX,EAX
00404478 A3 14274200 MOV DWORD PTR DS:[422714],EAX
0040447D A3 10274200 MOV DWORD PTR DS:[422710],EAX
00404482 A3 0C274200 MOV DWORD PTR DS:[42270C],EAX
00404487 A3 08274200 MOV DWORD PTR DS:[422708],EAX
0040448C A3 04274200 MOV DWORD PTR DS:[422704],EAX
00404491 A3 00274200 MOV DWORD PTR DS:[422700],EAX
00404496 A3 FC264200 MOV DWORD PTR DS:[4226FC],EAX
0040449B A3 F8264200 MOV DWORD PTR DS:[4226F8],EAX
004044A0 A3 F4264200 MOV DWORD PTR DS:[4226F4],EAX
004044A5 5D POP EBP
004044A6 C3 RETN